package ldap
import (
"github.com/tmfkams/asn1-ber"
"testing"
)
type compile_test struct {
filter_str string
filter_type int
}
var test_filters = []compile_test{
compile_test{filter_str: "(&(sn=Miller)(givenName=Bob))", filter_type: FilterAnd},
compile_test{filter_str: "(|(sn=Miller)(givenName=Bob))", filter_type: FilterOr},
compile_test{filter_str: "(!(sn=Miller))", filter_type: FilterNot},
compile_test{filter_str: "(sn=Miller)", filter_type: FilterEqualityMatch},
compile_test{filter_str: "(sn=Mill*)", filter_type: FilterSubstrings},
compile_test{filter_str: "(sn=*Mill)", filter_type: FilterSubstrings},
compile_test{filter_str: "(sn=*Mill*)", filter_type: FilterSubstrings},
compile_test{filter_str: "(sn>=Miller)", filter_type: FilterGreaterOrEqual},
compile_test{filter_str: "(sn<=Miller)", filter_type: FilterLessOrEqual},
compile_test{filter_str: "(sn=*)", filter_type: FilterPresent},
compile_test{filter_str: "(sn~=Miller)", filter_type: FilterApproxMatch},
// compile_test{ filter_str: "()", filter_type: FilterExtensibleMatch },
}
func TestFilter(t *testing.T) {
// Test Compiler and Decompiler
for _, i := range test_filters {
filter, err := CompileFilter(i.filter_str)
if err != nil {
t.Errorf("Problem compiling %s - %s", err.String())
} else if filter.Tag != uint8(i.filter_type) {
t.Errorf("%q Expected %q got %q", i.filter_str, FilterMap[uint64(i.filter_type)], FilterMap[uint64(filter.Tag)])
} else {
o, err := DecompileFilter(filter)
if err != nil {
t.Errorf("Problem compiling %s - %s", i, err.String())
} else if i.filter_str != o {
t.Errorf("%q expected, got %q", i.filter_str, o)
}
}
}
}
func BenchmarkFilterCompile(b *testing.B) {
b.StopTimer()
filters := make([]string, len(test_filters))
// Test Compiler and Decompiler
for idx, i := range test_filters {
filters[idx] = i.filter_str
}
max_idx := len(filters)
b.StartTimer()
for i := 0; i < b.N; i++ {
CompileFilter(filters[i%max_idx])
}
}
func BenchmarkFilterDecompile(b *testing.B) {
b.StopTimer()
filters := make([]*ber.Packet, len(test_filters))
// Test Compiler and Decompiler
for idx, i := range test_filters {
filters[idx], _ = CompileFilter(i.filter_str)
}
max_idx := len(filters)
b.StartTimer()
for i := 0; i < b.N; i++ {
DecompileFilter(filters[i%max_idx])
}
}