mirror of
https://github.com/kataras/iris.git
synced 2025-01-23 10:41:03 +01:00
58 lines
1.1 KiB
Go
58 lines
1.1 KiB
Go
package client
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"io"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
)
|
|
|
|
// See "Handler" client option.
|
|
type handlerTransport struct {
|
|
handler http.Handler
|
|
}
|
|
|
|
// RoundTrip completes the http.RoundTripper interface.
|
|
// It can be used to test calls to a server's handler.
|
|
func (t *handlerTransport) RoundTrip(req *http.Request) (*http.Response, error) {
|
|
reqCopy := *req
|
|
|
|
if reqCopy.Proto == "" {
|
|
reqCopy.Proto = fmt.Sprintf("HTTP/%d.%d", reqCopy.ProtoMajor, reqCopy.ProtoMinor)
|
|
}
|
|
|
|
if reqCopy.Body != nil {
|
|
if reqCopy.ContentLength == -1 {
|
|
reqCopy.TransferEncoding = []string{"chunked"}
|
|
}
|
|
} else {
|
|
reqCopy.Body = io.NopCloser(bytes.NewReader(nil))
|
|
}
|
|
|
|
if reqCopy.RequestURI == "" {
|
|
reqCopy.RequestURI = reqCopy.URL.RequestURI()
|
|
}
|
|
|
|
recorder := httptest.NewRecorder()
|
|
|
|
t.handler.ServeHTTP(recorder, &reqCopy)
|
|
|
|
resp := http.Response{
|
|
Request: &reqCopy,
|
|
StatusCode: recorder.Code,
|
|
Status: http.StatusText(recorder.Code),
|
|
Header: recorder.Result().Header,
|
|
}
|
|
|
|
if recorder.Flushed {
|
|
resp.TransferEncoding = []string{"chunked"}
|
|
}
|
|
|
|
if recorder.Body != nil {
|
|
resp.Body = io.NopCloser(recorder.Body)
|
|
}
|
|
|
|
return &resp, nil
|
|
}
|