Like Prometheus, but for logs.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
loki/pkg/util/log/log_test.go

62 lines
1.8 KiB

package log
import (
"io"
"net/http"
"net/http/httptest"
"net/url"
"strings"
"testing"
"github.com/go-kit/log"
"github.com/stretchr/testify/assert"
"github.com/weaveworks/common/logging"
)
func TestLevelHandler(t *testing.T) {
var lvl logging.Level
err := lvl.Set("info")
assert.NoError(t, err)
plogger = &prometheusLogger{
baseLogger: log.NewLogfmtLogger(io.Discard),
}
testCases := []struct {
testName string
targetLogLevel string
expectedResponse string
expectedLogLevel string
expectedStatusCode int
}{
{"GetLogLevel", "", `{"message":"Current log level is info"}`, "info", 200},
{"PostLogLevelInvalid", "invalid", `{"message":"unrecognized log level \"invalid\"", "status":"failed"}`, "info", 400},
{"PostLogLevelEmpty", "", `{"message":"unrecognized log level \"\"", "status":"failed"}`, "info", 400},
{"PostLogLevelDebug", "debug", `{"status": "success", "message":"Log level set to debug"}`, "debug", 200},
}
for _, testCase := range testCases {
t.Run(testCase.testName, func(t *testing.T) {
var (
req *http.Request
err error
)
if strings.HasPrefix(testCase.testName, "Get") {
req, err = http.NewRequest("GET", "/", nil)
} else if strings.HasPrefix(testCase.testName, "Post") {
form := url.Values{"log_level": {testCase.targetLogLevel}}
req, err = http.NewRequest("POST", "/", strings.NewReader(form.Encode()))
req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
}
assert.NoError(t, err)
rr := httptest.NewRecorder()
handler := LevelHandler(&lvl)
handler.ServeHTTP(rr, req)
assert.JSONEq(t, testCase.expectedResponse, rr.Body.String())
assert.Equal(t, testCase.expectedStatusCode, rr.Code)
assert.Equal(t, testCase.expectedLogLevel, lvl.String())
})
}
}