41 lines
1.4 KiB
Go
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"))
|
|
}
|