package rdn; import java.util.Hashtable; import javax.naming.Context; import javax.naming.NamingEnumeration; import javax.naming.NamingException; import javax.naming.directory.Attribute; import javax.naming.directory.Attributes; import javax.naming.directory.BasicAttribute; import javax.naming.directory.BasicAttributes; import javax.naming.directory.DirContext; import javax.naming.directory.InitialDirContext; import javax.naming.directory.SearchControls; import javax.naming.directory.SearchResult; import junit.framework.TestCase; /** * DIRSERVER-628: Creation of entry with multivalued RDN leads to wrong * attribute value. */ public class MultiValuedRdnTest extends TestCase { DirContext ctx = null; protected Attributes getPersonAttributes(String sn, String cn) { Attributes attrs = new BasicAttributes(); Attribute ocls = new BasicAttribute("objectClass"); ocls.add("top"); ocls.add("person"); attrs.put(ocls); attrs.put("cn", cn); attrs.put("sn", sn); return attrs; } protected void setUp() throws NamingException { Hashtable env = new Hashtable(); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); env.put(Context.PROVIDER_URL, "ldap://localhost:10389/dc=example,dc=com"); env.put(Context.SECURITY_PRINCIPAL, "uid=admin,ou=system"); env.put(Context.SECURITY_CREDENTIALS, "secret"); env.put(Context.SECURITY_AUTHENTICATION, "simple"); ctx = new InitialDirContext(env); } protected void tearDown() throws NamingException { ctx.close(); } /** * Create a person entry with multivalued RDN and check its content. */ public void testMultiValuedRdn() throws NamingException { Attributes attrs = getPersonAttributes("Bush", "Kate Bush"); String rdn = "cn=Kate Bush+sn=Bush"; ctx.createSubcontext(rdn, attrs); SearchControls sctls = new SearchControls(); sctls.setSearchScope(SearchControls.SUBTREE_SCOPE); String filter = "(sn=Bush)"; String base = ""; NamingEnumeration enm = ctx.search(base, filter, sctls); while (enm.hasMore()) { SearchResult sr = (SearchResult) enm.next(); attrs = sr.getAttributes(); Attribute cn = sr.getAttributes().get("cn"); assertNotNull(cn); assertTrue(cn.contains("Kate Bush")); } ctx.destroySubcontext(rdn); } }