mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			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)
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 |