-
Notifications
You must be signed in to change notification settings - Fork 18.3k
Closed
Labels
Milestone
Description
Noticed at http://build.golang.org/log/c4295893036b8f63339f2fdcfa6a7f052edbdfa4
--- FAIL: TestTransportHeadChunkedResponse-4 (0.02s)
transport_test.go:611: ip/ports differed between head requests: "127.0.0.1:54643" vs "127.0.0.1:54644"
FAIL
FAIL net/http 10.889s
The test is simply:
defer afterTest(t)
ts := httptest.NewServer(HandlerFunc(func(w ResponseWriter, r *Request) {
if r.Method != "HEAD" {
panic("expected HEAD; got " + r.Method)
}
w.Header().Set("Transfer-Encoding", "chunked") // client should ignore
w.Header().Set("x-client-ipport", r.RemoteAddr)
w.WriteHeader(200)
}))
defer ts.Close()
tr := &Transport{DisableKeepAlives: false}
c := &Client{Transport: tr}
res1, err := c.Head(ts.URL)
if err != nil {
t.Fatalf("request 1 error: %v", err)
}
res2, err := c.Head(ts.URL)
if err != nil {
t.Fatalf("request 2 error: %v", err)
}
if v1, v2 := res1.Header.Get("x-client-ipport"), res2.Header.Get("x-client-ipport"); v1 != v2 {
t.Errorf("ip/ports differed between head requests: %q vs %q", v1, v2)
}
}
Perhaps the first Head returns but the second Head call starts before the background Transport goroutines get scheduled and register that the connection is idle.