Skip to content

net/http: flaky TestTransportHeadChunkedResponse #11122

@bradfitz

Description

@bradfitz

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.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions