node_test.go 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package parser
  2. import (
  3. "testing"
  4. "github.com/crowdsecurity/crowdsec/pkg/types"
  5. )
  6. func TestParserConfigs(t *testing.T) {
  7. var p UnixParser
  8. pctx, err := p.Init(map[string]interface{}{"patterns": "../../config/patterns/", "data": "./tests/"})
  9. if err != nil {
  10. t.Fatalf("unable to load patterns : %s", err)
  11. }
  12. /*the actual tests*/
  13. var CfgTests = []struct {
  14. NodeCfg *Node
  15. Compiles bool
  16. Valid bool
  17. }{
  18. //valid node with grok pattern
  19. {&Node{Debug: true, Stage: "s00", Grok: types.GrokPattern{RegexpValue: "^x%{DATA:extr}$", TargetField: "t"}}, true, true},
  20. //bad filter
  21. {&Node{Debug: true, Stage: "s00", Filter: "ratata"}, false, false},
  22. //empty node
  23. {&Node{Debug: true, Stage: "s00", Filter: "true"}, false, false},
  24. //bad subgrok
  25. {&Node{Debug: true, Stage: "s00", SubGroks: map[string]string{"FOOBAR": "[a-$"}}, false, true},
  26. //valid node with grok pattern
  27. {&Node{Debug: true, Stage: "s00", SubGroks: map[string]string{"FOOBAR": "[a-z]"}, Grok: types.GrokPattern{RegexpValue: "^x%{FOOBAR:extr}$", TargetField: "t"}}, true, true},
  28. //bad node success
  29. {&Node{Debug: true, Stage: "s00", OnSuccess: "ratat", Grok: types.GrokPattern{RegexpValue: "^x%{DATA:extr}$", TargetField: "t"}}, false, false},
  30. //ok node success
  31. {&Node{Debug: true, Stage: "s00", OnSuccess: "continue", Grok: types.GrokPattern{RegexpValue: "^x%{DATA:extr}$", TargetField: "t"}}, true, true},
  32. //valid node with grok sub-pattern used by name
  33. {&Node{Debug: true, Stage: "s00", SubGroks: map[string]string{"FOOBARx": "[a-z] %{DATA:lol}$"}, Grok: types.GrokPattern{RegexpName: "FOOBARx", TargetField: "t"}}, true, true},
  34. //node with unexisting grok pattern
  35. {&Node{Debug: true, Stage: "s00", Grok: types.GrokPattern{RegexpName: "RATATA", TargetField: "t"}}, false, true},
  36. //bad grok pattern
  37. //{&Node{Debug: true, Grok: []GrokPattern{ GrokPattern{}, }}, false},
  38. }
  39. for idx := range CfgTests {
  40. err := CfgTests[idx].NodeCfg.compile(pctx)
  41. if CfgTests[idx].Compiles == true && err != nil {
  42. t.Fatalf("Compile: (%d/%d) expected valid, got : %s", idx+1, len(CfgTests), err)
  43. }
  44. if CfgTests[idx].Compiles == false && err == nil {
  45. t.Fatalf("Compile: (%d/%d) expected errror", idx+1, len(CfgTests))
  46. }
  47. err = CfgTests[idx].NodeCfg.validate(pctx)
  48. if CfgTests[idx].Valid == true && err != nil {
  49. t.Fatalf("Valid: (%d/%d) expected valid, got : %s", idx+1, len(CfgTests), err)
  50. }
  51. if CfgTests[idx].Valid == false && err == nil {
  52. t.Fatalf("Valid: (%d/%d) expected error", idx+1, len(CfgTests))
  53. }
  54. }
  55. }