mirror of
https://github.com/datarhei/core.git
synced 2025-10-04 15:42:57 +08:00

If a filter provides a k/v map, then the keys must exist in the event, otherwise it's not a mach.
166 lines
2.6 KiB
Go
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)
|
|
}
|
|
}
|