From 145328ac9fd78e9bd33e4557b24671f07f784bc9 Mon Sep 17 00:00:00 2001 From: Frank Wessels Date: Thu, 8 Jun 2017 07:39:50 -0700 Subject: [PATCH] tests: Run select statement in separate goroutine (#4499) Instead of after the wg.Wait() so as to make sure that the 'earliest' of the two select case that becomes active is selected.. --- cmd/server-mux_test.go | 69 +++++++++++++++++++++++------------------- 1 file changed, 38 insertions(+), 31 deletions(-) diff --git a/cmd/server-mux_test.go b/cmd/server-mux_test.go index 6904fc0f8..31fb7f01a 100644 --- a/cmd/server-mux_test.go +++ b/cmd/server-mux_test.go @@ -309,34 +309,36 @@ func TestServerListenAndServePlain(t *testing.T) { // ListenAndServe in a goroutine, but we don't know when it's ready go func() { errc <- m.ListenAndServe("", "") }() - wg := &sync.WaitGroup{} - wg.Add(1) // Keep trying the server until it's accepting connections go func() { client := http.Client{Timeout: time.Millisecond * 10} - ok := false - for !ok { + for { res, _ := client.Get("http://" + addr) if res != nil && res.StatusCode == http.StatusOK { - ok = true + break } } - - wg.Done() }() + wg := &sync.WaitGroup{} + wg.Add(1) + go func() { + defer wg.Done() + select { + case err := <-errc: + if err != nil { + t.Fatal(err) + } + case <-wait: + return + } + }() + + // Wait until we get an error or wait closed wg.Wait() - // Block until we get an error or wait closed - select { - case err := <-errc: - if err != nil { - t.Fatal(err) - } - case <-wait: - m.Close() // Shutdown the ServerMux - return - } + // Shutdown the ServerMux + m.Close() } func TestServerListenAndServeTLS(t *testing.T) { @@ -389,12 +391,11 @@ func TestServerListenAndServeTLS(t *testing.T) { Timeout: time.Millisecond * 10, Transport: tr, } - okTLS := false // Keep trying the server until it's accepting connections - for !okTLS { + for { res, _ := client.Get("https://" + addr) if res != nil && res.StatusCode == http.StatusOK { - okTLS = true + break } } @@ -423,19 +424,25 @@ func TestServerListenAndServeTLS(t *testing.T) { wg.Done() }() - wg.Wait() - - // Block until we get an error or wait closed - select { - case err := <-errc: - if err != nil { - t.Error(err) + wg.Add(1) + go func() { + defer wg.Done() + select { + case err := <-errc: + if err != nil { + t.Error(err) + return + } + case <-wait: return } - case <-wait: - m.Close() // Shutdown the ServerMux - return - } + }() + + // Wait until we get an error or wait closed + wg.Wait() + + // Shutdown the ServerMux + m.Close() } // generateTestCert creates a cert and a key used for testing only