diff --git a/test/.golangci.yaml b/test/.golangci.yaml new file mode 100644 index 00000000..cfaed770 --- /dev/null +++ b/test/.golangci.yaml @@ -0,0 +1,16 @@ +linters: + disable-all: true + enable: + - gofumpt + - govet + - gci + - staticcheck + +linters-settings: + gci: + sections: + - standard + - prefix(github.com/Dreamacro/clash) + - default + staticcheck: + go: '1.18' diff --git a/test/Makefile b/test/Makefile index 012d88d5..d238be03 100644 --- a/test/Makefile +++ b/test/Makefile @@ -1,8 +1,9 @@ lint: - golangci-lint run --disable-all -E govet -E gofumpt -E megacheck ./... + GOOS=darwin golangci-lint run ./... + GOOS=linux golangci-lint run ./... test: go test -p 1 -v ./... benchmark: - go test -benchmem -run=^$ -bench . + go test -benchmem -run=^$$ -bench . diff --git a/test/clash_test.go b/test/clash_test.go index ade2ed76..43655246 100644 --- a/test/clash_test.go +++ b/test/clash_test.go @@ -24,6 +24,7 @@ import ( "github.com/docker/docker/client" "github.com/docker/go-connections/nat" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) const ( @@ -52,13 +53,10 @@ var ( {HostPort: "10002", HostIP: "0.0.0.0"}, }, } + isDarwin = runtime.GOOS == "darwin" ) func init() { - if runtime.GOOS == "darwin" { - isDarwin = true - } - currentDir, err := os.Getwd() if err != nil { panic(err) @@ -110,6 +108,7 @@ func init() { continue } + println("pulling image:", image) imageStream, err := c.ImagePull(context.Background(), image, types.ImagePullOptions{}) if err != nil { panic(err) @@ -214,46 +213,35 @@ func testPingPongWithSocksPort(t *testing.T, port int) { pingCh, pongCh, test := newPingPongPair() go func() { l, err := Listen("tcp", ":10001") - if err != nil { - assert.FailNow(t, err.Error()) - } + require.NoError(t, err) defer l.Close() c, err := l.Accept() - if err != nil { - assert.FailNow(t, err.Error()) - } + require.NoError(t, err) buf := make([]byte, 4) - if _, err := io.ReadFull(c, buf); err != nil { - assert.FailNow(t, err.Error()) - } + _, err = io.ReadFull(c, buf) + require.NoError(t, err) pingCh <- buf - if _, err := c.Write([]byte("pong")); err != nil { - assert.FailNow(t, err.Error()) - } + _, err = c.Write([]byte("pong")) + require.NoError(t, err) }() go func() { c, err := net.Dial("tcp", fmt.Sprintf("127.0.0.1:%d", port)) - if err != nil { - assert.FailNow(t, err.Error()) - } + require.NoError(t, err) defer c.Close() - if _, err := socks5.ClientHandshake(c, socks5.ParseAddr("127.0.0.1:10001"), socks5.CmdConnect, nil); err != nil { - assert.FailNow(t, err.Error()) - } + _, err = socks5.ClientHandshake(c, socks5.ParseAddr("127.0.0.1:10001"), socks5.CmdConnect, nil) + require.NoError(t, err) - if _, err := c.Write([]byte("ping")); err != nil { - assert.FailNow(t, err.Error()) - } + _, err = c.Write([]byte("ping")) + require.NoError(t, err) buf := make([]byte, 4) - if _, err := io.ReadFull(c, buf); err != nil { - assert.FailNow(t, err.Error()) - } + _, err = io.ReadFull(c, buf) + require.NoError(t, err) pongCh <- buf }() @@ -304,9 +292,7 @@ func testPingPongWithConn(t *testing.T, c net.Conn) error { func testPingPongWithPacketConn(t *testing.T, pc net.PacketConn) error { l, err := ListenPacket("udp", ":10001") - if err != nil { - return err - } + require.NoError(t, err) defer l.Close() rAddr := &net.UDPAddr{IP: localIP, Port: 10001} @@ -349,9 +335,7 @@ type hashPair struct { func testLargeDataWithConn(t *testing.T, c net.Conn) error { l, err := Listen("tcp", ":10001") - if err != nil { - return err - } + require.NoError(t, err) defer l.Close() times := 100 @@ -443,9 +427,7 @@ func testLargeDataWithConn(t *testing.T, c net.Conn) error { func testLargeDataWithPacketConn(t *testing.T, pc net.PacketConn) error { l, err := ListenPacket("udp", ":10001") - if err != nil { - return err - } + require.NoError(t, err) defer l.Close() rAddr := &net.UDPAddr{IP: localIP, Port: 10001} @@ -541,7 +523,7 @@ func testLargeDataWithPacketConn(t *testing.T, pc net.PacketConn) error { func testPacketConnTimeout(t *testing.T, pc net.PacketConn) error { err := pc.SetReadDeadline(time.Now().Add(time.Millisecond * 300)) - assert.NoError(t, err) + require.NoError(t, err) errCh := make(chan error, 1) go func() { @@ -564,9 +546,7 @@ func testSuit(t *testing.T, proxy C.ProxyAdapter) { DstPort: "10001", AddrType: socks5.AtypDomainName, }) - if err != nil { - assert.FailNow(t, err.Error()) - } + require.NoError(t, err) defer conn.Close() assert.NoError(t, testPingPongWithConn(t, conn)) @@ -575,9 +555,7 @@ func testSuit(t *testing.T, proxy C.ProxyAdapter) { DstPort: "10001", AddrType: socks5.AtypDomainName, }) - if err != nil { - assert.FailNow(t, err.Error()) - } + require.NoError(t, err) defer conn.Close() assert.NoError(t, testLargeDataWithConn(t, conn)) @@ -591,9 +569,7 @@ func testSuit(t *testing.T, proxy C.ProxyAdapter) { DstPort: "10001", AddrType: socks5.AtypIPv4, }) - if err != nil { - assert.FailNow(t, err.Error()) - } + require.NoError(t, err) defer pc.Close() assert.NoError(t, testPingPongWithPacketConn(t, pc)) @@ -604,9 +580,7 @@ func testSuit(t *testing.T, proxy C.ProxyAdapter) { DstPort: "10001", AddrType: socks5.AtypIPv4, }) - if err != nil { - assert.FailNow(t, err.Error()) - } + require.NoError(t, err) defer pc.Close() assert.NoError(t, testLargeDataWithPacketConn(t, pc)) @@ -617,9 +591,7 @@ func testSuit(t *testing.T, proxy C.ProxyAdapter) { DstPort: "10001", AddrType: socks5.AtypIPv4, }) - if err != nil { - assert.FailNow(t, err.Error()) - } + require.NoError(t, err) defer pc.Close() assert.NoError(t, testPacketConnTimeout(t, pc)) @@ -627,15 +599,13 @@ func testSuit(t *testing.T, proxy C.ProxyAdapter) { func benchmarkProxy(b *testing.B, proxy C.ProxyAdapter) { l, err := Listen("tcp", ":10001") - if err != nil { - assert.FailNow(b, err.Error()) - } + require.NoError(b, err) defer l.Close() go func() { c, err := l.Accept() if err != nil { - assert.FailNow(b, err.Error()) + return } defer c.Close() @@ -650,16 +620,15 @@ func benchmarkProxy(b *testing.B, proxy C.ProxyAdapter) { DstPort: "10001", AddrType: socks5.AtypDomainName, }) - if err != nil { - assert.FailNow(b, err.Error()) - } + require.NoError(b, err) + + _, err = conn.Write([]byte("skip protocol handshake")) + require.NoError(b, err) b.SetBytes(chunkSize) b.ResetTimer() for i := 0; i < b.N; i++ { - if _, err := conn.Write(chunk); err != nil { - assert.FailNow(b, err.Error()) - } + conn.Write(chunk) } } @@ -669,12 +638,11 @@ mixed-port: 10000 log-level: silent ` - if err := parseAndApply(basic); err != nil { - assert.FailNow(t, err.Error()) - } + err := parseAndApply(basic) + require.NoError(t, err) defer cleanup() - time.Sleep(waitTime) + require.True(t, TCPing(net.JoinHostPort(localIP.String(), "10000"))) testPingPongWithSocksPort(t, 10000) } diff --git a/test/dns_test.go b/test/dns_test.go index dd07bda8..c3787623 100644 --- a/test/dns_test.go +++ b/test/dns_test.go @@ -6,6 +6,7 @@ import ( "github.com/miekg/dns" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) func exchange(address, domain string, tp uint16) ([]dns.RR, error) { @@ -30,18 +31,15 @@ dns: - 119.29.29.29 ` - if err := parseAndApply(basic); err != nil { - assert.FailNow(t, err.Error()) - } + err := parseAndApply(basic) + require.NoError(t, err) defer cleanup() time.Sleep(waitTime) rr, err := exchange("127.0.0.1:8553", "1.1.1.1.nip.io", dns.TypeA) assert.NoError(t, err) - if !assert.NotEmpty(t, rr) { - assert.FailNow(t, "record empty") - } + assert.NotEmptyf(t, rr, "record empty") record := rr[0].(*dns.A) assert.Equal(t, record.A.String(), "1.1.1.1") @@ -68,9 +66,8 @@ dns: - 119.29.29.29 ` - if err := parseAndApply(basic); err != nil { - assert.FailNow(t, err.Error()) - } + err := parseAndApply(basic) + require.NoError(t, err) defer cleanup() time.Sleep(waitTime) diff --git a/test/docker_test.go b/test/docker_test.go index 12c427b1..8513ddea 100644 --- a/test/docker_test.go +++ b/test/docker_test.go @@ -8,8 +8,6 @@ import ( "github.com/docker/docker/client" ) -var isDarwin = false - func startContainer(cfg *container.Config, hostCfg *container.HostConfig, name string) (string, error) { c, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation()) if err != nil { diff --git a/test/snell_test.go b/test/snell_test.go index 60f30708..a8618812 100644 --- a/test/snell_test.go +++ b/test/snell_test.go @@ -9,7 +9,7 @@ import ( C "github.com/Dreamacro/clash/constant" "github.com/docker/docker/api/types/container" - "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) func TestClash_SnellObfsHTTP(t *testing.T) { @@ -24,9 +24,7 @@ func TestClash_SnellObfsHTTP(t *testing.T) { } id, err := startContainer(cfg, hostCfg, "snell-http") - if err != nil { - assert.FailNow(t, err.Error()) - } + require.NoError(t, err) t.Cleanup(func() { cleanContainer(id) @@ -41,9 +39,7 @@ func TestClash_SnellObfsHTTP(t *testing.T) { "mode": "http", }, }) - if err != nil { - assert.FailNow(t, err.Error()) - } + require.NoError(t, err) time.Sleep(waitTime) testSuit(t, proxy) @@ -61,9 +57,7 @@ func TestClash_SnellObfsTLS(t *testing.T) { } id, err := startContainer(cfg, hostCfg, "snell-tls") - if err != nil { - assert.FailNow(t, err.Error()) - } + require.NoError(t, err) t.Cleanup(func() { cleanContainer(id) @@ -78,9 +72,7 @@ func TestClash_SnellObfsTLS(t *testing.T) { "mode": "tls", }, }) - if err != nil { - assert.FailNow(t, err.Error()) - } + require.NoError(t, err) time.Sleep(waitTime) testSuit(t, proxy) @@ -98,9 +90,7 @@ func TestClash_Snell(t *testing.T) { } id, err := startContainer(cfg, hostCfg, "snell") - if err != nil { - assert.FailNow(t, err.Error()) - } + require.NoError(t, err) t.Cleanup(func() { cleanContainer(id) @@ -112,9 +102,7 @@ func TestClash_Snell(t *testing.T) { Port: 10002, Psk: "password", }) - if err != nil { - assert.FailNow(t, err.Error()) - } + require.NoError(t, err) time.Sleep(waitTime) testSuit(t, proxy) @@ -132,9 +120,7 @@ func TestClash_Snellv3(t *testing.T) { } id, err := startContainer(cfg, hostCfg, "snell") - if err != nil { - assert.FailNow(t, err.Error()) - } + require.NoError(t, err) t.Cleanup(func() { cleanContainer(id) @@ -148,9 +134,7 @@ func TestClash_Snellv3(t *testing.T) { UDP: true, Version: 3, }) - if err != nil { - assert.FailNow(t, err.Error()) - } + require.NoError(t, err) time.Sleep(waitTime) testSuit(t, proxy) @@ -168,9 +152,7 @@ func Benchmark_Snell(b *testing.B) { } id, err := startContainer(cfg, hostCfg, "snell-http") - if err != nil { - assert.FailNow(b, err.Error()) - } + require.NoError(b, err) b.Cleanup(func() { cleanContainer(id) @@ -185,9 +167,7 @@ func Benchmark_Snell(b *testing.B) { "mode": "http", }, }) - if err != nil { - assert.FailNow(b, err.Error()) - } + require.NoError(b, err) time.Sleep(waitTime) benchmarkProxy(b, proxy) diff --git a/test/ss_test.go b/test/ss_test.go index 17c8e0c8..b2f0b287 100644 --- a/test/ss_test.go +++ b/test/ss_test.go @@ -1,13 +1,14 @@ package main import ( + "net" "testing" "time" "github.com/Dreamacro/clash/adapter/outbound" "github.com/docker/docker/api/types/container" - "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) func TestClash_Shadowsocks(t *testing.T) { @@ -22,9 +23,7 @@ func TestClash_Shadowsocks(t *testing.T) { } id, err := startContainer(cfg, hostCfg, "ss") - if err != nil { - assert.FailNow(t, err.Error()) - } + require.NoError(t, err) t.Cleanup(func() { cleanContainer(id) @@ -38,9 +37,7 @@ func TestClash_Shadowsocks(t *testing.T) { Cipher: "chacha20-ietf-poly1305", UDP: true, }) - if err != nil { - assert.FailNow(t, err.Error()) - } + require.NoError(t, err) time.Sleep(waitTime) testSuit(t, proxy) @@ -60,9 +57,7 @@ func TestClash_ShadowsocksObfsHTTP(t *testing.T) { } id, err := startContainer(cfg, hostCfg, "ss-obfs-http") - if err != nil { - assert.FailNow(t, err.Error()) - } + require.NoError(t, err) t.Cleanup(func() { cleanContainer(id) @@ -80,9 +75,7 @@ func TestClash_ShadowsocksObfsHTTP(t *testing.T) { "mode": "http", }, }) - if err != nil { - assert.FailNow(t, err.Error()) - } + require.NoError(t, err) time.Sleep(waitTime) testSuit(t, proxy) @@ -102,9 +95,7 @@ func TestClash_ShadowsocksObfsTLS(t *testing.T) { } id, err := startContainer(cfg, hostCfg, "ss-obfs-tls") - if err != nil { - assert.FailNow(t, err.Error()) - } + require.NoError(t, err) t.Cleanup(func() { cleanContainer(id) @@ -122,9 +113,7 @@ func TestClash_ShadowsocksObfsTLS(t *testing.T) { "mode": "tls", }, }) - if err != nil { - assert.FailNow(t, err.Error()) - } + require.NoError(t, err) time.Sleep(waitTime) testSuit(t, proxy) @@ -144,9 +133,7 @@ func TestClash_ShadowsocksV2RayPlugin(t *testing.T) { } id, err := startContainer(cfg, hostCfg, "ss-v2ray-plugin") - if err != nil { - assert.FailNow(t, err.Error()) - } + require.NoError(t, err) t.Cleanup(func() { cleanContainer(id) @@ -164,9 +151,7 @@ func TestClash_ShadowsocksV2RayPlugin(t *testing.T) { "mode": "websocket", }, }) - if err != nil { - assert.FailNow(t, err.Error()) - } + require.NoError(t, err) time.Sleep(waitTime) testSuit(t, proxy) @@ -184,9 +169,7 @@ func Benchmark_Shadowsocks(b *testing.B) { } id, err := startContainer(cfg, hostCfg, "ss") - if err != nil { - assert.FailNow(b, err.Error()) - } + require.NoError(b, err) b.Cleanup(func() { cleanContainer(id) @@ -200,10 +183,8 @@ func Benchmark_Shadowsocks(b *testing.B) { Cipher: "aes-256-gcm", UDP: true, }) - if err != nil { - assert.FailNow(b, err.Error()) - } + require.NoError(b, err) - time.Sleep(waitTime) + require.True(b, TCPing(net.JoinHostPort(localIP.String(), "10002"))) benchmarkProxy(b, proxy) } diff --git a/test/trojan_test.go b/test/trojan_test.go index d1ab2a00..95f8bd56 100644 --- a/test/trojan_test.go +++ b/test/trojan_test.go @@ -2,6 +2,7 @@ package main import ( "fmt" + "net" "testing" "time" @@ -9,7 +10,7 @@ import ( C "github.com/Dreamacro/clash/constant" "github.com/docker/docker/api/types/container" - "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) func TestClash_Trojan(t *testing.T) { @@ -27,9 +28,7 @@ func TestClash_Trojan(t *testing.T) { } id, err := startContainer(cfg, hostCfg, "trojan") - if err != nil { - assert.FailNow(t, err.Error()) - } + require.NoError(t, err) t.Cleanup(func() { cleanContainer(id) @@ -44,9 +43,7 @@ func TestClash_Trojan(t *testing.T) { SkipCertVerify: true, UDP: true, }) - if err != nil { - assert.FailNow(t, err.Error()) - } + require.NoError(t, err) time.Sleep(waitTime) testSuit(t, proxy) @@ -67,10 +64,10 @@ func TestClash_TrojanGrpc(t *testing.T) { } id, err := startContainer(cfg, hostCfg, "trojan-grpc") - if err != nil { - assert.FailNow(t, err.Error()) - } - defer cleanContainer(id) + require.NoError(t, err) + t.Cleanup(func() { + cleanContainer(id) + }) proxy, err := outbound.NewTrojan(outbound.TrojanOption{ Name: "trojan", @@ -85,9 +82,7 @@ func TestClash_TrojanGrpc(t *testing.T) { GrpcServiceName: "example", }, }) - if err != nil { - assert.FailNow(t, err.Error()) - } + require.NoError(t, err) time.Sleep(waitTime) testSuit(t, proxy) @@ -108,10 +103,10 @@ func TestClash_TrojanWebsocket(t *testing.T) { } id, err := startContainer(cfg, hostCfg, "trojan-ws") - if err != nil { - assert.FailNow(t, err.Error()) - } - defer cleanContainer(id) + require.NoError(t, err) + t.Cleanup(func() { + cleanContainer(id) + }) proxy, err := outbound.NewTrojan(outbound.TrojanOption{ Name: "trojan", @@ -123,9 +118,7 @@ func TestClash_TrojanWebsocket(t *testing.T) { UDP: true, Network: "ws", }) - if err != nil { - assert.FailNow(t, err.Error()) - } + require.NoError(t, err) time.Sleep(waitTime) testSuit(t, proxy) @@ -145,10 +138,8 @@ func Benchmark_Trojan(b *testing.B) { }, } - id, err := startContainer(cfg, hostCfg, "trojan") - if err != nil { - assert.FailNow(b, err.Error()) - } + id, err := startContainer(cfg, hostCfg, "trojan-bench") + require.NoError(b, err) b.Cleanup(func() { cleanContainer(id) @@ -163,10 +154,8 @@ func Benchmark_Trojan(b *testing.B) { SkipCertVerify: true, UDP: true, }) - if err != nil { - assert.FailNow(b, err.Error()) - } + require.NoError(b, err) - time.Sleep(waitTime) + require.True(b, TCPing(net.JoinHostPort(localIP.String(), "10002"))) benchmarkProxy(b, proxy) } diff --git a/test/util.go b/test/util.go index f3325aeb..3d0fce88 100644 --- a/test/util.go +++ b/test/util.go @@ -35,3 +35,16 @@ func ListenPacket(network, address string) (net.PacketConn, error) { } return nil, lastErr } + +func TCPing(addr string) bool { + for i := 0; i < 10; i++ { + conn, err := net.Dial("tcp", addr) + if err == nil { + conn.Close() + return true + } + time.Sleep(time.Millisecond * 500) + } + + return false +} diff --git a/test/util_other_test.go b/test/util_other_test.go index 708b6099..fc4a68af 100644 --- a/test/util_other_test.go +++ b/test/util_other_test.go @@ -4,9 +4,9 @@ package main import ( "errors" - "net" + "net/netip" ) -func defaultRouteIP() (net.IP, error) { - return nil, errors.New("not supported") +func defaultRouteIP() (netip.Addr, error) { + return netip.Addr{}, errors.New("not supported") } diff --git a/test/vmess_test.go b/test/vmess_test.go index bf66fcd8..b283ce0c 100644 --- a/test/vmess_test.go +++ b/test/vmess_test.go @@ -9,7 +9,7 @@ import ( C "github.com/Dreamacro/clash/constant" "github.com/docker/docker/api/types/container" - "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) func TestClash_Vmess(t *testing.T) { @@ -25,9 +25,7 @@ func TestClash_Vmess(t *testing.T) { } id, err := startContainer(cfg, hostCfg, "vmess") - if err != nil { - assert.FailNow(t, err.Error()) - } + require.NoError(t, err) t.Cleanup(func() { cleanContainer(id) @@ -41,9 +39,7 @@ func TestClash_Vmess(t *testing.T) { Cipher: "auto", UDP: true, }) - if err != nil { - assert.FailNow(t, err.Error()) - } + require.NoError(t, err) time.Sleep(waitTime) testSuit(t, proxy) @@ -64,10 +60,10 @@ func TestClash_VmessTLS(t *testing.T) { } id, err := startContainer(cfg, hostCfg, "vmess-tls") - if err != nil { - assert.FailNow(t, err.Error()) - } - defer cleanContainer(id) + require.NoError(t, err) + t.Cleanup(func() { + cleanContainer(id) + }) proxy, err := outbound.NewVmess(outbound.VmessOption{ Name: "vmess", @@ -80,9 +76,7 @@ func TestClash_VmessTLS(t *testing.T) { ServerName: "example.org", UDP: true, }) - if err != nil { - assert.FailNow(t, err.Error()) - } + require.NoError(t, err) time.Sleep(waitTime) testSuit(t, proxy) @@ -103,10 +97,10 @@ func TestClash_VmessHTTP2(t *testing.T) { } id, err := startContainer(cfg, hostCfg, "vmess-http2") - if err != nil { - assert.FailNow(t, err.Error()) - } - defer cleanContainer(id) + require.NoError(t, err) + t.Cleanup(func() { + cleanContainer(id) + }) proxy, err := outbound.NewVmess(outbound.VmessOption{ Name: "vmess", @@ -124,9 +118,7 @@ func TestClash_VmessHTTP2(t *testing.T) { Path: "/test", }, }) - if err != nil { - assert.FailNow(t, err.Error()) - } + require.NoError(t, err) time.Sleep(waitTime) testSuit(t, proxy) @@ -145,10 +137,10 @@ func TestClash_VmessHTTP(t *testing.T) { } id, err := startContainer(cfg, hostCfg, "vmess-http") - if err != nil { - assert.FailNow(t, err.Error()) - } - defer cleanContainer(id) + require.NoError(t, err) + t.Cleanup(func() { + cleanContainer(id) + }) proxy, err := outbound.NewVmess(outbound.VmessOption{ Name: "vmess", @@ -176,9 +168,7 @@ func TestClash_VmessHTTP(t *testing.T) { }, }, }) - if err != nil { - assert.FailNow(t, err.Error()) - } + require.NoError(t, err) time.Sleep(waitTime) testSuit(t, proxy) @@ -197,10 +187,10 @@ func TestClash_VmessWebsocket(t *testing.T) { } id, err := startContainer(cfg, hostCfg, "vmess-ws") - if err != nil { - assert.FailNow(t, err.Error()) - } - defer cleanContainer(id) + require.NoError(t, err) + t.Cleanup(func() { + cleanContainer(id) + }) proxy, err := outbound.NewVmess(outbound.VmessOption{ Name: "vmess", @@ -211,9 +201,7 @@ func TestClash_VmessWebsocket(t *testing.T) { Network: "ws", UDP: true, }) - if err != nil { - assert.FailNow(t, err.Error()) - } + require.NoError(t, err) time.Sleep(waitTime) testSuit(t, proxy) @@ -234,10 +222,10 @@ func TestClash_VmessWebsocketTLS(t *testing.T) { } id, err := startContainer(cfg, hostCfg, "vmess-ws") - if err != nil { - assert.FailNow(t, err.Error()) - } - defer cleanContainer(id) + require.NoError(t, err) + t.Cleanup(func() { + cleanContainer(id) + }) proxy, err := outbound.NewVmess(outbound.VmessOption{ Name: "vmess", @@ -250,9 +238,7 @@ func TestClash_VmessWebsocketTLS(t *testing.T) { SkipCertVerify: true, UDP: true, }) - if err != nil { - assert.FailNow(t, err.Error()) - } + require.NoError(t, err) time.Sleep(waitTime) testSuit(t, proxy) @@ -273,10 +259,10 @@ func TestClash_VmessGrpc(t *testing.T) { } id, err := startContainer(cfg, hostCfg, "vmess-grpc") - if err != nil { - assert.FailNow(t, err.Error()) - } - defer cleanContainer(id) + require.NoError(t, err) + t.Cleanup(func() { + cleanContainer(id) + }) proxy, err := outbound.NewVmess(outbound.VmessOption{ Name: "vmess", @@ -293,9 +279,7 @@ func TestClash_VmessGrpc(t *testing.T) { GrpcServiceName: "example!", }, }) - if err != nil { - assert.FailNow(t, err.Error()) - } + require.NoError(t, err) time.Sleep(waitTime) testSuit(t, proxy) @@ -314,10 +298,10 @@ func TestClash_VmessWebsocket0RTT(t *testing.T) { } id, err := startContainer(cfg, hostCfg, "vmess-ws-0rtt") - if err != nil { - assert.FailNow(t, err.Error()) - } - defer cleanContainer(id) + require.NoError(t, err) + t.Cleanup(func() { + cleanContainer(id) + }) proxy, err := outbound.NewVmess(outbound.VmessOption{ Name: "vmess", @@ -333,9 +317,7 @@ func TestClash_VmessWebsocket0RTT(t *testing.T) { EarlyDataHeaderName: "Sec-WebSocket-Protocol", }, }) - if err != nil { - assert.FailNow(t, err.Error()) - } + require.NoError(t, err) time.Sleep(waitTime) testSuit(t, proxy) @@ -354,10 +336,10 @@ func TestClash_VmessWebsocketXray0RTT(t *testing.T) { } id, err := startContainer(cfg, hostCfg, "vmess-xray-ws-0rtt") - if err != nil { - assert.FailNow(t, err.Error()) - } - defer cleanContainer(id) + require.NoError(t, err) + t.Cleanup(func() { + cleanContainer(id) + }) proxy, err := outbound.NewVmess(outbound.VmessOption{ Name: "vmess", @@ -372,16 +354,14 @@ func TestClash_VmessWebsocketXray0RTT(t *testing.T) { Path: "/?ed=2048", }, }) - if err != nil { - assert.FailNow(t, err.Error()) - } + require.NoError(t, err) time.Sleep(waitTime) testSuit(t, proxy) } func Benchmark_Vmess(b *testing.B) { - configPath := C.Path.Resolve("vmess-aead.json") + configPath := C.Path.Resolve("vmess.json") cfg := &container.Config{ Image: ImageVmess, @@ -393,9 +373,7 @@ func Benchmark_Vmess(b *testing.B) { } id, err := startContainer(cfg, hostCfg, "vmess-aead") - if err != nil { - assert.FailNow(b, err.Error()) - } + require.NoError(b, err) b.Cleanup(func() { cleanContainer(id) @@ -410,9 +388,7 @@ func Benchmark_Vmess(b *testing.B) { AlterID: 0, UDP: true, }) - if err != nil { - assert.FailNow(b, err.Error()) - } + require.NoError(b, err) time.Sleep(waitTime) benchmarkProxy(b, proxy)