You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by el...@apache.org on 2006/08/20 22:26:15 UTC

svn commit: r433030 - /directory/branches/apacheds/1.0/server-unit/src/test/java/org/apache/directory/server/AddingEntriesWithSpecialCharactersInRDNTest.java

Author: elecharny
Date: Sun Aug 20 13:26:15 2006
New Revision: 433030

URL: http://svn.apache.org/viewvc?rev=433030&view=rev
Log:
Added Stefan tests for DIRSERVER-631. Two tests 
have been commented because there is a pb with JNDI

Added:
    directory/branches/apacheds/1.0/server-unit/src/test/java/org/apache/directory/server/AddingEntriesWithSpecialCharactersInRDNTest.java

Added: directory/branches/apacheds/1.0/server-unit/src/test/java/org/apache/directory/server/AddingEntriesWithSpecialCharactersInRDNTest.java
URL: http://svn.apache.org/viewvc/directory/branches/apacheds/1.0/server-unit/src/test/java/org/apache/directory/server/AddingEntriesWithSpecialCharactersInRDNTest.java?rev=433030&view=auto
==============================================================================
--- directory/branches/apacheds/1.0/server-unit/src/test/java/org/apache/directory/server/AddingEntriesWithSpecialCharactersInRDNTest.java (added)
+++ directory/branches/apacheds/1.0/server-unit/src/test/java/org/apache/directory/server/AddingEntriesWithSpecialCharactersInRDNTest.java Sun Aug 20 13:26:15 2006
@@ -0,0 +1,296 @@
+/*
+ *   Copyright 2006 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.directory.server;
+
+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 org.apache.directory.server.unit.AbstractServerTest;
+
+import junit.framework.TestCase;
+
+/**
+ * Test case to demonstrate DIRSERVER-631 ("Creation of entry with special (and
+ * escaped) character in RDN leads to wrong attribute value").
+ * 
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class AddingEntriesWithSpecialCharactersInRDNTest extends AbstractServerTest {
+    private DirContext ctx = null;
+
+
+    /**
+     * 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 InitialDirContext( env );
+    }
+
+    /**
+     * Remove the person.
+     */
+    public void tearDown() throws Exception
+    {
+        ctx.close();
+        ctx = null;
+        super.tearDown();
+    }
+
+   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 Attributes getOrgUnitAttributes(String ou) {
+
+       Attributes attrs = new BasicAttributes();
+       Attribute ocls = new BasicAttribute("objectClass");
+       ocls.add("top");
+       ocls.add("organizationalUnit");
+       attrs.put(ocls);
+       attrs.put("ou", ou);
+
+       return attrs;
+   }
+
+   /**
+    * adding an entry with hash sign (#) in RDN.
+    */
+   public void testAddingWithHashRdn() throws NamingException {
+       Attributes attrs = getPersonAttributes("Bush", "Kate#Bush");
+       String rdn = "cn=Kate\\#Bush";
+       ctx.createSubcontext(rdn, attrs);
+
+       SearchControls sctls = new SearchControls();
+       sctls.setSearchScope(SearchControls.SUBTREE_SCOPE);
+
+       NamingEnumeration enm = ctx.search("", "(cn=Kate\\#Bush)", sctls);
+       assertEquals("entry found", true, enm.hasMore());
+       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);
+   }
+
+   /**
+    * adding an entry with comma sign (,) in RDN.
+    */
+   public void testAddingWithCommaInRdn() throws NamingException {
+
+       Attributes attrs = getPersonAttributes("Bush", "Bush, Kate");
+       String rdn = "cn=Bush\\, Kate";
+       ctx.createSubcontext(rdn, attrs);
+
+       SearchControls sctls = new SearchControls();
+       sctls.setSearchScope(SearchControls.SUBTREE_SCOPE);
+
+       NamingEnumeration enm = ctx.search("", "(cn=Bush, Kate)", sctls);
+       assertEquals("entry found", true, enm.hasMore());
+       while (enm.hasMore()) {
+           SearchResult sr = (SearchResult) enm.next();
+           attrs = sr.getAttributes();
+           Attribute cn = sr.getAttributes().get("cn");
+           assertNotNull(cn);
+           assertTrue(cn.contains("Bush, Kate"));
+       }
+
+       ctx.destroySubcontext(rdn);
+   }
+
+   /**
+    * adding an entry with quotes (") in RDN.
+    */
+/*   public void testAddingWithQuotesInRdn() throws NamingException {
+
+       Attributes attrs = getPersonAttributes("Messer",
+               "Mackie \\\\\\\"The Knife\" Messer");
+       String rdn = "cn=Mackie \\\"The Knife\" Messer";
+       ctx.createSubcontext(rdn, attrs);
+
+       SearchControls sctls = new SearchControls();
+       sctls.setSearchScope(SearchControls.SUBTREE_SCOPE);
+
+       NamingEnumeration enm = ctx.search("",
+               "(cn=Mackie \"The Knife\" Messer)", sctls);
+       assertEquals("entry found", true, enm.hasMore());
+       while (enm.hasMore()) {
+           SearchResult sr = (SearchResult) enm.next();
+           attrs = sr.getAttributes();
+           Attribute cn = sr.getAttributes().get("cn");
+           assertNotNull(cn);
+           assertTrue(cn.contains("Mackie \"The Knife\" Messer"));
+       }
+
+       ctx.destroySubcontext(rdn);
+   }
+*/
+   /**
+    * adding an entry with backslash (\) in RDN.
+    */
+/*   public void testAddingWithBackslashInRdn() throws NamingException {
+
+       Attributes attrs = getOrgUnitAttributes("AC\\DC");
+       String rdn = "ou=AC\\\\DC";
+       ctx.createSubcontext(rdn, attrs);
+
+       SearchControls sctls = new SearchControls();
+       sctls.setSearchScope(SearchControls.SUBTREE_SCOPE);
+
+       NamingEnumeration enm = ctx.search("", "(ou=AC\\DC)", sctls);
+       assertEquals("entry found", true, enm.hasMore());
+       while (enm.hasMore()) {
+           SearchResult sr = (SearchResult) enm.next();
+           attrs = sr.getAttributes();
+           Attribute ou = sr.getAttributes().get("ou");
+           assertNotNull(ou);
+           assertTrue(ou.contains("AC\\DC"));
+       }
+
+       ctx.destroySubcontext(rdn);
+   }
+*/
+   /**
+    * adding an entry with greater sign (>) in RDN.
+    */
+   public void testAddingWithGreaterSignInRdn() throws NamingException {
+
+       Attributes attrs = getOrgUnitAttributes("East -> West");
+       String rdn = "ou=East -\\> West";
+       ctx.createSubcontext(rdn, attrs);
+
+       SearchControls sctls = new SearchControls();
+       sctls.setSearchScope(SearchControls.SUBTREE_SCOPE);
+
+       NamingEnumeration enm = ctx.search("", "(ou=East -> West)", sctls);
+       assertEquals("entry found", true, enm.hasMore());
+       while (enm.hasMore()) {
+           SearchResult sr = (SearchResult) enm.next();
+           attrs = sr.getAttributes();
+           Attribute ou = sr.getAttributes().get("ou");
+           assertNotNull(ou);
+           assertTrue(ou.contains("East -> West"));
+       }
+
+       ctx.destroySubcontext(rdn);
+   }
+
+   /**
+    * adding an entry with less sign (<) in RDN.
+    */
+   public void testAddingWithLessSignInRdn() throws NamingException {
+
+       Attributes attrs = getOrgUnitAttributes("Scissors 8<");
+       String rdn = "ou=Scissors 8\\<";
+       ctx.createSubcontext(rdn, attrs);
+
+       SearchControls sctls = new SearchControls();
+       sctls.setSearchScope(SearchControls.SUBTREE_SCOPE);
+
+       NamingEnumeration enm = ctx.search("", "(ou=Scissors 8<)", sctls);
+       assertEquals("entry found", true, enm.hasMore());
+       while (enm.hasMore()) {
+           SearchResult sr = (SearchResult) enm.next();
+           attrs = sr.getAttributes();
+           Attribute ou = sr.getAttributes().get("ou");
+           assertNotNull(ou);
+           assertTrue(ou.contains("Scissors 8<"));
+       }
+
+       ctx.destroySubcontext(rdn);
+   }
+
+   /**
+    * adding an entry with semicolon (;) in RDN.
+    */
+   public void testAddingWithSemicolonInRdn() throws NamingException {
+
+       Attributes attrs = getOrgUnitAttributes("semicolon group;");
+       String rdn = "ou=semicolon group\\;";
+       ctx.createSubcontext(rdn, attrs);
+
+       SearchControls sctls = new SearchControls();
+       sctls.setSearchScope(SearchControls.SUBTREE_SCOPE);
+
+       NamingEnumeration enm = ctx.search("", "(ou=semicolon group;)", sctls);
+       assertEquals("entry found", true, enm.hasMore());
+       while (enm.hasMore()) {
+           SearchResult sr = (SearchResult) enm.next();
+           attrs = sr.getAttributes();
+           Attribute ou = sr.getAttributes().get("ou");
+           assertNotNull(ou);
+           assertTrue(ou.contains("semicolon group;"));
+       }
+
+       ctx.destroySubcontext(rdn);
+   }
+
+   /**
+    * adding an entry with equals sign (=) in RDN.
+    */
+   public void testAddingWithEqualsInRdn() throws NamingException {
+
+       Attributes attrs = getOrgUnitAttributes("nomen=omen");
+       String rdn = "ou=nomen\\=omen";
+       ctx.createSubcontext(rdn, attrs);
+
+       SearchControls sctls = new SearchControls();
+       sctls.setSearchScope(SearchControls.SUBTREE_SCOPE);
+
+       NamingEnumeration enm = ctx.search("", "(ou=nomen=omen)", sctls);
+       assertEquals("entry found", true, enm.hasMore());
+       while (enm.hasMore()) {
+           SearchResult sr = (SearchResult) enm.next();
+           attrs = sr.getAttributes();
+           Attribute ou = sr.getAttributes().get("ou");
+           assertNotNull(ou);
+           assertTrue(ou.contains("nomen=omen"));
+       }
+
+       ctx.destroySubcontext(rdn);
+   }
+}
\ No newline at end of file