]> Cypherpunks repositories - gostls13.git/commitdiff
http: add test for recently fixed HTTP/1.0 keep-alive issue
authorAndrew Gerrand <adg@golang.org>
Tue, 8 Mar 2011 05:12:44 +0000 (16:12 +1100)
committerAndrew Gerrand <adg@golang.org>
Tue, 8 Mar 2011 05:12:44 +0000 (16:12 +1100)
R=bradfitzgo, rsc, bradfitzwork
CC=golang-dev
https://golang.org/cl/4235056

src/pkg/http/serve_test.go

index 86d64bdbb91651ad1b8c1cabdebc31c29c87331d..40ad68151e1d4b47d57770eb09f58fe8cf6516ec 100644 (file)
@@ -365,3 +365,44 @@ func TestIdentityResponse(t *testing.T) {
                        expectedSuffix, string(got))
        }
 }
+
+// TestServeHTTP10Close verifies that HTTP/1.0 requests won't be kept alive.
+func TestServeHTTP10Close(t *testing.T) {
+       s := httptest.NewServer(HandlerFunc(func(w ResponseWriter, r *Request) {
+               ServeFile(w, r, "testdata/file")
+       }))
+       defer s.Close()
+
+       conn, err := net.Dial("tcp", "", s.Listener.Addr().String())
+       if err != nil {
+               t.Fatal("dial error:", err)
+       }
+       defer conn.Close()
+
+       _, err = fmt.Fprint(conn, "GET / HTTP/1.0\r\n\r\n")
+       if err != nil {
+               t.Fatal("print error:", err)
+       }
+
+       r := bufio.NewReader(conn)
+       _, err = ReadResponse(r, "GET")
+       if err != nil {
+               t.Fatal("ReadResponse error:", err)
+       }
+
+       success := make(chan bool)
+       go func() {
+               select {
+               case <-time.After(5e9):
+                       t.Fatal("body not closed after 5s")
+               case <-success:
+               }
+       }()
+
+       _, err = ioutil.ReadAll(r)
+       if err != nil {
+               t.Fatal("read error:", err)
+       }
+
+       success <- true
+}