| 
									
										
										
										
											2017-02-05 08:44:08 +01:00
										 |  |  | package core_test | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"testing" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-20 01:02:52 +08:00
										 |  |  | 	"github.com/golang/protobuf/proto" | 
					
						
							| 
									
										
										
										
											2021-03-14 07:09:51 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-02-17 04:31:50 +08:00
										 |  |  | 	. "github.com/v2fly/v2ray-core/v4" | 
					
						
							|  |  |  | 	"github.com/v2fly/v2ray-core/v4/app/dispatcher" | 
					
						
							|  |  |  | 	"github.com/v2fly/v2ray-core/v4/app/proxyman" | 
					
						
							|  |  |  | 	"github.com/v2fly/v2ray-core/v4/common" | 
					
						
							|  |  |  | 	"github.com/v2fly/v2ray-core/v4/common/net" | 
					
						
							|  |  |  | 	"github.com/v2fly/v2ray-core/v4/common/protocol" | 
					
						
							|  |  |  | 	"github.com/v2fly/v2ray-core/v4/common/serial" | 
					
						
							|  |  |  | 	"github.com/v2fly/v2ray-core/v4/common/uuid" | 
					
						
							|  |  |  | 	"github.com/v2fly/v2ray-core/v4/features/dns" | 
					
						
							|  |  |  | 	"github.com/v2fly/v2ray-core/v4/features/dns/localdns" | 
					
						
							|  |  |  | 	_ "github.com/v2fly/v2ray-core/v4/main/distro/all" | 
					
						
							|  |  |  | 	"github.com/v2fly/v2ray-core/v4/proxy/dokodemo" | 
					
						
							|  |  |  | 	"github.com/v2fly/v2ray-core/v4/proxy/vmess" | 
					
						
							|  |  |  | 	"github.com/v2fly/v2ray-core/v4/proxy/vmess/outbound" | 
					
						
							|  |  |  | 	"github.com/v2fly/v2ray-core/v4/testing/servers/tcp" | 
					
						
							| 
									
										
										
										
											2017-02-05 08:44:08 +01:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-22 11:26:22 +02:00
										 |  |  | func TestV2RayDependency(t *testing.T) { | 
					
						
							|  |  |  | 	instance := new(Instance) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	wait := make(chan bool, 1) | 
					
						
							|  |  |  | 	instance.RequireFeatures(func(d dns.Client) { | 
					
						
							|  |  |  | 		if d == nil { | 
					
						
							|  |  |  | 			t.Error("expected dns client fulfilled, but actually nil") | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		wait <- true | 
					
						
							|  |  |  | 	}) | 
					
						
							| 
									
										
										
										
											2018-11-19 21:58:03 +01:00
										 |  |  | 	instance.AddFeature(localdns.New()) | 
					
						
							| 
									
										
										
										
											2018-10-22 11:26:22 +02:00
										 |  |  | 	<-wait | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-05 08:44:08 +01:00
										 |  |  | func TestV2RayClose(t *testing.T) { | 
					
						
							| 
									
										
										
										
											2018-12-05 16:27:32 +01:00
										 |  |  | 	port := tcp.PickPort() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-10-11 19:22:46 +08:00
										 |  |  | 	userID := uuid.New() | 
					
						
							| 
									
										
										
										
											2017-02-05 08:44:08 +01:00
										 |  |  | 	config := &Config{ | 
					
						
							| 
									
										
										
										
											2018-01-10 12:59:45 +01:00
										 |  |  | 		App: []*serial.TypedMessage{ | 
					
						
							| 
									
										
										
										
											2018-10-11 22:48:57 +02:00
										 |  |  | 			serial.ToTypedMessage(&dispatcher.Config{}), | 
					
						
							| 
									
										
										
										
											2018-01-10 12:59:45 +01:00
										 |  |  | 			serial.ToTypedMessage(&proxyman.InboundConfig{}), | 
					
						
							|  |  |  | 			serial.ToTypedMessage(&proxyman.OutboundConfig{}), | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 		Inbound: []*InboundHandlerConfig{ | 
					
						
							| 
									
										
										
										
											2017-02-05 08:44:08 +01:00
										 |  |  | 			{ | 
					
						
							|  |  |  | 				ReceiverSettings: serial.ToTypedMessage(&proxyman.ReceiverConfig{ | 
					
						
							| 
									
										
										
										
											2017-08-29 14:32:54 +02:00
										 |  |  | 					PortRange: net.SinglePortRange(port), | 
					
						
							|  |  |  | 					Listen:    net.NewIPOrDomain(net.LocalHostIP), | 
					
						
							| 
									
										
										
										
											2017-02-05 08:44:08 +01:00
										 |  |  | 				}), | 
					
						
							|  |  |  | 				ProxySettings: serial.ToTypedMessage(&dokodemo.Config{ | 
					
						
							| 
									
										
										
										
											2017-08-29 14:32:54 +02:00
										 |  |  | 					Address: net.NewIPOrDomain(net.LocalHostIP), | 
					
						
							| 
									
										
										
										
											2017-02-05 08:44:08 +01:00
										 |  |  | 					Port:    uint32(0), | 
					
						
							| 
									
										
										
										
											2017-08-29 14:32:54 +02:00
										 |  |  | 					NetworkList: &net.NetworkList{ | 
					
						
							|  |  |  | 						Network: []net.Network{net.Network_TCP, net.Network_UDP}, | 
					
						
							| 
									
										
										
										
											2017-02-05 08:44:08 +01:00
										 |  |  | 					}, | 
					
						
							|  |  |  | 				}), | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 		}, | 
					
						
							| 
									
										
										
										
											2018-01-10 12:59:45 +01:00
										 |  |  | 		Outbound: []*OutboundHandlerConfig{ | 
					
						
							| 
									
										
										
										
											2017-02-05 08:44:08 +01:00
										 |  |  | 			{ | 
					
						
							|  |  |  | 				ProxySettings: serial.ToTypedMessage(&outbound.Config{ | 
					
						
							|  |  |  | 					Receiver: []*protocol.ServerEndpoint{ | 
					
						
							|  |  |  | 						{ | 
					
						
							| 
									
										
										
										
											2017-08-29 14:32:54 +02:00
										 |  |  | 							Address: net.NewIPOrDomain(net.LocalHostIP), | 
					
						
							| 
									
										
										
										
											2017-02-05 08:44:08 +01:00
										 |  |  | 							Port:    uint32(0), | 
					
						
							|  |  |  | 							User: []*protocol.User{ | 
					
						
							|  |  |  | 								{ | 
					
						
							|  |  |  | 									Account: serial.ToTypedMessage(&vmess.Account{ | 
					
						
							| 
									
										
										
										
											2020-10-11 19:22:46 +08:00
										 |  |  | 										Id: userID.String(), | 
					
						
							| 
									
										
										
										
											2017-02-05 08:44:08 +01:00
										 |  |  | 									}), | 
					
						
							|  |  |  | 								}, | 
					
						
							|  |  |  | 							}, | 
					
						
							|  |  |  | 						}, | 
					
						
							|  |  |  | 					}, | 
					
						
							|  |  |  | 				}), | 
					
						
							|  |  |  | 			}, | 
					
						
							|  |  |  | 		}, | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-11 22:48:57 +02:00
										 |  |  | 	cfgBytes, err := proto.Marshal(config) | 
					
						
							|  |  |  | 	common.Must(err) | 
					
						
							| 
									
										
										
										
											2017-02-05 08:44:08 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-11 22:48:57 +02:00
										 |  |  | 	server, err := StartInstance("protobuf", cfgBytes) | 
					
						
							|  |  |  | 	common.Must(err) | 
					
						
							| 
									
										
										
										
											2017-02-10 16:25:54 +01:00
										 |  |  | 	server.Close() | 
					
						
							| 
									
										
										
										
											2017-02-05 08:44:08 +01:00
										 |  |  | } |