| // 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" | |
| "testing" | |
| ) | |
| type respWriteTest struct { | |
| Resp Response | |
| Raw string | |
| } | |
| var respWriteTests = []respWriteTest{ | |
| // HTTP/1.0, identity coding; no trailer | |
| respWriteTest{ | |
| Response{ | |
| StatusCode: 503, | |
| ProtoMajor: 1, | |
| ProtoMinor: 0, | |
| RequestMethod: "GET", | |
| Header: map[string]string{}, | |
| Body: 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. | |
| respWriteTest{ | |
| Response{ | |
| StatusCode: 200, | |
| ProtoMajor: 1, | |
| ProtoMinor: 0, | |
| RequestMethod: "GET", | |
| Header: map[string]string{}, | |
| Body: nopCloser{bytes.NewBufferString("abcdef")}, | |
| ContentLength: -1, | |
| }, | |
| "HTTP/1.0 200 OK\r\n" + | |
| "\r\n" + | |
| "abcdef", | |
| }, | |
| // HTTP/1.1, chunked coding; empty trailer; close | |
| respWriteTest{ | |
| Response{ | |
| StatusCode: 200, | |
| ProtoMajor: 1, | |
| ProtoMinor: 1, | |
| RequestMethod: "GET", | |
| Header: map[string]string{}, | |
| Body: 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", | |
| }, | |
| } | |
| 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%s\nGot:\n%s\n", i, tt.Raw, sraw) | |
| continue | |
| } | |
| } | |
| } |