1 16 package scriptella.driver.ldap; 17 18 import scriptella.AbstractTestCase; 19 import scriptella.spi.MockParametersCallbacks; 20 import scriptella.spi.ParametersCallback; 21 import scriptella.spi.QueryCallback; 22 import scriptella.util.ProxyAdapter; 23 24 import javax.naming.NamingEnumeration ; 25 import javax.naming.directory.BasicAttributes ; 26 import javax.naming.directory.SearchResult ; 27 import java.util.ArrayList ; 28 import java.util.Iterator ; 29 import java.util.List ; 30 31 37 public class SearchFilterQueryTest extends AbstractTestCase { 38 private boolean closed; 39 private int rows; 40 41 protected void setUp() throws Exception { 42 super.setUp(); 43 closed=false; 44 rows=0; 45 } 46 47 public void testExecute() { 48 QueryCallback qc = new QueryCallback() { 49 public void processRow(final ParametersCallback parameters) { 50 assertEquals("uid"+rows, parameters.getParameter("uid")); 51 assertEquals("search"+rows, parameters.getParameter("cn")); 52 assertEquals("cn=search"+rows+", ou=ldap, dc=scriptella", parameters.getParameter("dn")); 53 rows++; 54 } 55 }; 56 57 SearchFilterQuery q = new SearchFilterQuery(null, MockParametersCallbacks.UNSUPPORTED, qc) { 58 protected NamingEnumeration <SearchResult > query(final LdapConnection connection, final String filter) { 59 List <SearchResult > res = new ArrayList <SearchResult >(); 60 for (int i=0;i<2;i++) { 61 BasicAttributes a = new BasicAttributes ("uid","uid"+i); 62 a.put("cn", "search"+i); 63 SearchResult sr = new SearchResult ("cn=search"+i+", ou=ldap, dc=scriptella", null, a); 64 sr.setNameInNamespace(sr.getName()); 65 res.add(sr); 66 } 67 final Iterator <SearchResult > it = res.iterator(); 68 return new NamingEnumeration <SearchResult >() { 69 70 public SearchResult next() { 71 return it.next(); 72 } 73 74 public boolean hasMore() { 75 return it.hasNext(); 76 } 77 78 public void close() { 79 closed=true; 80 } 81 82 public boolean hasMoreElements() { 83 return hasMore(); 84 } 85 86 public SearchResult nextElement() { 87 return next(); 88 } 89 }; 90 } 91 }; 92 q.execute("filter"); assertTrue("Naming enumeration must be closed after iteration", closed); 94 assertEquals(2, rows); 95 } 96 97 100 public void testExecuteSubstitution() { 101 SearchFilterQuery q = new SearchFilterQuery(null, MockParametersCallbacks.SIMPLE, null) { 102 protected NamingEnumeration <SearchResult > query(final LdapConnection connection, final String filter) { 103 assertEquals("test *filter* *a**b*", filter); 104 return new ProxyAdapter<NamingEnumeration <SearchResult >>(NamingEnumeration .class) { 105 public boolean hasMoreElements() { 106 return false; 107 } 108 }.getProxy(); 109 110 } 111 }; 112 q.execute("test $filter ${a+b}"); 113 } 114 } 115 | Popular Tags |