summaryrefslogblamecommitdiffstats
path: root/ldap_test.go
blob: 708dde6a6c9f5b4885f44f04ae6ffd162b04ae1e (plain) (tree)




























































































































                                                                                                                     
package ldap

import (
   "fmt"
   "testing"
)

var ldap_server string = "ldap.itd.umich.edu"
var ldap_port uint16 = 389
var base_dn string = "dc=umich,dc=edu"
var filter []string = []string {
   "(cn=cis-fac)",
   "(&(objectclass=rfc822mailgroup)(cn=*Computer*))",
   "(&(objectclass=rfc822mailgroup)(cn=*Mathematics*))" }
var attributes []string = []string {
   "cn",
   "description" }

func TestConnect( t *testing.T ) {
   fmt.Printf( "TestConnect: starting...\n" )
   l, err := Dial( "tcp", fmt.Sprintf( "%s:%d", ldap_server, ldap_port ) )
   if err != nil {
      t.Errorf( err.String() )
      return
   }
   defer l.Close()
   fmt.Printf( "TestConnect: finished...\n" )
}

func TestSearch( t *testing.T ) {
   fmt.Printf( "TestSearch: starting...\n" )
   l, err := Dial( "tcp", fmt.Sprintf( "%s:%d", ldap_server, ldap_port ) )
   if err != nil {
      t.Errorf( err.String() )
      return
   }
   defer l.Close()

   search_request := NewSearchRequest(
      base_dn,
      ScopeWholeSubtree, DerefAlways, 0, 0, false,
      filter[0],
      attributes,
      nil )

   sr, err := l.Search( search_request )
   if err != nil {
      t.Errorf( err.String() )
      return
   }

   fmt.Printf( "TestSearch: %s -> num of entries = %d\n", search_request.Filter, len( sr.Entries ) )
}

func TestSearchWithPaging( t *testing.T ) {
   fmt.Printf( "TestSearchWithPaging: starting...\n" )
   l, err := Dial( "tcp", fmt.Sprintf( "%s:%d", ldap_server, ldap_port ) )
   if err != nil {
      t.Errorf( err.String() )
      return
   }
   defer l.Close()

   err = l.Bind( "", "" )
   if err != nil {
      t.Errorf( err.String() )
      return
   }

   search_request := NewSearchRequest(
      base_dn,
      ScopeWholeSubtree, DerefAlways, 0, 0, false,
      filter[1],
      attributes,
      nil )
   sr, err := l.SearchWithPaging( search_request, 5 )
   if err != nil {
      t.Errorf( err.String() )
      return
   }

   fmt.Printf( "TestSearchWithPaging: %s -> num of entries = %d\n", search_request.Filter, len( sr.Entries ) )
}

func testMultiGoroutineSearch( t *testing.T, l *Conn, results chan *SearchResult, i int ) {
   search_request := NewSearchRequest(
      base_dn,
      ScopeWholeSubtree, DerefAlways, 0, 0, false,
      filter[i],
      attributes,
      nil )
   sr, err := l.Search( search_request )

   if err != nil {
      t.Errorf( err.String() )
      results <- nil
      return
   }

   results <- sr
}

func TestMultiGoroutineSearch( t *testing.T ) {
   fmt.Printf( "TestMultiGoroutineSearch: starting...\n" )
   l, err := Dial( "tcp", fmt.Sprintf( "%s:%d", ldap_server, ldap_port ) )
   if err != nil {
      t.Errorf( err.String() )
      return
   }
   defer l.Close()

   results := make( []chan *SearchResult, len( filter ) )
   for i := range filter {
      results[ i ] = make( chan *SearchResult )
      go testMultiGoroutineSearch( t, l, results[ i ], i )
   }
   for i := range filter {
      sr := <-results[ i ]
      if sr == nil {
         t.Errorf( "Did not receive results from goroutine for %q", filter[ i ] )
      } else {
         fmt.Printf( "TestMultiGoroutineSearch(%d): %s -> num of entries = %d\n", i, filter[ i ], len( sr.Entries ) )
      }
   }
}