Skip to content

Commit 8048331

Browse files
committed
filters: add unit tests for namespace regex filter
This commit adds tests to verify the namespace regex filter works correctly. Signed-off-by: Aritra Dey <[email protected]>
1 parent 377fd6e commit 8048331

File tree

1 file changed

+114
-0
lines changed

1 file changed

+114
-0
lines changed
Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
// SPDX-License-Identifier: Apache-2.0
2+
// Copyright Authors of Tetragon
3+
4+
package filters
5+
6+
import (
7+
"context"
8+
"testing"
9+
10+
"github.com/stretchr/testify/assert"
11+
"github.com/stretchr/testify/require"
12+
13+
"github.com/cilium/tetragon/api/v1/tetragon"
14+
"github.com/cilium/tetragon/pkg/event"
15+
)
16+
17+
func TestNamespaceRegex(t *testing.T) {
18+
f := []*tetragon.Filter{{NamespaceRegex: []string{"test-.*"}}}
19+
fl, err := BuildFilterList(context.Background(), f, []OnBuildFilter{&NamespaceRegexFilter{}})
20+
require.NoError(t, err)
21+
22+
ev := event.Event{
23+
Event: &tetragon.GetEventsResponse{
24+
Event: &tetragon.GetEventsResponse_ProcessExec{
25+
ProcessExec: &tetragon.ProcessExec{Process: &tetragon.Process{Pod: &tetragon.Pod{Namespace: "test-app"}}},
26+
},
27+
},
28+
}
29+
assert.True(t, fl.MatchOne(&ev), "should match test-app namespace")
30+
31+
ev = event.Event{
32+
Event: &tetragon.GetEventsResponse{
33+
Event: &tetragon.GetEventsResponse_ProcessExec{
34+
ProcessExec: &tetragon.ProcessExec{Process: &tetragon.Process{Pod: &tetragon.Pod{Namespace: "test-system"}}},
35+
},
36+
},
37+
}
38+
assert.True(t, fl.MatchOne(&ev), "should match test-system namespace")
39+
40+
ev = event.Event{
41+
Event: &tetragon.GetEventsResponse{
42+
Event: &tetragon.GetEventsResponse_ProcessExec{
43+
ProcessExec: &tetragon.ProcessExec{Process: &tetragon.Process{Pod: &tetragon.Pod{Namespace: "kube-system"}}},
44+
},
45+
},
46+
}
47+
assert.False(t, fl.MatchOne(&ev), "should not match kube-system namespace")
48+
49+
ev = event.Event{
50+
Event: &tetragon.GetEventsResponse{
51+
Event: &tetragon.GetEventsResponse_ProcessExec{
52+
ProcessExec: &tetragon.ProcessExec{Process: &tetragon.Process{Pod: &tetragon.Pod{Namespace: "default"}}},
53+
},
54+
},
55+
}
56+
assert.False(t, fl.MatchOne(&ev), "should not match default namespace")
57+
58+
ev = event.Event{
59+
Event: &tetragon.GetEventsResponse{
60+
Event: &tetragon.GetEventsResponse_ProcessExec{
61+
ProcessExec: &tetragon.ProcessExec{Process: &tetragon.Process{}},
62+
},
63+
},
64+
}
65+
assert.False(t, fl.MatchOne(&ev), "should not match process without pod info")
66+
67+
ev = event.Event{
68+
Event: &tetragon.GetEventsResponse{
69+
Event: &tetragon.GetEventsResponse_ProcessExec{
70+
ProcessExec: &tetragon.ProcessExec{},
71+
},
72+
},
73+
}
74+
assert.False(t, fl.MatchOne(&ev), "should not match nil process")
75+
}
76+
77+
func TestNamespaceRegexMultiplePatterns(t *testing.T) {
78+
f := []*tetragon.Filter{{NamespaceRegex: []string{"prod-.*", "staging-.*"}}}
79+
fl, err := BuildFilterList(context.Background(), f, []OnBuildFilter{&NamespaceRegexFilter{}})
80+
require.NoError(t, err)
81+
82+
ev := event.Event{
83+
Event: &tetragon.GetEventsResponse{
84+
Event: &tetragon.GetEventsResponse_ProcessExec{
85+
ProcessExec: &tetragon.ProcessExec{Process: &tetragon.Process{Pod: &tetragon.Pod{Namespace: "prod-app"}}},
86+
},
87+
},
88+
}
89+
assert.True(t, fl.MatchOne(&ev), "should match prod-app namespace")
90+
91+
ev = event.Event{
92+
Event: &tetragon.GetEventsResponse{
93+
Event: &tetragon.GetEventsResponse_ProcessExec{
94+
ProcessExec: &tetragon.ProcessExec{Process: &tetragon.Process{Pod: &tetragon.Pod{Namespace: "staging-app"}}},
95+
},
96+
},
97+
}
98+
assert.True(t, fl.MatchOne(&ev), "should match staging-app namespace")
99+
100+
ev = event.Event{
101+
Event: &tetragon.GetEventsResponse{
102+
Event: &tetragon.GetEventsResponse_ProcessExec{
103+
ProcessExec: &tetragon.ProcessExec{Process: &tetragon.Process{Pod: &tetragon.Pod{Namespace: "dev-app"}}},
104+
},
105+
},
106+
}
107+
assert.False(t, fl.MatchOne(&ev), "should not match dev-app namespace")
108+
}
109+
110+
func TestNamespaceRegexInvalidPattern(t *testing.T) {
111+
f := []*tetragon.Filter{{NamespaceRegex: []string{"[invalid"}}}
112+
_, err := BuildFilterList(context.Background(), f, []OnBuildFilter{&NamespaceRegexFilter{}})
113+
require.Error(t, err, "should return error for invalid regex")
114+
}

0 commit comments

Comments
 (0)