]> Cypherpunks repositories - gostls13.git/commitdiff
http: add a disabled failing test for Issue 2357
authorBrad Fitzpatrick <bradfitz@golang.org>
Wed, 9 Nov 2011 16:12:26 +0000 (08:12 -0800)
committerBrad Fitzpatrick <bradfitz@golang.org>
Wed, 9 Nov 2011 16:12:26 +0000 (08:12 -0800)
R=golang-dev, rsc
CC=golang-dev
https://golang.org/cl/5372044

src/pkg/net/http/serve_test.go

index e278396091d590c98575de12e305cb26b07943bd..ebee766817d93ce88aefe8752db753499cee7e74 100644 (file)
@@ -1077,6 +1077,31 @@ func TestClientWriteShutdown(t *testing.T) {
        }
 }
 
+// Tests that chunked server responses that write 1 byte at a time are
+// buffered before chunk headers are added, not after chunk headers.
+func TestServerBufferedChunking(t *testing.T) {
+       if true {
+               t.Logf("Skipping known broken test; see Issue 2357")
+               return
+       }
+       conn := new(testConn)
+       conn.readBuf.Write([]byte("GET / HTTP/1.1\r\n\r\n"))
+       done := make(chan bool)
+       ls := &oneConnListener{conn}
+       go Serve(ls, HandlerFunc(func(rw ResponseWriter, req *Request) {
+               defer close(done)
+               rw.Header().Set("Content-Type", "text/plain") // prevent sniffing, which buffers
+               rw.Write([]byte{'x'})
+               rw.Write([]byte{'y'})
+               rw.Write([]byte{'z'})
+       }))
+       <-done
+       if !bytes.HasSuffix(conn.writeBuf.Bytes(), []byte("\r\n\r\n3\r\nxyz\r\n0\r\n\r\n")) {
+               t.Errorf("response didn't end with a single 3 byte 'xyz' chunk; got:\n%q",
+                       conn.writeBuf.Bytes())
+       }
+}
+
 // goTimeout runs f, failing t if f takes more than ns to complete.
 func goTimeout(t *testing.T, ns int64, f func()) {
        ch := make(chan bool, 2)