add more tests for pkg/parser (config loading) (#172)

This commit is contained in:
Thibault "bui" Koechlin 2020-08-05 11:20:03 +02:00 committed by GitHub
parent b10c7e9bef
commit 8128dcf61b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 66 additions and 4 deletions

62
pkg/parser/node_test.go Normal file
View file

@ -0,0 +1,62 @@
package parser
import (
"testing"
"github.com/crowdsecurity/crowdsec/pkg/types"
)
func TestParserConfigs(t *testing.T) {
var p UnixParser
pctx, err := p.Init(map[string]interface{}{"patterns": "../../config/patterns/", "data": "./tests/"})
if err != nil {
t.Fatalf("unable to load patterns : %s", err)
}
/*the actual tests*/
var CfgTests = []struct {
NodeCfg *Node
Compiles bool
Valid bool
}{
//valid node with grok pattern
{&Node{Debug: true, Stage: "s00", Grok: types.GrokPattern{RegexpValue: "^x%{DATA:extr}$", TargetField: "t"}}, true, true},
//bad filter
{&Node{Debug: true, Stage: "s00", Filter: "ratata"}, false, false},
//empty node
{&Node{Debug: true, Stage: "s00", Filter: "true"}, false, false},
//bad subgrok
{&Node{Debug: true, Stage: "s00", SubGroks: map[string]string{"FOOBAR": "[a-$"}}, false, true},
//valid node with grok pattern
{&Node{Debug: true, Stage: "s00", SubGroks: map[string]string{"FOOBAR": "[a-z]"}, Grok: types.GrokPattern{RegexpValue: "^x%{FOOBAR:extr}$", TargetField: "t"}}, true, true},
//bad node success
{&Node{Debug: true, Stage: "s00", OnSuccess: "ratat", Grok: types.GrokPattern{RegexpValue: "^x%{DATA:extr}$", TargetField: "t"}}, false, false},
//ok node success
{&Node{Debug: true, Stage: "s00", OnSuccess: "continue", Grok: types.GrokPattern{RegexpValue: "^x%{DATA:extr}$", TargetField: "t"}}, true, true},
//valid node with grok sub-pattern used by name
{&Node{Debug: true, Stage: "s00", SubGroks: map[string]string{"FOOBARx": "[a-z] %{DATA:lol}$"}, Grok: types.GrokPattern{RegexpName: "FOOBARx", TargetField: "t"}}, true, true},
//node with unexisting grok pattern
{&Node{Debug: true, Stage: "s00", Grok: types.GrokPattern{RegexpName: "RATATA", TargetField: "t"}}, false, true},
//bad grok pattern
//{&Node{Debug: true, Grok: []GrokPattern{ GrokPattern{}, }}, false},
}
for idx := range CfgTests {
err := CfgTests[idx].NodeCfg.compile(pctx)
if CfgTests[idx].Compiles == true && err != nil {
t.Fatalf("Compile: (%d/%d) expected valid, got : %s", idx+1, len(CfgTests), err)
}
if CfgTests[idx].Compiles == false && err == nil {
t.Fatalf("Compile: (%d/%d) expected errror", idx+1, len(CfgTests))
}
err = CfgTests[idx].NodeCfg.validate(pctx)
if CfgTests[idx].Valid == true && err != nil {
t.Fatalf("Valid: (%d/%d) expected valid, got : %s", idx+1, len(CfgTests), err)
}
if CfgTests[idx].Valid == false && err == nil {
t.Fatalf("Valid: (%d/%d) expected error", idx+1, len(CfgTests))
}
}
}