diff --git a/pkg/exprhelpers/expr_test.go b/pkg/exprhelpers/expr_test.go new file mode 100644 index 000000000..e62e051d0 --- /dev/null +++ b/pkg/exprhelpers/expr_test.go @@ -0,0 +1,115 @@ +package exprhelpers + +import ( + "log" + "testing" + + "github.com/antonmedv/expr" + "gotest.tools/assert" +) + +var ( + TestFolder = "tests" +) + +func TestRegexpInFile(t *testing.T) { + if err := Init(); err != nil { + log.Fatalf(err.Error()) + } + + err := FileInit(TestFolder, "test_data_re.txt", "regex") + if err != nil { + log.Fatalf(err.Error()) + } + + tests := []struct { + filter string + result bool + err error + }{ + { + filter: "RegexpInFile('crowdsec', 'test_data_re.txt')", + result: false, + err: nil, + }, + { + filter: "RegexpInFile('Crowdsec', 'test_data_re.txt')", + result: true, + err: nil, + }, + { + filter: "RegexpInFile('test Crowdsec', 'test_data_re.txt')", + result: true, + err: nil, + }, + { + filter: "RegexpInFile('test CrowdSec', 'test_data_re.txt')", + result: true, + err: nil, + }, + } + + for _, test := range tests { + compiledFilter, err := expr.Compile(test.filter, expr.Env(GetExprEnv(map[string]interface{}{}))) + if err != nil { + log.Fatalf(err.Error()) + } + log.Printf("Running filter : %s", test.filter) + result, err := expr.Run(compiledFilter, GetExprEnv(map[string]interface{}{})) + if err != nil { + log.Fatalf(err.Error()) + } + assert.Equal(t, test.result, result) + } +} + +func TestFile(t *testing.T) { + if err := Init(); err != nil { + log.Fatalf(err.Error()) + } + + err := FileInit(TestFolder, "test_data.txt", "") + if err != nil { + log.Fatalf(err.Error()) + } + + tests := []struct { + filter string + result bool + err error + }{ + { + filter: "'Crowdsec' in File('test_data.txt')", + result: true, + err: nil, + }, + { + filter: "'CrowdSecurity' in File('test_data.txt')", + result: false, + err: nil, + }, + { + filter: "'Crowdsecurity' in File('test_data.txt')", + result: true, + err: nil, + }, + { + filter: "'test' in File('test_data.txt')", + result: false, + err: nil, + }, + } + + for _, test := range tests { + compiledFilter, err := expr.Compile(test.filter, expr.Env(GetExprEnv(map[string]interface{}{}))) + if err != nil { + log.Fatalf(err.Error()) + } + log.Printf("Running filter : %s", test.filter) + result, err := expr.Run(compiledFilter, GetExprEnv(map[string]interface{}{})) + if err != nil { + log.Fatalf(err.Error()) + } + assert.Equal(t, test.result, result) + } +} diff --git a/pkg/exprhelpers/tests/test_data.txt b/pkg/exprhelpers/tests/test_data.txt new file mode 100644 index 000000000..a80d62137 --- /dev/null +++ b/pkg/exprhelpers/tests/test_data.txt @@ -0,0 +1,3 @@ +Crowdsec +Crowdsecurity +CrowdSec \ No newline at end of file diff --git a/pkg/exprhelpers/tests/test_data_re.txt b/pkg/exprhelpers/tests/test_data_re.txt new file mode 100644 index 000000000..5b7eb9bec --- /dev/null +++ b/pkg/exprhelpers/tests/test_data_re.txt @@ -0,0 +1,2 @@ +.*Crowdsec.* +.*Crowd[sS]ec.* \ No newline at end of file