]> Cypherpunks repositories - gostls13.git/commit
cmd/go/internal/test: wrap os.Stdout always
authorAndrew Gerrand <adg@golang.org>
Tue, 19 Apr 2022 05:11:37 +0000 (15:11 +1000)
committerGopher Robot <gobot@golang.org>
Thu, 21 Apr 2022 00:45:18 +0000 (00:45 +0000)
commitab9d31da9e088a271e656120a3d99cd3b1103ab6
tree53650556a2aaee2726f2dcd330f72691defb34b4
parentebe1435fbb50bb82bfca53063e8daba4f870ec8d
cmd/go/internal/test: wrap os.Stdout always

There is an issue where 'go test' will hang after the tests complete if
a test starts a sub-process that does not exit (see #24050).

However, go test only exhibits that behavior when a package name is
explicitly passed as an argument. If 'go test' is invoked without any
package arguments then the package in the working directory is assumed,
however in that case (and only that case) os.Stdout is used as the test
process's cmd.Stdout, which does *not* cause 'go test' wait for the
sub-process to exit (see #23019).

This change wraps os.Stdout in an io.Writer struct in this case, hiding
the *os.File from the os/exec package, causing cmd.Wait to always wait
for the full output from the test process and any of its sub-processes.

In other words, this makes 'go test' exhibit the same behavior as
'go test .' (or 'go test ./...' and so on).

Update #23019
Update #24050

Change-Id: Ica09bf156f3b017f9a31aad91ed0f16a7837195b
Reviewed-on: https://go-review.googlesource.com/c/go/+/400877
Reviewed-by: Bryan Mills <bcmills@google.com>
Run-TryBot: Andrew Gerrand <adg@golang.org>
Auto-Submit: Andrew Gerrand <adg@golang.org>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Andrew Gerrand <adg@golang.org>
Reviewed-by: Ian Lance Taylor <iant@google.com>
src/cmd/go/internal/test/test.go
src/cmd/go/testdata/script/test_output_wait.txt [new file with mode: 0644]