Files
sub2api/backend/internal/handler/request_body_read_log_test.go
T

41 lines
1.4 KiB
Go

//go:build unit
package handler
import (
"errors"
"fmt"
"io"
"net/http"
"strings"
"testing"
"github.com/stretchr/testify/require"
)
func TestLogRequestBodyReadFailureClassifiesWithoutPayload(t *testing.T) {
log, logs := newObservedLogger(t)
req, err := http.NewRequest(http.MethodPost, "/v1/responses", strings.NewReader("secret-payload-marker"))
require.NoError(t, err)
req.Header.Set("Content-Encoding", "gzip")
req.ContentLength = 21
logRequestBodyReadFailure(log, req, errors.New(`decode Content-Encoding "gzip": unexpected EOF secret-payload-marker`))
entries := logs.All()
require.Len(t, entries, 1)
require.Equal(t, "read request body failed", entries[0].Message)
fields := entries[0].ContextMap()
require.Equal(t, "decode_content_encoding", fields["error_kind"])
require.Equal(t, "gzip", fields["content_encoding"])
require.EqualValues(t, 21, fields["content_length"])
require.NotContains(t, entries[0].Message+fmt.Sprint(fields), "secret-payload-marker")
}
func TestRequestBodyReadErrorKind(t *testing.T) {
require.Equal(t, "unsupported_content_encoding", requestBodyReadErrorKind(errors.New(`decode Content-Encoding "br": unsupported Content-Encoding`)))
require.Equal(t, "truncated_body", requestBodyReadErrorKind(io.ErrUnexpectedEOF))
require.Equal(t, "max_bytes", requestBodyReadErrorKind(&http.MaxBytesError{Limit: 10}))
require.Equal(t, "other", requestContentEncodingCategory("private-payload-marker"))
}