diff options
| author | Brad Fitzpatrick <bradfitz@golang.org> | 2015-10-27 18:30:20 +0000 |
|---|---|---|
| committer | Brad Fitzpatrick <bradfitz@golang.org> | 2015-10-27 21:18:04 +0000 |
| commit | d3f88ce06c80a066cebf7239d6189424b1ae20cd (patch) | |
| tree | 1a6fa875ce5a48ecdb2029cd4281251f0c9d267f /src/net/http/httptest/server_test.go | |
| parent | e243d242d750f19cd1c3aefa7da1ad238f21502e (diff) | |
| download | go-git-d3f88ce06c80a066cebf7239d6189424b1ae20cd.tar.gz | |
net/http/httptest: close conns in StateNew on Server close
This part got dropped when we were debating between two solutions
in https://golang.org/cl/15151
Fixes #13032
Change-Id: I820b94f6c0c102ccf9342abf957328ea01f49a26
Reviewed-on: https://go-review.googlesource.com/16313
Reviewed-by: Austin Clements <austin@google.com>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Diffstat (limited to 'src/net/http/httptest/server_test.go')
| -rw-r--r-- | src/net/http/httptest/server_test.go | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/net/http/httptest/server_test.go b/src/net/http/httptest/server_test.go index 90901ceb76..6ffc671e57 100644 --- a/src/net/http/httptest/server_test.go +++ b/src/net/http/httptest/server_test.go @@ -5,7 +5,9 @@ package httptest import ( + "bufio" "io/ioutil" + "net" "net/http" "testing" ) @@ -54,3 +56,31 @@ func TestGetAfterClose(t *testing.T) { t.Fatalf("Unexected response after close: %v, %v, %s", res.Status, res.Header, body) } } + +func TestServerCloseBlocking(t *testing.T) { + ts := NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.Write([]byte("hello")) + })) + dial := func() net.Conn { + c, err := net.Dial("tcp", ts.Listener.Addr().String()) + if err != nil { + t.Fatal(err) + } + return c + } + + // Keep one connection in StateNew (connected, but not sending anything) + cnew := dial() + defer cnew.Close() + + // Keep one connection in StateIdle (idle after a request) + cidle := dial() + defer cidle.Close() + cidle.Write([]byte("HEAD / HTTP/1.1\r\nHost: foo\r\n\r\n")) + _, err := http.ReadResponse(bufio.NewReader(cidle), nil) + if err != nil { + t.Fatal(err) + } + + ts.Close() // test we don't hang here forever. +} |
