1 package com.atlassian.user.search.page;
2
3 import com.atlassian.user.Group;
4 import com.atlassian.user.impl.DefaultGroup;
5 import com.atlassian.user.impl.ldap.LDAPEntityFactory;
6 import com.atlassian.user.impl.ldap.properties.DefaultLdapSearchProperties;
7 import com.atlassian.user.impl.ldap.search.LDAPPagerInfo;
8 import com.atlassian.user.impl.ldap.search.page.LDAPEntityPager;
9 import junit.framework.TestCase;
10 import net.sf.ldaptemplate.support.filter.EqualsFilter;
11
12 import javax.naming.directory.Attributes;
13 import javax.naming.directory.SearchResult;
14 import java.util.Arrays;
15 import java.util.LinkedList;
16 import java.util.List;
17
18 public class TestLDAPEntityPager extends TestCase
19 {
20 public void testConstructionPreloadsGroupObjects()
21 {
22 final List<Throwable> calledBy = new LinkedList<Throwable>();
23 LDAPEntityFactory<Group> groupFactory = new LDAPEntityFactory<Group>()
24 {
25 public Group getEntity(Attributes attrs, String distinguishedName)
26 {
27 calledBy.add(new Throwable("getEntity was called"));
28 return new DefaultGroup("foo");
29 }
30 };
31 List<MockSearchResult> searchResults = Arrays.asList(new MockSearchResult("foo"));
32 LDAPPagerInfo pagerInfo = new LDAPPagerInfo(new MockNamingEnumeration<SearchResult>(searchResults),
33 new EqualsFilter("cn", "group1"), "ou=groups", true, new String[]{"cn", "member"}, 500);
34 new LDAPEntityPager<Group>(new DefaultLdapSearchProperties(), new MockLdapContextFactory(searchResults), groupFactory, pagerInfo);
35 assertEquals("Group objects should be preloaded by prefetching pager once only", 1, calledBy.size());
36 }
37
38 public void testConstructionPreloadsFirstPageOnly()
39 {
40 final List<String> methodCalls = new LinkedList<String>();
41 LDAPEntityFactory<Group> groupFactory = new LDAPEntityFactory<Group>()
42 {
43 public Group getEntity(Attributes attrs, String distinguishedName)
44 {
45 methodCalls.add("getEntity(Attributes, String)");
46 return new DefaultGroup("foo");
47 }
48 };
49 List<MockSearchResult> searchResults = new LinkedList<MockSearchResult>();
50 for (int i=0; i<1000; i++)
51 searchResults.add(new MockSearchResult("foo"));
52 LDAPPagerInfo pagerInfo = new LDAPPagerInfo(new MockNamingEnumeration<SearchResult>(searchResults),
53 new EqualsFilter("cn", "group1"), "ou=groups", true, new String[]{"cn", "member"}, 500);
54 new LDAPEntityPager<Group>(new DefaultLdapSearchProperties(), new MockLdapContextFactory(searchResults), groupFactory, pagerInfo);
55 assertEquals("Only first page of groups should be preloaded by prefetching pager", 100, methodCalls.size());
56 }
57 }