expr_test.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. package exprhelpers
  2. import (
  3. "log"
  4. "testing"
  5. "github.com/antonmedv/expr"
  6. "github.com/stretchr/testify/require"
  7. "gotest.tools/assert"
  8. )
  9. var (
  10. TestFolder = "tests"
  11. )
  12. func TestRegexpInFile(t *testing.T) {
  13. if err := Init(); err != nil {
  14. log.Fatalf(err.Error())
  15. }
  16. err := FileInit(TestFolder, "test_data_re.txt", "regex")
  17. if err != nil {
  18. log.Fatalf(err.Error())
  19. }
  20. tests := []struct {
  21. filter string
  22. result bool
  23. err error
  24. }{
  25. {
  26. filter: "RegexpInFile('crowdsec', 'test_data_re.txt')",
  27. result: false,
  28. err: nil,
  29. },
  30. {
  31. filter: "RegexpInFile('Crowdsec', 'test_data_re.txt')",
  32. result: true,
  33. err: nil,
  34. },
  35. {
  36. filter: "RegexpInFile('test Crowdsec', 'test_data_re.txt')",
  37. result: true,
  38. err: nil,
  39. },
  40. {
  41. filter: "RegexpInFile('test CrowdSec', 'test_data_re.txt')",
  42. result: true,
  43. err: nil,
  44. },
  45. }
  46. for _, test := range tests {
  47. compiledFilter, err := expr.Compile(test.filter, expr.Env(GetExprEnv(map[string]interface{}{})))
  48. if err != nil {
  49. log.Fatalf(err.Error())
  50. }
  51. log.Printf("Running filter : %s", test.filter)
  52. result, err := expr.Run(compiledFilter, GetExprEnv(map[string]interface{}{}))
  53. if err != nil {
  54. log.Fatalf(err.Error())
  55. }
  56. assert.Equal(t, test.result, result)
  57. }
  58. }
  59. func TestFile(t *testing.T) {
  60. if err := Init(); err != nil {
  61. log.Fatalf(err.Error())
  62. }
  63. err := FileInit(TestFolder, "test_data.txt", "")
  64. if err != nil {
  65. log.Fatalf(err.Error())
  66. }
  67. tests := []struct {
  68. filter string
  69. result bool
  70. err error
  71. }{
  72. {
  73. filter: "'Crowdsec' in File('test_data.txt')",
  74. result: true,
  75. err: nil,
  76. },
  77. {
  78. filter: "'CrowdSecurity' in File('test_data.txt')",
  79. result: false,
  80. err: nil,
  81. },
  82. {
  83. filter: "'Crowdsecurity' in File('test_data.txt')",
  84. result: true,
  85. err: nil,
  86. },
  87. {
  88. filter: "'test' in File('test_data.txt')",
  89. result: false,
  90. err: nil,
  91. },
  92. }
  93. for _, test := range tests {
  94. compiledFilter, err := expr.Compile(test.filter, expr.Env(GetExprEnv(map[string]interface{}{})))
  95. if err != nil {
  96. log.Fatalf(err.Error())
  97. }
  98. log.Printf("Running filter : %s", test.filter)
  99. result, err := expr.Run(compiledFilter, GetExprEnv(map[string]interface{}{}))
  100. if err != nil {
  101. log.Fatalf(err.Error())
  102. }
  103. assert.Equal(t, test.result, result)
  104. }
  105. }
  106. func TestIpInRange(t *testing.T) {
  107. env := map[string]interface{}{
  108. "ip": "192.168.0.1",
  109. "ipRange": "192.168.0.0/24",
  110. "IpInRange": IpInRange,
  111. }
  112. code := "IpInRange(ip, ipRange)"
  113. log.Printf("Running filter : %s", code)
  114. program, err := expr.Compile(code, expr.Env(env))
  115. require.NoError(t, err)
  116. output, err := expr.Run(program, env)
  117. require.NoError(t, err)
  118. require.Equal(t, true, output)
  119. }