8039ca76a5
From-SVN: r171427
110 lines
2.3 KiB
Go
110 lines
2.3 KiB
Go
// Copyright 2010 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package http
|
|
|
|
import (
|
|
"bytes"
|
|
"io/ioutil"
|
|
"testing"
|
|
)
|
|
|
|
type respWriteTest struct {
|
|
Resp Response
|
|
Raw string
|
|
}
|
|
|
|
var respWriteTests = []respWriteTest{
|
|
// HTTP/1.0, identity coding; no trailer
|
|
{
|
|
Response{
|
|
StatusCode: 503,
|
|
ProtoMajor: 1,
|
|
ProtoMinor: 0,
|
|
RequestMethod: "GET",
|
|
Header: Header{},
|
|
Body: ioutil.NopCloser(bytes.NewBufferString("abcdef")),
|
|
ContentLength: 6,
|
|
},
|
|
|
|
"HTTP/1.0 503 Service Unavailable\r\n" +
|
|
"Content-Length: 6\r\n\r\n" +
|
|
"abcdef",
|
|
},
|
|
// Unchunked response without Content-Length.
|
|
{
|
|
Response{
|
|
StatusCode: 200,
|
|
ProtoMajor: 1,
|
|
ProtoMinor: 0,
|
|
RequestMethod: "GET",
|
|
Header: Header{},
|
|
Body: ioutil.NopCloser(bytes.NewBufferString("abcdef")),
|
|
ContentLength: -1,
|
|
},
|
|
"HTTP/1.0 200 OK\r\n" +
|
|
"\r\n" +
|
|
"abcdef",
|
|
},
|
|
// HTTP/1.1, chunked coding; empty trailer; close
|
|
{
|
|
Response{
|
|
StatusCode: 200,
|
|
ProtoMajor: 1,
|
|
ProtoMinor: 1,
|
|
RequestMethod: "GET",
|
|
Header: Header{},
|
|
Body: ioutil.NopCloser(bytes.NewBufferString("abcdef")),
|
|
ContentLength: 6,
|
|
TransferEncoding: []string{"chunked"},
|
|
Close: true,
|
|
},
|
|
|
|
"HTTP/1.1 200 OK\r\n" +
|
|
"Connection: close\r\n" +
|
|
"Transfer-Encoding: chunked\r\n\r\n" +
|
|
"6\r\nabcdef\r\n0\r\n\r\n",
|
|
},
|
|
|
|
// Header value with a newline character (Issue 914).
|
|
// Also tests removal of leading and trailing whitespace.
|
|
{
|
|
Response{
|
|
StatusCode: 204,
|
|
ProtoMajor: 1,
|
|
ProtoMinor: 1,
|
|
RequestMethod: "GET",
|
|
Header: Header{
|
|
"Foo": []string{" Bar\nBaz "},
|
|
},
|
|
Body: nil,
|
|
ContentLength: 0,
|
|
TransferEncoding: []string{"chunked"},
|
|
Close: true,
|
|
},
|
|
|
|
"HTTP/1.1 204 No Content\r\n" +
|
|
"Connection: close\r\n" +
|
|
"Foo: Bar Baz\r\n" +
|
|
"\r\n",
|
|
},
|
|
}
|
|
|
|
func TestResponseWrite(t *testing.T) {
|
|
for i := range respWriteTests {
|
|
tt := &respWriteTests[i]
|
|
var braw bytes.Buffer
|
|
err := tt.Resp.Write(&braw)
|
|
if err != nil {
|
|
t.Errorf("error writing #%d: %s", i, err)
|
|
continue
|
|
}
|
|
sraw := braw.String()
|
|
if sraw != tt.Raw {
|
|
t.Errorf("Test %d, expecting:\n%q\nGot:\n%q\n", i, tt.Raw, sraw)
|
|
continue
|
|
}
|
|
}
|
|
}
|