summaryrefslogtreecommitdiff
path: root/recorder.go
diff options
context:
space:
mode:
authorHorus32015-05-11 23:47:47 +0200
committerHorus32015-05-11 23:47:47 +0200
commit5986015358e5b7cf523122bbdb6831dccf7ca306 (patch)
tree6b0f5b5b8b80bef7f6a9f286298e8d06080cad84 /recorder.go
parent9c757388f1974b32a2f88cf36b709a160491baf8 (diff)
downloaduhttpd-5986015358e5b7cf523122bbdb6831dccf7ca306.tar.gz
Some fixes, shows 404 page on directory not found.
Diffstat (limited to 'recorder.go')
-rw-r--r--recorder.go72
1 files changed, 72 insertions, 0 deletions
diff --git a/recorder.go b/recorder.go
new file mode 100644
index 0000000..90ef1a7
--- /dev/null
+++ b/recorder.go
@@ -0,0 +1,72 @@
+package main
+
+/*
+ Copy from net/http/httptest
+ Please read there for the license.
+*/
+
+import (
+ "bytes"
+ "net/http"
+)
+
+// 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
+
+ wroteHeader bool
+}
+
+// NewRecorder returns an initialized ResponseRecorder.
+func NewRecorder() *ResponseRecorder {
+ return &ResponseRecorder{
+ HeaderMap: make(http.Header),
+ Body: new(bytes.Buffer),
+ Code: 200,
+ }
+}
+
+// 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"
+
+// Header returns the response headers.
+func (rw *ResponseRecorder) Header() http.Header {
+ m := rw.HeaderMap
+ if m == nil {
+ m = make(http.Header)
+ rw.HeaderMap = m
+ }
+ return m
+}
+
+// Write always succeeds and writes to rw.Body, if not nil.
+func (rw *ResponseRecorder) Write(buf []byte) (int, error) {
+ if !rw.wroteHeader {
+ rw.WriteHeader(200)
+ }
+ if rw.Body != nil {
+ rw.Body.Write(buf)
+ }
+ return len(buf), nil
+}
+
+// WriteHeader sets rw.Code.
+func (rw *ResponseRecorder) WriteHeader(code int) {
+ if !rw.wroteHeader {
+ rw.Code = code
+ }
+ rw.wroteHeader = true
+}
+
+// Flush sets rw.Flushed to true.
+func (rw *ResponseRecorder) Flush() {
+ if !rw.wroteHeader {
+ rw.WriteHeader(200)
+ }
+ rw.Flushed = true
+}