mirror of
https://github.com/autc04/Retro68.git
synced 2024-12-11 03:52:59 +00:00
178 lines
4.0 KiB
Go
178 lines
4.0 KiB
Go
// Copyright 2016 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 httptest
|
|
|
|
import (
|
|
"crypto/tls"
|
|
"io"
|
|
"io/ioutil"
|
|
"net/http"
|
|
"net/url"
|
|
"reflect"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestNewRequest(t *testing.T) {
|
|
tests := [...]struct {
|
|
method, uri string
|
|
body io.Reader
|
|
|
|
want *http.Request
|
|
wantBody string
|
|
}{
|
|
// Empty method means GET:
|
|
0: {
|
|
method: "",
|
|
uri: "/",
|
|
body: nil,
|
|
want: &http.Request{
|
|
Method: "GET",
|
|
Host: "example.com",
|
|
URL: &url.URL{Path: "/"},
|
|
Header: http.Header{},
|
|
Proto: "HTTP/1.1",
|
|
ProtoMajor: 1,
|
|
ProtoMinor: 1,
|
|
RemoteAddr: "192.0.2.1:1234",
|
|
RequestURI: "/",
|
|
},
|
|
wantBody: "",
|
|
},
|
|
|
|
// GET with full URL:
|
|
1: {
|
|
method: "GET",
|
|
uri: "http://foo.com/path/%2f/bar/",
|
|
body: nil,
|
|
want: &http.Request{
|
|
Method: "GET",
|
|
Host: "foo.com",
|
|
URL: &url.URL{
|
|
Scheme: "http",
|
|
Path: "/path///bar/",
|
|
RawPath: "/path/%2f/bar/",
|
|
Host: "foo.com",
|
|
},
|
|
Header: http.Header{},
|
|
Proto: "HTTP/1.1",
|
|
ProtoMajor: 1,
|
|
ProtoMinor: 1,
|
|
RemoteAddr: "192.0.2.1:1234",
|
|
RequestURI: "http://foo.com/path/%2f/bar/",
|
|
},
|
|
wantBody: "",
|
|
},
|
|
|
|
// GET with full https URL:
|
|
2: {
|
|
method: "GET",
|
|
uri: "https://foo.com/path/",
|
|
body: nil,
|
|
want: &http.Request{
|
|
Method: "GET",
|
|
Host: "foo.com",
|
|
URL: &url.URL{
|
|
Scheme: "https",
|
|
Path: "/path/",
|
|
Host: "foo.com",
|
|
},
|
|
Header: http.Header{},
|
|
Proto: "HTTP/1.1",
|
|
ProtoMajor: 1,
|
|
ProtoMinor: 1,
|
|
RemoteAddr: "192.0.2.1:1234",
|
|
RequestURI: "https://foo.com/path/",
|
|
TLS: &tls.ConnectionState{
|
|
Version: tls.VersionTLS12,
|
|
HandshakeComplete: true,
|
|
ServerName: "foo.com",
|
|
},
|
|
},
|
|
wantBody: "",
|
|
},
|
|
|
|
// Post with known length
|
|
3: {
|
|
method: "POST",
|
|
uri: "/",
|
|
body: strings.NewReader("foo"),
|
|
want: &http.Request{
|
|
Method: "POST",
|
|
Host: "example.com",
|
|
URL: &url.URL{Path: "/"},
|
|
Header: http.Header{},
|
|
Proto: "HTTP/1.1",
|
|
ContentLength: 3,
|
|
ProtoMajor: 1,
|
|
ProtoMinor: 1,
|
|
RemoteAddr: "192.0.2.1:1234",
|
|
RequestURI: "/",
|
|
},
|
|
wantBody: "foo",
|
|
},
|
|
|
|
// Post with unknown length
|
|
4: {
|
|
method: "POST",
|
|
uri: "/",
|
|
body: struct{ io.Reader }{strings.NewReader("foo")},
|
|
want: &http.Request{
|
|
Method: "POST",
|
|
Host: "example.com",
|
|
URL: &url.URL{Path: "/"},
|
|
Header: http.Header{},
|
|
Proto: "HTTP/1.1",
|
|
ContentLength: -1,
|
|
ProtoMajor: 1,
|
|
ProtoMinor: 1,
|
|
RemoteAddr: "192.0.2.1:1234",
|
|
RequestURI: "/",
|
|
},
|
|
wantBody: "foo",
|
|
},
|
|
|
|
// OPTIONS *
|
|
5: {
|
|
method: "OPTIONS",
|
|
uri: "*",
|
|
want: &http.Request{
|
|
Method: "OPTIONS",
|
|
Host: "example.com",
|
|
URL: &url.URL{Path: "*"},
|
|
Header: http.Header{},
|
|
Proto: "HTTP/1.1",
|
|
ProtoMajor: 1,
|
|
ProtoMinor: 1,
|
|
RemoteAddr: "192.0.2.1:1234",
|
|
RequestURI: "*",
|
|
},
|
|
},
|
|
}
|
|
for i, tt := range tests {
|
|
got := NewRequest(tt.method, tt.uri, tt.body)
|
|
slurp, err := ioutil.ReadAll(got.Body)
|
|
if err != nil {
|
|
t.Errorf("%d. ReadAll: %v", i, err)
|
|
}
|
|
if string(slurp) != tt.wantBody {
|
|
t.Errorf("%d. Body = %q; want %q", i, slurp, tt.wantBody)
|
|
}
|
|
got.Body = nil // before DeepEqual
|
|
if !reflect.DeepEqual(got.URL, tt.want.URL) {
|
|
t.Errorf("%d. Request.URL mismatch:\n got: %#v\nwant: %#v", i, got.URL, tt.want.URL)
|
|
}
|
|
if !reflect.DeepEqual(got.Header, tt.want.Header) {
|
|
t.Errorf("%d. Request.Header mismatch:\n got: %#v\nwant: %#v", i, got.Header, tt.want.Header)
|
|
}
|
|
if !reflect.DeepEqual(got.TLS, tt.want.TLS) {
|
|
t.Errorf("%d. Request.TLS mismatch:\n got: %#v\nwant: %#v", i, got.TLS, tt.want.TLS)
|
|
}
|
|
if !reflect.DeepEqual(got, tt.want) {
|
|
t.Errorf("%d. Request mismatch:\n got: %#v\nwant: %#v", i, got, tt.want)
|
|
}
|
|
}
|
|
}
|