github.com/ipfans/trojan-go@v0.11.0/tunnel/simplesocks/simplesocks_test.go (about)

     1  package simplesocks
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"testing"
     7  
     8  	"github.com/ipfans/trojan-go/common"
     9  	"github.com/ipfans/trojan-go/config"
    10  	"github.com/ipfans/trojan-go/test/util"
    11  	"github.com/ipfans/trojan-go/tunnel"
    12  	"github.com/ipfans/trojan-go/tunnel/freedom"
    13  	"github.com/ipfans/trojan-go/tunnel/transport"
    14  )
    15  
    16  func TestSimpleSocks(t *testing.T) {
    17  	port := common.PickPort("tcp", "127.0.0.1")
    18  	transportConfig := &transport.Config{
    19  		LocalHost:  "127.0.0.1",
    20  		LocalPort:  port,
    21  		RemoteHost: "127.0.0.1",
    22  		RemotePort: port,
    23  	}
    24  	ctx := config.WithConfig(context.Background(), transport.Name, transportConfig)
    25  	ctx = config.WithConfig(ctx, freedom.Name, &freedom.Config{})
    26  	tcpClient, err := transport.NewClient(ctx, nil)
    27  	common.Must(err)
    28  	tcpServer, err := transport.NewServer(ctx, nil)
    29  	common.Must(err)
    30  
    31  	c, err := NewClient(ctx, tcpClient)
    32  	common.Must(err)
    33  	s, err := NewServer(ctx, tcpServer)
    34  	common.Must(err)
    35  
    36  	conn1, err := c.DialConn(&tunnel.Address{
    37  		DomainName:  "www.baidu.com",
    38  		AddressType: tunnel.DomainName,
    39  		Port:        443,
    40  	}, nil)
    41  	common.Must(err)
    42  	defer conn1.Close()
    43  	conn1.Write(util.GeneratePayload(1024))
    44  	conn2, err := s.AcceptConn(nil)
    45  	common.Must(err)
    46  	defer conn2.Close()
    47  	buf := [1024]byte{}
    48  	common.Must2(conn2.Read(buf[:]))
    49  	if !util.CheckConn(conn1, conn2) {
    50  		t.Fail()
    51  	}
    52  
    53  	packet1, err := c.DialPacket(nil)
    54  	common.Must(err)
    55  	packet1.WriteWithMetadata([]byte("12345678"), &tunnel.Metadata{
    56  		Address: &tunnel.Address{
    57  			DomainName:  "test.com",
    58  			AddressType: tunnel.DomainName,
    59  			Port:        443,
    60  		},
    61  	})
    62  	defer packet1.Close()
    63  	packet2, err := s.AcceptPacket(nil)
    64  	common.Must(err)
    65  	defer packet2.Close()
    66  	_, m, err := packet2.ReadWithMetadata(buf[:])
    67  	common.Must(err)
    68  	fmt.Println(m)
    69  
    70  	if !util.CheckPacketOverConn(packet1, packet2) {
    71  		t.Fail()
    72  	}
    73  	s.Close()
    74  	c.Close()
    75  }