Skip to content

Commit 1267cc6

Browse files
committed
test: add client-server connect tests
1 parent b0b1b90 commit 1267cc6

2 files changed

Lines changed: 176 additions & 1 deletion

File tree

.golangci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,6 @@ linters:
8383
- tagliatelle
8484
- testifylint
8585
- testpackage
86-
- tparallel
8786
- unconvert
8887
- unparam
8988
- usestdlibvars
@@ -95,3 +94,4 @@ linters:
9594
disable:
9695
- unused
9796
- contextcheck
97+
- tparallel

pair_client_server_test.go

Lines changed: 175 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,175 @@
1+
package socksgo_test
2+
3+
import (
4+
"net/http"
5+
"testing"
6+
"time"
7+
8+
"github.com/asciimoth/bufpool"
9+
socksgo "github.com/asciimoth/socksgo"
10+
)
11+
12+
/*
13+
TODO:
14+
- Bind
15+
- Mbind
16+
- UDP Assoc dial
17+
- USP Assoc listen
18+
- x2 for UDP Tun
19+
- Resolve, ResolvePtr with custom resolver
20+
*/
21+
22+
func runClientHttp(t *testing.T, srv string, urls []string) {
23+
socks, err := socksgo.ClientFromURL(srv)
24+
if err != nil {
25+
t.Fatal()
26+
}
27+
transport := &http.Transport{
28+
DialContext: socks.Dial,
29+
MaxIdleConns: 100,
30+
IdleConnTimeout: 60 * time.Second,
31+
TLSHandshakeTimeout: 60 * time.Second,
32+
}
33+
client := &http.Client{
34+
Transport: transport,
35+
Timeout: 60 * time.Second,
36+
}
37+
for _, url := range urls {
38+
var req *http.Request
39+
req, err = http.NewRequest("GET", url, nil) //nolint
40+
if err != nil {
41+
continue
42+
}
43+
resp, err := client.Do(req)
44+
if err == nil {
45+
_ = resp.Body.Close()
46+
break
47+
}
48+
}
49+
if err != nil {
50+
t.Fatal(err)
51+
}
52+
}
53+
54+
func runClients45Http(
55+
t *testing.T, addr string, urls []string, tls, ws bool,
56+
) {
57+
postfix := ""
58+
if tls {
59+
if ws {
60+
postfix = "+wss"
61+
} else {
62+
postfix = "+tls"
63+
}
64+
} else {
65+
if ws {
66+
postfix = "+ws"
67+
}
68+
}
69+
t.Run("group", func(t *testing.T) {
70+
t.Run("socks4", func(t *testing.T) {
71+
t.Parallel()
72+
runClientHttp(t, "socks4"+postfix+"://"+addr, urls)
73+
})
74+
t.Run("socks4 user", func(t *testing.T) {
75+
t.Parallel()
76+
runClientHttp(t, "socks4"+postfix+"://user@"+addr, urls)
77+
})
78+
t.Run("socks4a", func(t *testing.T) {
79+
t.Parallel()
80+
runClientHttp(t, "socks4a"+postfix+"://"+addr, urls)
81+
})
82+
t.Run("socks4a user", func(t *testing.T) {
83+
t.Parallel()
84+
runClientHttp(t, "socks4a"+postfix+"://user@"+addr, urls)
85+
})
86+
t.Run("socks5", func(t *testing.T) {
87+
t.Parallel()
88+
runClientHttp(t, "socks5"+postfix+"://"+addr, urls)
89+
})
90+
t.Run("socks5 pass", func(t *testing.T) {
91+
t.Parallel()
92+
runClientHttp(t, "socks5"+postfix+"://user:pass@"+addr, urls)
93+
})
94+
})
95+
}
96+
97+
func TestClientServerConnect(t *testing.T) {
98+
t.Parallel()
99+
100+
pool := bufpool.NewTestDebugPool(t)
101+
pool.OnLog = nil // Too verbose
102+
defer pool.Close()
103+
104+
cfg := GetEnvConfig()
105+
106+
cancel, addr, err := runTCPServer(&socksgo.Server{
107+
Pool: pool,
108+
}, cfg.Host)
109+
if err != nil {
110+
t.Fatal(err)
111+
}
112+
defer cancel()
113+
114+
runClients45Http(t, addr.String(), cfg.CurlURLs, false, false)
115+
}
116+
117+
func TestClientServerTLSConnect(t *testing.T) {
118+
t.Parallel()
119+
120+
pool := bufpool.NewTestDebugPool(t)
121+
pool.OnLog = nil // Too verbose
122+
defer pool.Close()
123+
124+
cfg := GetEnvConfig()
125+
126+
cancel, addr, err := runTLSServer(&socksgo.Server{
127+
Pool: pool,
128+
}, cfg.Host)
129+
if err != nil {
130+
t.Fatal(err)
131+
}
132+
defer cancel()
133+
134+
runClients45Http(t, addr.String(), cfg.CurlURLs, true, false)
135+
}
136+
137+
func TestClientWSServerConnect(t *testing.T) {
138+
t.Parallel()
139+
140+
pool := bufpool.NewTestDebugPool(t)
141+
pool.OnLog = nil // Too verbose
142+
defer pool.Close()
143+
144+
cfg := GetEnvConfig()
145+
146+
cancel, addr, err := runWSServer(&socksgo.Server{
147+
Pool: pool,
148+
}, cfg.Host, false)
149+
if err != nil {
150+
t.Fatal(err)
151+
}
152+
defer cancel()
153+
154+
runClients45Http(t, addr.String(), cfg.CurlURLs, false, true)
155+
}
156+
157+
func TestClientWSSServerConnect(t *testing.T) {
158+
t.Parallel()
159+
160+
pool := bufpool.NewTestDebugPool(t)
161+
pool.OnLog = nil // Too verbose
162+
defer pool.Close()
163+
164+
cfg := GetEnvConfig()
165+
166+
cancel, addr, err := runWSServer(&socksgo.Server{
167+
Pool: pool,
168+
}, cfg.Host, true)
169+
if err != nil {
170+
t.Fatal(err)
171+
}
172+
defer cancel()
173+
174+
runClients45Http(t, addr.String(), cfg.CurlURLs, true, true)
175+
}

0 commit comments

Comments
 (0)