Browse Source

remove dependency on assert lib

Darien Raymond 6 years ago
parent
commit
40796b9f9c

+ 2 - 19
testing/scenarios/command_test.go

@@ -2,14 +2,12 @@ package scenarios
 
 
 import (
 import (
 	"context"
 	"context"
-	"crypto/rand"
 	"fmt"
 	"fmt"
 	"io"
 	"io"
 	"testing"
 	"testing"
 	"time"
 	"time"
 
 
 	"github.com/google/go-cmp/cmp"
 	"github.com/google/go-cmp/cmp"
-
 	"google.golang.org/grpc"
 	"google.golang.org/grpc"
 
 
 	"v2ray.com/core"
 	"v2ray.com/core"
@@ -500,23 +498,8 @@ func TestCommanderStats(t *testing.T) {
 	}
 	}
 	defer CloseAllServers(servers)
 	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())
 	cmdConn, err := grpc.Dial(fmt.Sprintf("127.0.0.1:%d", cmdPort), grpc.WithInsecure(), grpc.WithBlock())

+ 15 - 1
testing/scenarios/common.go

@@ -44,6 +44,17 @@ func readFrom(conn net.Conn, timeout time.Duration, length int) []byte {
 	return b[:n]
 	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) {
 func InitializeServerConfigs(configs ...*core.Config) ([]*exec.Cmd, error) {
 	servers := make([]*exec.Cmd, 0, 10)
 	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)
 			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 != "" {
 		if r := cmp.Diff(response, xor(payload)); r != "" {
 			return errors.New(r)
 			return errors.New(r)
 		}
 		}

+ 8 - 22
testing/scenarios/dokodemo_test.go

@@ -2,10 +2,12 @@ package scenarios
 
 
 import (
 import (
 	"testing"
 	"testing"
+	"time"
 
 
 	"v2ray.com/core"
 	"v2ray.com/core"
 	"v2ray.com/core/app/log"
 	"v2ray.com/core/app/log"
 	"v2ray.com/core/app/proxyman"
 	"v2ray.com/core/app/proxyman"
+	"v2ray.com/core/common"
 	clog "v2ray.com/core/common/log"
 	clog "v2ray.com/core/common/log"
 	"v2ray.com/core/common/net"
 	"v2ray.com/core/common/net"
 	"v2ray.com/core/common/protocol"
 	"v2ray.com/core/common/protocol"
@@ -22,13 +24,11 @@ import (
 )
 )
 
 
 func TestDokodemoTCP(t *testing.T) {
 func TestDokodemoTCP(t *testing.T) {
-	assert := With(t)
-
 	tcpServer := tcp.Server{
 	tcpServer := tcp.Server{
 		MsgProcessor: xor,
 		MsgProcessor: xor,
 	}
 	}
 	dest, err := tcpServer.Start()
 	dest, err := tcpServer.Start()
-	assert(err, IsNil)
+	common.Must(err)
 	defer tcpServer.Close()
 	defer tcpServer.Close()
 
 
 	userID := protocol.NewID(uuid.New())
 	userID := protocol.NewID(uuid.New())
@@ -110,28 +110,14 @@ func TestDokodemoTCP(t *testing.T) {
 	}
 	}
 
 
 	servers, err := InitializeServerConfigs(serverConfig, clientConfig)
 	servers, err := InitializeServerConfigs(serverConfig, clientConfig)
-	assert(err, IsNil)
+	common.Must(err)
+	defer CloseAllServers(servers)
 
 
 	for port := clientPort; port <= clientPort+clientPortRange; port++ {
 	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) {
 func TestDokodemoUDP(t *testing.T) {

+ 15 - 50
testing/scenarios/policy_test.go

@@ -1,16 +1,17 @@
 package scenarios
 package scenarios
 
 
 import (
 import (
-	"crypto/rand"
 	"io"
 	"io"
-	"sync"
 	"testing"
 	"testing"
 	"time"
 	"time"
 
 
+	"golang.org/x/sync/errgroup"
+
 	"v2ray.com/core"
 	"v2ray.com/core"
 	"v2ray.com/core/app/log"
 	"v2ray.com/core/app/log"
 	"v2ray.com/core/app/policy"
 	"v2ray.com/core/app/policy"
 	"v2ray.com/core/app/proxyman"
 	"v2ray.com/core/app/proxyman"
+	"v2ray.com/core/common"
 	clog "v2ray.com/core/common/log"
 	clog "v2ray.com/core/common/log"
 	"v2ray.com/core/common/net"
 	"v2ray.com/core/common/net"
 	"v2ray.com/core/common/protocol"
 	"v2ray.com/core/common/protocol"
@@ -22,7 +23,6 @@ import (
 	"v2ray.com/core/proxy/vmess/inbound"
 	"v2ray.com/core/proxy/vmess/inbound"
 	"v2ray.com/core/proxy/vmess/outbound"
 	"v2ray.com/core/proxy/vmess/outbound"
 	"v2ray.com/core/testing/servers/tcp"
 	"v2ray.com/core/testing/servers/tcp"
-	. "v2ray.com/ext/assert"
 )
 )
 
 
 func startQuickClosingTCPServer() (net.Listener, error) {
 func startQuickClosingTCPServer() (net.Listener, error) {
@@ -45,10 +45,8 @@ func startQuickClosingTCPServer() (net.Listener, error) {
 }
 }
 
 
 func TestVMessClosing(t *testing.T) {
 func TestVMessClosing(t *testing.T) {
-	assert := With(t)
-
 	tcpServer, err := startQuickClosingTCPServer()
 	tcpServer, err := startQuickClosingTCPServer()
-	assert(err, IsNil)
+	common.Must(err)
 	defer tcpServer.Close()
 	defer tcpServer.Close()
 
 
 	dest := net.DestinationFromAddr(tcpServer.Addr())
 	dest := net.DestinationFromAddr(tcpServer.Addr())
@@ -148,36 +146,20 @@ func TestVMessClosing(t *testing.T) {
 	}
 	}
 
 
 	servers, err := InitializeServerConfigs(serverConfig, clientConfig)
 	servers, err := InitializeServerConfigs(serverConfig, clientConfig)
-	assert(err, IsNil)
-
+	common.Must(err)
 	defer CloseAllServers(servers)
 	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) {
 func TestZeroBuffer(t *testing.T) {
-	assert := With(t)
-
 	tcpServer := tcp.Server{
 	tcpServer := tcp.Server{
 		MsgProcessor: xor,
 		MsgProcessor: xor,
 	}
 	}
 	dest, err := tcpServer.Start()
 	dest, err := tcpServer.Start()
-	assert(err, IsNil)
+	common.Must(err)
 	defer tcpServer.Close()
 	defer tcpServer.Close()
 
 
 	userID := protocol.NewID(uuid.New())
 	userID := protocol.NewID(uuid.New())
@@ -272,31 +254,14 @@ func TestZeroBuffer(t *testing.T) {
 	}
 	}
 
 
 	servers, err := InitializeServerConfigs(serverConfig, clientConfig)
 	servers, err := InitializeServerConfigs(serverConfig, clientConfig)
-	assert(err, IsNil)
+	common.Must(err)
 	defer CloseAllServers(servers)
 	defer CloseAllServers(servers)
 
 
-	var wg sync.WaitGroup
-	wg.Add(10)
+	var errg errgroup.Group
 	for i := 0; i < 10; i++ {
 	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()
 }
 }

+ 9 - 51
testing/scenarios/shadowsocks_test.go

@@ -439,13 +439,11 @@ func TestShadowsocksChacha20Poly1305TCP(t *testing.T) {
 }
 }
 
 
 func TestShadowsocksAES256GCMTCP(t *testing.T) {
 func TestShadowsocksAES256GCMTCP(t *testing.T) {
-	assert := With(t)
-
 	tcpServer := tcp.Server{
 	tcpServer := tcp.Server{
 		MsgProcessor: xor,
 		MsgProcessor: xor,
 	}
 	}
 	dest, err := tcpServer.Start()
 	dest, err := tcpServer.Start()
-	assert(err, IsNil)
+	common.Must(err)
 	defer tcpServer.Close()
 	defer tcpServer.Close()
 
 
 	account := serial.ToTypedMessage(&shadowsocks.Account{
 	account := serial.ToTypedMessage(&shadowsocks.Account{
@@ -526,34 +524,17 @@ func TestShadowsocksAES256GCMTCP(t *testing.T) {
 	}
 	}
 
 
 	servers, err := InitializeServerConfigs(serverConfig, clientConfig)
 	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++ {
 	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) {
 func TestShadowsocksAES128GCMUDP(t *testing.T) {
@@ -880,30 +861,7 @@ func TestShadowsocksNone(t *testing.T) {
 
 
 	var errg errgroup.Group
 	var errg errgroup.Group
 	for i := 0; i < 10; i++ {
 	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 {
 	if err := errg.Wait(); err != nil {

+ 8 - 22
testing/scenarios/socks_test.go

@@ -2,6 +2,7 @@ package scenarios
 
 
 import (
 import (
 	"testing"
 	"testing"
+	"time"
 
 
 	xproxy "golang.org/x/net/proxy"
 	xproxy "golang.org/x/net/proxy"
 	socks4 "h12.io/socks"
 	socks4 "h12.io/socks"
@@ -9,6 +10,7 @@ import (
 	"v2ray.com/core"
 	"v2ray.com/core"
 	"v2ray.com/core/app/proxyman"
 	"v2ray.com/core/app/proxyman"
 	"v2ray.com/core/app/router"
 	"v2ray.com/core/app/router"
+	"v2ray.com/core/common"
 	"v2ray.com/core/common/net"
 	"v2ray.com/core/common/net"
 	"v2ray.com/core/common/protocol"
 	"v2ray.com/core/common/protocol"
 	"v2ray.com/core/common/serial"
 	"v2ray.com/core/common/serial"
@@ -22,13 +24,11 @@ import (
 )
 )
 
 
 func TestSocksBridgeTCP(t *testing.T) {
 func TestSocksBridgeTCP(t *testing.T) {
-	assert := With(t)
-
 	tcpServer := tcp.Server{
 	tcpServer := tcp.Server{
 		MsgProcessor: xor,
 		MsgProcessor: xor,
 	}
 	}
 	dest, err := tcpServer.Start()
 	dest, err := tcpServer.Start()
-	assert(err, IsNil)
+	common.Must(err)
 	defer tcpServer.Close()
 	defer tcpServer.Close()
 
 
 	serverPort := tcp.PickPort()
 	serverPort := tcp.PickPort()
@@ -96,26 +96,12 @@ func TestSocksBridgeTCP(t *testing.T) {
 	}
 	}
 
 
 	servers, err := InitializeServerConfigs(serverConfig, clientConfig)
 	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) {
 func TestSocksBridageUDP(t *testing.T) {

+ 28 - 127
testing/scenarios/tls_test.go

@@ -1,20 +1,16 @@
 package scenarios
 package scenarios
 
 
 import (
 import (
-	"crypto/rand"
 	"crypto/x509"
 	"crypto/x509"
 	"runtime"
 	"runtime"
-	"sync"
 	"testing"
 	"testing"
 	"time"
 	"time"
 
 
-	"github.com/google/go-cmp/cmp"
 	"golang.org/x/sync/errgroup"
 	"golang.org/x/sync/errgroup"
 
 
 	"v2ray.com/core"
 	"v2ray.com/core"
 	"v2ray.com/core/app/proxyman"
 	"v2ray.com/core/app/proxyman"
 	"v2ray.com/core/common"
 	"v2ray.com/core/common"
-	"v2ray.com/core/common/errors"
 	"v2ray.com/core/common/net"
 	"v2ray.com/core/common/net"
 	"v2ray.com/core/common/protocol"
 	"v2ray.com/core/common/protocol"
 	"v2ray.com/core/common/protocol/tls/cert"
 	"v2ray.com/core/common/protocol/tls/cert"
@@ -31,7 +27,6 @@ import (
 	"v2ray.com/core/transport/internet/http"
 	"v2ray.com/core/transport/internet/http"
 	"v2ray.com/core/transport/internet/tls"
 	"v2ray.com/core/transport/internet/tls"
 	"v2ray.com/core/transport/internet/websocket"
 	"v2ray.com/core/transport/internet/websocket"
-	. "v2ray.com/ext/assert"
 )
 )
 
 
 func TestSimpleTLSConnection(t *testing.T) {
 func TestSimpleTLSConnection(t *testing.T) {
@@ -129,34 +124,7 @@ func TestSimpleTLSConnection(t *testing.T) {
 	common.Must(err)
 	common.Must(err)
 	defer CloseAllServers(servers)
 	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)
 		t.Fatal(err)
 	}
 	}
 }
 }
@@ -171,17 +139,15 @@ func TestAutoIssuingCertificate(t *testing.T) {
 		return
 		return
 	}
 	}
 
 
-	assert := With(t)
-
 	tcpServer := tcp.Server{
 	tcpServer := tcp.Server{
 		MsgProcessor: xor,
 		MsgProcessor: xor,
 	}
 	}
 	dest, err := tcpServer.Start()
 	dest, err := tcpServer.Start()
-	assert(err, IsNil)
+	common.Must(err)
 	defer tcpServer.Close()
 	defer tcpServer.Close()
 
 
 	caCert, err := cert.Generate(nil, cert.Authority(true), cert.KeyUsage(x509.KeyUsageDigitalSignature|x509.KeyUsageKeyEncipherment|x509.KeyUsageCertSign))
 	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()
 	certPEM, keyPEM := caCert.ToPEM()
 
 
 	userID := protocol.NewID(uuid.New())
 	userID := protocol.NewID(uuid.New())
@@ -276,36 +242,22 @@ func TestAutoIssuingCertificate(t *testing.T) {
 	}
 	}
 
 
 	servers, err := InitializeServerConfigs(serverConfig, clientConfig)
 	servers, err := InitializeServerConfigs(serverConfig, clientConfig)
-	assert(err, IsNil)
+	common.Must(err)
+	defer CloseAllServers(servers)
 
 
 	for i := 0; i < 10; i++ {
 	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) {
 func TestTLSOverKCP(t *testing.T) {
-	assert := With(t)
-
 	tcpServer := tcp.Server{
 	tcpServer := tcp.Server{
 		MsgProcessor: xor,
 		MsgProcessor: xor,
 	}
 	}
 	dest, err := tcpServer.Start()
 	dest, err := tcpServer.Start()
-	assert(err, IsNil)
+	common.Must(err)
 	defer tcpServer.Close()
 	defer tcpServer.Close()
 
 
 	userID := protocol.NewID(uuid.New())
 	userID := protocol.NewID(uuid.New())
@@ -394,34 +346,20 @@ func TestTLSOverKCP(t *testing.T) {
 	}
 	}
 
 
 	servers, err := InitializeServerConfigs(serverConfig, clientConfig)
 	servers, err := InitializeServerConfigs(serverConfig, clientConfig)
-	assert(err, IsNil)
-
-	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)
+	common.Must(err)
+	defer CloseAllServers(servers)
 
 
-	CloseAllServers(servers)
+	if err := testTCPConn(clientPort, 1024, time.Second*2)(); err != nil {
+		t.Error(err)
+	}
 }
 }
 
 
 func TestTLSOverWebSocket(t *testing.T) {
 func TestTLSOverWebSocket(t *testing.T) {
-	assert := With(t)
-
 	tcpServer := tcp.Server{
 	tcpServer := tcp.Server{
 		MsgProcessor: xor,
 		MsgProcessor: xor,
 	}
 	}
 	dest, err := tcpServer.Start()
 	dest, err := tcpServer.Start()
-	assert(err, IsNil)
+	common.Must(err)
 	defer tcpServer.Close()
 	defer tcpServer.Close()
 
 
 	userID := protocol.NewID(uuid.New())
 	userID := protocol.NewID(uuid.New())
@@ -519,40 +457,21 @@ func TestTLSOverWebSocket(t *testing.T) {
 	common.Must(err)
 	common.Must(err)
 	defer CloseAllServers(servers)
 	defer CloseAllServers(servers)
 
 
-	var wg sync.WaitGroup
+	var errg errgroup.Group
 	for i := 0; i < 10; i++ {
 	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) {
 func TestHTTP2(t *testing.T) {
-	assert := With(t)
-
 	tcpServer := tcp.Server{
 	tcpServer := tcp.Server{
 		MsgProcessor: xor,
 		MsgProcessor: xor,
 	}
 	}
 	dest, err := tcpServer.Start()
 	dest, err := tcpServer.Start()
-	assert(err, IsNil)
+	common.Must(err)
 	defer tcpServer.Close()
 	defer tcpServer.Close()
 
 
 	userID := protocol.NewID(uuid.New())
 	userID := protocol.NewID(uuid.New())
@@ -659,32 +578,14 @@ func TestHTTP2(t *testing.T) {
 	}
 	}
 
 
 	servers, err := InitializeServerConfigs(serverConfig, clientConfig)
 	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++ {
 	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)
 }
 }

+ 23 - 87
testing/scenarios/vmess_test.go

@@ -7,7 +7,6 @@ import (
 	"testing"
 	"testing"
 	"time"
 	"time"
 
 
-	"github.com/google/go-cmp/cmp"
 	"golang.org/x/sync/errgroup"
 	"golang.org/x/sync/errgroup"
 	"v2ray.com/core"
 	"v2ray.com/core"
 	"v2ray.com/core/app/log"
 	"v2ray.com/core/app/log"
@@ -498,13 +497,11 @@ func TestVMessGCMUDP(t *testing.T) {
 }
 }
 
 
 func TestVMessChacha20(t *testing.T) {
 func TestVMessChacha20(t *testing.T) {
-	assert := With(t)
-
 	tcpServer := tcp.Server{
 	tcpServer := tcp.Server{
 		MsgProcessor: xor,
 		MsgProcessor: xor,
 	}
 	}
 	dest, err := tcpServer.Start()
 	dest, err := tcpServer.Start()
-	assert(err, IsNil)
+	common.Must(err)
 	defer tcpServer.Close()
 	defer tcpServer.Close()
 
 
 	userID := protocol.NewID(uuid.New())
 	userID := protocol.NewID(uuid.New())
@@ -590,44 +587,25 @@ func TestVMessChacha20(t *testing.T) {
 	}
 	}
 
 
 	servers, err := InitializeServerConfigs(serverConfig, clientConfig)
 	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++ {
 	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) {
 func TestVMessNone(t *testing.T) {
-	assert := With(t)
-
 	tcpServer := tcp.Server{
 	tcpServer := tcp.Server{
 		MsgProcessor: xor,
 		MsgProcessor: xor,
 	}
 	}
 	dest, err := tcpServer.Start()
 	dest, err := tcpServer.Start()
-	assert(err, IsNil)
+	common.Must(err)
 	defer tcpServer.Close()
 	defer tcpServer.Close()
 
 
 	userID := protocol.NewID(uuid.New())
 	userID := protocol.NewID(uuid.New())
@@ -713,46 +691,24 @@ func TestVMessNone(t *testing.T) {
 	}
 	}
 
 
 	servers, err := InitializeServerConfigs(serverConfig, clientConfig)
 	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++ {
 	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) {
 func TestVMessKCP(t *testing.T) {
-	assert := With(t)
-
 	tcpServer := tcp.Server{
 	tcpServer := tcp.Server{
 		MsgProcessor: xor,
 		MsgProcessor: xor,
 	}
 	}
 	dest, err := tcpServer.Start()
 	dest, err := tcpServer.Start()
-	assert(err, IsNil)
+	common.Must(err)
 	defer tcpServer.Close()
 	defer tcpServer.Close()
 
 
 	userID := protocol.NewID(uuid.New())
 	userID := protocol.NewID(uuid.New())
@@ -846,36 +802,16 @@ func TestVMessKCP(t *testing.T) {
 	}
 	}
 
 
 	servers, err := InitializeServerConfigs(serverConfig, clientConfig)
 	servers, err := InitializeServerConfigs(serverConfig, clientConfig)
-	assert(err, IsNil)
+	common.Must(err)
 	defer CloseAllServers(servers)
 	defer CloseAllServers(servers)
 
 
-	var wg sync.WaitGroup
+	var errg errgroup.Group
 	for i := 0; i < 10; i++ {
 	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) {
 func TestVMessKCPLarge(t *testing.T) {