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  }