diff --git a/testing/scenarios/command_test.go b/testing/scenarios/command_test.go index dcff9a6e9..7737c55a0 100644 --- a/testing/scenarios/command_test.go +++ b/testing/scenarios/command_test.go @@ -2,14 +2,12 @@ package scenarios import ( "context" - "crypto/rand" "fmt" "io" "testing" "time" "github.com/google/go-cmp/cmp" - "google.golang.org/grpc" "v2ray.com/core" @@ -500,23 +498,8 @@ func TestCommanderStats(t *testing.T) { } defer CloseAllServers(servers) - conn, err := net.DialTCP("tcp", nil, &net.TCPAddr{ - IP: []byte{127, 0, 0, 1}, - Port: int(clientPort), - }) - assert(err, IsNil) - defer conn.Close() // nolint: errcheck - - payload := make([]byte, 10240*1024) - rand.Read(payload) - - nBytes, err := conn.Write([]byte(payload)) - assert(err, IsNil) - assert(nBytes, Equals, len(payload)) - - response := readFrom(conn, time.Second*20, 10240*1024) - if r := cmp.Diff(response, xor([]byte(payload))); r != "" { - t.Fatal("failed to read response: ", r) + if err := testTCPConn(clientPort, 10240*1024, time.Second*20)(); err != nil { + t.Fatal(err) } cmdConn, err := grpc.Dial(fmt.Sprintf("127.0.0.1:%d", cmdPort), grpc.WithInsecure(), grpc.WithBlock()) diff --git a/testing/scenarios/common.go b/testing/scenarios/common.go index 5875ab43e..ab90634a9 100644 --- a/testing/scenarios/common.go +++ b/testing/scenarios/common.go @@ -44,6 +44,17 @@ func readFrom(conn net.Conn, timeout time.Duration, length int) []byte { return b[:n] } +func readFrom2(conn net.Conn, timeout time.Duration, length int) ([]byte, error) { + b := make([]byte, length) + deadline := time.Now().Add(timeout) + conn.SetReadDeadline(deadline) + n, err := io.ReadFull(conn, b[:length]) + if err != nil { + return nil, err + } + return b[:n], nil +} + func InitializeServerConfigs(configs ...*core.Config) ([]*exec.Cmd, error) { servers := make([]*exec.Cmd, 0, 10) @@ -160,7 +171,10 @@ func testTCPConn(port net.Port, payloadSize int, timeout time.Duration) func() e return errors.New("expect ", len(payload), " written, but actually ", nBytes) } - response := readFrom(conn, timeout, payloadSize) + response, err := readFrom2(conn, timeout, payloadSize) + if err != nil { + return err + } if r := cmp.Diff(response, xor(payload)); r != "" { return errors.New(r) } diff --git a/testing/scenarios/dokodemo_test.go b/testing/scenarios/dokodemo_test.go index 5148280d5..7e6a21641 100644 --- a/testing/scenarios/dokodemo_test.go +++ b/testing/scenarios/dokodemo_test.go @@ -2,10 +2,12 @@ package scenarios import ( "testing" + "time" "v2ray.com/core" "v2ray.com/core/app/log" "v2ray.com/core/app/proxyman" + "v2ray.com/core/common" clog "v2ray.com/core/common/log" "v2ray.com/core/common/net" "v2ray.com/core/common/protocol" @@ -22,13 +24,11 @@ import ( ) func TestDokodemoTCP(t *testing.T) { - assert := With(t) - tcpServer := tcp.Server{ MsgProcessor: xor, } dest, err := tcpServer.Start() - assert(err, IsNil) + common.Must(err) defer tcpServer.Close() userID := protocol.NewID(uuid.New()) @@ -110,28 +110,14 @@ func TestDokodemoTCP(t *testing.T) { } servers, err := InitializeServerConfigs(serverConfig, clientConfig) - assert(err, IsNil) + common.Must(err) + defer CloseAllServers(servers) for port := clientPort; port <= clientPort+clientPortRange; port++ { - conn, err := net.DialTCP("tcp", nil, &net.TCPAddr{ - IP: []byte{127, 0, 0, 1}, - Port: int(port), - }) - assert(err, IsNil) - - payload := "dokodemo request." - nBytes, err := conn.Write([]byte(payload)) - assert(err, IsNil) - assert(nBytes, Equals, len(payload)) - - response := make([]byte, 1024) - nBytes, err = conn.Read(response) - assert(err, IsNil) - assert(response[:nBytes], Equals, xor([]byte(payload))) - assert(conn.Close(), IsNil) + if err := testTCPConn(net.Port(port), 1024, time.Second*2)(); err != nil { + t.Error(err) + } } - - CloseAllServers(servers) } func TestDokodemoUDP(t *testing.T) { diff --git a/testing/scenarios/policy_test.go b/testing/scenarios/policy_test.go index 7d79b29b3..6b712aac5 100644 --- a/testing/scenarios/policy_test.go +++ b/testing/scenarios/policy_test.go @@ -1,16 +1,17 @@ package scenarios import ( - "crypto/rand" "io" - "sync" "testing" "time" + "golang.org/x/sync/errgroup" + "v2ray.com/core" "v2ray.com/core/app/log" "v2ray.com/core/app/policy" "v2ray.com/core/app/proxyman" + "v2ray.com/core/common" clog "v2ray.com/core/common/log" "v2ray.com/core/common/net" "v2ray.com/core/common/protocol" @@ -22,7 +23,6 @@ import ( "v2ray.com/core/proxy/vmess/inbound" "v2ray.com/core/proxy/vmess/outbound" "v2ray.com/core/testing/servers/tcp" - . "v2ray.com/ext/assert" ) func startQuickClosingTCPServer() (net.Listener, error) { @@ -45,10 +45,8 @@ func startQuickClosingTCPServer() (net.Listener, error) { } func TestVMessClosing(t *testing.T) { - assert := With(t) - tcpServer, err := startQuickClosingTCPServer() - assert(err, IsNil) + common.Must(err) defer tcpServer.Close() dest := net.DestinationFromAddr(tcpServer.Addr()) @@ -148,36 +146,20 @@ func TestVMessClosing(t *testing.T) { } servers, err := InitializeServerConfigs(serverConfig, clientConfig) - assert(err, IsNil) - + common.Must(err) defer CloseAllServers(servers) - conn, err := net.DialTCP("tcp", nil, &net.TCPAddr{ - IP: []byte{127, 0, 0, 1}, - Port: int(clientPort), - }) - assert(err, IsNil) - - conn.SetDeadline(time.Now().Add(time.Second * 2)) - - nBytes, err := conn.Write([]byte("test payload")) - assert(nBytes, GreaterThan, 0) - assert(err, IsNil) - - resp := make([]byte, 1024) - nBytes, err = conn.Read(resp) - assert(err, Equals, io.EOF) - assert(nBytes, Equals, 0) + if err := testTCPConn(clientPort, 1024, time.Second*2)(); err != io.EOF { + t.Error(err) + } } func TestZeroBuffer(t *testing.T) { - assert := With(t) - tcpServer := tcp.Server{ MsgProcessor: xor, } dest, err := tcpServer.Start() - assert(err, IsNil) + common.Must(err) defer tcpServer.Close() userID := protocol.NewID(uuid.New()) @@ -272,31 +254,14 @@ func TestZeroBuffer(t *testing.T) { } servers, err := InitializeServerConfigs(serverConfig, clientConfig) - assert(err, IsNil) + common.Must(err) defer CloseAllServers(servers) - var wg sync.WaitGroup - wg.Add(10) + var errg errgroup.Group for i := 0; i < 10; i++ { - go func() { - conn, err := net.DialTCP("tcp", nil, &net.TCPAddr{ - IP: []byte{127, 0, 0, 1}, - Port: int(clientPort), - }) - assert(err, IsNil) - - payload := make([]byte, 10240*1024) - rand.Read(payload) - - nBytes, err := conn.Write([]byte(payload)) - assert(err, IsNil) - assert(nBytes, Equals, len(payload)) - - response := readFrom(conn, time.Second*20, 10240*1024) - assert(response, Equals, xor([]byte(payload))) - assert(conn.Close(), IsNil) - wg.Done() - }() + errg.Go(testTCPConn(clientPort, 10240*1024, time.Second*20)) + } + if err := errg.Wait(); err != nil { + t.Error(err) } - wg.Wait() } diff --git a/testing/scenarios/shadowsocks_test.go b/testing/scenarios/shadowsocks_test.go index 211e460ad..a0da0e041 100644 --- a/testing/scenarios/shadowsocks_test.go +++ b/testing/scenarios/shadowsocks_test.go @@ -439,13 +439,11 @@ func TestShadowsocksChacha20Poly1305TCP(t *testing.T) { } func TestShadowsocksAES256GCMTCP(t *testing.T) { - assert := With(t) - tcpServer := tcp.Server{ MsgProcessor: xor, } dest, err := tcpServer.Start() - assert(err, IsNil) + common.Must(err) defer tcpServer.Close() account := serial.ToTypedMessage(&shadowsocks.Account{ @@ -526,34 +524,17 @@ func TestShadowsocksAES256GCMTCP(t *testing.T) { } servers, err := InitializeServerConfigs(serverConfig, clientConfig) - assert(err, IsNil) + common.Must(err) + defer CloseAllServers(servers) - var wg sync.WaitGroup - wg.Add(10) + var errg errgroup.Group for i := 0; i < 10; i++ { - go func() { - conn, err := net.DialTCP("tcp", nil, &net.TCPAddr{ - IP: []byte{127, 0, 0, 1}, - Port: int(clientPort), - }) - assert(err, IsNil) - - payload := make([]byte, 10240*1024) - rand.Read(payload) - - nBytes, err := conn.Write([]byte(payload)) - assert(err, IsNil) - assert(nBytes, Equals, len(payload)) - - response := readFrom(conn, time.Second*20, 10240*1024) - assert(response, Equals, xor([]byte(payload))) - assert(conn.Close(), IsNil) - wg.Done() - }() + errg.Go(testTCPConn(clientPort, 10240*1024, time.Second*20)) } - wg.Wait() - CloseAllServers(servers) + if err := errg.Wait(); err != nil { + t.Error(err) + } } func TestShadowsocksAES128GCMUDP(t *testing.T) { @@ -880,30 +861,7 @@ func TestShadowsocksNone(t *testing.T) { var errg errgroup.Group for i := 0; i < 10; i++ { - errg.Go(func() error { - conn, err := net.DialTCP("tcp", nil, &net.TCPAddr{ - IP: []byte{127, 0, 0, 1}, - Port: int(clientPort), - }) - common.Must(err) - defer conn.Close() - - payload := make([]byte, 10240*1024) - rand.Read(payload) - - nBytes, err := conn.Write([]byte(payload)) - common.Must(err) - - if nBytes != len(payload) { - return errors.New("only part of payload is written: ", nBytes) - } - - response := readFrom(conn, time.Second*20, 10240*1024) - if r := cmp.Diff(response, xor(payload)); r != "" { - return errors.New(r) - } - return nil - }) + errg.Go(testTCPConn(clientPort, 10240*1024, time.Second*20)) } if err := errg.Wait(); err != nil { diff --git a/testing/scenarios/socks_test.go b/testing/scenarios/socks_test.go index 7859a5907..805b5b83f 100644 --- a/testing/scenarios/socks_test.go +++ b/testing/scenarios/socks_test.go @@ -2,6 +2,7 @@ package scenarios import ( "testing" + "time" xproxy "golang.org/x/net/proxy" socks4 "h12.io/socks" @@ -9,6 +10,7 @@ import ( "v2ray.com/core" "v2ray.com/core/app/proxyman" "v2ray.com/core/app/router" + "v2ray.com/core/common" "v2ray.com/core/common/net" "v2ray.com/core/common/protocol" "v2ray.com/core/common/serial" @@ -22,13 +24,11 @@ import ( ) func TestSocksBridgeTCP(t *testing.T) { - assert := With(t) - tcpServer := tcp.Server{ MsgProcessor: xor, } dest, err := tcpServer.Start() - assert(err, IsNil) + common.Must(err) defer tcpServer.Close() serverPort := tcp.PickPort() @@ -96,26 +96,12 @@ func TestSocksBridgeTCP(t *testing.T) { } servers, err := InitializeServerConfigs(serverConfig, clientConfig) - assert(err, IsNil) + common.Must(err) + defer CloseAllServers(servers) - conn, err := net.DialTCP("tcp", nil, &net.TCPAddr{ - IP: []byte{127, 0, 0, 1}, - Port: int(clientPort), - }) - assert(err, IsNil) - - payload := "test payload" - nBytes, err := conn.Write([]byte(payload)) - assert(err, IsNil) - assert(nBytes, Equals, len(payload)) - - response := make([]byte, 1024) - nBytes, err = conn.Read(response) - assert(err, IsNil) - assert(response[:nBytes], Equals, xor([]byte(payload))) - assert(conn.Close(), IsNil) - - CloseAllServers(servers) + if err := testTCPConn(clientPort, 1024, time.Second*2)(); err != nil { + t.Error(err) + } } func TestSocksBridageUDP(t *testing.T) { diff --git a/testing/scenarios/tls_test.go b/testing/scenarios/tls_test.go index ce714d5e4..bf35f20a3 100644 --- a/testing/scenarios/tls_test.go +++ b/testing/scenarios/tls_test.go @@ -1,20 +1,16 @@ package scenarios import ( - "crypto/rand" "crypto/x509" "runtime" - "sync" "testing" "time" - "github.com/google/go-cmp/cmp" "golang.org/x/sync/errgroup" "v2ray.com/core" "v2ray.com/core/app/proxyman" "v2ray.com/core/common" - "v2ray.com/core/common/errors" "v2ray.com/core/common/net" "v2ray.com/core/common/protocol" "v2ray.com/core/common/protocol/tls/cert" @@ -31,7 +27,6 @@ import ( "v2ray.com/core/transport/internet/http" "v2ray.com/core/transport/internet/tls" "v2ray.com/core/transport/internet/websocket" - . "v2ray.com/ext/assert" ) func TestSimpleTLSConnection(t *testing.T) { @@ -129,34 +124,7 @@ func TestSimpleTLSConnection(t *testing.T) { common.Must(err) defer CloseAllServers(servers) - var errg errgroup.Group - errg.Go(func() error { - conn, err := net.DialTCP("tcp", nil, &net.TCPAddr{ - IP: []byte{127, 0, 0, 1}, - Port: int(clientPort), - }) - if err != nil { - return err - } - defer conn.Close() - - payload := make([]byte, 1024) - common.Must2(rand.Read(payload)) - - nBytes, err := conn.Write([]byte(payload)) - common.Must(err) - if nBytes != len(payload) { - return errors.New("expected ", len(payload), " written, but actually ", nBytes) - } - - response := readFrom(conn, time.Second*2, len(payload)) - if r := cmp.Diff(response, xor(payload)); r != "" { - return errors.New(r) - } - return nil - }) - - if err := errg.Wait(); err != nil { + if err := testTCPConn(clientPort, 1024, time.Second*2)(); err != nil { t.Fatal(err) } } @@ -171,17 +139,15 @@ func TestAutoIssuingCertificate(t *testing.T) { return } - assert := With(t) - tcpServer := tcp.Server{ MsgProcessor: xor, } dest, err := tcpServer.Start() - assert(err, IsNil) + common.Must(err) defer tcpServer.Close() caCert, err := cert.Generate(nil, cert.Authority(true), cert.KeyUsage(x509.KeyUsageDigitalSignature|x509.KeyUsageKeyEncipherment|x509.KeyUsageCertSign)) - assert(err, IsNil) + common.Must(err) certPEM, keyPEM := caCert.ToPEM() userID := protocol.NewID(uuid.New()) @@ -276,36 +242,22 @@ func TestAutoIssuingCertificate(t *testing.T) { } servers, err := InitializeServerConfigs(serverConfig, clientConfig) - assert(err, IsNil) + common.Must(err) + defer CloseAllServers(servers) for i := 0; i < 10; i++ { - conn, err := net.DialTCP("tcp", nil, &net.TCPAddr{ - IP: []byte{127, 0, 0, 1}, - Port: int(clientPort), - }) - assert(err, IsNil) - - payload := "dokodemo request." - nBytes, err := conn.Write([]byte(payload)) - assert(err, IsNil) - assert(nBytes, Equals, len(payload)) - - response := readFrom(conn, time.Second*2, len(payload)) - assert(response, Equals, xor([]byte(payload))) - assert(conn.Close(), IsNil) + if err := testTCPConn(clientPort, 1024, time.Second*2)(); err != nil { + t.Error(err) + } } - - CloseAllServers(servers) } func TestTLSOverKCP(t *testing.T) { - assert := With(t) - tcpServer := tcp.Server{ MsgProcessor: xor, } dest, err := tcpServer.Start() - assert(err, IsNil) + common.Must(err) defer tcpServer.Close() userID := protocol.NewID(uuid.New()) @@ -394,34 +346,20 @@ func TestTLSOverKCP(t *testing.T) { } servers, err := InitializeServerConfigs(serverConfig, clientConfig) - assert(err, IsNil) + common.Must(err) + defer CloseAllServers(servers) - conn, err := net.DialTCP("tcp", nil, &net.TCPAddr{ - IP: []byte{127, 0, 0, 1}, - Port: int(clientPort), - }) - assert(err, IsNil) - - payload := "dokodemo request." - nBytes, err := conn.Write([]byte(payload)) - assert(err, IsNil) - assert(nBytes, Equals, len(payload)) - - response := readFrom(conn, time.Second*2, len(payload)) - assert(response, Equals, xor([]byte(payload))) - assert(conn.Close(), IsNil) - - CloseAllServers(servers) + if err := testTCPConn(clientPort, 1024, time.Second*2)(); err != nil { + t.Error(err) + } } func TestTLSOverWebSocket(t *testing.T) { - assert := With(t) - tcpServer := tcp.Server{ MsgProcessor: xor, } dest, err := tcpServer.Start() - assert(err, IsNil) + common.Must(err) defer tcpServer.Close() userID := protocol.NewID(uuid.New()) @@ -519,40 +457,21 @@ func TestTLSOverWebSocket(t *testing.T) { common.Must(err) defer CloseAllServers(servers) - var wg sync.WaitGroup + var errg errgroup.Group for i := 0; i < 10; i++ { - wg.Add(1) - go func() { - defer wg.Done() - - conn, err := net.DialTCP("tcp", nil, &net.TCPAddr{ - IP: []byte{127, 0, 0, 1}, - Port: int(clientPort), - }) - common.Must(err) - - payload := make([]byte, 10240*1024) - rand.Read(payload) - nBytes, err := conn.Write([]byte(payload)) - assert(err, IsNil) - assert(nBytes, Equals, len(payload)) - - response := readFrom(conn, time.Second*20, len(payload)) - assert(response, Equals, xor([]byte(payload))) - assert(conn.Close(), IsNil) - }() + errg.Go(testTCPConn(clientPort, 10240*1024, time.Second*20)) + } + if err := errg.Wait(); err != nil { + t.Error(err) } - wg.Wait() } func TestHTTP2(t *testing.T) { - assert := With(t) - tcpServer := tcp.Server{ MsgProcessor: xor, } dest, err := tcpServer.Start() - assert(err, IsNil) + common.Must(err) defer tcpServer.Close() userID := protocol.NewID(uuid.New()) @@ -659,32 +578,14 @@ func TestHTTP2(t *testing.T) { } servers, err := InitializeServerConfigs(serverConfig, clientConfig) - assert(err, IsNil) + common.Must(err) + defer CloseAllServers(servers) - var wg sync.WaitGroup + var errg errgroup.Group for i := 0; i < 10; i++ { - wg.Add(1) - go func() { - defer wg.Done() - - conn, err := net.DialTCP("tcp", nil, &net.TCPAddr{ - IP: []byte{127, 0, 0, 1}, - Port: int(clientPort), - }) - assert(err, IsNil) - - payload := make([]byte, 10240*1024) - rand.Read(payload) - nBytes, err := conn.Write([]byte(payload)) - assert(err, IsNil) - assert(nBytes, Equals, len(payload)) - - response := readFrom(conn, time.Second*20, len(payload)) - assert(response, Equals, xor([]byte(payload))) - assert(conn.Close(), IsNil) - }() + errg.Go(testTCPConn(clientPort, 10240*1024, time.Second*20)) + } + if err := errg.Wait(); err != nil { + t.Error(err) } - wg.Wait() - - CloseAllServers(servers) } diff --git a/testing/scenarios/vmess_test.go b/testing/scenarios/vmess_test.go index 3b0b54a1c..90adaca55 100644 --- a/testing/scenarios/vmess_test.go +++ b/testing/scenarios/vmess_test.go @@ -7,7 +7,6 @@ import ( "testing" "time" - "github.com/google/go-cmp/cmp" "golang.org/x/sync/errgroup" "v2ray.com/core" "v2ray.com/core/app/log" @@ -498,13 +497,11 @@ func TestVMessGCMUDP(t *testing.T) { } func TestVMessChacha20(t *testing.T) { - assert := With(t) - tcpServer := tcp.Server{ MsgProcessor: xor, } dest, err := tcpServer.Start() - assert(err, IsNil) + common.Must(err) defer tcpServer.Close() userID := protocol.NewID(uuid.New()) @@ -590,44 +587,25 @@ func TestVMessChacha20(t *testing.T) { } servers, err := InitializeServerConfigs(serverConfig, clientConfig) - assert(err, IsNil) + common.Must(err) + defer CloseAllServers(servers) - var wg sync.WaitGroup - wg.Add(10) + var errg errgroup.Group for i := 0; i < 10; i++ { - go func() { - conn, err := net.DialTCP("tcp", nil, &net.TCPAddr{ - IP: []byte{127, 0, 0, 1}, - Port: int(clientPort), - }) - assert(err, IsNil) - - payload := make([]byte, 10240*1024) - rand.Read(payload) - - nBytes, err := conn.Write([]byte(payload)) - assert(err, IsNil) - assert(nBytes, Equals, len(payload)) - - response := readFrom(conn, time.Second*20, 10240*1024) - assert(response, Equals, xor([]byte(payload))) - assert(conn.Close(), IsNil) - wg.Done() - }() + errg.Go(testTCPConn(clientPort, 10240*1024, time.Second*20)) } - wg.Wait() - CloseAllServers(servers) + if err := errg.Wait(); err != nil { + t.Error(err) + } } func TestVMessNone(t *testing.T) { - assert := With(t) - tcpServer := tcp.Server{ MsgProcessor: xor, } dest, err := tcpServer.Start() - assert(err, IsNil) + common.Must(err) defer tcpServer.Close() userID := protocol.NewID(uuid.New()) @@ -713,46 +691,24 @@ func TestVMessNone(t *testing.T) { } servers, err := InitializeServerConfigs(serverConfig, clientConfig) - assert(err, IsNil) + common.Must(err) + defer CloseAllServers(servers) - var wg sync.WaitGroup - wg.Add(10) + var errg errgroup.Group for i := 0; i < 10; i++ { - go func() { - defer wg.Done() - - conn, err := net.DialTCP("tcp", nil, &net.TCPAddr{ - IP: []byte{127, 0, 0, 1}, - Port: int(clientPort), - }) - assert(err, IsNil) - - payload := make([]byte, 1024*1024) - rand.Read(payload) - - nBytes, err := conn.Write(payload) - assert(err, IsNil) - assert(nBytes, Equals, len(payload)) - - response := readFrom(conn, time.Second*30, 1024*1024) - - assert(response, Equals, xor(payload)) - assert(conn.Close(), IsNil) - }() + errg.Go(testTCPConn(clientPort, 1024*1024, time.Second*30)) + } + if err := errg.Wait(); err != nil { + t.Error(err) } - wg.Wait() - - CloseAllServers(servers) } func TestVMessKCP(t *testing.T) { - assert := With(t) - tcpServer := tcp.Server{ MsgProcessor: xor, } dest, err := tcpServer.Start() - assert(err, IsNil) + common.Must(err) defer tcpServer.Close() userID := protocol.NewID(uuid.New()) @@ -846,36 +802,16 @@ func TestVMessKCP(t *testing.T) { } servers, err := InitializeServerConfigs(serverConfig, clientConfig) - assert(err, IsNil) + common.Must(err) defer CloseAllServers(servers) - var wg sync.WaitGroup + var errg errgroup.Group for i := 0; i < 10; i++ { - wg.Add(1) - go func() { - defer wg.Done() - - conn, err := net.DialTCP("tcp", nil, &net.TCPAddr{ - IP: []byte{127, 0, 0, 1}, - Port: int(clientPort), - }) - assert(err, IsNil) - defer conn.Close() - - payload := make([]byte, 10240*1024) - rand.Read(payload) - - nBytes, err := conn.Write(payload) - assert(err, IsNil) - assert(nBytes, Equals, len(payload)) - - response := readFrom(conn, time.Minute*2, 10240*1024) - if r := cmp.Diff(response, xor(payload)); r != "" { - t.Error(r) - } - }() + errg.Go(testTCPConn(clientPort, 10240*1024, time.Minute*2)) + } + if err := errg.Wait(); err != nil { + t.Error(err) } - wg.Wait() } func TestVMessKCPLarge(t *testing.T) {