From 3c4c01eae2bc8e0adaedfd3c417472ec734eebbd Mon Sep 17 00:00:00 2001 From: Julien Pivotto Date: Thu, 30 Jan 2020 22:51:19 +0100 Subject: [PATCH] Fix race in Query Log Test (#6727) A data race can happen if we run t.Log after the test t is done -- which in this case is highly possible because of the use of subtests and the fact that we call t.Log in a goroutine. Signed-off-by: Julien Pivotto --- cmd/prometheus/query_log_test.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/cmd/prometheus/query_log_test.go b/cmd/prometheus/query_log_test.go index 81a5040ab..2dd1bac68 100644 --- a/cmd/prometheus/query_log_test.go +++ b/cmd/prometheus/query_log_test.go @@ -26,6 +26,7 @@ import ( "path/filepath" "runtime" "strconv" + "sync" "testing" "time" @@ -244,9 +245,15 @@ func (p *queryLogTest) run(t *testing.T) { // Log stderr in case of failure. stderr, err := prom.StderrPipe() testutil.Ok(t, err) + + // We use a WaitGroup to avoid calling t.Log after the test is done. + var wg sync.WaitGroup + wg.Add(1) + defer wg.Wait() go func() { slurp, _ := ioutil.ReadAll(stderr) t.Log(string(slurp)) + wg.Done() }() testutil.Ok(t, prom.Start())