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  }