Source File
httptest.go
Belonging Package
net/http/httptest
// 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
}
The pages are generated with Golds v0.4.9. (GOOS=linux GOARCH=amd64)