summaryrefslogblamecommitdiffstats
path: root/filter_test.go
blob: 4b403e4fa54bace34bc0cf312a6cc6c221e47eae (plain) (tree)













































































                                                                                                                               
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 ] )
   }
}