]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/cgo/internal/testplugin: simplify TestForkExec and log stderr output
authorBryan C. Mills <bcmills@google.com>
Tue, 8 Aug 2023 16:02:02 +0000 (12:02 -0400)
committerGopher Robot <gobot@golang.org>
Tue, 8 Aug 2023 17:51:44 +0000 (17:51 +0000)
This test used to run with a separate goroutine for timeout behavior,
presumably because it was difficult to set an appropriate timeout.

Now that the test is in cmd instead of misc, we can use
internal/testenv.Command, which makes adding the test timeout much
simpler and eliminates the need for the explicit goroutine.

For #61846.

Change-Id: I68ea09fcf2aa394bed1e900cf30ef7d143fa249f
Reviewed-on: https://go-review.googlesource.com/c/go/+/517095
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@google.com>
Run-TryBot: Bryan Mills <bcmills@google.com>
Auto-Submit: Bryan Mills <bcmills@google.com>

src/cmd/cgo/internal/testplugin/plugin_test.go

index 53ccc17a071c70cf58dd2fd87912801fbb710a18..22fa35512b875ee3ddbba82de38f84cda91856c7 100644 (file)
@@ -367,25 +367,16 @@ func TestForkExec(t *testing.T) {
        t.Parallel()
        goCmd(t, "build", "-o", "forkexec.exe", "./forkexec/main.go")
 
-       var cmd *exec.Cmd
-       done := make(chan int, 1)
-
-       go func() {
-               for i := 0; i < 100; i++ {
-                       cmd = exec.Command("./forkexec.exe", "1")
-                       err := cmd.Run()
-                       if err != nil {
-                               t.Errorf("running command failed: %v", err)
-                               break
+       for i := 0; i < 100; i++ {
+               cmd := testenv.Command(t, "./forkexec.exe", "1")
+               err := cmd.Run()
+               if err != nil {
+                       if ee, ok := err.(*exec.ExitError); ok && len(ee.Stderr) > 0 {
+                               t.Logf("stderr:\n%s", ee.Stderr)
                        }
+                       t.Errorf("running command failed: %v", err)
+                       break
                }
-               done <- 1
-       }()
-       select {
-       case <-done:
-       case <-time.After(5 * time.Minute):
-               cmd.Process.Kill()
-               t.Fatalf("subprocess hang")
        }
 }