From ed8db3ca58a7b14832bf3d2de03aa1dedd560499 Mon Sep 17 00:00:00 2001 From: Michal Vyskocil Date: Mon, 12 Dec 2022 22:27:50 +0100 Subject: [PATCH] fix go vet warnings: call to (*T).Fatalf from a non-test goroutine The goroutine started from test must not call t.Fatal, but t.Error. Adds a sync.WaitGroup to make sure all goroutines have a chance to report an error before test stops. --- streaming_test.go | 13 +++++++++++-- streaming_ws_test.go | 22 ++++++++++++++++++---- 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/streaming_test.go b/streaming_test.go index fd61f9c..8bfe835 100644 --- a/streaming_test.go +++ b/streaming_test.go @@ -7,6 +7,7 @@ import ( "net/http" "net/http/httptest" "strings" + "sync" "testing" "time" ) @@ -29,11 +30,14 @@ event: delete data: 1234567 :thump `, largeContent)) + var wg sync.WaitGroup + wg.Add(1) go func() { + defer wg.Done() defer close(q) err := handleReader(q, r) if err != nil { - t.Fatalf("should not be fail: %v", err) + t.Errorf("should not be fail: %v", err) } }() var passUpdate, passUpdateLarge, passNotification, passDelete, passError bool @@ -69,6 +73,7 @@ data: 1234567 "update: %t, update (large): %t, notification: %t, delete: %t, error: %t", passUpdate, passUpdateLarge, passNotification, passDelete, passError) } + wg.Wait() } func TestStreaming(t *testing.T) { @@ -148,11 +153,14 @@ func TestDoStreaming(t *testing.T) { req = req.WithContext(ctx) q := make(chan Event) + var wg sync.WaitGroup + wg.Add(1) go func() { + defer wg.Done() defer close(q) c.doStreaming(req, q) if err != nil { - t.Fatalf("should not be fail: %v", err) + t.Errorf("should not be fail: %v", err) } }() var passError bool @@ -167,6 +175,7 @@ func TestDoStreaming(t *testing.T) { if !passError { t.Fatalf("have not passed through: error %t", passError) } + wg.Wait() } func TestStreamingUser(t *testing.T) { diff --git a/streaming_ws_test.go b/streaming_ws_test.go index 856702a..41fa1d5 100644 --- a/streaming_ws_test.go +++ b/streaming_ws_test.go @@ -4,6 +4,7 @@ import ( "context" "net/http" "net/http/httptest" + "sync" "testing" "time" @@ -151,12 +152,16 @@ func TestStreamingWS(t *testing.T) { if err != nil { t.Fatalf("should not be fail: %v", err) } + var wg sync.WaitGroup + wg.Add(1) go func() { + defer wg.Done() e := <-q if errorEvent, ok := e.(*ErrorEvent); !ok { - t.Fatalf("should be fail: %v", errorEvent.err) + t.Errorf("should be fail: %v", errorEvent.err) } }() + wg.Wait() } func TestHandleWS(t *testing.T) { @@ -183,10 +188,13 @@ func TestHandleWS(t *testing.T) { q := make(chan Event) client := NewClient(&Config{}).NewWSClient() + var wg sync.WaitGroup + wg.Add(1) go func() { + defer wg.Done() e := <-q if errorEvent, ok := e.(*ErrorEvent); !ok { - t.Fatalf("should be fail: %v", errorEvent.err) + t.Errorf("should be fail: %v", errorEvent.err) } }() err := client.handleWS(context.Background(), ":", q) @@ -196,10 +204,12 @@ func TestHandleWS(t *testing.T) { ctx, cancel := context.WithCancel(context.Background()) cancel() + wg.Add(1) go func() { + defer wg.Done() e := <-q if errorEvent, ok := e.(*ErrorEvent); !ok { - t.Fatalf("should be fail: %v", errorEvent.err) + t.Errorf("should be fail: %v", errorEvent.err) } }() err = client.handleWS(ctx, "ws://"+ts.Listener.Addr().String(), q) @@ -207,13 +217,17 @@ func TestHandleWS(t *testing.T) { t.Fatalf("should be fail: %v", err) } + wg.Add(1) go func() { + defer wg.Done() e := <-q if errorEvent, ok := e.(*ErrorEvent); !ok { - t.Fatalf("should be fail: %v", errorEvent.err) + t.Errorf("should be fail: %v", errorEvent.err) } }() client.handleWS(context.Background(), "ws://"+ts.Listener.Addr().String(), q) + + wg.Wait() } func TestDialRedirect(t *testing.T) {