package alias; import java.util.Hashtable; import javax.naming.Context; 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 junit.framework.TestCase; /** * Test case to demonstrate DIRSERVER-803. Creates an entry and an alias to it * directly below the first entry. */ public class AddAliasFromDescendantTest extends TestCase { DirContext ctx = null; 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(); } /** * Try to add entry and an alias to it. The second entry is located directly * below the first Afterwards, remove both of them. */ public void testAddAliasFromDescendant() throws NamingException { // Create entry Attributes entry = new BasicAttributes(); Attribute entryOcls = new BasicAttribute("objectclass"); entryOcls.add("top"); entryOcls.add("organizationalUnit"); entry.put(entryOcls); entry.put("ou", "Singers"); String entryRdn = "ou=Singers"; ctx.createSubcontext(entryRdn, entry); String entryDn = ctx.getNameInNamespace(); // Create Alias String aliasedObjectName = entryRdn + "," + entryDn; Attributes alias = new BasicAttributes(); Attribute aliasOcls = new BasicAttribute("objectclass"); aliasOcls.add("top"); aliasOcls.add("alias"); aliasOcls.add("organizationalUnit"); alias.put(aliasOcls); alias.put("ou", "Songwriter"); alias.put("aliasedObjectName", aliasedObjectName); String rdnAlias = "ou=Songwriter,ou=Singers"; ctx.createSubcontext(rdnAlias, alias); // Remove alias and entry ctx.destroySubcontext(rdnAlias); ctx.destroySubcontext(entryRdn); } }