/* * Created on 23.08.2006. * * $Log$ */ package ldap; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.security.cert.CertificateException; import java.security.cert.CertificateFactory; import java.security.cert.X509Certificate; import java.util.HashMap; import java.util.HashSet; import java.util.Hashtable; import java.util.Map; import java.util.Set; import javax.naming.Context; import javax.naming.NamingEnumeration; import javax.naming.NamingException; import javax.naming.directory.Attribute; import javax.naming.directory.BasicAttribute; import javax.naming.directory.DirContext; import javax.naming.directory.InitialDirContext; import javax.naming.directory.SearchControls; import javax.naming.directory.SearchResult; import junit.framework.TestCase; /** * TODO Document me! * * @date 23.08.2006. * @version $Revision$ by $Author$ * @author Nikola Goran ?utura a.k.a. ngcutura * @since [[RELEASE]] */ public class LdapTest extends TestCase { private Hashtable env; private DirContext ctx; private static final String CONTEXT_FACTORY = "com.sun.jndi.ldap.LdapCtxFactory"; private static final String PROVIDER_URL = "ldap://localhost:10389"; private static final String PROTOCOL = "s"; private static final String AUTHENTICATION = "simple"; private static final String PRINCIPAL = "uid=admin,ou=system"; private static final String CREDENTIALS = "secret"; /** * Constructor for LdapTest. * @param arg0 */ public LdapTest(String arg0) { super(arg0); env = new Hashtable(); env.put(Context.INITIAL_CONTEXT_FACTORY, CONTEXT_FACTORY); if (PRINCIPAL != null || !"".equals(PRINCIPAL)) { env.put(Context.SECURITY_PRINCIPAL, PRINCIPAL); } if (CREDENTIALS != null || !"".equals(CREDENTIALS)) { env.put(Context.SECURITY_CREDENTIALS, CREDENTIALS); } env.put(Context.SECURITY_PROTOCOL, PROTOCOL); env.put(Context.PROVIDER_URL, PROVIDER_URL); env.put(Context.SECURITY_AUTHENTICATION, AUTHENTICATION); env.put("java.naming.ldap.attributes.binary","usercertificate userCertificate"); } /* * @see TestCase#setUp() */ protected void setUp() throws Exception { super.setUp(); ctx = new InitialDirContext(env); } /* * @see TestCase#tearDown() */ protected void tearDown() throws Exception { super.tearDown(); ctx.close(); } public void testOpen() { assertNotNull("Context does not exist", ctx); } public void testSearchByUID() throws CertificateException, FileNotFoundException, NamingException { SearchControls constraints = new SearchControls(); constraints.setSearchScope(SearchControls.SUBTREE_SCOPE); NamingEnumeration results = ctx.search("ou=users,o=ActiveMQ,dc=example,dc=com", "uid= {0}", new Object[] {"ngcutura"}, constraints); assertTrue("No entries found by uid", results.hasMore()); Set entries = new HashSet(); while (results.hasMore()) { SearchResult result = (SearchResult) results.next(); entries.add(result); NamingEnumeration attrs = result.getAttributes().getAll(); Set fields = new HashSet(); while (attrs.hasMore()) { Attribute attr = (Attribute) attrs.next(); fields.add(attr); } assertTrue("Wrong entry", fields.contains(new BasicAttribute("cn", "Nikola Goran Cutura"))); } assertEquals("Too many entries", 1, entries.size()); } public void testSearchByCertificate() throws CertificateException, FileNotFoundException, NamingException { CertificateFactory cf = CertificateFactory.getInstance("X.509"); X509Certificate cert = (X509Certificate) cf.generateCertificate(new FileInputStream("test-export.der")); SearchControls constraints = new SearchControls(); constraints.setSearchScope(SearchControls.SUBTREE_SCOPE); NamingEnumeration results = ctx.search("ou=users,o=ActiveMQ,dc=example,dc=com", "usercertificate = {0}", new Object[] {cert}, constraints); assertTrue("No entries found by certificate", results.hasMore()); Set entries = new HashSet(); while (results.hasMore()) { SearchResult result = (SearchResult) results.next(); entries.add(result); NamingEnumeration attrs = result.getAttributes().getAll(); Set fields = new HashSet(); while (attrs.hasMore()) { Attribute attr = (Attribute) attrs.next(); fields.add(attr); } assertTrue("Wrong entry", fields.contains(new BasicAttribute("cn", "Nikola Goran Cutura"))); } assertEquals("Too many entries", 1, entries.size()); } }