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 2007/01/05 15:13:45 UTC

svn commit: r493038 - /directory/branches/apacheds/1.0/core-unit/src/test/java/org/apache/directory/server/core/jndi/DIRSERVER791ITest.java

Author: elecharny
Date: Fri Jan  5 06:13:45 2007
New Revision: 493038

URL: http://svn.apache.org/viewvc?view=rev&rev=493038
Log:
Added the testCase Stefan Szoerner submitted to test DIRSERVER-791

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

Added: directory/branches/apacheds/1.0/core-unit/src/test/java/org/apache/directory/server/core/jndi/DIRSERVER791ITest.java
URL: http://svn.apache.org/viewvc/directory/branches/apacheds/1.0/core-unit/src/test/java/org/apache/directory/server/core/jndi/DIRSERVER791ITest.java?view=auto&rev=493038
==============================================================================
--- directory/branches/apacheds/1.0/core-unit/src/test/java/org/apache/directory/server/core/jndi/DIRSERVER791ITest.java (added)
+++ directory/branches/apacheds/1.0/core-unit/src/test/java/org/apache/directory/server/core/jndi/DIRSERVER791ITest.java Fri Jan  5 06:13:45 2007
@@ -0,0 +1,183 @@
+
+package org.apache.directory.server.core.jndi;
+
+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 javax.naming.directory.InvalidAttributeIdentifierException;
+import javax.naming.directory.InvalidAttributeValueException;
+import javax.naming.directory.ModificationItem;
+import javax.naming.directory.SchemaViolationException;
+
+import org.apache.directory.server.core.unit.AbstractAdminTestCase;
+
+/**
+ * A test case which demonstrates the three defects described in DIRSERVER-791.
+ * 
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+public class DIRSERVER791ITest extends AbstractAdminTestCase
+{
+    /**
+     * Returns the attributes as depicted as test data in DIRSERVER-791
+     */
+    protected Attributes getTestEntryAttributes() {
+
+        Attributes attrs = new BasicAttributes();
+        Attribute ocls = new BasicAttribute("objectClass");
+        ocls.add("top");
+        ocls.add("person");
+        ocls.add("organizationalPerson");
+        ocls.add("inetOrgPerson");
+        attrs.put(ocls);
+        
+        Attribute cn = new BasicAttribute("cn");
+        cn.add("test");
+        cn.add("aaa");
+        attrs.put(cn);
+        
+        attrs.put("sn", "test");
+
+        return attrs;
+    }
+
+    protected void setUp() throws Exception 
+    {
+        super.setUp();
+
+        Attributes entry = this.getTestEntryAttributes();
+        sysRoot.createSubcontext("cn=test", entry);
+    }
+
+    /**
+     * Demonstrates that removal of a value from RDN attribute which is not part
+     * of the RDN is not possible.
+     */
+    public void testDefect1a() throws NamingException 
+    {
+
+        Hashtable env = configuration.toJndiEnvironment();
+        env.put( Context.INITIAL_CONTEXT_FACTORY, CoreContextFactory.class.getName() );
+        env.put( Context.PROVIDER_URL, "ou=system" );
+
+        DirContext ctx = new InitialDirContext( env );
+        Attribute attr = new BasicAttribute("cn", "aaa");
+        ModificationItem modification = new ModificationItem( DirContext.REMOVE_ATTRIBUTE, attr );
+        ctx.modifyAttributes( "cn=test", new ModificationItem[] { modification } );
+
+        Attributes attrs = ctx.getAttributes("cn=test", new String[] { "cn" });
+        Attribute cn = attrs.get("cn");
+
+        assertEquals("number of cn values", 1, cn.size());
+        assertTrue( cn.contains("test") );
+        assertFalse( cn.contains("aaa") );
+    }
+
+    /**
+     * Checks whether it is possible to replace the cn attribute with a single
+     * value. The JIRA issue states that this one works.
+     */
+    public void testDefect1b() throws NamingException 
+    {
+        Hashtable env = configuration.toJndiEnvironment();
+        env.put( Context.INITIAL_CONTEXT_FACTORY, CoreContextFactory.class.getName() );
+        env.put( Context.PROVIDER_URL, "ou=system" );
+
+        DirContext ctx = new InitialDirContext( env );
+
+        Attribute attr = new BasicAttribute("cn", "test");
+        ModificationItem modification = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, attr);
+        ctx.modifyAttributes("cn=test", new ModificationItem[] { modification });
+
+        Attributes attrs = ctx.getAttributes("cn=test", new String[] { "cn" });
+        Attribute cn = attrs.get("cn");
+
+        assertEquals("number of cn values", 1, cn.size());
+        assertTrue(cn.contains("test"));
+        assertFalse(cn.contains("aaa"));
+    }
+
+    /**
+     * It is possible to add an value to objectclass, which isn't a valid
+     * objectclass. The server returns an error, but nevertheless the invalid
+     * value is stored. I think this should be rejected from server.
+     */
+    public void testDefect2() throws NamingException 
+    {
+        Hashtable env = configuration.toJndiEnvironment();
+        env.put( Context.INITIAL_CONTEXT_FACTORY, CoreContextFactory.class.getName() );
+        env.put( Context.PROVIDER_URL, "ou=system" );
+
+        DirContext ctx = new InitialDirContext( env );
+
+
+        Attribute attr = new BasicAttribute( "objectclass", "test" );
+        ModificationItem modification = new ModificationItem(DirContext.ADD_ATTRIBUTE, attr);
+        
+        try 
+        {
+            ctx.modifyAttributes("cn=test", new ModificationItem[] { modification });
+            fail("Exception expected");
+        } 
+        catch ( SchemaViolationException sve ) 
+        {
+            // Valid behavior
+        } 
+        catch ( InvalidAttributeValueException iave ) 
+        {
+            // Valid behavior
+        }
+        catch ( NamingException ne )
+        {
+            // Valid behavior
+        }
+
+        Attributes attrs = ctx.getAttributes("cn=test", new String[] { "objectClass" });
+        Attribute ocls = attrs.get("objectClass");
+
+        assertEquals("number of objectClasses", 4, ocls.size());
+        assertTrue(ocls.contains("top"));
+        assertTrue(ocls.contains("person"));
+        assertTrue(ocls.contains("organizationalPerson"));
+        assertTrue(ocls.contains("inetOrgPerson"));
+        assertFalse(ocls.contains("test"));
+    }
+
+    /**
+     * It is possible to add an attribute to the entry that is not allowed
+     * according the objectclasses. The server should reject this.
+     */
+    public void testDefect3() throws NamingException 
+    {
+        Hashtable env = configuration.toJndiEnvironment();
+        env.put( Context.INITIAL_CONTEXT_FACTORY, CoreContextFactory.class.getName() );
+        env.put( Context.PROVIDER_URL, "ou=system" );
+
+        DirContext ctx = new InitialDirContext( env );
+
+
+        Attribute attr = new BasicAttribute("bootParameter", "test");
+        ModificationItem modification = new ModificationItem(DirContext.ADD_ATTRIBUTE, attr);
+    
+        try 
+        {
+            ctx.modifyAttributes("cn=test", new ModificationItem[] { modification });
+            fail("Exception expected");
+        } 
+        catch (SchemaViolationException sve) 
+        {
+            // Valid behavior
+        } 
+        catch (InvalidAttributeIdentifierException iaie) 
+        {
+            // Valid behavior
+        }
+    }
+}