58 lines
1.5 KiB
Go
58 lines
1.5 KiB
Go
package middleware
|
|
|
|
import (
|
|
"bytes"
|
|
"log"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestLoggingRecordsStatusAndLogs(t *testing.T) {
|
|
originalOutput := log.Writer()
|
|
defer log.SetOutput(originalOutput)
|
|
|
|
var buf bytes.Buffer
|
|
log.SetOutput(&buf)
|
|
|
|
handler := Logging(true)(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
w.WriteHeader(http.StatusCreated)
|
|
_, _ = w.Write([]byte("ok"))
|
|
}))
|
|
|
|
recorder := httptest.NewRecorder()
|
|
request := httptest.NewRequest(http.MethodGet, "/logging-test", nil)
|
|
request.Header.Set("User-Agent", "test-agent")
|
|
|
|
handler.ServeHTTP(recorder, request)
|
|
|
|
if recorder.Result().StatusCode != http.StatusCreated {
|
|
t.Fatalf("expected status 201, got %d", recorder.Result().StatusCode)
|
|
}
|
|
|
|
logLine := buf.String()
|
|
if !strings.Contains(logLine, "GET /logging-test 201") {
|
|
t.Fatalf("expected log line to contain method, path and status, got %q", logLine)
|
|
}
|
|
|
|
if !strings.Contains(logLine, "test-agent") {
|
|
t.Fatalf("expected log line to contain user agent, got %q", logLine)
|
|
}
|
|
}
|
|
|
|
func TestResponseWriterWriteHeaderStoresStatus(t *testing.T) {
|
|
recorder := httptest.NewRecorder()
|
|
wrapped := &responseWriter{ResponseWriter: recorder, statusCode: http.StatusOK}
|
|
|
|
wrapped.WriteHeader(http.StatusAccepted)
|
|
|
|
if wrapped.statusCode != http.StatusAccepted {
|
|
t.Fatalf("expected stored status 202, got %d", wrapped.statusCode)
|
|
}
|
|
|
|
if recorder.Result().StatusCode != http.StatusAccepted {
|
|
t.Fatalf("expected underlying writer to receive 202, got %d", recorder.Result().StatusCode)
|
|
}
|
|
}
|