From 11e28a8d37c24b9708484e6df893ada63f3db746 Mon Sep 17 00:00:00 2001 From: Ingo Oppermann Date: Thu, 20 Jul 2023 15:43:28 +0200 Subject: [PATCH] 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. --- http/api/event.go | 2 +- http/api/event_test.go | 54 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+), 1 deletion(-) diff --git a/http/api/event.go b/http/api/event.go index 52ea2205..18d5c522 100644 --- a/http/api/event.go +++ b/http/api/event.go @@ -67,7 +67,7 @@ func (e *Event) Filter(ef *EventFilter) bool { for k, r := range ef.reData { v, ok := e.Data[k] if !ok { - continue + return false } if !r.MatchString(v) { diff --git a/http/api/event_test.go b/http/api/event_test.go index 08375786..985967a2 100644 --- a/http/api/event_test.go +++ b/http/api/event_test.go @@ -80,6 +80,60 @@ func TestEventFilter(t *testing.T) { 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,