You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by ak...@apache.org on 2005/08/24 18:46:34 UTC
svn commit: r239709 -
/directory/apacheds/trunk/main/src/test/org/apache/ldap/server/ModifyRdnTest.java
Author: akarasulu
Date: Wed Aug 24 09:46:31 2005
New Revision: 239709
URL: http://svn.apache.org/viewcvs?rev=239709&view=rev
Log:
adding stefan's test case from JIRA issue DIREVE-173 here:
http://issues.apache.org/jira/browse/DIREVE-173
Added:
directory/apacheds/trunk/main/src/test/org/apache/ldap/server/ModifyRdnTest.java
Added: directory/apacheds/trunk/main/src/test/org/apache/ldap/server/ModifyRdnTest.java
URL: http://svn.apache.org/viewcvs/directory/apacheds/trunk/main/src/test/org/apache/ldap/server/ModifyRdnTest.java?rev=239709&view=auto
==============================================================================
--- directory/apacheds/trunk/main/src/test/org/apache/ldap/server/ModifyRdnTest.java (added)
+++ directory/apacheds/trunk/main/src/test/org/apache/ldap/server/ModifyRdnTest.java Wed Aug 24 09:46:31 2005
@@ -0,0 +1,229 @@
+/*
+ * Copyright 2004 The Apache Software Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.ldap.server;
+
+import java.util.Hashtable;
+
+import javax.naming.NameNotFoundException;
+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.ldap.InitialLdapContext;
+import javax.naming.ldap.LdapContext;
+
+/**
+ * Testcase for DIREVE-173. Different modify DN operations on a person entry.
+ *
+ * @author szoerner
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev$
+ */
+public class ModifyRdnTest extends AbstractServerTest
+{
+
+ private LdapContext ctx = null;
+
+ protected Attributes getPersonAttributes(String sn, String cn)
+ {
+ Attributes attributes = new BasicAttributes();
+ Attribute attribute = new BasicAttribute("objectClass");
+ attribute.add("top");
+ attribute.add("person");
+ attributes.put(attribute);
+ attributes.put("cn", cn);
+ attributes.put("sn", sn);
+ attributes.put("description", cn + " is a person.");
+
+ return attributes;
+ }
+
+ /**
+ * Create an entry for a person.
+ */
+ public void setUp() throws Exception
+ {
+ super.setUp();
+
+ Hashtable env = new Hashtable();
+ env.put("java.naming.factory.initial", "com.sun.jndi.ldap.LdapCtxFactory");
+ env.put("java.naming.provider.url", "ldap://localhost:" + port + "/ou=system" );
+ env.put("java.naming.security.principal", "uid=admin,ou=system" );
+ env.put("java.naming.security.credentials", "secret" );
+ env.put("java.naming.security.authentication", "simple");
+
+ ctx = new InitialLdapContext(env, null);
+
+ assertNotNull(ctx);
+ }
+
+ /**
+ * Close context
+ */
+ public void tearDown() throws Exception
+ {
+ ctx.close();
+ ctx = null;
+
+ super.tearDown();
+ }
+
+ /**
+ * Just a little test to check wether opening the connection succeds.
+ */
+ public void testSetUpTearDown() throws NamingException
+ {
+ assertNotNull(ctx);
+ }
+
+ /**
+ * Modify Rdn of an entry, delete its old rdn value.
+ *
+ * @throws NamingException
+ */
+ public void testModifyRdnAndDeleteOld() throws NamingException
+ {
+ // Create a person, cn value is rdn
+ String oldCn = "Myra Ellen Amos";
+ String oldRdn = "cn=" + oldCn;
+ Attributes attributes = this.getPersonAttributes("Amos", oldCn);
+ ctx.createSubcontext(oldRdn, attributes);
+
+ // modify Rdn
+ String newCn = "Tori Amos";
+ String newRdn = "cn=" + newCn;
+ ctx.addToEnvironment("java.naming.ldap.deleteRDN", "true");
+ ctx.rename(oldRdn, newRdn);
+
+ // Check, whether old Entry does not exists
+ try {
+ ctx.lookup(oldRdn);
+ fail("Entry must not exist");
+ } catch (NameNotFoundException ignored) {
+ // expected behaviour
+ assertTrue(true);
+ }
+
+ // Check, whether new Entry exists
+ DirContext tori = (DirContext) ctx.lookup(newRdn);
+ assertNotNull(tori);
+
+ // Check values of cn
+ Attribute cn = tori.getAttributes("").get("cn");
+ assertTrue(cn.contains(newCn));
+ assertTrue(!cn.contains(oldCn)); // old vaue is gone
+ assertEquals(1, cn.size());
+
+ // Remove entry (use new rdn)
+ ctx.unbind(newRdn);
+ }
+
+ /**
+ * Modify Rdn of an entry, keep its old rdn value.
+ *
+ * @throws NamingException
+ */
+ public void testModifyRdnAndKeepOld() throws NamingException
+ {
+ // Create a person, cn value is rdn
+ String oldCn = "Myra Ellen Amos";
+ String oldRdn = "cn=" + oldCn;
+ Attributes attributes = this.getPersonAttributes("Amos", oldCn);
+ ctx.createSubcontext(oldRdn, attributes);
+
+ // modify Rdn
+ String newCn = "Tori Amos";
+ String newRdn = "cn=" + newCn;
+ ctx.addToEnvironment("java.naming.ldap.deleteRDN", "false");
+ ctx.rename(oldRdn, newRdn);
+
+ // Check, whether old entry does not exist
+ try {
+ ctx.lookup(oldRdn);
+ fail("Entry must not exist");
+ } catch (NameNotFoundException ignored) {
+ // expected behaviour
+ assertTrue(true);
+ }
+
+ // Check, whether new entry exists
+ DirContext tori = (DirContext) ctx.lookup(newRdn);
+ assertNotNull(tori);
+
+ // Check values of cn
+ Attribute cn = tori.getAttributes("").get("cn");
+ assertTrue(cn.contains(newCn));
+ assertTrue(cn.contains(oldCn)); // old vaue is still there
+ assertEquals(2, cn.size());
+
+ // Remove entry (use new rdn)
+ ctx.unbind(newRdn);
+ }
+
+ /**
+ * Modify Rdn of an entry, delete its old rdn value. Here, the rdn attribute
+ * cn has another value as well.
+ *
+ * @throws NamingException
+ */
+ public void testModifyRdnAndDeleteOldVariant() throws NamingException
+ {
+ // Create a person, cn value is rdn
+ String oldCn = "Myra Ellen Amos";
+ String oldRdn = "cn=" + oldCn;
+ Attributes attributes = this.getPersonAttributes("Amos", oldCn);
+
+ // add a second cn value
+ String alternateCn = "Myra E. Amos";
+ Attribute cn = attributes.get("cn");
+ cn.add(alternateCn);
+ assertEquals(2, cn.size());
+
+ ctx.createSubcontext(oldRdn, attributes);
+
+ // modify Rdn
+ String newCn = "Tori Amos";
+ String newRdn = "cn=" + newCn;
+ ctx.addToEnvironment("java.naming.ldap.deleteRDN", "true");
+ ctx.rename(oldRdn, newRdn);
+
+ // Check, whether old Entry does not exist anymore
+ try {
+ ctx.lookup(oldRdn);
+ fail("Entry must not exist");
+ } catch (NameNotFoundException ignored) {
+ // expected behaviour
+ assertTrue(true);
+ }
+
+ // Check, whether new Entry exists
+ DirContext tori = (DirContext) ctx.lookup(newRdn);
+ assertNotNull(tori);
+
+ // Check values of cn
+ cn = tori.getAttributes("").get("cn");
+ assertTrue(cn.contains(newCn));
+ assertTrue(!cn.contains(oldCn)); // old value is gone
+ assertTrue(cn.contains(alternateCn)); // alternate value is still available
+ assertEquals(2, cn.size());
+
+ // Remove entry (use new rdn)
+ ctx.unbind(newRdn);
+ }
+}