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/11/09 15:00:09 UTC

svn commit: r593527 - /directory/shared/branches/bigbang/ldap/src/test/java/org/apache/directory/shared/ldap/ldif/LdifUtilsTest.java

Author: elecharny
Date: Fri Nov  9 06:00:09 2007
New Revision: 593527

URL: http://svn.apache.org/viewvc?rev=593527&view=rev
Log:
Added some more tests for the modify operation

Modified:
    directory/shared/branches/bigbang/ldap/src/test/java/org/apache/directory/shared/ldap/ldif/LdifUtilsTest.java

Modified: directory/shared/branches/bigbang/ldap/src/test/java/org/apache/directory/shared/ldap/ldif/LdifUtilsTest.java
URL: http://svn.apache.org/viewvc/directory/shared/branches/bigbang/ldap/src/test/java/org/apache/directory/shared/ldap/ldif/LdifUtilsTest.java?rev=593527&r1=593526&r2=593527&view=diff
==============================================================================
--- directory/shared/branches/bigbang/ldap/src/test/java/org/apache/directory/shared/ldap/ldif/LdifUtilsTest.java (original)
+++ directory/shared/branches/bigbang/ldap/src/test/java/org/apache/directory/shared/ldap/ldif/LdifUtilsTest.java Fri Nov  9 06:00:09 2007
@@ -19,18 +19,26 @@
  */
 package org.apache.directory.shared.ldap.ldif;
 
+import java.util.List;
+
+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.ModificationItem;
 
 import org.apache.directory.shared.ldap.message.AddRequest;
 import org.apache.directory.shared.ldap.message.AddRequestImpl;
 import org.apache.directory.shared.ldap.message.AttributeImpl;
 import org.apache.directory.shared.ldap.message.AttributesImpl;
+import org.apache.directory.shared.ldap.message.ModificationItemImpl;
 import org.apache.directory.shared.ldap.message.ModifyDnRequest;
 import org.apache.directory.shared.ldap.message.ModifyDnRequestImpl;
+import org.apache.directory.shared.ldap.message.ModifyRequest;
+import org.apache.directory.shared.ldap.message.ModifyRequestImpl;
 import org.apache.directory.shared.ldap.name.LdapDN;
 import org.apache.directory.shared.ldap.name.Rdn;
 import org.junit.Test;
@@ -52,6 +60,26 @@
 {
 	private String testString = "this is a test";
 	
+    /**
+     * Helper method to build a basic entry used by the Modify tests
+     */
+    private Attributes buildEntry()
+    {
+        Attributes entry = new AttributesImpl();
+        
+        Attribute oc = new AttributeImpl( "objectclass" );
+        oc.add( "top" );
+        oc.add( "person" );
+        entry.put( oc );
+        
+        entry.put( "cn", "test" );
+        entry.put( "sn", "joe doe" );
+        entry.put( "l", "USA" );
+        
+        return entry;
+    }
+
+    
 	/**
 	 * Tests the method IsLdifSafe with a String starting with the
 	 * char NUL (ASCII code 0)
@@ -540,5 +568,411 @@
         assertEquals( new Rdn( "cn=test" ).getUpName(), reversed.getNewRdn() );
         assertNotNull( reversed.getNewSuperior() );
         assertEquals( new LdapDN( "dc=example, dc=com" ).getUpName(), reversed.getNewSuperior() );
+    }
+
+    
+    /**
+     * Test a reversed Modify adding a new attribute value
+     * in an exiting attribute
+     */
+    @Test
+    public void testReverseModifyAddNewOuValue() throws NamingException
+    {
+        Attributes modifiedEntry = buildEntry();
+
+        Attribute ou = new AttributeImpl( "ou" );
+        ou.add( "apache" );
+        ou.add( "acme corp" );
+        modifiedEntry.put( ou );
+        
+        ModifyRequest modify = new ModifyRequestImpl( 1 );
+        
+        LdapDN dn = new LdapDN( "cn=test, ou=system" );
+        ModificationItem mod = new ModificationItemImpl( 
+            DirContext.ADD_ATTRIBUTE, 
+            new AttributeImpl( "ou", "BigCompany inc." ) );
+
+        modify.setName( dn );
+        modify.addModification( mod );
+        
+        Entry reversed = LdifUtils.reverseModify( modify, modifiedEntry );
+
+        assertNotNull( reversed );
+        assertEquals( dn.getUpName(), reversed.getDn() );
+        assertEquals( ChangeType.Modify, reversed.getChangeType() );
+        assertNull( reversed.getAttributes() );
+        List<ModificationItemImpl> mods = reversed.getModificationItems();
+        
+        assertNotNull( mods );
+        assertEquals( 1, mods.size() );
+        
+        ModificationItemImpl modif = mods.get( 0 );
+        
+        assertEquals( DirContext.REMOVE_ATTRIBUTE, modif.getModificationOp() );
+
+        Attribute attr = modif.getAttribute();
+        
+        assertNotNull( attr );
+        assertEquals( "ou", attr.getID() );
+        assertEquals( "BigCompany inc.", attr.get() );
+    }
+
+
+    /**
+     * Test a reversed Modify adding a new attribute
+     */
+    @Test
+    public void testReverseModifyAddNewOu() throws NamingException
+    {
+        Attributes modifiedEntry = buildEntry();
+        
+        ModifyRequest modify = new ModifyRequestImpl( 1 );
+        
+        LdapDN dn = new LdapDN( "cn=test, ou=system" );
+        ModificationItem mod = new ModificationItemImpl( 
+            DirContext.ADD_ATTRIBUTE, 
+            new AttributeImpl( "ou", "BigCompany inc." ) );
+
+        modify.setName( dn );
+        modify.addModification( mod );
+        
+        Entry reversed = LdifUtils.reverseModify( modify, modifiedEntry );
+
+        assertNotNull( reversed );
+        assertEquals( dn.getUpName(), reversed.getDn() );
+        assertEquals( ChangeType.Modify, reversed.getChangeType() );
+        assertNull( reversed.getAttributes() );
+        List<ModificationItemImpl> mods = reversed.getModificationItems();
+        
+        assertNotNull( mods );
+        assertEquals( 1, mods.size() );
+        
+        ModificationItemImpl modif = mods.get( 0 );
+
+        assertEquals( DirContext.REMOVE_ATTRIBUTE, modif.getModificationOp() );
+
+        Attribute attr = modif.getAttribute();
+        
+        assertNotNull( attr );
+        assertEquals( "ou", attr.getID() );
+        assertEquals( "BigCompany inc.", attr.get() );
+    }
+
+   
+    /**
+     * Test a reversed Modify adding a existing attribute value
+     */
+    @Test
+    public void testReverseModifyAddExistingCnValue() throws NamingException
+    {
+        Attributes modifiedEntry = buildEntry();
+        
+        ModifyRequest modify = new ModifyRequestImpl( 1 );
+        
+        LdapDN dn = new LdapDN( "cn=test, ou=system" );
+        ModificationItem mod = new ModificationItemImpl( 
+            DirContext.ADD_ATTRIBUTE, 
+            new AttributeImpl( "cn", "test" ) );
+
+        modify.setName( dn );
+        modify.addModification( mod );
+        
+        Entry reversed = LdifUtils.reverseModify( modify, modifiedEntry );
+
+        assertNull( reversed );
+    }
+
+    
+    /**
+     * Test a reversed Modify adding a existing value from an existing attribute
+     */
+    @Test
+    public void testReverseModifyDelExistingOuValue() throws NamingException
+    {
+        Attributes modifiedEntry = buildEntry();
+        
+        Attribute ou = new AttributeImpl( "ou" );
+        ou.add( "apache" );
+        ou.add( "acme corp" );
+        modifiedEntry.put( ou );
+
+        ModifyRequest modify = new ModifyRequestImpl( 1 );
+        
+        LdapDN dn = new LdapDN( "cn=test, ou=system" );
+
+        ModificationItem mod = new ModificationItemImpl( 
+            DirContext.REMOVE_ATTRIBUTE, 
+            new AttributeImpl( "ou", "acme corp" ) );
+
+        modify.setName( dn );
+        modify.addModification( mod );
+        
+        Entry reversed = LdifUtils.reverseModify( modify, modifiedEntry );
+
+
+        assertNotNull( reversed );
+        assertEquals( dn.getUpName(), reversed.getDn() );
+        assertEquals( ChangeType.Modify, reversed.getChangeType() );
+        assertNull( reversed.getAttributes() );
+        
+        List<ModificationItemImpl> mods = reversed.getModificationItems();
+        
+        assertNotNull( mods );
+        assertEquals( 1, mods.size() );
+        
+        ModificationItemImpl modif = mods.get( 0 );
+        
+        assertEquals( DirContext.ADD_ATTRIBUTE, modif.getModificationOp() );
+
+        Attribute attr = modif.getAttribute();
+        
+        assertNotNull( attr );
+
+        Attribute addedAttr = new AttributeImpl( "ou", "acme corp" );
+        assertEquals( addedAttr, attr );
+    }
+
+
+    /**
+     * Test a reversed Modify deleting an existing attribute
+     */
+    @Test
+    public void testReverseModifyDeleteOU() throws NamingException
+    {
+        Attributes modifiedEntry = buildEntry();
+        
+        Attribute ou = new AttributeImpl( "ou" );
+        ou.add( "apache" );
+        ou.add( "acme corp" );
+        modifiedEntry.put( ou );
+
+        ModifyRequest modify = new ModifyRequestImpl( 1 );
+        
+        LdapDN dn = new LdapDN( "cn=test, ou=system" );
+
+        ModificationItem mod = new ModificationItemImpl( 
+            DirContext.REMOVE_ATTRIBUTE, 
+            new AttributeImpl( "ou" ) );
+
+        modify.setName( dn );
+        modify.addModification( mod );
+        
+        Entry reversed = LdifUtils.reverseModify( modify, modifiedEntry );
+
+        assertNotNull( reversed );
+        assertEquals( dn.getUpName(), reversed.getDn() );
+        assertEquals( ChangeType.Modify, reversed.getChangeType() );
+        assertNull( reversed.getAttributes() );
+        
+        List<ModificationItemImpl> mods = reversed.getModificationItems();
+        
+        assertNotNull( mods );
+        assertEquals( 1, mods.size() );
+        
+        ModificationItemImpl modif = mods.get( 0 );
+        
+        assertEquals( DirContext.ADD_ATTRIBUTE, modif.getModificationOp() );
+
+        Attribute attr = modif.getAttribute();
+        
+        assertNotNull( attr );
+        assertEquals( "ou", attr.getID() );
+        
+        assertEquals( ou, attr );
+    }
+
+   
+    /**
+     * Test a reversed Modify deleting all values of an existing attribute
+     */
+    @Test
+    public void testReverseModifyDelExistingOuWithAllValues() throws NamingException
+    {
+        Attributes modifiedEntry = buildEntry();
+
+        Attribute ou = new AttributeImpl( "ou" );
+        ou.add( "apache" );
+        ou.add( "acme corp" );
+        modifiedEntry.put( ou );
+        
+        ModifyRequest modify = new ModifyRequestImpl( 1 );
+        
+        LdapDN dn = new LdapDN( "cn=test, ou=system" );
+        
+        ModificationItem mod = new ModificationItemImpl( 
+            DirContext.REMOVE_ATTRIBUTE, ou );
+
+        modify.setName( dn );
+        modify.addModification( mod );
+        
+        Entry reversed = LdifUtils.reverseModify( modify, modifiedEntry );
+
+        assertNotNull( reversed );
+        assertEquals( dn.getUpName(), reversed.getDn() );
+        assertEquals( ChangeType.Modify, reversed.getChangeType() );
+        assertNull( reversed.getAttributes() );
+        
+        List<ModificationItemImpl> mods = reversed.getModificationItems();
+        
+        assertNotNull( mods );
+        assertEquals( 1, mods.size() );
+        
+        ModificationItemImpl modif = mods.get( 0 );
+        
+        assertEquals( DirContext.ADD_ATTRIBUTE, modif.getModificationOp() );
+
+        Attribute attr = modif.getAttribute();
+        
+        assertNotNull( attr );
+        assertEquals( "ou", attr.getID() );
+        
+        assertEquals( ou, attr );
+    }
+
+    
+    /**
+     * Test a reversed Modify replacing existing values with new values
+     */
+    @Test
+    public void testReverseModifyReplaceExistingOuValues() throws NamingException
+    {
+        Attributes modifiedEntry = buildEntry();
+        
+        Attribute ou = new AttributeImpl( "ou" );
+        ou.add( "apache" );
+        ou.add( "acme corp" );
+        modifiedEntry.put( ou );
+
+        LdapDN dn = new LdapDN( "cn=test, ou=system" );
+
+        ModifyRequest modify = new ModifyRequestImpl( 1 );
+        
+        Attribute ouModified = new AttributeImpl( "ou" );
+        ouModified.add( "directory" );
+        ouModified.add( "BigCompany inc." );
+        
+        ModificationItem mod = new ModificationItemImpl( 
+            DirContext.REPLACE_ATTRIBUTE, ouModified );
+
+        modify.setName( dn );
+        modify.addModification( mod );
+        
+        Entry reversed = LdifUtils.reverseModify( modify, modifiedEntry );
+
+
+        assertNotNull( reversed );
+        assertEquals( dn.getUpName(), reversed.getDn() );
+        assertEquals( ChangeType.Modify, reversed.getChangeType() );
+        assertNull( reversed.getAttributes() );
+        
+        List<ModificationItemImpl> mods = reversed.getModificationItems();
+        
+        assertNotNull( mods );
+        assertEquals( 1, mods.size() );
+        
+        ModificationItemImpl modif = mods.get( 0 );
+        
+        assertEquals( DirContext.REPLACE_ATTRIBUTE, modif.getModificationOp() );
+
+        Attribute attr = modif.getAttribute();
+        
+        assertNotNull( attr );
+        assertEquals( ou, attr );
+    }
+
+
+    /**
+     * Test a reversed Modify replace by injecting a new attribute
+     */
+    @Test
+    public void testReverseModifyReplaceNewAttribute() throws NamingException
+    {
+        Attributes modifiedEntry = buildEntry();
+        
+        ModifyRequest modify = new ModifyRequestImpl( 1 );
+        
+        LdapDN dn = new LdapDN( "cn=test, ou=system" );
+        
+        Attribute newOu = new AttributeImpl( "ou" );
+        newOu.add( "apache" );
+        newOu.add( "acme corp" );
+
+        
+        ModificationItem mod = new ModificationItemImpl( 
+            DirContext.REPLACE_ATTRIBUTE, newOu );
+
+        modify.setName( dn );
+        modify.addModification( mod );
+        
+        Entry reversed = LdifUtils.reverseModify( modify, modifiedEntry );
+
+        assertNotNull( reversed );
+        assertEquals( dn.getUpName(), reversed.getDn() );
+        assertEquals( ChangeType.Modify, reversed.getChangeType() );
+        assertNull( reversed.getAttributes() );
+        
+        List<ModificationItemImpl> mods = reversed.getModificationItems();
+        
+        assertNotNull( mods );
+        assertEquals( 1, mods.size() );
+        
+        ModificationItemImpl modif = mods.get( 0 );
+        
+        assertEquals( DirContext.REPLACE_ATTRIBUTE, modif.getModificationOp() );
+
+        Attribute attr = modif.getAttribute();
+        
+        assertNotNull( attr );
+        assertEquals( "ou", attr.getID() );
+        
+        assertNull( attr.get() );
+    }
+
+   
+    /**
+     * Test a reversed Modify replace by removing an attribute
+     */
+    @Test
+    public void testReverseModifyReplaceExistingOuWithNothing() throws NamingException
+    {
+        Attributes modifiedEntry = buildEntry();
+
+        Attribute ou = new AttributeImpl( "ou" );
+        ou.add( "apache" );
+        ou.add( "acme corp" );
+        modifiedEntry.put( ou );
+        
+        ModifyRequest modify = new ModifyRequestImpl( 1 );
+        
+        LdapDN dn = new LdapDN( "cn=test, ou=system" );
+        
+        ModificationItem mod = new ModificationItemImpl( 
+            DirContext.REPLACE_ATTRIBUTE, new AttributeImpl( "ou" ) );
+
+        modify.setName( dn );
+        modify.addModification( mod );
+        
+        Entry reversed = LdifUtils.reverseModify( modify, modifiedEntry );
+
+        assertNotNull( reversed );
+        assertEquals( dn.getUpName(), reversed.getDn() );
+        assertEquals( ChangeType.Modify, reversed.getChangeType() );
+        assertNull( reversed.getAttributes() );
+        
+        List<ModificationItemImpl> mods = reversed.getModificationItems();
+        
+        assertNotNull( mods );
+        assertEquals( 1, mods.size() );
+        
+        ModificationItemImpl modif = mods.get( 0 );
+        
+        assertEquals( DirContext.REPLACE_ATTRIBUTE, modif.getModificationOp() );
+
+        Attribute attr = modif.getAttribute();
+        
+        assertNotNull( attr );
+        assertEquals( "ou", attr.getID() );
+        
+        assertEquals( ou, attr );
     }
 }