@@ -0,0 +1,42 @@
1+package main
2+
3+import (
4+ "bytes"
5+ "fmt"
6+ "net/http"
7+ "net/http/httptest"
8+ "testing"
9+ "time"
10+)
11+
12+func TestLoggingHandler_ServeHTTP(t *testing.T) {
13+ ts := time.Now()
14+
15+ tests := []struct {
16+ Format,
17+ ExpectedLogMessage string
18+ }{
19+ {defaultRequestLoggingFormat, fmt.Sprintf("127.0.0.1 - - [%s] test-server GET - \"/foo/bar\" HTTP/1.1 \"\" 200 4 0.000\n", ts.Format("02/Jan/2006:15:04:05 -0700"))},
20+ {"{{.RequestMethod}}", "GET\n"},
21+ }
22+
23+ for _, test := range tests {
24+ buf := bytes.NewBuffer(nil)
25+ handler := func(w http.ResponseWriter, req *http.Request) {
26+ w.Write([]byte("test"))
27+ }
28+
29+ h := LoggingHandler(buf, http.HandlerFunc(handler), true, test.Format)
30+
31+ r, _ := http.NewRequest("GET", "/foo/bar", nil)
32+ r.RemoteAddr = "127.0.0.1"
33+ r.Host = "test-server"
34+
35+ h.ServeHTTP(httptest.NewRecorder(), r)
36+
37+ actual := buf.String()
38+ if actual != test.ExpectedLogMessage {
39+ t.Errorf("Log message was\n%s\ninstead of expected \n%s", actual, test.ExpectedLogMessage)
40+ }
41+ }
42+}