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