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