aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/net/http/export_test.go2
-rw-r--r--src/net/http/main_test.go1
-rw-r--r--src/net/http/transport.go5
-rw-r--r--src/net/http/transport_test.go10
4 files changed, 13 insertions, 5 deletions
diff --git a/src/net/http/export_test.go b/src/net/http/export_test.go
index 8a61e651dc..5d198f3f89 100644
--- a/src/net/http/export_test.go
+++ b/src/net/http/export_test.go
@@ -36,7 +36,7 @@ var (
Export_is408Message = is408Message
)
-const MaxWriteWaitBeforeConnReuse = maxWriteWaitBeforeConnReuse
+var MaxWriteWaitBeforeConnReuse = &maxWriteWaitBeforeConnReuse
func init() {
// We only want to pay for this cost during testing.
diff --git a/src/net/http/main_test.go b/src/net/http/main_test.go
index 1b2fa215ff..1e83ca3c0a 100644
--- a/src/net/http/main_test.go
+++ b/src/net/http/main_test.go
@@ -20,6 +20,7 @@ import (
var quietLog = log.New(io.Discard, "", 0)
func TestMain(m *testing.M) {
+ *http.MaxWriteWaitBeforeConnReuse = 60 * time.Minute
v := m.Run()
if v == 0 && goroutineLeaked() {
os.Exit(1)
diff --git a/src/net/http/transport.go b/src/net/http/transport.go
index 807cc8f0eb..8de63cdb88 100644
--- a/src/net/http/transport.go
+++ b/src/net/http/transport.go
@@ -2452,7 +2452,10 @@ func (pc *persistConn) writeLoop() {
// maxWriteWaitBeforeConnReuse is how long the a Transport RoundTrip
// will wait to see the Request's Body.Write result after getting a
// response from the server. See comments in (*persistConn).wroteRequest.
-const maxWriteWaitBeforeConnReuse = 50 * time.Millisecond
+//
+// In tests, we set this to a large value to avoid flakiness from inconsistent
+// recycling of connections.
+var maxWriteWaitBeforeConnReuse = 50 * time.Millisecond
// wroteRequest is a check before recycling a connection that the previous write
// (from writeLoop above) happened and was successful.
diff --git a/src/net/http/transport_test.go b/src/net/http/transport_test.go
index 268b0a4776..6f57629eff 100644
--- a/src/net/http/transport_test.go
+++ b/src/net/http/transport_test.go
@@ -3402,9 +3402,13 @@ func (c byteFromChanReader) Read(p []byte) (n int, err error) {
// questionable state.
// golang.org/issue/7569
func TestTransportNoReuseAfterEarlyResponse(t *testing.T) {
- run(t, testTransportNoReuseAfterEarlyResponse, []testMode{http1Mode})
+ run(t, testTransportNoReuseAfterEarlyResponse, []testMode{http1Mode}, testNotParallel)
}
func testTransportNoReuseAfterEarlyResponse(t *testing.T, mode testMode) {
+ defer func(d time.Duration) {
+ *MaxWriteWaitBeforeConnReuse = d
+ }(*MaxWriteWaitBeforeConnReuse)
+ *MaxWriteWaitBeforeConnReuse = 10 * time.Millisecond
var sconn struct {
sync.Mutex
c net.Conn
@@ -3631,13 +3635,13 @@ func testRetryRequestsOnError(t *testing.T, mode testMode) {
req := tc.req()
res, err := c.Do(req)
if err != nil {
- if time.Since(t0) < MaxWriteWaitBeforeConnReuse/2 {
+ if time.Since(t0) < *MaxWriteWaitBeforeConnReuse/2 {
mu.Lock()
got := logbuf.String()
mu.Unlock()
t.Fatalf("i=%d: Do = %v; log:\n%s", i, err, got)
}
- t.Skipf("connection likely wasn't recycled within %d, interfering with actual test; skipping", MaxWriteWaitBeforeConnReuse)
+ t.Skipf("connection likely wasn't recycled within %d, interfering with actual test; skipping", *MaxWriteWaitBeforeConnReuse)
}
res.Body.Close()
if res.Request != req {