add extra tests for exprlib visitors (#187)
* add extra tests for exprlib visitors
This commit is contained in:
parent
9df29191f7
commit
1398a74c6d
2
.github/workflows/ci_golangci-lint.yml
vendored
2
.github/workflows/ci_golangci-lint.yml
vendored
|
@ -18,7 +18,7 @@ jobs:
|
||||||
# Required: the version of golangci-lint is required and must be specified without patch version: we always use the latest patch version.
|
# Required: the version of golangci-lint is required and must be specified without patch version: we always use the latest patch version.
|
||||||
version: v1.26
|
version: v1.26
|
||||||
# Optional: golangci-lint command line arguments.
|
# Optional: golangci-lint command line arguments.
|
||||||
args: --issues-exit-code=0
|
args: --issues-exit-code=0 --timeout 5m
|
||||||
only-new-issues: true
|
only-new-issues: true
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,10 @@
|
||||||
package exprhelpers
|
package exprhelpers
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"log"
|
"fmt"
|
||||||
|
|
||||||
|
log "github.com/sirupsen/logrus"
|
||||||
|
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/antonmedv/expr"
|
"github.com/antonmedv/expr"
|
||||||
|
@ -13,6 +16,93 @@ var (
|
||||||
TestFolder = "tests"
|
TestFolder = "tests"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func TestVisitor(t *testing.T) {
|
||||||
|
if err := Init(); err != nil {
|
||||||
|
log.Fatalf(err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
filter string
|
||||||
|
result bool
|
||||||
|
env map[string]interface{}
|
||||||
|
err error
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "debug : no variable",
|
||||||
|
filter: "'crowdsec' startsWith 'crowdse'",
|
||||||
|
result: true,
|
||||||
|
err: nil,
|
||||||
|
env: map[string]interface{}{},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "debug : simple variable",
|
||||||
|
filter: "'crowdsec' startsWith static_one && 1 == 1",
|
||||||
|
result: true,
|
||||||
|
err: nil,
|
||||||
|
env: map[string]interface{}{"static_one": string("crowdse")},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "debug : simple variable re-used",
|
||||||
|
filter: "static_one.foo == 'bar' && static_one.foo != 'toto'",
|
||||||
|
result: true,
|
||||||
|
err: nil,
|
||||||
|
env: map[string]interface{}{"static_one": map[string]string{"foo": "bar"}},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "debug : can't compile",
|
||||||
|
filter: "static_one.foo.toto == 'lol'",
|
||||||
|
result: false,
|
||||||
|
err: fmt.Errorf("bad syntax"),
|
||||||
|
env: map[string]interface{}{"static_one": map[string]string{"foo": "bar"}},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "debug : can't compile #2",
|
||||||
|
filter: "static_one.f!oo.to/to == 'lol'",
|
||||||
|
result: false,
|
||||||
|
err: fmt.Errorf("bad syntax"),
|
||||||
|
env: map[string]interface{}{"static_one": map[string]string{"foo": "bar"}},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "debug : can't compile #3",
|
||||||
|
filter: "",
|
||||||
|
result: false,
|
||||||
|
err: fmt.Errorf("bad syntax"),
|
||||||
|
env: map[string]interface{}{"static_one": map[string]string{"foo": "bar"}},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
log.SetLevel(log.DebugLevel)
|
||||||
|
clog := log.WithFields(log.Fields{
|
||||||
|
"type": "test",
|
||||||
|
})
|
||||||
|
|
||||||
|
for _, test := range tests {
|
||||||
|
compiledFilter, err := expr.Compile(test.filter, expr.Env(GetExprEnv(test.env)))
|
||||||
|
if err != nil && test.err == nil {
|
||||||
|
log.Fatalf("compile: %s", err.Error())
|
||||||
|
}
|
||||||
|
debugFilter, err := NewDebugger(test.filter, expr.Env(GetExprEnv(test.env)))
|
||||||
|
if err != nil && test.err == nil {
|
||||||
|
log.Fatalf("debug: %s", err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
if compiledFilter != nil {
|
||||||
|
result, err := expr.Run(compiledFilter, GetExprEnv(test.env))
|
||||||
|
if err != nil && test.err == nil {
|
||||||
|
log.Fatalf("run : %s", err.Error())
|
||||||
|
}
|
||||||
|
if isOk := assert.Equal(t, test.result, result); !isOk {
|
||||||
|
t.Fatalf("test '%s' : NOK", test.filter)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if debugFilter != nil {
|
||||||
|
debugFilter.Run(clog, test.result, GetExprEnv(test.env))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestRegexpInFile(t *testing.T) {
|
func TestRegexpInFile(t *testing.T) {
|
||||||
if err := Init(); err != nil {
|
if err := Init(); err != nil {
|
||||||
log.Fatalf(err.Error())
|
log.Fatalf(err.Error())
|
||||||
|
@ -192,6 +282,16 @@ func TestAtof(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Printf("test 'Atof()' : OK")
|
log.Printf("test 'Atof()' : OK")
|
||||||
|
|
||||||
|
//bad float
|
||||||
|
testFloat = "1aaa.5"
|
||||||
|
expectedFloat = 0.0
|
||||||
|
|
||||||
|
if Atof(testFloat) != expectedFloat {
|
||||||
|
t.Fatalf("Atof should returned a negative value (error) as a float got")
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Printf("test 'Atof()' : OK")
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestUpper(t *testing.T) {
|
func TestUpper(t *testing.T) {
|
||||||
|
|
Loading…
Reference in a new issue