@@ -141,13 +141,16 @@ func TestPortForward(t *testing.T) {
141
141
},
142
142
}
143
143
144
- for _ ,c := range cases {//nolint:paralleltest // the `c := c` confuses the linter
144
+ //nolint:paralleltest
145
+ for _ ,c := range cases {
145
146
c := c
147
+ // Avoid parallel test here because setupLocal reserves
148
+ // a free open port which is not guaranteed to be free
149
+ // after the listener closes.
150
+ //nolint:paralleltest
146
151
t .Run (c .name ,func (t * testing.T ) {
147
- t .Parallel ()
148
-
152
+ //nolint:paralleltest
149
153
t .Run ("OnePort" ,func (t * testing.T ) {
150
- t .Parallel ()
151
154
var (
152
155
client = coderdtest .New (t ,& coderdtest.Options {IncludeProvisionerD :true })
153
156
user = coderdtest .CreateFirstUser (t ,client )
@@ -170,10 +173,9 @@ func TestPortForward(t *testing.T) {
170
173
cmd .SetOut (io .MultiWriter (buf ,os .Stderr ))
171
174
ctx ,cancel := context .WithCancel (context .Background ())
172
175
defer cancel ()
176
+ errC := make (chan error )
173
177
go func () {
174
- err := cmd .ExecuteContext (ctx )
175
- require .Error (t ,err )
176
- require .ErrorIs (t ,err ,context .Canceled )
178
+ errC <- cmd .ExecuteContext (ctx )
177
179
}()
178
180
waitForPortForwardReady (t ,buf )
179
181
@@ -188,10 +190,13 @@ func TestPortForward(t *testing.T) {
188
190
defer c2 .Close ()
189
191
testDial (t ,c2 )
190
192
testDial (t ,c1 )
193
+
194
+ err = <- errC
195
+ require .ErrorIs (t ,err ,context .Canceled )
191
196
})
192
197
198
+ //nolint:paralleltest
193
199
t .Run ("TwoPorts" ,func (t * testing.T ) {
194
- t .Parallel ()
195
200
var (
196
201
client = coderdtest .New (t ,& coderdtest.Options {IncludeProvisionerD :true })
197
202
user = coderdtest .CreateFirstUser (t ,client )
@@ -218,10 +223,9 @@ func TestPortForward(t *testing.T) {
218
223
cmd .SetOut (io .MultiWriter (buf ,os .Stderr ))
219
224
ctx ,cancel := context .WithCancel (context .Background ())
220
225
defer cancel ()
226
+ errC := make (chan error )
221
227
go func () {
222
- err := cmd .ExecuteContext (ctx )
223
- require .Error (t ,err )
224
- require .ErrorIs (t ,err ,context .Canceled )
228
+ errC <- cmd .ExecuteContext (ctx )
225
229
}()
226
230
waitForPortForwardReady (t ,buf )
227
231
@@ -236,13 +240,16 @@ func TestPortForward(t *testing.T) {
236
240
defer c2 .Close ()
237
241
testDial (t ,c2 )
238
242
testDial (t ,c1 )
243
+
244
+ err = <- errC
245
+ require .ErrorIs (t ,err ,context .Canceled )
239
246
})
240
247
})
241
248
}
242
249
243
250
// Test doing a TCP -> Unix forward.
251
+ //nolint:paralleltest
244
252
t .Run ("TCP2Unix" ,func (t * testing.T ) {
245
- t .Parallel ()
246
253
var (
247
254
client = coderdtest .New (t ,& coderdtest.Options {IncludeProvisionerD :true })
248
255
user = coderdtest .CreateFirstUser (t ,client )
@@ -273,10 +280,9 @@ func TestPortForward(t *testing.T) {
273
280
cmd .SetOut (io .MultiWriter (buf ,os .Stderr ))
274
281
ctx ,cancel := context .WithCancel (context .Background ())
275
282
defer cancel ()
283
+ errC := make (chan error )
276
284
go func () {
277
- err := cmd .ExecuteContext (ctx )
278
- require .Error (t ,err )
279
- require .ErrorIs (t ,err ,context .Canceled )
285
+ errC <- cmd .ExecuteContext (ctx )
280
286
}()
281
287
waitForPortForwardReady (t ,buf )
282
288
@@ -291,11 +297,14 @@ func TestPortForward(t *testing.T) {
291
297
defer c2 .Close ()
292
298
testDial (t ,c2 )
293
299
testDial (t ,c1 )
300
+
301
+ err = <- errC
302
+ require .ErrorIs (t ,err ,context .Canceled )
294
303
})
295
304
296
305
// Test doing TCP, UDP and Unix at the same time.
306
+ //nolint:paralleltest
297
307
t .Run ("All" ,func (t * testing.T ) {
298
- t .Parallel ()
299
308
var (
300
309
client = coderdtest .New (t ,& coderdtest.Options {IncludeProvisionerD :true })
301
310
user = coderdtest .CreateFirstUser (t ,client )
@@ -334,10 +343,9 @@ func TestPortForward(t *testing.T) {
334
343
cmd .SetOut (io .MultiWriter (buf ,os .Stderr ))
335
344
ctx ,cancel := context .WithCancel (context .Background ())
336
345
defer cancel ()
346
+ errC := make (chan error )
337
347
go func () {
338
- err := cmd .ExecuteContext (ctx )
339
- require .Error (t ,err )
340
- require .ErrorIs (t ,err ,context .Canceled )
348
+ errC <- cmd .ExecuteContext (ctx )
341
349
}()
342
350
waitForPortForwardReady (t ,buf )
343
351
@@ -359,6 +367,9 @@ func TestPortForward(t *testing.T) {
359
367
for i := len (conns )- 1 ;i >= 0 ;i -- {
360
368
testDial (t ,conns [i ])
361
369
}
370
+
371
+ err := <- errC
372
+ require .ErrorIs (t ,err ,context .Canceled )
362
373
})
363
374
}
364
375