5
5
"bytes"
6
6
"context"
7
7
"encoding/json"
8
+ "errors"
8
9
"fmt"
9
10
"io"
10
11
"math/rand"
@@ -324,7 +325,12 @@ func TestAgent_Session_EnvironmentVariables(t *testing.T) {
324
325
err = session .Start (command )
325
326
require .NoError (t ,err )
326
327
328
+ // Context is fine here since we're not doing a parallel subtest.
327
329
ctx := testutil .Context (t ,testutil .WaitLong )
330
+ go func () {
331
+ <- ctx .Done ()
332
+ _ = session .Close ()
333
+ }()
328
334
329
335
s := bufio .NewScanner (stdout )
330
336
out := make (chan string )
@@ -338,8 +344,6 @@ func TestAgent_Session_EnvironmentVariables(t *testing.T) {
338
344
}
339
345
})
340
346
341
- // Until we have gotten the first result, the shell may spit out some data.
342
- first := true
343
347
//nolint:paralleltest // These tests need to run sequentially.
344
348
for k ,partialV := range map [string ]string {
345
349
"CODER" :"true" ,// From the agent.
@@ -350,21 +354,17 @@ func TestAgent_Session_EnvironmentVariables(t *testing.T) {
350
354
} {
351
355
t .Run (k ,func (t * testing.T ) {
352
356
echoEnv (t ,stdin ,k )
353
- if first {
354
- for {
355
- s := testutil .RequireRecvCtx (ctx ,t ,out )
356
- t .Logf ("%s=%s" ,k ,s )
357
- s = strings .TrimSpace (s )
358
- if strings .Contains (s ,partialV ) {
359
- first = false
360
- return
361
- }
357
+ // Windows is unreliable, so keep scanning until we find a match.
358
+ for s .Scan () {
359
+ got := strings .TrimSpace (s .Text ())
360
+ t .Logf ("%s=%s" ,k ,got )
361
+ if strings .Contains (got ,partialV ) {
362
+ break
362
363
}
363
364
}
364
- s := testutil .RequireRecvCtx (ctx ,t ,out )
365
- t .Logf ("%s=%s" ,k ,s )
366
- s = strings .TrimSpace (s )
367
- require .Contains (t ,s ,partialV )
365
+ if err := s .Err ();! errors .Is (err ,io .EOF ) {
366
+ require .NoError (t ,err )
367
+ }
368
368
})
369
369
}
370
370
}