@@ -13,7 +13,6 @@ import (
13
13
"github.com/pion/udp"
14
14
"github.com/stretchr/testify/assert"
15
15
"github.com/stretchr/testify/require"
16
- "golang.org/x/xerrors"
17
16
18
17
"github.com/coder/coder/v2/agent"
19
18
"github.com/coder/coder/v2/agent/agenttest"
@@ -161,7 +160,7 @@ func TestPortForward(t *testing.T) {
161
160
inv .Stdout = pty .Output ()
162
161
inv .Stderr = pty .Output ()
163
162
164
- iNet := newInProcNet ()
163
+ iNet := testutil . NewInProcNet ()
165
164
inv .Net = iNet
166
165
ctx , cancel := context .WithTimeout (context .Background (), testutil .WaitLong )
167
166
defer cancel ()
@@ -177,10 +176,10 @@ func TestPortForward(t *testing.T) {
177
176
// sync.
178
177
dialCtx , dialCtxCancel := context .WithTimeout (ctx , testutil .WaitShort )
179
178
defer dialCtxCancel ()
180
- c1 , err := iNet .dial (dialCtx , addr { c .network , c .localAddress [0 ]} )
179
+ c1 , err := iNet .Dial (dialCtx , testutil . NewAddr ( c .network , c .localAddress [0 ]) )
181
180
require .NoError (t , err , "open connection 1 to 'local' listener" )
182
181
defer c1 .Close ()
183
- c2 , err := iNet .dial (dialCtx , addr { c .network , c .localAddress [0 ]} )
182
+ c2 , err := iNet .Dial (dialCtx , testutil . NewAddr ( c .network , c .localAddress [0 ]) )
184
183
require .NoError (t , err , "open connection 2 to 'local' listener" )
185
184
defer c2 .Close ()
186
185
testDial (t , c2 )
@@ -218,7 +217,7 @@ func TestPortForward(t *testing.T) {
218
217
inv .Stdout = pty .Output ()
219
218
inv .Stderr = pty .Output ()
220
219
221
- iNet := newInProcNet ()
220
+ iNet := testutil . NewInProcNet ()
222
221
inv .Net = iNet
223
222
ctx , cancel := context .WithTimeout (context .Background (), testutil .WaitLong )
224
223
defer cancel ()
@@ -232,10 +231,10 @@ func TestPortForward(t *testing.T) {
232
231
// then test them out of order.
233
232
dialCtx , dialCtxCancel := context .WithTimeout (ctx , testutil .WaitShort )
234
233
defer dialCtxCancel ()
235
- c1 , err := iNet .dial (dialCtx , addr { c .network , c .localAddress [0 ]} )
234
+ c1 , err := iNet .Dial (dialCtx , testutil . NewAddr ( c .network , c .localAddress [0 ]) )
236
235
require .NoError (t , err , "open connection 1 to 'local' listener 1" )
237
236
defer c1 .Close ()
238
- c2 , err := iNet .dial (dialCtx , addr { c .network , c .localAddress [1 ]} )
237
+ c2 , err := iNet .Dial (dialCtx , testutil . NewAddr ( c .network , c .localAddress [1 ]) )
239
238
require .NoError (t , err , "open connection 2 to 'local' listener 2" )
240
239
defer c2 .Close ()
241
240
testDial (t , c2 )
@@ -257,18 +256,15 @@ func TestPortForward(t *testing.T) {
257
256
t .Run ("All" , func (t * testing.T ) {
258
257
t .Parallel ()
259
258
var (
260
- dials = []addr {}
259
+ dials = []testutil. Addr {}
261
260
flags = []string {}
262
261
)
263
262
264
263
// Start listeners and populate arrays with the cases.
265
264
for _ , c := range cases {
266
265
p := setupTestListener (t , c .setupRemote (t ))
267
266
268
- dials = append (dials , addr {
269
- network : c .network ,
270
- addr : c .localAddress [0 ],
271
- })
267
+ dials = append (dials , testutil .NewAddr (c .network , c .localAddress [0 ]))
272
268
flags = append (flags , fmt .Sprintf (c .flag [0 ], p ))
273
269
}
274
270
@@ -279,7 +275,7 @@ func TestPortForward(t *testing.T) {
279
275
pty := ptytest .New (t ).Attach (inv )
280
276
inv .Stderr = pty .Output ()
281
277
282
- iNet := newInProcNet ()
278
+ iNet := testutil . NewInProcNet ()
283
279
inv .Net = iNet
284
280
ctx , cancel := context .WithTimeout (context .Background (), testutil .WaitLong )
285
281
defer cancel ()
@@ -296,7 +292,7 @@ func TestPortForward(t *testing.T) {
296
292
)
297
293
defer dialCtxCancel ()
298
294
for i , a := range dials {
299
- c , err := iNet .dial (dialCtx , a )
295
+ c , err := iNet .Dial (dialCtx , a )
300
296
require .NoErrorf (t , err , "open connection %v to 'local' listener %v" , i + 1 , i + 1 )
301
297
t .Cleanup (func () {
302
298
_ = c .Close ()
@@ -340,7 +336,7 @@ func TestPortForward(t *testing.T) {
340
336
inv .Stdout = pty .Output ()
341
337
inv .Stderr = pty .Output ()
342
338
343
- iNet := newInProcNet ()
339
+ iNet := testutil . NewInProcNet ()
344
340
inv .Net = iNet
345
341
346
342
// listen on port 5555 on IPv6 so it's busy when we try to port forward
@@ -361,7 +357,7 @@ func TestPortForward(t *testing.T) {
361
357
// Test IPv4 still works
362
358
dialCtx , dialCtxCancel := context .WithTimeout (ctx , testutil .WaitShort )
363
359
defer dialCtxCancel ()
364
- c1 , err := iNet .dial (dialCtx , addr { "tcp" , "127.0.0.1:5555" } )
360
+ c1 , err := iNet .Dial (dialCtx , testutil . NewAddr ( "tcp" , "127.0.0.1:5555" ) )
365
361
require .NoError (t , err , "open connection 1 to 'local' listener" )
366
362
defer c1 .Close ()
367
363
testDial (t , c1 )
@@ -473,95 +469,3 @@ func assertWritePayload(t *testing.T, w io.Writer, payload []byte) {
473
469
assert .NoError (t , err , "write payload" )
474
470
assert .Equal (t , len (payload ), n , "payload length does not match" )
475
471
}
476
-
477
- type addr struct {
478
- network string
479
- addr string
480
- }
481
-
482
- func (a addr ) Network () string {
483
- return a .network
484
- }
485
-
486
- func (a addr ) Address () string {
487
- return a .addr
488
- }
489
-
490
- func (a addr ) String () string {
491
- return a .network + "|" + a .addr
492
- }
493
-
494
- type inProcNet struct {
495
- sync.Mutex
496
-
497
- listeners map [addr ]* inProcListener
498
- }
499
-
500
- type inProcListener struct {
501
- c chan net.Conn
502
- n * inProcNet
503
- a addr
504
- o sync.Once
505
- }
506
-
507
- func newInProcNet () * inProcNet {
508
- return & inProcNet {listeners : make (map [addr ]* inProcListener )}
509
- }
510
-
511
- func (n * inProcNet ) Listen (network , address string ) (net.Listener , error ) {
512
- a := addr {network , address }
513
- n .Lock ()
514
- defer n .Unlock ()
515
- if _ , ok := n .listeners [a ]; ok {
516
- return nil , xerrors .New ("busy" )
517
- }
518
- l := newInProcListener (n , a )
519
- n .listeners [a ] = l
520
- return l , nil
521
- }
522
-
523
- func (n * inProcNet ) dial (ctx context.Context , a addr ) (net.Conn , error ) {
524
- n .Lock ()
525
- defer n .Unlock ()
526
- l , ok := n .listeners [a ]
527
- if ! ok {
528
- return nil , xerrors .Errorf ("nothing listening on %s" , a )
529
- }
530
- x , y := net .Pipe ()
531
- select {
532
- case <- ctx .Done ():
533
- return nil , ctx .Err ()
534
- case l .c <- x :
535
- return y , nil
536
- }
537
- }
538
-
539
- func newInProcListener (n * inProcNet , a addr ) * inProcListener {
540
- return & inProcListener {
541
- c : make (chan net.Conn ),
542
- n : n ,
543
- a : a ,
544
- }
545
- }
546
-
547
- func (l * inProcListener ) Accept () (net.Conn , error ) {
548
- c , ok := <- l .c
549
- if ! ok {
550
- return nil , net .ErrClosed
551
- }
552
- return c , nil
553
- }
554
-
555
- func (l * inProcListener ) Close () error {
556
- l .o .Do (func () {
557
- l .n .Lock ()
558
- defer l .n .Unlock ()
559
- delete (l .n .listeners , l .a )
560
- close (l .c )
561
- })
562
- return nil
563
- }
564
-
565
- func (l * inProcListener ) Addr () net.Addr {
566
- return l .a
567
- }
0 commit comments