package add; 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 for DIRSERVER-752. Creates an entry and an alias to it. */ public class AddAliasTest 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. Afterwards, remove it. */ public void testAddAlias() 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", "favorite"); String entryRdn = "ou=favorite"; ctx.createSubcontext(entryRdn, entry); // Create Alias String aliasedObjectName = entryRdn + "," + ctx.getNameInNamespace(); Attributes alias = new BasicAttributes(); Attribute aliasOcls = new BasicAttribute("objectclass"); aliasOcls.add("top"); aliasOcls.add("alias"); alias.put(aliasOcls); alias.put("ou", "bestFruit"); alias.put("aliasedObjectName", aliasedObjectName); String rdnAlias = "ou=bestFruit"; ctx.createSubcontext(rdnAlias, alias); // Remove alias and entry ctx.destroySubcontext(rdnAlias); ctx.destroySubcontext(entryRdn); } /** * Try to add entry and an alias to it. Afterwards, remove it. This version * cretes a container entry before the operations. */ public void testAddAliasInContainer() throws NamingException { // Create container Attributes container = new BasicAttributes(); Attribute containerOcls = new BasicAttribute("objectclass"); containerOcls.add("top"); containerOcls.add("organizationalUnit"); container.put(containerOcls); container.put("ou", "Fruits"); String containerRdn = "ou=Fruits"; DirContext containerCtx = ctx.createSubcontext(containerRdn, container); // Create entry Attributes entry = new BasicAttributes(); Attribute entryOcls = new BasicAttribute("objectclass"); entryOcls.add("top"); entryOcls.add("organizationalUnit"); entry.put(entryOcls); entry.put("ou", "favorite"); String entryRdn = "ou=favorite"; containerCtx.createSubcontext(entryRdn, entry); // Create Alias String aliasedObjectName = entryRdn + "," + containerCtx.getNameInNamespace(); Attributes alias = new BasicAttributes(); Attribute aliasOcls = new BasicAttribute("objectclass"); aliasOcls.add("top"); aliasOcls.add("alias"); alias.put(aliasOcls); alias.put("ou", "bestFruit"); alias.put("aliasedObjectName", aliasedObjectName); String rdnAlias = "ou=bestFruit"; containerCtx.createSubcontext(rdnAlias, alias); // Remove alias and entry containerCtx.destroySubcontext(rdnAlias); containerCtx.destroySubcontext(entryRdn); // Remove container ctx.destroySubcontext(containerRdn); } }