github.com/ipfans/trojan-go@v0.11.0/tunnel/freedom/freedom_test.go (about) 1 package freedom 2 3 import ( 4 "bytes" 5 "context" 6 "fmt" 7 "testing" 8 "time" 9 10 "github.com/txthinking/socks5" 11 12 "github.com/ipfans/trojan-go/common" 13 "github.com/ipfans/trojan-go/test/util" 14 "github.com/ipfans/trojan-go/tunnel" 15 ) 16 17 func TestConn(t *testing.T) { 18 ctx, cancel := context.WithCancel(context.Background()) 19 client := &Client{ 20 ctx: ctx, 21 cancel: cancel, 22 } 23 addr, err := tunnel.NewAddressFromAddr("tcp", util.EchoAddr) 24 common.Must(err) 25 conn1, err := client.DialConn(addr, nil) 26 common.Must(err) 27 28 sendBuf := util.GeneratePayload(1024) 29 recvBuf := [1024]byte{} 30 31 common.Must2(conn1.Write(sendBuf)) 32 common.Must2(conn1.Read(recvBuf[:])) 33 34 if !bytes.Equal(sendBuf, recvBuf[:]) { 35 t.Fail() 36 } 37 client.Close() 38 } 39 40 func TestPacket(t *testing.T) { 41 ctx, cancel := context.WithCancel(context.Background()) 42 client := &Client{ 43 ctx: ctx, 44 cancel: cancel, 45 } 46 addr, err := tunnel.NewAddressFromAddr("udp", util.EchoAddr) 47 common.Must(err) 48 conn1, err := client.DialPacket(nil) 49 common.Must(err) 50 51 sendBuf := util.GeneratePayload(1024) 52 recvBuf := [1024]byte{} 53 54 common.Must2(conn1.WriteTo(sendBuf, addr)) 55 _, _, err = conn1.ReadFrom(recvBuf[:]) 56 common.Must(err) 57 58 if !bytes.Equal(sendBuf, recvBuf[:]) { 59 t.Fail() 60 } 61 } 62 63 func TestSocks(t *testing.T) { 64 ctx, cancel := context.WithCancel(context.Background()) 65 66 socksAddr := tunnel.NewAddressFromHostPort("udp", "127.0.0.1", common.PickPort("udp", "127.0.0.1")) 67 client := &Client{ 68 ctx: ctx, 69 cancel: cancel, 70 proxyAddr: socksAddr, 71 forwardProxy: true, 72 noDelay: true, 73 } 74 target, err := tunnel.NewAddressFromAddr("tcp", util.EchoAddr) 75 common.Must(err) 76 s, _ := socks5.NewClassicServer(socksAddr.String(), "127.0.0.1", "", "", 0, 0) 77 s.Handle = &socks5.DefaultHandle{} 78 go s.RunTCPServer() 79 go s.RunUDPServer() 80 81 time.Sleep(time.Second * 2) 82 conn, err := client.DialConn(target, nil) 83 common.Must(err) 84 payload := util.GeneratePayload(1024) 85 common.Must2(conn.Write(payload)) 86 87 recvBuf := [1024]byte{} 88 conn.Read(recvBuf[:]) 89 if !bytes.Equal(recvBuf[:], payload) { 90 t.Fail() 91 } 92 conn.Close() 93 94 packet, err := client.DialPacket(nil) 95 common.Must(err) 96 common.Must2(packet.WriteWithMetadata(payload, &tunnel.Metadata{ 97 Address: target, 98 })) 99 100 recvBuf = [1024]byte{} 101 n, m, err := packet.ReadWithMetadata(recvBuf[:]) 102 common.Must(err) 103 104 if n != 1024 || !bytes.Equal(recvBuf[:], payload) { 105 t.Fail() 106 } 107 108 fmt.Println(m) 109 packet.Close() 110 client.Close() 111 }