Files
core/http/api/event_test.go
Ingo Oppermann 11e28a8d37 Fix event filter
If a filter provides a k/v map, then the keys must exist in the event,
otherwise it's not a mach.
2023-07-20 15:43:28 +02:00

166 lines
2.6 KiB
Go

package api
import (
"testing"
"github.com/stretchr/testify/require"
)
func TestEventFilter(t *testing.T) {
event := Event{
Timestamp: 1234,
Level: 3,
Component: "foobar",
Message: "none",
Data: map[string]string{
"foo": "bar",
},
}
filter := EventFilter{
Component: "foobar",
Level: "info",
Message: "none",
}
err := filter.Compile()
require.NoError(t, err)
res := event.Filter(&filter)
require.True(t, res)
filter = EventFilter{
Component: "foobar",
Level: "warn",
Message: "none",
}
err = filter.Compile()
require.NoError(t, err)
res = event.Filter(&filter)
require.False(t, res)
filter = EventFilter{
Component: "foobar",
Level: "info",
Message: "done",
}
err = filter.Compile()
require.NoError(t, err)
res = event.Filter(&filter)
require.False(t, res)
foobarfilter := EventFilter{
Component: "foobar",
Data: map[string]string{
"foo": "^b.*$",
},
}
err = foobarfilter.Compile()
require.NoError(t, err)
res = event.Filter(&foobarfilter)
require.True(t, res)
foobazfilter := EventFilter{
Component: "foobaz",
Data: map[string]string{
"foo": "baz",
},
}
err = foobazfilter.Compile()
require.NoError(t, err)
res = event.Filter(&foobazfilter)
require.False(t, res)
}
func TestEventFilterDataKey(t *testing.T) {
event := Event{
Timestamp: 1234,
Level: 3,
Component: "foobar",
Message: "none",
Data: map[string]string{
"foo": "bar",
},
}
filter := EventFilter{
Component: "foobar",
Level: "info",
Message: "none",
}
err := filter.Compile()
require.NoError(t, err)
res := event.Filter(&filter)
require.True(t, res)
filter = EventFilter{
Component: "foobar",
Level: "info",
Message: "none",
Data: map[string]string{
"bar": "foo",
},
}
err = filter.Compile()
require.NoError(t, err)
res = event.Filter(&filter)
require.False(t, res)
filter = EventFilter{
Component: "foobar",
Level: "info",
Message: "none",
Data: map[string]string{
"foo": "bar",
},
}
err = filter.Compile()
require.NoError(t, err)
res = event.Filter(&filter)
require.True(t, res)
}
func BenchmarkEventFilters(b *testing.B) {
event := Event{
Timestamp: 1234,
Level: 3,
Component: "foobar",
Message: "none",
Data: map[string]string{
"foo": "bar",
},
}
levelfilter := EventFilter{
Component: "foobar",
Level: "info",
Data: map[string]string{
"foo": "^b.*$",
},
}
err := levelfilter.Compile()
require.NoError(b, err)
res := event.Filter(&levelfilter)
require.True(b, res)
for i := 0; i < b.N; i++ {
event.Filter(&levelfilter)
}
}