github.com/ipfans/trojan-go@v0.11.0/tunnel/transport/transport_test.go (about) 1 package transport 2 3 import ( 4 "context" 5 "net" 6 "sync" 7 "testing" 8 9 "github.com/ipfans/trojan-go/common" 10 "github.com/ipfans/trojan-go/config" 11 "github.com/ipfans/trojan-go/test/util" 12 "github.com/ipfans/trojan-go/tunnel/freedom" 13 ) 14 15 func TestTransport(t *testing.T) { 16 serverCfg := &Config{ 17 LocalHost: "127.0.0.1", 18 LocalPort: common.PickPort("tcp", "127.0.0.1"), 19 RemoteHost: "127.0.0.1", 20 RemotePort: common.PickPort("tcp", "127.0.0.1"), 21 } 22 clientCfg := &Config{ 23 LocalHost: "127.0.0.1", 24 LocalPort: common.PickPort("tcp", "127.0.0.1"), 25 RemoteHost: "127.0.0.1", 26 RemotePort: serverCfg.LocalPort, 27 } 28 freedomCfg := &freedom.Config{} 29 sctx := config.WithConfig(context.Background(), Name, serverCfg) 30 cctx := config.WithConfig(context.Background(), Name, clientCfg) 31 cctx = config.WithConfig(cctx, freedom.Name, freedomCfg) 32 33 s, err := NewServer(sctx, nil) 34 common.Must(err) 35 c, err := NewClient(cctx, nil) 36 common.Must(err) 37 38 wg := sync.WaitGroup{} 39 wg.Add(1) 40 var conn1, conn2 net.Conn 41 go func() { 42 conn2, err = s.AcceptConn(nil) 43 common.Must(err) 44 wg.Done() 45 }() 46 conn1, err = c.DialConn(nil, nil) 47 common.Must(err) 48 49 common.Must2(conn1.Write([]byte("12345678\r\n"))) 50 wg.Wait() 51 buf := [10]byte{} 52 conn2.Read(buf[:]) 53 if !util.CheckConn(conn1, conn2) { 54 t.Fail() 55 } 56 s.Close() 57 c.Close() 58 } 59 60 func TestClientPlugin(t *testing.T) { 61 clientCfg := &Config{ 62 LocalHost: "127.0.0.1", 63 LocalPort: common.PickPort("tcp", "127.0.0.1"), 64 RemoteHost: "127.0.0.1", 65 RemotePort: 12345, 66 TransportPlugin: TransportPluginConfig{ 67 Enabled: true, 68 Type: "shadowsocks", 69 Command: "echo $SS_REMOTE_PORT", 70 Option: "", 71 Arg: nil, 72 Env: nil, 73 }, 74 } 75 ctx := config.WithConfig(context.Background(), Name, clientCfg) 76 freedomCfg := &freedom.Config{} 77 ctx = config.WithConfig(ctx, freedom.Name, freedomCfg) 78 c, err := NewClient(ctx, nil) 79 common.Must(err) 80 c.Close() 81 } 82 83 func TestServerPlugin(t *testing.T) { 84 cfg := &Config{ 85 LocalHost: "127.0.0.1", 86 LocalPort: common.PickPort("tcp", "127.0.0.1"), 87 RemoteHost: "127.0.0.1", 88 RemotePort: 12345, 89 TransportPlugin: TransportPluginConfig{ 90 Enabled: true, 91 Type: "shadowsocks", 92 Command: "echo $SS_REMOTE_PORT", 93 Option: "", 94 Arg: nil, 95 Env: nil, 96 }, 97 } 98 ctx := config.WithConfig(context.Background(), Name, cfg) 99 freedomCfg := &freedom.Config{} 100 ctx = config.WithConfig(ctx, freedom.Name, freedomCfg) 101 s, err := NewServer(ctx, nil) 102 common.Must(err) 103 s.Close() 104 }