Spaces:
Paused
Paused
| package middleware | |
| import ( | |
| "io" | |
| "net/http" | |
| "net/url" | |
| "strings" | |
| "testing" | |
| ) | |
| func TestShouldSkipMethodForRequestLogging(t *testing.T) { | |
| tests := []struct { | |
| name string | |
| req *http.Request | |
| skip bool | |
| }{ | |
| { | |
| name: "nil request", | |
| req: nil, | |
| skip: true, | |
| }, | |
| { | |
| name: "post request should not skip", | |
| req: &http.Request{ | |
| Method: http.MethodPost, | |
| URL: &url.URL{Path: "/v1/responses"}, | |
| }, | |
| skip: false, | |
| }, | |
| { | |
| name: "plain get should skip", | |
| req: &http.Request{ | |
| Method: http.MethodGet, | |
| URL: &url.URL{Path: "/v1/models"}, | |
| Header: http.Header{}, | |
| }, | |
| skip: true, | |
| }, | |
| { | |
| name: "responses websocket upgrade should not skip", | |
| req: &http.Request{ | |
| Method: http.MethodGet, | |
| URL: &url.URL{Path: "/v1/responses"}, | |
| Header: http.Header{"Upgrade": []string{"websocket"}}, | |
| }, | |
| skip: false, | |
| }, | |
| { | |
| name: "responses get without upgrade should skip", | |
| req: &http.Request{ | |
| Method: http.MethodGet, | |
| URL: &url.URL{Path: "/v1/responses"}, | |
| Header: http.Header{}, | |
| }, | |
| skip: true, | |
| }, | |
| } | |
| for i := range tests { | |
| got := shouldSkipMethodForRequestLogging(tests[i].req) | |
| if got != tests[i].skip { | |
| t.Fatalf("%s: got skip=%t, want %t", tests[i].name, got, tests[i].skip) | |
| } | |
| } | |
| } | |
| func TestShouldCaptureRequestBody(t *testing.T) { | |
| tests := []struct { | |
| name string | |
| loggerEnabled bool | |
| req *http.Request | |
| want bool | |
| }{ | |
| { | |
| name: "logger enabled always captures", | |
| loggerEnabled: true, | |
| req: &http.Request{ | |
| Body: io.NopCloser(strings.NewReader("{}")), | |
| ContentLength: -1, | |
| Header: http.Header{"Content-Type": []string{"application/json"}}, | |
| }, | |
| want: true, | |
| }, | |
| { | |
| name: "nil request", | |
| loggerEnabled: false, | |
| req: nil, | |
| want: false, | |
| }, | |
| { | |
| name: "small known size json in error-only mode", | |
| loggerEnabled: false, | |
| req: &http.Request{ | |
| Body: io.NopCloser(strings.NewReader("{}")), | |
| ContentLength: 2, | |
| Header: http.Header{"Content-Type": []string{"application/json"}}, | |
| }, | |
| want: true, | |
| }, | |
| { | |
| name: "large known size skipped in error-only mode", | |
| loggerEnabled: false, | |
| req: &http.Request{ | |
| Body: io.NopCloser(strings.NewReader("x")), | |
| ContentLength: maxErrorOnlyCapturedRequestBodyBytes + 1, | |
| Header: http.Header{"Content-Type": []string{"application/json"}}, | |
| }, | |
| want: false, | |
| }, | |
| { | |
| name: "unknown size skipped in error-only mode", | |
| loggerEnabled: false, | |
| req: &http.Request{ | |
| Body: io.NopCloser(strings.NewReader("x")), | |
| ContentLength: -1, | |
| Header: http.Header{"Content-Type": []string{"application/json"}}, | |
| }, | |
| want: false, | |
| }, | |
| { | |
| name: "multipart skipped in error-only mode", | |
| loggerEnabled: false, | |
| req: &http.Request{ | |
| Body: io.NopCloser(strings.NewReader("x")), | |
| ContentLength: 1, | |
| Header: http.Header{"Content-Type": []string{"multipart/form-data; boundary=abc"}}, | |
| }, | |
| want: false, | |
| }, | |
| } | |
| for i := range tests { | |
| got := shouldCaptureRequestBody(tests[i].loggerEnabled, tests[i].req) | |
| if got != tests[i].want { | |
| t.Fatalf("%s: got %t, want %t", tests[i].name, got, tests[i].want) | |
| } | |
| } | |
| } | |