tetragon
75 строк · 1.6 Кб
1// SPDX-License-Identifier: Apache-2.0
2// Copyright Authors of Tetragon
3
4package vtuplefilter
5
6import (
7"testing"
8
9"github.com/cilium/tetragon/pkg/vtuple"
10)
11
12type VTRes struct {
13vt vtuple.Impl
14res bool
15}
16
17type LineTestCase struct {
18line string
19tests []VTRes
20}
21
22var (
23ip10 = [4]byte{10, 1, 1, 10}
24ip20 = [4]byte{10, 1, 1, 20}
25
26LineTestCases = []LineTestCase{
27{
28line: "sport=9999",
29tests: []VTRes{
30{vt: vtuple.CreateTCPv4(ip10, 9999, ip20, 4242), res: true},
31{vt: vtuple.CreateTCPv4(ip10, 4242, ip20, 9999), res: false},
32{vt: vtuple.CreateTCPv4(ip10, 4242, ip20, 1234), res: false},
33},
34},
35{
36line: "dport=9999",
37tests: []VTRes{
38{vt: vtuple.CreateTCPv4(ip10, 9999, ip20, 4242), res: false},
39{vt: vtuple.CreateTCPv4(ip10, 4242, ip20, 9999), res: true},
40{vt: vtuple.CreateTCPv4(ip10, 4242, ip20, 1234), res: false},
41},
42},
43{
44line: "port=9999",
45tests: []VTRes{
46{vt: vtuple.CreateTCPv4(ip10, 9999, ip20, 4242), res: true},
47{vt: vtuple.CreateTCPv4(ip10, 4242, ip20, 9999), res: true},
48{vt: vtuple.CreateTCPv4(ip10, 4242, ip20, 1234), res: false},
49},
50},
51
52// TODO: more tests
53}
54)
55
56func doLineTest(t *testing.T, c *LineTestCase) {
57filter, err := FromLine(c.line)
58if err != nil {
59t.Errorf("failed to parse line %s: %s", c.line, err)
60}
61
62for _, vtres := range c.tests {
63res := filter.FilterFn(&vtres.vt)
64if res != vtres.res {
65t.Errorf("filter:%s tuple:%s expected_result:%t result:%t", c.line, vtuple.StringRep(&vtres.vt), vtres.res, res)
66}
67
68}
69}
70
71func TestLines(t *testing.T) {
72for _, tc := range LineTestCases {
73doLineTest(t, &tc)
74}
75}
76