mirror of
https://github.com/foomo/keel.git
synced 2025-10-16 12:35:34 +00:00
190 lines
4.8 KiB
Go
190 lines
4.8 KiB
Go
package roundtripware_test
|
|
|
|
import (
|
|
"errors"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
"go.uber.org/zap"
|
|
"go.uber.org/zap/zapcore"
|
|
"go.uber.org/zap/zaptest"
|
|
|
|
keelhttp "github.com/foomo/keel/net/http"
|
|
"github.com/foomo/keel/net/http/roundtripware"
|
|
)
|
|
|
|
func TestLogger(t *testing.T) {
|
|
// create logger & validate output
|
|
l := zaptest.NewLogger(t, zaptest.WrapOptions(zap.Hooks(func(entry zapcore.Entry) error {
|
|
assert.Equal(t, zapcore.InfoLevel, entry.Level)
|
|
assert.Equal(t, "sent request", entry.Message)
|
|
return nil
|
|
})))
|
|
|
|
// create http server with handler
|
|
svr := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
w.WriteHeader(http.StatusOK)
|
|
}))
|
|
defer svr.Close()
|
|
|
|
// create http client
|
|
client := keelhttp.NewHTTPClient(
|
|
keelhttp.HTTPClientWithRoundTripware(l,
|
|
roundtripware.Logger(),
|
|
),
|
|
)
|
|
|
|
// create request
|
|
req, err := http.NewRequestWithContext(t.Context(), http.MethodGet, svr.URL, nil)
|
|
require.NoError(t, err)
|
|
|
|
// do request
|
|
resp, err := client.Do(req)
|
|
require.NoError(t, err)
|
|
defer resp.Body.Close()
|
|
}
|
|
|
|
func TestLogger_WithMessage(t *testing.T) {
|
|
testMessage := "my message"
|
|
|
|
// create logger & validate output
|
|
l := zaptest.NewLogger(t, zaptest.WrapOptions(zap.Hooks(func(entry zapcore.Entry) error {
|
|
assert.Equal(t, testMessage, entry.Message)
|
|
return nil
|
|
})))
|
|
|
|
// create http server with handler
|
|
svr := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
w.WriteHeader(http.StatusOK)
|
|
}))
|
|
defer svr.Close()
|
|
|
|
// create http client
|
|
client := keelhttp.NewHTTPClient(
|
|
keelhttp.HTTPClientWithRoundTripware(l,
|
|
roundtripware.Logger(
|
|
roundtripware.LoggerWithMessage(testMessage),
|
|
),
|
|
),
|
|
)
|
|
|
|
// create request
|
|
req, err := http.NewRequestWithContext(t.Context(), http.MethodGet, svr.URL, nil)
|
|
require.NoError(t, err)
|
|
|
|
// do request
|
|
resp, err := client.Do(req)
|
|
require.NoError(t, err)
|
|
defer resp.Body.Close()
|
|
}
|
|
|
|
func TestLogger_WithErrorMessage(t *testing.T) {
|
|
testErrorMessage := "my error message"
|
|
|
|
// create logger & validate output
|
|
l := zaptest.NewLogger(t, zaptest.WrapOptions(zap.Hooks(func(entry zapcore.Entry) error {
|
|
assert.Equal(t, testErrorMessage, entry.Message)
|
|
return nil
|
|
})))
|
|
|
|
// create http server with handler
|
|
svr := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
w.WriteHeader(http.StatusOK)
|
|
}))
|
|
defer svr.Close()
|
|
|
|
// create http client
|
|
client := keelhttp.NewHTTPClient(
|
|
keelhttp.HTTPClientWithRoundTripware(l,
|
|
// trigger an internal error
|
|
func(l *zap.Logger, next roundtripware.Handler) roundtripware.Handler {
|
|
return func(r *http.Request) (*http.Response, error) {
|
|
return nil, errors.New("something went wrong")
|
|
}
|
|
},
|
|
roundtripware.Logger(
|
|
roundtripware.LoggerWithErrorMessage(testErrorMessage),
|
|
),
|
|
),
|
|
)
|
|
|
|
// create request
|
|
req, err := http.NewRequestWithContext(t.Context(), http.MethodGet, svr.URL, nil)
|
|
require.NoError(t, err)
|
|
|
|
// do request
|
|
resp, err := client.Do(req)
|
|
require.Nil(t, resp)
|
|
require.Error(t, err)
|
|
if resp != nil {
|
|
defer resp.Body.Close()
|
|
}
|
|
}
|
|
|
|
func TestLogger_WithMinWarnCode(t *testing.T) {
|
|
// create logger & validate output
|
|
l := zaptest.NewLogger(t, zaptest.WrapOptions(zap.Hooks(func(entry zapcore.Entry) error {
|
|
assert.Equal(t, zapcore.WarnLevel, entry.Level)
|
|
return nil
|
|
})))
|
|
|
|
// create http server with handler
|
|
svr := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
w.WriteHeader(http.StatusOK)
|
|
}))
|
|
defer svr.Close()
|
|
|
|
// create http client
|
|
client := keelhttp.NewHTTPClient(
|
|
keelhttp.HTTPClientWithRoundTripware(l,
|
|
roundtripware.Logger(
|
|
roundtripware.LoggerWithMinWarnCode(200),
|
|
),
|
|
),
|
|
)
|
|
|
|
// create request
|
|
req, err := http.NewRequestWithContext(t.Context(), http.MethodGet, svr.URL, nil)
|
|
require.NoError(t, err)
|
|
|
|
// do request
|
|
resp, err := client.Do(req)
|
|
require.NoError(t, err)
|
|
defer resp.Body.Close()
|
|
}
|
|
|
|
func TestLogger_WithMinErrorCode(t *testing.T) {
|
|
// create logger & validate output
|
|
l := zaptest.NewLogger(t, zaptest.WrapOptions(zap.Hooks(func(entry zapcore.Entry) error {
|
|
assert.Equal(t, zapcore.ErrorLevel, entry.Level)
|
|
return nil
|
|
})))
|
|
|
|
// create http server with handler
|
|
svr := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
w.WriteHeader(http.StatusOK)
|
|
}))
|
|
defer svr.Close()
|
|
|
|
// create http client
|
|
client := keelhttp.NewHTTPClient(
|
|
keelhttp.HTTPClientWithRoundTripware(l,
|
|
roundtripware.Logger(
|
|
roundtripware.LoggerWithMinErrorCode(200),
|
|
),
|
|
),
|
|
)
|
|
|
|
// create request
|
|
req, err := http.NewRequestWithContext(t.Context(), http.MethodGet, svr.URL, nil)
|
|
require.NoError(t, err)
|
|
|
|
// do request
|
|
resp, err := client.Do(req)
|
|
require.NoError(t, err)
|
|
defer resp.Body.Close()
|
|
}
|