@@ -59,11 +59,13 @@ func init() {
5959}
6060
6161type TestTunnel struct {
62- HandleTCPConnFn func (conn net.Conn , metadata * C.Metadata )
63- HandleUDPPacketFn func (packet C.UDPPacket , metadata * C.Metadata )
64- NatTableFn func () C.NatTable
65- CloseFn func () error
66- DoTestFn func (t * testing.T , proxy C.ProxyAdapter )
62+ HandleTCPConnFn func (conn net.Conn , metadata * C.Metadata )
63+ HandleUDPPacketFn func (packet C.UDPPacket , metadata * C.Metadata )
64+ NatTableFn func () C.NatTable
65+ CloseFn func () error
66+ DoTestFn func (t * testing.T , proxy C.ProxyAdapter )
67+ DoSequentialTestFn func (t * testing.T , proxy C.ProxyAdapter )
68+ DoConcurrentTestFn func (t * testing.T , proxy C.ProxyAdapter )
6769}
6870
6971func (tt * TestTunnel ) HandleTCPConn (conn net.Conn , metadata * C.Metadata ) {
@@ -86,6 +88,14 @@ func (tt *TestTunnel) DoTest(t *testing.T, proxy C.ProxyAdapter) {
8688 tt .DoTestFn (t , proxy )
8789}
8890
91+ func (tt * TestTunnel ) DoSequentialTest (t * testing.T , proxy C.ProxyAdapter ) {
92+ tt .DoSequentialTestFn (t , proxy )
93+ }
94+
95+ func (tt * TestTunnel ) DoConcurrentTest (t * testing.T , proxy C.ProxyAdapter ) {
96+ tt .DoConcurrentTestFn (t , proxy )
97+ }
98+
8999type TestTunnelListener struct {
90100 ch chan net.Conn
91101 ctx context.Context
@@ -213,6 +223,40 @@ func NewHttpTestTunnel() *TestTunnel {
213223 }
214224 assert .Equal (t , httpData [:size ], data )
215225 }
226+
227+ sequentialTestFn := func (t * testing.T , proxy C.ProxyAdapter ) {
228+ // Sequential testing for debugging
229+ t .Run ("Sequential" , func (t * testing.T ) {
230+ testFn (t , proxy , "http" , len (httpData ))
231+ testFn (t , proxy , "https" , len (httpData ))
232+ })
233+ }
234+
235+ concurrentTestFn := func (t * testing.T , proxy C.ProxyAdapter ) {
236+ // Concurrent testing to detect stress
237+ t .Run ("Concurrent" , func (t * testing.T ) {
238+ wg := sync.WaitGroup {}
239+ num := len (httpData ) / 1024
240+ for i := 1 ; i <= num ; i ++ {
241+ i := i
242+ wg .Add (1 )
243+ go func () {
244+ testFn (t , proxy , "https" , i * 1024 )
245+ defer wg .Done ()
246+ }()
247+ }
248+ for i := 1 ; i <= num ; i ++ {
249+ i := i
250+ wg .Add (1 )
251+ go func () {
252+ testFn (t , proxy , "http" , i * 1024 )
253+ defer wg .Done ()
254+ }()
255+ }
256+ wg .Wait ()
257+ })
258+ }
259+
216260 tunnel := & TestTunnel {
217261 HandleTCPConnFn : func (conn net.Conn , metadata * C.Metadata ) {
218262 defer conn .Close ()
@@ -252,36 +296,11 @@ func NewHttpTestTunnel() *TestTunnel {
252296 },
253297 CloseFn : ln .Close ,
254298 DoTestFn : func (t * testing.T , proxy C.ProxyAdapter ) {
255-
256- // Sequential testing for debugging
257- t .Run ("Sequential" , func (t * testing.T ) {
258- testFn (t , proxy , "http" , len (httpData ))
259- testFn (t , proxy , "https" , len (httpData ))
260- })
261-
262- // Concurrent testing to detect stress
263- t .Run ("Concurrent" , func (t * testing.T ) {
264- wg := sync.WaitGroup {}
265- num := len (httpData ) / 1024
266- for i := 1 ; i <= num ; i ++ {
267- i := i
268- wg .Add (1 )
269- go func () {
270- testFn (t , proxy , "https" , i * 1024 )
271- defer wg .Done ()
272- }()
273- }
274- for i := 1 ; i <= num ; i ++ {
275- i := i
276- wg .Add (1 )
277- go func () {
278- testFn (t , proxy , "http" , i * 1024 )
279- defer wg .Done ()
280- }()
281- }
282- wg .Wait ()
283- })
299+ sequentialTestFn (t , proxy )
300+ concurrentTestFn (t , proxy )
284301 },
302+ DoSequentialTestFn : sequentialTestFn ,
303+ DoConcurrentTestFn : concurrentTestFn ,
285304 }
286305 return tunnel
287306}
0 commit comments