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 provides utilities for HTTP testing.
package httptest

import (
	
	
	
	
	
	
)
NewRequest returns a new incoming server Request, suitable for passing to an http.Handler for testing. The target is the RFC 7230 "request-target": it may be either a path or an absolute URL. If target is an absolute URL, the host name from the URL is used. Otherwise, "example.com" is used. The TLS field is set to a non-nil dummy value if target has scheme "https". The Request.Proto is always HTTP/1.1. An empty method means "GET". The provided body may be nil. If the body is of type *bytes.Reader, *strings.Reader, or *bytes.Buffer, the Request.ContentLength is set. NewRequest panics on error for ease of use in testing, where a panic is acceptable. To generate a client HTTP request instead of a server request, see the NewRequest function in the net/http package.
func (,  string,  io.Reader) *http.Request {
	if  == "" {
		 = "GET"
	}
	,  := http.ReadRequest(bufio.NewReader(strings.NewReader( + " " +  + " HTTP/1.0\r\n\r\n")))
	if  != nil {
		panic("invalid NewRequest arguments; " + .Error())
	}
HTTP/1.0 was used above to avoid needing a Host field. Change it to 1.1 here.
	.Proto = "HTTP/1.1"
	.ProtoMinor = 1
	.Close = false

	if  != nil {
		switch v := .(type) {
		case *bytes.Buffer:
			.ContentLength = int64(.Len())
		case *bytes.Reader:
			.ContentLength = int64(.Len())
		case *strings.Reader:
			.ContentLength = int64(.Len())
		default:
			.ContentLength = -1
		}
		if ,  := .(io.ReadCloser);  {
			.Body = 
		} else {
			.Body = io.NopCloser()
		}
	}
192.0.2.0/24 is "TEST-NET" in RFC 5737 for use solely in documentation and example source code and should not be used publicly.
	.RemoteAddr = "192.0.2.1:1234"

	if .Host == "" {
		.Host = "example.com"
	}

	if strings.HasPrefix(, "https://") {
		.TLS = &tls.ConnectionState{
			Version:           tls.VersionTLS12,
			HandshakeComplete: true,
			ServerName:        .Host,
		}
	}

	return