MCPcopy Create free account
hub / github.com/rabbitstack/fibratus / TestParser

Function TestParser

pkg/filter/ql/parser_test.go:34–88  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

32)
33
34func TestParser(t *testing.T) {
35 var tests = []struct {
36 expr string
37 err error
38 }{
39 {expr: "ps.name = 'cmd.exe'"},
40 {expr: "ps.name != 'cmd.exe'"},
41 {expr: "ps.name <> 'cmd.exe'"},
42 {expr: "ps.name <> 'cmd.exe", err: errors.New("ps.name <> 'cmd.exe\n╭─────────^\n|\n|\n╰─────────────────── expected a valid string but bad string or escape found")},
43 {expr: "ps.name = 123"},
44 {expr: "net.dip = 172.17.0.9"},
45 {expr: "net.dip = 172.17.0.9 and net.dip in ('172.15.9.2')"},
46 {expr: "net.dip = 172.17.0.9 and (net.dip not in ('172.15.9.2'))"},
47
48 {expr: "net.dip = 172.17.0", err: errors.New("net.dip = 172.17.0\n╭─────────^\n|\n|\n╰─────────────────── expected a valid IP address")},
49
50 {expr: "ps.name = 'cmd.exe' OR ps.name contains 'svc'"},
51 {expr: "ps.name = 'cmd.exe' AND (ps.name contains 'svc' OR ps.name != 'lsass')"},
52 {expr: "ps.name = 'cmd.exe' AND (ps.name contains 'svc' OR ps.name != 'lsass'", err: errors.New("ps.name = 'cmd.exe' AND (ps.name contains 'svc' OR ps.name != 'lsass'\n╭─────────────────────────────────────────────────────────────────────^\n|\n|\n╰─────────────────── expected ')'")},
53
54 {expr: "ps.name = 'cmd.exe' OR ((ps.name contains 'svc' AND ps.name != 'lsass') AND ps.ppid != 1)"},
55
56 {expr: "ps.name = 'cmd.exe' OR ((ps.name contains 'svc' AND ps.name != 'lsass' AND ps.ppid != 1)", err: errors.New("ps.name = 'cmd.exe' OR ((ps.name contains 'svc' AND ps.name != 'lsass' AND ps.ppid != 1)\n╭────────────────────────────────────────────────────────────────────────────────────────^\n|\n|\n╰─────────────────── expected ')'")},
57
58 {expr: "ps.name = 'cmd.exe' OR ((ps.name contains 'svc' AND ps.name != 'lsass') AND ps.ppid != 1", err: errors.New("ps.name = 'cmd.exe' OR ((ps.name contains 'svc' AND ps.name != 'lsass') AND ps.ppid != 1\n╭────────────────────────────────────────────────────────────────────────────────────────^\n|\n|\n╰─────────────────── expected ')'")},
59
60 {expr: "ps.none = 'cmd.exe'", err: errors.New("ps.none = 'cmd.exe'\n╭^\n|\n|\n╰─────────────────── expected field, bound field, string, number, bool, ip, function")},
61
62 {expr: "ps.name = 'cmd.exe' AND ps.name IN ('exe') ps.name", err: errors.New("ps.name = 'cmd.exe' AND ps.name IN ('exe') ps.name\n╭──────────────────────────────────────────^\n|\n|\n╰─────────────────── expected operator, ')', ',', '|'")},
63 {expr: "ip_cidr(net.dip) = '24'", err: errors.New("ip_cidr function is undefined. Did you mean one of BASE|CIDR_CONTAINS|CONCAT|COUNT|DIR|ENTROPY|EXT|FOREACH|GET_REG_VALUE|GLOB|INDEXOF|IS_ABS|IS_MINIDUMP|LENGTH|LOWER|LTRIM|MD5|REGEX|REPLACE|RTRIM|SPLIT|SUBSTR|UNDEFINED|UPPER|VOLUME|YARA?")},
64
65 {expr: "ps.name = 'cmd.exe' and not cidr_contains(net.sip, '172.14.0.0')"},
66 {expr: `ps.envs[ProgramFiles] = 'C:\\Program Files'`},
67 {expr: `ps.envs imatches 'C:\\Program Files'`},
68 {expr: `ps.pid[1] = 'svchost.exe'`, err: errors.New("ps.pid[1] = 'svchost.exe'\n╭──────^\n|\n|\n╰─────────────────── expected field without argument")},
69 {expr: `ps.envs[ProgramFiles = 'svchost.exe'`, err: errors.New("ps.envs[ProgramFiles = 'svchost.exe'\n╭───────────────────^\n|\n|\n╰─────────────────── expected ]")},
70 {expr: `evt.arg = 'svchost.exe'`, err: errors.New("evt.arg = 'svchost.exe'\n╭──────^\n|\n|\n╰─────────────────── expected field argument")},
71 {expr: `evt.arg[name] = 'svchost.exe'`},
72 {expr: `evt.arg[Name$] = 'svchost.exe'`, err: errors.New("evt.arg[Name$] = 'svchost.exe'\n╭───────^\n|\n|\n╰─────────────────── expected a valid field argument matching the pattern [a-z0-9_]+")},
73 {expr: `ps.ancestor[0] = 'svchost.exe'`},
74 {expr: `ps.ancestor[l0l] = 'svchost.exe'`, err: errors.New("ps.ancestor[l0l] = 'svchost.exe'\n╭───────────^\n|\n|\n╰─────────────────── expected a valid field argument matching the pattern [0-9]+")},
75 }
76
77 for i, tt := range tests {
78 p := NewParser(tt.expr)
79 _, err := p.ParseExpr()
80 if err == nil && tt.err != nil {
81 t.Errorf("%d. exp=%s expected error=%v", i, tt.expr, tt.err)
82 } else if err != nil && tt.err != nil {
83 assert.EqualError(t, tt.err, err.Error())
84 } else if err != nil && tt.err == nil {
85 t.Errorf("%d. exp=%s got error=%v", i, tt.expr, err)
86 }
87 }
88}
89
90func TestParseUnaryExpr(t *testing.T) {
91 var tests = []struct {

Callers

nothing calls this directly

Calls 3

ParseExprMethod · 0.95
NewParserFunction · 0.85
ErrorMethod · 0.45

Tested by

no test coverage detected