request_body_read_log_test.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. //go:build unit
  2. package handler
  3. import (
  4. "errors"
  5. "fmt"
  6. "io"
  7. "net/http"
  8. "strings"
  9. "testing"
  10. "github.com/stretchr/testify/require"
  11. )
  12. func TestLogRequestBodyReadFailureClassifiesWithoutPayload(t *testing.T) {
  13. log, logs := newObservedLogger(t)
  14. req, err := http.NewRequest(http.MethodPost, "/v1/responses", strings.NewReader("secret-payload-marker"))
  15. require.NoError(t, err)
  16. req.Header.Set("Content-Encoding", "gzip")
  17. req.ContentLength = 21
  18. logRequestBodyReadFailure(log, req, errors.New(`decode Content-Encoding "gzip": unexpected EOF secret-payload-marker`))
  19. entries := logs.All()
  20. require.Len(t, entries, 1)
  21. require.Equal(t, "read request body failed", entries[0].Message)
  22. fields := entries[0].ContextMap()
  23. require.Equal(t, "decode_content_encoding", fields["error_kind"])
  24. require.Equal(t, "gzip", fields["content_encoding"])
  25. require.EqualValues(t, 21, fields["content_length"])
  26. require.NotContains(t, entries[0].Message+fmt.Sprint(fields), "secret-payload-marker")
  27. }
  28. func TestRequestBodyReadErrorKind(t *testing.T) {
  29. require.Equal(t, "unsupported_content_encoding", requestBodyReadErrorKind(errors.New(`decode Content-Encoding "br": unsupported Content-Encoding`)))
  30. require.Equal(t, "truncated_body", requestBodyReadErrorKind(io.ErrUnexpectedEOF))
  31. require.Equal(t, "max_bytes", requestBodyReadErrorKind(&http.MaxBytesError{Limit: 10}))
  32. require.Equal(t, "other", requestContentEncodingCategory("private-payload-marker"))
  33. }