remove dependency on assert lib

pull/1511/head
Darien Raymond 2019-01-11 17:17:59 +01:00
parent 986c80fcda
commit 40796b9f9c
No known key found for this signature in database
GPG Key ID: 7251FFA14BB18169
8 changed files with 108 additions and 379 deletions

View File

@ -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{ if err := testTCPConn(clientPort, 10240*1024, time.Second*20)(); err != nil {
IP: []byte{127, 0, 0, 1}, t.Fatal(err)
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)
} }
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())

View File

@ -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)
} }

View File

@ -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{ if err := testTCPConn(net.Port(port), 1024, time.Second*2)(); err != nil {
IP: []byte{127, 0, 0, 1}, t.Error(err)
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)
} }
CloseAllServers(servers)
} }
func TestDokodemoUDP(t *testing.T) { func TestDokodemoUDP(t *testing.T) {

View File

@ -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{ if err := testTCPConn(clientPort, 1024, time.Second*2)(); err != io.EOF {
IP: []byte{127, 0, 0, 1}, t.Error(err)
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)
} }
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 var errg errgroup.Group
wg.Add(10)
for i := 0; i < 10; i++ { for i := 0; i < 10; i++ {
go func() { errg.Go(testTCPConn(clientPort, 10240*1024, time.Second*20))
conn, err := net.DialTCP("tcp", nil, &net.TCPAddr{ }
IP: []byte{127, 0, 0, 1}, if err := errg.Wait(); err != nil {
Port: int(clientPort), t.Error(err)
})
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()
}()
} }
wg.Wait()
} }

View File

@ -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 var errg errgroup.Group
wg.Add(10)
for i := 0; i < 10; i++ { for i := 0; i < 10; i++ {
go func() { errg.Go(testTCPConn(clientPort, 10240*1024, time.Second*20))
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()
}()
} }
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 { errg.Go(testTCPConn(clientPort, 10240*1024, time.Second*20))
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
})
} }
if err := errg.Wait(); err != nil { if err := errg.Wait(); err != nil {

View File

@ -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{ if err := testTCPConn(clientPort, 1024, time.Second*2)(); err != nil {
IP: []byte{127, 0, 0, 1}, t.Error(err)
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)
} }
func TestSocksBridageUDP(t *testing.T) { func TestSocksBridageUDP(t *testing.T) {

View File

@ -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 if err := testTCPConn(clientPort, 1024, time.Second*2)(); err != nil {
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 {
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{ if err := testTCPConn(clientPort, 1024, time.Second*2)(); err != nil {
IP: []byte{127, 0, 0, 1}, t.Error(err)
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)
} }
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) common.Must(err)
defer CloseAllServers(servers)
conn, err := net.DialTCP("tcp", nil, &net.TCPAddr{ if err := testTCPConn(clientPort, 1024, time.Second*2)(); err != nil {
IP: []byte{127, 0, 0, 1}, t.Error(err)
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)
} }
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) errg.Go(testTCPConn(clientPort, 10240*1024, time.Second*20))
go func() { }
defer wg.Done() if err := errg.Wait(); err != nil {
t.Error(err)
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)
}()
} }
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) errg.Go(testTCPConn(clientPort, 10240*1024, time.Second*20))
go func() { }
defer wg.Done() if err := errg.Wait(); err != nil {
t.Error(err)
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)
}()
} }
wg.Wait()
CloseAllServers(servers)
} }

View File

@ -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 var errg errgroup.Group
wg.Add(10)
for i := 0; i < 10; i++ { for i := 0; i < 10; i++ {
go func() { errg.Go(testTCPConn(clientPort, 10240*1024, time.Second*20))
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()
}()
} }
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 var errg errgroup.Group
wg.Add(10)
for i := 0; i < 10; i++ { for i := 0; i < 10; i++ {
go func() { errg.Go(testTCPConn(clientPort, 1024*1024, time.Second*30))
defer wg.Done() }
if err := errg.Wait(); err != nil {
conn, err := net.DialTCP("tcp", nil, &net.TCPAddr{ t.Error(err)
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)
}()
} }
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) errg.Go(testTCPConn(clientPort, 10240*1024, time.Minute*2))
go func() { }
defer wg.Done() if err := errg.Wait(); err != nil {
t.Error(err)
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)
}
}()
} }
wg.Wait()
} }
func TestVMessKCPLarge(t *testing.T) { func TestVMessKCPLarge(t *testing.T) {