From e0c7683f5afa4f7010395c2b77aaae6ad513f9c7 Mon Sep 17 00:00:00 2001 From: Yusuke Kuoka Date: Wed, 23 Sep 2020 22:47:25 +0900 Subject: [PATCH] Fix dead-lock while waiting for command output while in test --- main_test.go | 36 ++++++++++++++++++++++++++++-------- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/main_test.go b/main_test.go index 42e086a..8191367 100644 --- a/main_test.go +++ b/main_test.go @@ -10,6 +10,8 @@ import ( "strings" "testing" + "golang.org/x/sync/errgroup" + "github.com/google/go-cmp/cmp" ) @@ -257,17 +259,35 @@ func TestExamples(t *testing.T) { errWrite.Close() }() - outBuf := new(bytes.Buffer) - if _, err := outBuf.ReadFrom(outRead); err != nil { - t.Fatalf("unexpected error: %v", err) - } - out := outBuf.String() + var out, errOut string + + eg := &errgroup.Group{} + + eg.Go(func() error { + outBuf := new(bytes.Buffer) + if _, err := outBuf.ReadFrom(outRead); err != nil { + return fmt.Errorf("reading stdout: %w", err) + } + + out = outBuf.String() + + return nil + }) + + eg.Go(func() error { + errBuf := new(bytes.Buffer) + if _, err := errBuf.ReadFrom(errRead); err != nil { + return fmt.Errorf("reading stderr: %w", err) + } + + errOut = errBuf.String() + + return nil + }) - errBuf := new(bytes.Buffer) - if _, err := errBuf.ReadFrom(errRead); err != nil { + if err := eg.Wait(); err != nil { t.Fatalf("unexpected error: %v", err) } - errOut := errBuf.String() if tc.expectErr != "" { if err == nil {