From 497ca9f6d64f9bb73048a960b4098309edcd2205 Mon Sep 17 00:00:00 2001 From: Lars Lehtonen Date: Fri, 15 Nov 2019 14:31:24 -0800 Subject: [PATCH] ssh/test: fix test goroutine error handling Adds an error channel to the test helper function testPortForward() to collect errors that happen inside a goroutine. Change-Id: I6db1d24b935fdfad637c971581ae80beaebd8a1f Reviewed-on: https://go-review.googlesource.com/c/crypto/+/207462 Run-TryBot: Han-Wen Nienhuys TryBot-Result: Gobot Gobot Reviewed-by: Brad Fitzpatrick --- ssh/test/forward_unix_test.go | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/ssh/test/forward_unix_test.go b/ssh/test/forward_unix_test.go index 2f5669a..4c44e57 100644 --- a/ssh/test/forward_unix_test.go +++ b/ssh/test/forward_unix_test.go @@ -8,6 +8,7 @@ package test import ( "bytes" + "fmt" "io" "io/ioutil" "math/rand" @@ -31,17 +32,21 @@ func testPortForward(t *testing.T, n, listenAddr string) { t.Fatal(err) } + errCh := make(chan error, 1) + go func() { + defer close(errCh) sshConn, err := sshListener.Accept() if err != nil { - t.Fatalf("listen.Accept failed: %v", err) + errCh <- fmt.Errorf("listen.Accept failed: %v", err) + return } + defer sshConn.Close() _, err = io.Copy(sshConn, sshConn) if err != nil && err != io.EOF { - t.Fatalf("ssh client copy: %v", err) + errCh <- fmt.Errorf("ssh client copy: %v", err) } - sshConn.Close() }() forwardedAddr := sshListener.Addr().String() @@ -76,6 +81,12 @@ func testPortForward(t *testing.T, n, listenAddr string) { t.Errorf("netConn.CloseWrite: %v", err) } + // Check for errors on server goroutine + err = <-errCh + if err != nil { + t.Fatalf("server: %v", err) + } + read := <-readChan if len(sent) != len(read) {