|
|
|
package puppy
|
|
|
|
|
|
|
|
import (
|
|
|
|
"runtime"
|
|
|
|
"strconv"
|
|
|
|
"testing"
|
|
|
|
)
|
|
|
|
|
|
|
|
func checkSearch(t *testing.T, req *ProxyRequest, expected bool, args ...interface{}) {
|
|
|
|
checker, err := NewRequestChecker(args...)
|
|
|
|
if err != nil {
|
|
|
|
t.Error(err.Error())
|
|
|
|
}
|
|
|
|
result := checker(req)
|
|
|
|
if result != expected {
|
|
|
|
_, f, ln, _ := runtime.Caller(1)
|
|
|
|
t.Errorf("Failed search test at %s:%d. Expected %s, got %s", f, ln, strconv.FormatBool(expected), strconv.FormatBool(result))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestAllSearch(t *testing.T) {
|
|
|
|
checker, err := NewRequestChecker(FieldAll, StrContains, "foo")
|
|
|
|
if err != nil {
|
|
|
|
t.Error(err.Error())
|
|
|
|
}
|
|
|
|
req := testReq()
|
|
|
|
if !checker(req) {
|
|
|
|
t.Error("Failed to match FieldAll, StrContains")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestBodySearch(t *testing.T) {
|
|
|
|
req := testReq()
|
|
|
|
|
|
|
|
checkSearch(t, req, true, FieldAllBody, StrContains, "foo")
|
|
|
|
checkSearch(t, req, true, FieldAllBody, StrContains, "oo=b")
|
|
|
|
checkSearch(t, req, true, FieldAllBody, StrContains, "BBBB")
|
|
|
|
checkSearch(t, req, false, FieldAllBody, StrContains, "FOO")
|
|
|
|
|
|
|
|
checkSearch(t, req, true, FieldResponseBody, StrContains, "BBBB")
|
|
|
|
checkSearch(t, req, false, FieldResponseBody, StrContains, "foo")
|
|
|
|
|
|
|
|
checkSearch(t, req, false, FieldRequestBody, StrContains, "BBBB")
|
|
|
|
checkSearch(t, req, true, FieldRequestBody, StrContains, "foo")
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestHeaderSearch(t *testing.T) {
|
|
|
|
req := testReq()
|
|
|
|
|
|
|
|
checkSearch(t, req, true, FieldBothHeaders, StrContains, "Foo")
|
|
|
|
checkSearch(t, req, true, FieldBothHeaders, StrContains, "Bar")
|
|
|
|
checkSearch(t, req, true, FieldBothHeaders, StrContains, "Foo", StrContains, "Bar")
|
|
|
|
checkSearch(t, req, false, FieldBothHeaders, StrContains, "Bar", StrContains, "Bar")
|
|
|
|
checkSearch(t, req, false, FieldBothHeaders, StrContains, "Foo", StrContains, "Foo")
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestRegexpSearch(t *testing.T) {
|
|
|
|
req := testReq()
|
|
|
|
|
|
|
|
checkSearch(t, req, true, FieldRequestBody, StrContainsRegexp, "o.b")
|
|
|
|
checkSearch(t, req, true, FieldRequestBody, StrContainsRegexp, "baz$")
|
|
|
|
checkSearch(t, req, true, FieldRequestBody, StrContainsRegexp, "^f.+z")
|
|
|
|
checkSearch(t, req, false, FieldRequestBody, StrContainsRegexp, "^baz")
|
|
|
|
}
|