7aa77af7c4
Implements the /notification/query endpoint on the historian app. Note that it does not apply any RBAC right now, that will be a follow up commit. We have to use a go-kit logger in grafana/alerting, so an adapter is needed. Going from go-kit to slog is a bit hairy but works well enough.
102 lines
3.2 KiB
Go
102 lines
3.2 KiB
Go
package logutil
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"github.com/go-kit/log"
|
|
"github.com/go-kit/log/level"
|
|
"github.com/grafana/grafana-app-sdk/logging"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
type ent struct {
|
|
level string
|
|
msg string
|
|
kvs []any
|
|
}
|
|
type fakeLogger struct {
|
|
logs []ent
|
|
}
|
|
|
|
func (f *fakeLogger) Debug(msg string, args ...any) {
|
|
f.logs = append(f.logs, ent{"debug", msg, args})
|
|
}
|
|
func (f *fakeLogger) Info(msg string, args ...any) {
|
|
f.logs = append(f.logs, ent{"info", msg, args})
|
|
}
|
|
func (f *fakeLogger) Warn(msg string, args ...any) {
|
|
f.logs = append(f.logs, ent{"warn", msg, args})
|
|
}
|
|
func (f *fakeLogger) Error(msg string, args ...any) {
|
|
f.logs = append(f.logs, ent{"error", msg, args})
|
|
}
|
|
func (f *fakeLogger) With(args ...any) logging.Logger {
|
|
return nil
|
|
}
|
|
func (f *fakeLogger) WithContext(context.Context) logging.Logger {
|
|
return nil
|
|
}
|
|
|
|
func setup() (*fakeLogger, log.Logger) {
|
|
fake := &fakeLogger{}
|
|
return fake, ToGoKitLogger(fake)
|
|
}
|
|
|
|
func TestToGoKitLogger(t *testing.T) {
|
|
t.Run("debug / 1 args", func(t *testing.T) {
|
|
fake, gk := setup()
|
|
require.NoError(t, level.Debug(gk).Log("msg", "hello world", "foo"))
|
|
require.Equal(t, "debug", fake.logs[0].level)
|
|
require.Equal(t, "hello world", fake.logs[0].msg)
|
|
require.Len(t, fake.logs[0].kvs, 2)
|
|
require.Equal(t, "foo", fake.logs[0].kvs[0])
|
|
require.Equal(t, "(MISSING)", fake.logs[0].kvs[1].(error).Error())
|
|
})
|
|
t.Run("debug / 2 args", func(t *testing.T) {
|
|
fake, gk := setup()
|
|
require.NoError(t, level.Debug(gk).Log("msg", "hello world", "foo", "bar"))
|
|
require.Equal(t, []ent{{"debug", "hello world", []any{"foo", "bar"}}}, fake.logs)
|
|
})
|
|
t.Run("debug / 4 args", func(t *testing.T) {
|
|
fake, gk := setup()
|
|
require.NoError(t, level.Debug(gk).Log("msg", "hello world", "foo", "bar", "baz", 1))
|
|
require.Equal(t, []ent{{"debug", "hello world", []any{"foo", "bar", "baz", 1}}}, fake.logs)
|
|
})
|
|
t.Run("debug / no args", func(t *testing.T) {
|
|
fake, gk := setup()
|
|
require.NoError(t, level.Debug(gk).Log("msg", "hello world"))
|
|
require.Equal(t, []ent{{"debug", "hello world", []any{}}}, fake.logs)
|
|
})
|
|
t.Run("info / no args", func(t *testing.T) {
|
|
fake, gk := setup()
|
|
require.NoError(t, level.Info(gk).Log("msg", "hello world"))
|
|
require.Equal(t, []ent{{"info", "hello world", []any{}}}, fake.logs)
|
|
})
|
|
t.Run("warn / no args", func(t *testing.T) {
|
|
fake, gk := setup()
|
|
require.NoError(t, level.Warn(gk).Log("msg", "hello world"))
|
|
require.Equal(t, []ent{{"warn", "hello world", []any{}}}, fake.logs)
|
|
})
|
|
t.Run("error / no args", func(t *testing.T) {
|
|
fake, gk := setup()
|
|
require.NoError(t, level.Error(gk).Log("msg", "hello world"))
|
|
require.Equal(t, []ent{{"error", "hello world", []any{}}}, fake.logs)
|
|
})
|
|
t.Run("no level / no args", func(t *testing.T) {
|
|
fake, gk := setup()
|
|
require.NoError(t, gk.Log("msg", "hello world"))
|
|
require.Equal(t, []ent{{"info", "hello world", []any{}}}, fake.logs)
|
|
})
|
|
t.Run("no level / 2 args / no msg", func(t *testing.T) {
|
|
fake, gk := setup()
|
|
require.NoError(t, gk.Log("foo", "bar"))
|
|
require.Equal(t, []ent{{"info", "", []any{"foo", "bar"}}}, fake.logs)
|
|
})
|
|
t.Run("no level / no args / no msg", func(t *testing.T) {
|
|
fake, gk := setup()
|
|
require.NoError(t, gk.Log())
|
|
require.Equal(t, []ent{{"info", "", nil}}, fake.logs)
|
|
})
|
|
}
|