...
Run Format

Package httptest

import "net/http/httptest"
Overview
Index
Examples

Overview ▾

Package httptest provides utilities for HTTP testing.

Constants

DefaultRemoteAddr is the default remote address to return in RemoteAddr if an explicit DefaultRemoteAddr isn't set on ResponseRecorder.

const DefaultRemoteAddr = "1.2.3.4"

func NewRequest

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.

func NewRequest(method, target string, body io.Reader) *http.Request

type ResponseRecorder

ResponseRecorder is an implementation of http.ResponseWriter that records its mutations for later inspection in tests.

type ResponseRecorder struct {
        Code      int           // the HTTP response code from WriteHeader
        HeaderMap http.Header   // the HTTP response headers
        Body      *bytes.Buffer // if non-nil, the bytes.Buffer to append written data to
        Flushed   bool
        // contains filtered or unexported fields
}

Example

500 - something failed

func NewRecorder

NewRecorder returns an initialized ResponseRecorder.

func NewRecorder() *ResponseRecorder

func (*ResponseRecorder) Flush

Flush sets rw.Flushed to true.

func (rw *ResponseRecorder) Flush()

func (*ResponseRecorder) Header

Header returns the response headers.

func (rw *ResponseRecorder) Header() http.Header

func (*ResponseRecorder) Result

Result returns the response generated by the handler.

The returned Response will have at least its StatusCode, Header, Body, and optionally Trailer populated. More fields may be populated in the future, so callers should not DeepEqual the result in tests.

The Response.Header is a snapshot of the headers at the time of the first write call, or at the time of this call, if the handler never did a write.

Result must only be called after the handler has finished running.

func (rw *ResponseRecorder) Result() *http.Response

func (*ResponseRecorder) Write

Write always succeeds and writes to rw.Body, if not nil.

func (rw *ResponseRecorder) Write(buf []byte) (int, error)

func (*ResponseRecorder) WriteHeader

WriteHeader sets rw.Code. After it is called, changing rw.Header will not affect rw.HeaderMap.

func (rw *ResponseRecorder) WriteHeader(code int)

func (*ResponseRecorder) WriteString

WriteString always succeeds and writes to rw.Body, if not nil.

func (rw *ResponseRecorder) WriteString(str string) (int, error)

type Server

A Server is an HTTP server listening on a system-chosen port on the local loopback interface, for use in end-to-end HTTP tests.

type Server struct {
        URL      string // base URL of form http://ipaddr:port with no trailing slash
        Listener net.Listener

        // TLS is the optional TLS configuration, populated with a new config
        // after TLS is started. If set on an unstarted server before StartTLS
        // is called, existing fields are copied into the new config.
        TLS *tls.Config

        // Config may be changed after calling NewUnstartedServer and
        // before Start or StartTLS.
        Config *http.Server
        // contains filtered or unexported fields
}

Example

Hello, client

func NewServer

NewServer starts and returns a new Server. The caller should call Close when finished, to shut it down.

func NewServer(handler http.Handler) *Server

func NewTLSServer

NewTLSServer starts and returns a new Server using TLS. The caller should call Close when finished, to shut it down.

func NewTLSServer(handler http.Handler) *Server

func NewUnstartedServer

NewUnstartedServer returns a new Server but doesn't start it.

After changing its configuration, the caller should call Start or StartTLS.

The caller should call Close when finished, to shut it down.

func NewUnstartedServer(handler http.Handler) *Server

func (*Server) Close

Close shuts down the server and blocks until all outstanding requests on this server have completed.

func (s *Server) Close()

func (*Server) CloseClientConnections

CloseClientConnections closes any open HTTP connections to the test Server.

func (s *Server) CloseClientConnections()

func (*Server) Start

Start starts a server from NewUnstartedServer.

func (s *Server) Start()

func (*Server) StartTLS

StartTLS starts TLS on a server from NewUnstartedServer.

func (s *Server) StartTLS()