From 3ca61d6519708d3e76be1ca68fece4bce5fe0b21 Mon Sep 17 00:00:00 2001 From: saba Date: Fri, 28 Nov 2025 21:46:50 +0800 Subject: [PATCH] test. tested sudoku in/out bound with success --- go.mod | 4 +- go.sum | 8 +-- listener/inbound/sudoku_test.go | 91 +++++++++++++++++++++++++++++++++ listener/sudoku/server.go | 19 ++++++- 4 files changed, 114 insertions(+), 8 deletions(-) create mode 100644 listener/inbound/sudoku_test.go diff --git a/go.mod b/go.mod index 4a409cac..66a19294 100644 --- a/go.mod +++ b/go.mod @@ -22,7 +22,7 @@ require ( github.com/metacubex/chacha v0.1.5 github.com/metacubex/fswatch v0.1.1 github.com/metacubex/gopacket v1.1.20-0.20230608035415-7e2f98a3e759 - github.com/metacubex/kcp-go v0.0.0-20251105084629-8c93f4bf37be + github.com/metacubex/kcp-go v0.0.0-20251111012849-7455698490e9 github.com/metacubex/quic-go v0.55.1-0.20251024060151-bd465f127128 github.com/metacubex/randv2 v0.2.0 github.com/metacubex/restls-client-go v0.1.7 @@ -35,7 +35,7 @@ require ( github.com/metacubex/sing-tun v0.4.9 github.com/metacubex/sing-vmess v0.2.4 github.com/metacubex/sing-wireguard v0.0.0-20250503063753-2dc62acc626f - github.com/metacubex/smux v0.0.0-20250922175018-15c9a6a78719 + github.com/metacubex/smux v0.0.0-20251111013112-03f8d12dafc1 github.com/metacubex/tfo-go v0.0.0-20251024101424-368b42b59148 github.com/metacubex/utls v1.8.3 github.com/metacubex/wireguard-go v0.0.0-20250820062549-a6cecdd7f57f diff --git a/go.sum b/go.sum index afd14ca5..5993d45c 100644 --- a/go.sum +++ b/go.sum @@ -108,8 +108,8 @@ github.com/metacubex/gopacket v1.1.20-0.20230608035415-7e2f98a3e759 h1:cjd4biTvO github.com/metacubex/gopacket v1.1.20-0.20230608035415-7e2f98a3e759/go.mod h1:UHOv2xu+RIgLwpXca7TLrXleEd4oR3sPatW6IF8wU88= github.com/metacubex/gvisor v0.0.0-20250919004547-6122b699a301 h1:N5GExQJqYAH3gOCshpp2u/J3CtNYzMctmlb0xK9wtbQ= github.com/metacubex/gvisor v0.0.0-20250919004547-6122b699a301/go.mod h1:8LpS0IJW1VmWzUm3ylb0e2SK5QDm5lO/2qwWLZgRpBU= -github.com/metacubex/kcp-go v0.0.0-20251105084629-8c93f4bf37be h1:Y7SigZIqfv/+RIA/D7R6EbB9p+brPRoGOM6zobSmRIM= -github.com/metacubex/kcp-go v0.0.0-20251105084629-8c93f4bf37be/go.mod h1:HIJZW4QMhbBqXuqC1ly6Hn0TEYT2SzRw58ns1yGhXTs= +github.com/metacubex/kcp-go v0.0.0-20251111012849-7455698490e9 h1:7m3tRPrLpKOLOvZ/Lp4XCxz0t7rg9t9K35x6TahjR8o= +github.com/metacubex/kcp-go v0.0.0-20251111012849-7455698490e9/go.mod h1:HIJZW4QMhbBqXuqC1ly6Hn0TEYT2SzRw58ns1yGhXTs= github.com/metacubex/nftables v0.0.0-20250503052935-30a69ab87793 h1:1Qpuy+sU3DmyX9HwI+CrBT/oLNJngvBorR2RbajJcqo= github.com/metacubex/nftables v0.0.0-20250503052935-30a69ab87793/go.mod h1:RjRNb4G52yAgfR+Oe/kp9G4PJJ97Fnj89eY1BFO3YyA= github.com/metacubex/quic-go v0.55.1-0.20251024060151-bd465f127128 h1:I1uvJl206/HbkzEAZpLgGkZgUveOZb+P+6oTUj7dN+o= @@ -137,8 +137,8 @@ github.com/metacubex/sing-vmess v0.2.4 h1:Tx6AGgCiEf400E/xyDuYyafsel6sGbR8oF7RkA github.com/metacubex/sing-vmess v0.2.4/go.mod h1:21R5R1u90uUvBQF0owoooEu96/SAYYD56nDrwm6nFaM= github.com/metacubex/sing-wireguard v0.0.0-20250503063753-2dc62acc626f h1:Sr/DYKYofKHKc4GF3qkRGNuj6XA6c0eqPgEDN+VAsYU= github.com/metacubex/sing-wireguard v0.0.0-20250503063753-2dc62acc626f/go.mod h1:jpAkVLPnCpGSfNyVmj6Cq4YbuZsFepm/Dc+9BAOcR80= -github.com/metacubex/smux v0.0.0-20250922175018-15c9a6a78719 h1:T6qCCfolRDAVJKeaPW/mXwNLjnlo65AYN7WS2jrBNaM= -github.com/metacubex/smux v0.0.0-20250922175018-15c9a6a78719/go.mod h1:4bPD8HWx9jPJ9aE4uadgyN7D1/Wz3KmPy+vale8sKLE= +github.com/metacubex/smux v0.0.0-20251111013112-03f8d12dafc1 h1:a6DF0ze9miXes+rdwl8a4Wkvfpe0lXYU82sPJfDzz6s= +github.com/metacubex/smux v0.0.0-20251111013112-03f8d12dafc1/go.mod h1:4bPD8HWx9jPJ9aE4uadgyN7D1/Wz3KmPy+vale8sKLE= github.com/metacubex/tfo-go v0.0.0-20251024101424-368b42b59148 h1:Zd0QqciLIhv9MKbGKTPEgN8WUFsgQGA1WJBy6spEnVU= github.com/metacubex/tfo-go v0.0.0-20251024101424-368b42b59148/go.mod h1:l9oLnLoEXyGZ5RVLsh7QCC5XsouTUyKk4F2nLm2DHLw= github.com/metacubex/utls v1.8.3 h1:0m/yCxm3SK6kWve2lKiFb1pue1wHitJ8sQQD4Ikqde4= diff --git a/listener/inbound/sudoku_test.go b/listener/inbound/sudoku_test.go new file mode 100644 index 00000000..6d3e35b1 --- /dev/null +++ b/listener/inbound/sudoku_test.go @@ -0,0 +1,91 @@ +package inbound_test + +import ( + "net/netip" + "testing" + + "github.com/metacubex/mihomo/adapter/outbound" + "github.com/metacubex/mihomo/listener/inbound" + "github.com/stretchr/testify/assert" +) + +func testInboundSudoku(t *testing.T, inboundOptions inbound.SudokuOption, outboundOptions outbound.SudokuOption) { + t.Parallel() + + inboundOptions.BaseOption = inbound.BaseOption{ + NameStr: "sudoku_inbound", + Listen: "127.0.0.1", + Port: "0", + } + in, err := inbound.NewSudoku(&inboundOptions) + if !assert.NoError(t, err) { + return + } + + tunnel := NewHttpTestTunnel() + defer tunnel.Close() + + err = in.Listen(tunnel) + if !assert.NoError(t, err) { + return + } + defer in.Close() + + addrPort, err := netip.ParseAddrPort(in.Address()) + if !assert.NoError(t, err) { + return + } + + outboundOptions.Name = "sudoku_outbound" + outboundOptions.Server = addrPort.Addr().String() + outboundOptions.Port = int(addrPort.Port()) + + out, err := outbound.NewSudoku(outboundOptions) + if !assert.NoError(t, err) { + return + } + defer out.Close() + + tunnel.DoTest(t, out) +} + +func TestInboundSudoku_Basic(t *testing.T) { + key := "test_key" + inboundOptions := inbound.SudokuOption{ + Key: key, + } + outboundOptions := outbound.SudokuOption{ + Key: key, + } + testInboundSudoku(t, inboundOptions, outboundOptions) +} + +func TestInboundSudoku_Entropy(t *testing.T) { + key := "test_key_entropy" + inboundOptions := inbound.SudokuOption{ + Key: key, + TableType: "prefer_entropy", + } + outboundOptions := outbound.SudokuOption{ + Key: key, + TableType: "prefer_entropy", + } + testInboundSudoku(t, inboundOptions, outboundOptions) +} + +func TestInboundSudoku_Padding(t *testing.T) { + key := "test_key_padding" + min := 10 + max := 100 + inboundOptions := inbound.SudokuOption{ + Key: key, + PaddingMin: &min, + PaddingMax: &max, + } + outboundOptions := outbound.SudokuOption{ + Key: key, + PaddingMin: &min, + PaddingMax: &max, + } + testInboundSudoku(t, inboundOptions, outboundOptions) +} diff --git a/listener/sudoku/server.go b/listener/sudoku/server.go index 76cdd15c..87b2abd9 100644 --- a/listener/sudoku/server.go +++ b/listener/sudoku/server.go @@ -116,9 +116,24 @@ func New(config LC.SudokuServer, tunnel C.Tunnel, additions ...inbound.Addition) protoConf.AEADMethod = config.AEADMethod } - return &Listener{ + sl := &Listener{ listener: l, addr: config.Listen, protoConf: protoConf, - }, nil + } + + go func() { + for { + c, err := l.Accept() + if err != nil { + if sl.closed { + break + } + continue + } + go sl.handleConn(c, tunnel, additions...) + } + }() + + return sl, nil }