Explicit sync with test server to avoid races
From
516f0d1c90
"Note that we use a channel send here and not a close.
The race detector doesn't know that we're waiting for a timeout
and thinks that the waitgroup inside httptest.Server is added to
concurrently with us closing it. If we timed out immediately, we could close
the testserver before we entered the handler. We're not timing out immediately
and there's no way we would be done before we entered the handler, but the
race detector doesn't know this, so synchronize explicitly.
pull/3863/head
parent
0b4a55ded6
commit
55d71a075c
|
@ -498,13 +498,12 @@ func TestBatchPoints_Normal(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestClient_Timeout(t *testing.T) {
|
||||
done := make(chan bool)
|
||||
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
time.Sleep(1 * time.Second)
|
||||
var data client.Response
|
||||
w.WriteHeader(http.StatusOK)
|
||||
_ = json.NewEncoder(w).Encode(data)
|
||||
<-done
|
||||
}))
|
||||
defer ts.Close()
|
||||
defer func() { done <- true }()
|
||||
|
||||
u, _ := url.Parse(ts.URL)
|
||||
config := client.Config{URL: *u, Timeout: 500 * time.Millisecond}
|
||||
|
@ -520,10 +519,29 @@ func TestClient_Timeout(t *testing.T) {
|
|||
} else if !strings.Contains(err.Error(), "request canceled") {
|
||||
t.Fatalf("unexpected error. expected 'request canceled' error, got %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
confignotimeout := client.Config{URL: *u}
|
||||
cnotimeout, err := client.NewClient(confignotimeout)
|
||||
_, err = cnotimeout.Query(query)
|
||||
func TestClient_NoTimeout(t *testing.T) {
|
||||
if testing.Short() {
|
||||
t.Skip("skipping in short mode")
|
||||
}
|
||||
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
time.Sleep(1 * time.Second)
|
||||
var data client.Response
|
||||
w.WriteHeader(http.StatusOK)
|
||||
_ = json.NewEncoder(w).Encode(data)
|
||||
}))
|
||||
defer ts.Close()
|
||||
|
||||
u, _ := url.Parse(ts.URL)
|
||||
config := client.Config{URL: *u}
|
||||
c, err := client.NewClient(config)
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error. expected %v, actual %v", nil, err)
|
||||
}
|
||||
|
||||
query := client.Query{}
|
||||
_, err = c.Query(query)
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error. expected %v, actual %v", nil, err)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue