diff options
Diffstat (limited to 'filter_test.go')
-rw-r--r-- | filter_test.go | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/filter_test.go b/filter_test.go new file mode 100644 index 0000000..4b403e4 --- /dev/null +++ b/filter_test.go @@ -0,0 +1,78 @@ +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 ] ) + } +} |