@@ -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
- }