73 lines
2.2 KiB
Go
73 lines
2.2 KiB
Go
package observability
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
|
|
"github.com/sirupsen/logrus"
|
|
"github.com/stretchr/testify/require"
|
|
"github.com/supabase/auth/internal/conf"
|
|
)
|
|
|
|
const apiTestConfig = "../../hack/test.env"
|
|
|
|
func TestLogger(t *testing.T) {
|
|
var logBuffer bytes.Buffer
|
|
config, err := conf.LoadGlobal(apiTestConfig)
|
|
require.NoError(t, err)
|
|
|
|
config.Logging.Level = "info"
|
|
require.NoError(t, ConfigureLogging(&config.Logging))
|
|
|
|
// logrus should write to the buffer so we can check if the logs are output correctly
|
|
logrus.SetOutput(&logBuffer)
|
|
|
|
// add request id header
|
|
config.API.RequestIDHeader = "X-Request-ID"
|
|
addRequestIdHandler := AddRequestID(config)
|
|
|
|
logHandler := NewStructuredLogger(logrus.StandardLogger(), config)(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
w.WriteHeader(http.StatusOK)
|
|
}))
|
|
w := httptest.NewRecorder()
|
|
req, err := http.NewRequest(http.MethodPost, "http://example.com/path", nil)
|
|
req.Header.Add("X-Request-ID", "test-request-id")
|
|
require.NoError(t, err)
|
|
addRequestIdHandler(logHandler).ServeHTTP(w, req)
|
|
require.Equal(t, http.StatusOK, w.Code)
|
|
|
|
var logs map[string]interface{}
|
|
require.NoError(t, json.NewDecoder(&logBuffer).Decode(&logs))
|
|
require.Equal(t, "api", logs["component"])
|
|
require.Equal(t, http.MethodPost, logs["method"])
|
|
require.Equal(t, "/path", logs["path"])
|
|
require.Equal(t, "test-request-id", logs["request_id"])
|
|
require.NotNil(t, logs["time"])
|
|
}
|
|
|
|
func TestExcludeHealthFromLogs(t *testing.T) {
|
|
var logBuffer bytes.Buffer
|
|
config, err := conf.LoadGlobal(apiTestConfig)
|
|
require.NoError(t, err)
|
|
|
|
config.Logging.Level = "info"
|
|
require.NoError(t, ConfigureLogging(&config.Logging))
|
|
|
|
// logrus should write to the buffer so we can check if the logs are output correctly
|
|
logrus.SetOutput(&logBuffer)
|
|
|
|
logHandler := NewStructuredLogger(logrus.StandardLogger(), config)(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
w.Write([]byte("ok"))
|
|
}))
|
|
w := httptest.NewRecorder()
|
|
req, err := http.NewRequest(http.MethodGet, "http://example.com/health", nil)
|
|
require.NoError(t, err)
|
|
logHandler.ServeHTTP(w, req)
|
|
require.Equal(t, http.StatusOK, w.Code)
|
|
|
|
require.Empty(t, logBuffer)
|
|
}
|