From: Zeke Lu Date: Mon, 31 Oct 2022 17:18:32 +0000 (+0000) Subject: net/http: deflake TestCancelRequestWhenSharingConnection X-Git-Tag: go1.20rc1~496 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=e943dc5a8ccab90286d3882e5d13e9fa9516f243;p=gostls13.git net/http: deflake TestCancelRequestWhenSharingConnection The test sleeps for 1 millisecond to give the cancellation a moment to take effect. This is flaky because the request can finish before the cancellation of the context is seen. It's easy to verify by adding time.Sleep(2*time.Millisecond) after https://github.com/golang/go/blob/0a6c4c87404ecb018faf002919e5d5db04c69ee2/src/net/http/transport.go#L2619. With this modification, the test fails about 5 times out of 10 runs. The fix is easy. We just need to block the handler of the second request until this request is cancelled. I have verify that the updated test can uncover the issue fixed by CL 257818. Fixes #55226. Change-Id: I81575beef1a920a2ffaa5c6a5ca70a4008bd5f94 GitHub-Last-Rev: 99cb1c2eaed7839394adbb6bbcd4950cd4bfb6f3 GitHub-Pull-Request: golang/go#56500 Reviewed-on: https://go-review.googlesource.com/c/go/+/446676 Run-TryBot: Bryan Mills TryBot-Result: Gopher Robot Reviewed-by: Damien Neil Reviewed-by: Bryan Mills --- diff --git a/src/net/http/transport_test.go b/src/net/http/transport_test.go index cd31141e52..a581845516 100644 --- a/src/net/http/transport_test.go +++ b/src/net/http/transport_test.go @@ -6530,6 +6530,9 @@ func testCancelRequestWhenSharingConnection(t *testing.T, mode testMode) { if !errors.Is(err, context.Canceled) { t.Errorf("request 2: got err %v, want Canceled", err) } + + // Unblock the first request. + close(idlec) }() // Wait for the second request to arrive at the server, and then cancel @@ -6537,9 +6540,7 @@ func testCancelRequestWhenSharingConnection(t *testing.T, mode testMode) { r2c := <-reqc cancel() - // Give the cancellation a moment to take effect, and then unblock the first request. - time.Sleep(1 * time.Millisecond) - close(idlec) + <-idlec close(r2c) wg.Wait()