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