package ldap import ( "github.com/marcsauter/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]) } }