package ldap import ( "fmt" "testing" ) var ldapServer = "ldap.itd.umich.edu" var ldapPort = uint16(389) var baseDN = "dc=umich,dc=edu" var filter = []string{ "(cn=cis-fac)", "(&(objectclass=rfc822mailgroup)(cn=*Computer*))", "(&(objectclass=rfc822mailgroup)(cn=*Mathematics*))"} var attributes = []string{ "cn", "description"} func TestConnect(t *testing.T) { fmt.Printf("TestConnect: starting...\n") l, err := Dial("tcp", fmt.Sprintf("%s:%d", ldapServer, ldapPort)) if err != nil { t.Errorf(err.Error()) 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", ldapServer, ldapPort)) if err != nil { t.Errorf(err.Error()) return } defer l.Close() searchRequest := NewSearchRequest( baseDN, ScopeWholeSubtree, DerefAlways, 0, 0, false, filter[0], attributes, nil) sr, err := l.Search(searchRequest) if err != nil { t.Errorf(err.Error()) return } fmt.Printf("TestSearch: %s -> num of entries = %d\n", searchRequest.Filter, len(sr.Entries)) } func TestSearchWithPaging(t *testing.T) { fmt.Printf("TestSearchWithPaging: starting...\n") l, err := Dial("tcp", fmt.Sprintf("%s:%d", ldapServer, ldapPort)) if err != nil { t.Errorf(err.Error()) return } defer l.Close() err = l.Bind("", "") if err != nil { t.Errorf(err.Error()) return } searchRequest := NewSearchRequest( baseDN, ScopeWholeSubtree, DerefAlways, 0, 0, false, filter[1], attributes, nil) sr, err := l.SearchWithPaging(searchRequest, 5) if err != nil { t.Errorf(err.Error()) return } fmt.Printf("TestSearchWithPaging: %s -> num of entries = %d\n", searchRequest.Filter, len(sr.Entries)) } func testMultiGoroutineSearch(t *testing.T, l *Conn, results chan *SearchResult, i int) { searchRequest := NewSearchRequest( baseDN, ScopeWholeSubtree, DerefAlways, 0, 0, false, filter[i], attributes, nil) sr, err := l.Search(searchRequest) if err != nil { t.Errorf(err.Error()) results <- nil return } results <- sr } func TestMultiGoroutineSearch(t *testing.T) { fmt.Printf("TestMultiGoroutineSearch: starting...\n") l, err := Dial("tcp", fmt.Sprintf("%s:%d", ldapServer, ldapPort)) if err != nil { t.Errorf(err.Error()) 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)) } } }