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 2011/03/18 00:39:24 UTC

svn commit: r1082748 - in /directory/shared/trunk/ldap/model/src: main/java/org/apache/directory/shared/ldap/model/ldif/ test/java/org/apache/directory/shared/ldap/model/ldif/

Author: elecharny
Date: Thu Mar 17 23:39:23 2011
New Revision: 1082748

URL: http://svn.apache.org/viewvc?rev=1082748&view=rev
Log:
o Added a LdifControlSerializer test
o Added a LdifEntrySerializer test
o Fixed a NPE in LdifEntry.equals() method

Added:
    directory/shared/trunk/ldap/model/src/test/java/org/apache/directory/shared/ldap/model/ldif/LdifEntrySerializationTest.java
Modified:
    directory/shared/trunk/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/ldif/LdifControlSerializer.java
    directory/shared/trunk/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/ldif/LdifEntry.java

Modified: directory/shared/trunk/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/ldif/LdifControlSerializer.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/ldif/LdifControlSerializer.java?rev=1082748&r1=1082747&r2=1082748&view=diff
==============================================================================
--- directory/shared/trunk/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/ldif/LdifControlSerializer.java (original)
+++ directory/shared/trunk/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/ldif/LdifControlSerializer.java Thu Mar 17 23:39:23 2011
@@ -53,22 +53,7 @@ public class LdifControlSerializer
      */
     public static void serialize( LdifControl ldifControl, ObjectOutput out ) throws IOException
     {
-        // The OID
-        out.writeUTF( ldifControl.getOid() );
-        
-        // The criticality
-        out.writeBoolean( ldifControl.isCritical() );
-        
-        // The value if any
-        if ( ldifControl.hasValue() )
-        {
-            out.writeInt( ldifControl.getValue().length );
-            out.write( ldifControl.getValue() );
-        }
-        else
-        {
-            out.writeInt( -1 );
-        }
+        ldifControl.writeExternal( out );
         
         out.flush();
     }
@@ -83,20 +68,15 @@ public class LdifControlSerializer
      */
     public static LdifControl deserialize( ObjectInput in ) throws IOException
     {
-        // The OID
-        String oid = in.readUTF();
-        LdifControl ldifControl = new LdifControl( oid );
-        
-        // The criticality
-        ldifControl.setCritical( in.readBoolean() );
-        
-        int valueSize = in.readInt();
+        LdifControl ldifControl = new LdifControl();
         
-        if ( valueSize >=0 )
+        try
+        {
+            ldifControl.readExternal( in );
+        }
+        catch ( ClassNotFoundException cnfe )
         {
-            byte[] value = new byte[ valueSize ];
-            in.read( value );
-            ldifControl.setValue( value );
+            throw new IOException( cnfe.getMessage() );
         }
 
         return ldifControl;

Modified: directory/shared/trunk/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/ldif/LdifEntry.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/ldif/LdifEntry.java?rev=1082748&r1=1082747&r2=1082748&view=diff
==============================================================================
--- directory/shared/trunk/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/ldif/LdifEntry.java (original)
+++ directory/shared/trunk/ldap/model/src/main/java/org/apache/directory/shared/ldap/model/ldif/LdifEntry.java Thu Mar 17 23:39:23 2011
@@ -956,7 +956,7 @@ public class LdifEntry implements Clonea
         LdifEntry otherEntry = ( LdifEntry ) o;
 
         // Check the Dn
-        Dn thisDn = entry.getDn();
+        Dn thisDn = entryDn;
         Dn dnEntry = otherEntry.getDn();
 
         if ( !thisDn.equals( dnEntry ) )

Added: directory/shared/trunk/ldap/model/src/test/java/org/apache/directory/shared/ldap/model/ldif/LdifEntrySerializationTest.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/model/src/test/java/org/apache/directory/shared/ldap/model/ldif/LdifEntrySerializationTest.java?rev=1082748&view=auto
==============================================================================
--- directory/shared/trunk/ldap/model/src/test/java/org/apache/directory/shared/ldap/model/ldif/LdifEntrySerializationTest.java (added)
+++ directory/shared/trunk/ldap/model/src/test/java/org/apache/directory/shared/ldap/model/ldif/LdifEntrySerializationTest.java Thu Mar 17 23:39:23 2011
@@ -0,0 +1,526 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you 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.shared.ldap.model.ldif;
+
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import com.mycila.junit.concurrent.Concurrency;
+import com.mycila.junit.concurrent.ConcurrentJunitRunner;
+
+
+/**
+ * Test the LdifEntry class
+ * 
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ */
+@RunWith(ConcurrentJunitRunner.class)
+@Concurrency()
+public class LdifEntrySerializationTest
+{
+    @Test
+    public void testLdifEntrySimple() throws Exception
+    {
+        String ldif = 
+            "cn: app1\n" + 
+            "objectClass: top\n" + 
+            "objectClass: apApplication\n" + 
+            "displayName:   app1   \n" +
+            "dependencies:\n" + 
+            "envVars:";
+
+        LdifEntry ldifEntry1 = new LdifEntry( "cn=app1,ou=applications,ou=conf,dc=apache,dc=org", ldif );
+        
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        ObjectOutputStream out = new ObjectOutputStream( baos );
+
+        LdifEntrySerializer.serialize( ldifEntry1, out );
+        
+        ObjectInputStream in = null;
+
+        byte[] data = baos.toByteArray();
+        in = new ObjectInputStream( new ByteArrayInputStream( data ) );
+
+        LdifEntry ldifEntry2 = LdifEntrySerializer.deserialize( null, in );
+
+        assertEquals( ldifEntry1, ldifEntry2 );
+    }
+
+
+    /**
+     * Test a simple LdifEntry
+     * @throws Exception
+     */
+    @Test
+    public void testSimpleLdifEntry() throws Exception
+    {
+        String ldif = 
+            "cn: app1\n" + 
+            "objectClass: top\n" + 
+            "objectClass: apApplication\n" + 
+            "displayName:   app1   \n" +
+            "dependencies:\n" + 
+            "envVars:";
+
+        LdifEntry ldifEntry1 = new LdifEntry( "cn=app1,ou=applications,ou=conf,dc=apache,dc=org", ldif );
+
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        ObjectOutputStream out = new ObjectOutputStream( baos );
+
+        LdifEntrySerializer.serialize( ldifEntry1, out );
+        
+        ObjectInputStream in = null;
+
+        byte[] data = baos.toByteArray();
+        in = new ObjectInputStream( new ByteArrayInputStream( data ) );
+
+        LdifEntry ldifEntry2 = LdifEntrySerializer.deserialize( null, in );
+
+        assertEquals( ldifEntry1, ldifEntry2 );
+    }
+    
+    
+    /**
+     * Test a Delete changeType LdifEntry with no control
+     * 
+     * @throws Exception
+     */
+    @Test
+    public void testLdifParserChangeTypeDeleteNoControl() throws Exception
+    {
+        String ldif = 
+            "# Delete an entry. The operation will attach the LDAPv3\n" +
+            "# Tree Delete Control defined in [9]. The criticality\n" +
+            "# field is \"true\" and the controlValue field is\n" + 
+            "# absent, as required by [9].\n" +
+            "changetype: delete\n";
+
+        LdifEntry ldifEntry1 = new LdifEntry( "cn=app1,ou=applications,ou=conf,dc=apache,dc=org", ldif );
+
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        ObjectOutputStream out = new ObjectOutputStream( baos );
+
+        LdifEntrySerializer.serialize( ldifEntry1, out );
+        
+        ObjectInputStream in = null;
+
+        byte[] data = baos.toByteArray();
+        in = new ObjectInputStream( new ByteArrayInputStream( data ) );
+
+        LdifEntry ldifEntry2 = LdifEntrySerializer.deserialize( null, in );
+
+        assertEquals( ldifEntry1, ldifEntry2 );
+    }
+    
+    
+    /**
+     * Test a Delete changeType LdifEntry with one control
+     * 
+     * @throws Exception
+     */
+    @Test
+    public void testLdifParserChangeTypeDeleteWithControl() throws Exception
+    {
+        String ldif = 
+            "# Delete an entry. The operation will attach the LDAPv3\n" +
+            "# Tree Delete Control defined in [9]. The criticality\n" +
+            "# field is \"true\" and the controlValue field is\n" + 
+            "# absent, as required by [9].\n" +
+            "control: 1.2.840.113556.1.4.805 true\n" +
+            "changetype: delete\n";
+
+        LdifEntry ldifEntry1 = new LdifEntry( "cn=app1,ou=applications,ou=conf,dc=apache,dc=org", ldif );
+
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        ObjectOutputStream out = new ObjectOutputStream( baos );
+
+        LdifEntrySerializer.serialize( ldifEntry1, out );
+        
+        ObjectInputStream in = null;
+
+        byte[] data = baos.toByteArray();
+        in = new ObjectInputStream( new ByteArrayInputStream( data ) );
+
+        LdifEntry ldifEntry2 = LdifEntrySerializer.deserialize( null, in );
+
+        assertEquals( ldifEntry1, ldifEntry2 );
+    }
+    
+
+    /**
+     * Test a Delete changeType LdifEntry with controls
+     * 
+     * @throws Exception
+     */
+    @Test
+    public void testLdifParserChangeTypeDeleteWithControls() throws Exception
+    {
+        String ldif = 
+            "# Delete an entry. The operation will attach the LDAPv3\n" +
+            "# Tree Delete Control defined in [9]. The criticality\n" +
+            "# field is \"true\" and the controlValue field is\n" + 
+            "# absent, as required by [9].\n" +
+            "control: 1.2.840.113556.1.4.805 true\n" +
+            "control: 1.2.840.113556.1.4.806 false: test\n" +
+            "changetype: delete\n";
+
+        LdifEntry ldifEntry1 = new LdifEntry( "cn=app1,ou=applications,ou=conf,dc=apache,dc=org", ldif );
+
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        ObjectOutputStream out = new ObjectOutputStream( baos );
+
+        LdifEntrySerializer.serialize( ldifEntry1, out );
+        
+        ObjectInputStream in = null;
+
+        byte[] data = baos.toByteArray();
+        in = new ObjectInputStream( new ByteArrayInputStream( data ) );
+
+        LdifEntry ldifEntry2 = LdifEntrySerializer.deserialize( null, in );
+
+        assertEquals( ldifEntry1, ldifEntry2 );
+    }
+
+
+    /**
+     * Test a Add changeType LdifEntry with no control
+     * @throws Exception
+     */
+    @Test
+    public void testLdifEntryChangeTypeAddNoControl() throws Exception
+    {
+        String ldif = 
+            "changetype: add\n" +
+            "cn: app1\n" + 
+            "objectClass: top\n" + 
+            "objectClass: apApplication\n" + 
+            "displayName:   app1   \n" +
+            "dependencies:\n" + 
+            "envVars:";
+
+        LdifEntry ldifEntry1 = new LdifEntry( "cn=app1,ou=applications,ou=conf,dc=apache,dc=org", ldif );
+
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        ObjectOutputStream out = new ObjectOutputStream( baos );
+
+        LdifEntrySerializer.serialize( ldifEntry1, out );
+        
+        ObjectInputStream in = null;
+
+        byte[] data = baos.toByteArray();
+        in = new ObjectInputStream( new ByteArrayInputStream( data ) );
+
+        LdifEntry ldifEntry2 = LdifEntrySerializer.deserialize( null, in );
+
+        assertEquals( ldifEntry1, ldifEntry2 );
+    }
+    
+    
+    /**
+     * Test a Add changeType LdifEntry with a control
+     * @throws Exception
+     */
+    @Test
+    public void testLdifEntryChangeTypeAddWithControl() throws Exception
+    {
+        String ldif = 
+            "control: 1.2.840.113556.1.4.805 true\n" +
+            "changetype: add\n" +
+            "cn: app1\n" + 
+            "objectClass: top\n" + 
+            "objectClass: apApplication\n" + 
+            "displayName:   app1   \n" +
+            "dependencies:\n" + 
+            "envVars:";
+
+        LdifEntry ldifEntry1 = new LdifEntry( "cn=app1,ou=applications,ou=conf,dc=apache,dc=org", ldif );
+
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        ObjectOutputStream out = new ObjectOutputStream( baos );
+
+        LdifEntrySerializer.serialize( ldifEntry1, out );
+        
+        ObjectInputStream in = null;
+
+        byte[] data = baos.toByteArray();
+        in = new ObjectInputStream( new ByteArrayInputStream( data ) );
+
+        LdifEntry ldifEntry2 = LdifEntrySerializer.deserialize( null, in );
+
+        assertEquals( ldifEntry1, ldifEntry2 );
+    }
+    
+    
+    /**
+     * Test a Add changeType LdifEntry with controls
+     * @throws Exception
+     */
+    @Test
+    public void testLdifEntryChangeTypeAddWithControls() throws Exception
+    {
+        String ldif = 
+            "control: 1.2.840.113556.1.4.805 true\n" +
+            "control: 1.2.840.113556.1.4.806 false: test\n" +
+            "changetype: add\n" +
+            "cn: app1\n" + 
+            "objectClass: top\n" + 
+            "objectClass: apApplication\n" + 
+            "displayName:   app1   \n" +
+            "dependencies:\n" + 
+            "envVars:";
+
+        LdifEntry ldifEntry1 = new LdifEntry( "cn=app1,ou=applications,ou=conf,dc=apache,dc=org", ldif );
+
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        ObjectOutputStream out = new ObjectOutputStream( baos );
+
+        LdifEntrySerializer.serialize( ldifEntry1, out );
+        
+        ObjectInputStream in = null;
+
+        byte[] data = baos.toByteArray();
+        in = new ObjectInputStream( new ByteArrayInputStream( data ) );
+
+        LdifEntry ldifEntry2 = LdifEntrySerializer.deserialize( null, in );
+
+        assertEquals( ldifEntry1, ldifEntry2 );
+    }
+
+
+    /**
+     * Test a ModDn changeType LdifEntry with no control
+     */
+    @Test
+    public void testLdifEntryChangeTypeModDnNoControl() throws Exception
+    {
+        String ldif = 
+            "changetype: moddn\n" +
+            "newrdn: cn=app2\n" + 
+            "deleteoldrdn: 1\n"; 
+
+        LdifEntry ldifEntry1 = new LdifEntry( "cn=app1,ou=applications,ou=conf,dc=apache,dc=org", ldif );
+
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        ObjectOutputStream out = new ObjectOutputStream( baos );
+
+        LdifEntrySerializer.serialize( ldifEntry1, out );
+        
+        ObjectInputStream in = null;
+
+        byte[] data = baos.toByteArray();
+        in = new ObjectInputStream( new ByteArrayInputStream( data ) );
+
+        LdifEntry ldifEntry2 = LdifEntrySerializer.deserialize( null, in );
+
+        assertEquals( ldifEntry1, ldifEntry2 );
+    }
+
+
+    /**
+     * Test a ModDn changeType LdifEntry with no control and a newSuperior
+     */
+    @Test
+    public void testLdifEntryChangeTypeModDnRenameNoControlNewSuperior() throws Exception
+    {
+        String ldif = 
+            "changetype: moddn\n" +
+            "newrdn: cn=app2\n" + 
+            "deleteoldrdn: 1\n" +
+            "newsuperior: dc=example, dc=com"; 
+
+        LdifEntry ldifEntry1 = new LdifEntry( "cn=app1,ou=applications,ou=conf,dc=apache,dc=org", ldif );
+
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        ObjectOutputStream out = new ObjectOutputStream( baos );
+
+        LdifEntrySerializer.serialize( ldifEntry1, out );
+        
+        ObjectInputStream in = null;
+
+        byte[] data = baos.toByteArray();
+        in = new ObjectInputStream( new ByteArrayInputStream( data ) );
+
+        LdifEntry ldifEntry2 = LdifEntrySerializer.deserialize( null, in );
+
+        assertEquals( ldifEntry1, ldifEntry2 );
+    }
+
+    
+    /**
+     * Test a ModDn changeType LdifEntry with a control
+     * @throws Exception
+     */
+    @Test
+    public void testLdifEntryChangeTypeModdnWithControl() throws Exception
+    {
+        String ldif = 
+            "control: 1.2.840.113556.1.4.805 true\n" +
+            "changetype: moddn\n" +
+            "newrdn: cn=app2\n" + 
+            "deleteoldrdn: 1\n"; 
+
+        LdifEntry ldifEntry1 = new LdifEntry( "cn=app1,ou=applications,ou=conf,dc=apache,dc=org", ldif );
+
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        ObjectOutputStream out = new ObjectOutputStream( baos );
+
+        LdifEntrySerializer.serialize( ldifEntry1, out );
+        
+        ObjectInputStream in = null;
+
+        byte[] data = baos.toByteArray();
+        in = new ObjectInputStream( new ByteArrayInputStream( data ) );
+
+        LdifEntry ldifEntry2 = LdifEntrySerializer.deserialize( null, in );
+
+        assertEquals( ldifEntry1, ldifEntry2 );
+    }
+    
+    
+    /**
+     * Test a ModDN changeType LdifEntry with controls
+     * @throws Exception
+     */
+    @Test
+    public void testLdifEntryChangeTypeModddnWithControls() throws Exception
+    {
+        String ldif = 
+            "control: 1.2.840.113556.1.4.805 true\n" +
+            "control: 1.2.840.113556.1.4.806 false: test\n" +
+            "changetype: moddn\n" +
+            "newrdn: cn=app2\n" + 
+            "deleteoldrdn: 1\n"; 
+
+        LdifEntry ldifEntry1 = new LdifEntry( "cn=app1,ou=applications,ou=conf,dc=apache,dc=org", ldif );
+
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        ObjectOutputStream out = new ObjectOutputStream( baos );
+
+        LdifEntrySerializer.serialize( ldifEntry1, out );
+        
+        ObjectInputStream in = null;
+
+        byte[] data = baos.toByteArray();
+        in = new ObjectInputStream( new ByteArrayInputStream( data ) );
+
+        LdifEntry ldifEntry2 = LdifEntrySerializer.deserialize( null, in );
+
+        assertEquals( ldifEntry1, ldifEntry2 );
+    }
+    
+    
+    /**
+     * Test a Modify changeType LdifEntry with no control
+     */
+    @Test
+    public void testLdifEntryChangeTypeModifySimple() throws Exception
+    {
+        String ldif = 
+            "changetype: modify\n" +
+            "add: cn\n" +
+            "cn: v1\n" + 
+            "cn: v2\n" +
+            "-"; 
+
+        LdifEntry ldifEntry1 = new LdifEntry( "cn=app1,ou=applications,ou=conf,dc=apache,dc=org", ldif );
+
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        ObjectOutputStream out = new ObjectOutputStream( baos );
+
+        LdifEntrySerializer.serialize( ldifEntry1, out );
+        
+        ObjectInputStream in = null;
+
+        byte[] data = baos.toByteArray();
+        in = new ObjectInputStream( new ByteArrayInputStream( data ) );
+
+        LdifEntry ldifEntry2 = LdifEntrySerializer.deserialize( null, in );
+
+        assertEquals( ldifEntry1, ldifEntry2 );
+    }
+    
+    
+    /**
+     * Test a Modify changeType LdifEntry with no attributes
+     */
+    @Test
+    public void testLdifEntryChangeTypeModifyNoAttribute() throws Exception
+    {
+        String ldif = 
+            "changetype: modify\n" +
+            "add: cn\n" +
+            "-"; 
+
+        LdifEntry ldifEntry1 = new LdifEntry( "cn=app1,ou=applications,ou=conf,dc=apache,dc=org", ldif );
+
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        ObjectOutputStream out = new ObjectOutputStream( baos );
+
+        LdifEntrySerializer.serialize( ldifEntry1, out );
+        
+        ObjectInputStream in = null;
+
+        byte[] data = baos.toByteArray();
+        in = new ObjectInputStream( new ByteArrayInputStream( data ) );
+
+        LdifEntry ldifEntry2 = LdifEntrySerializer.deserialize( null, in );
+
+        assertEquals( ldifEntry1, ldifEntry2 );
+    }
+    
+    
+    /**
+     * Test a Modify changeType LdifEntry with no attributes and controls
+     */
+    @Test
+    public void testLdifEntryChangeTypeModifyNoAttributeWithControls() throws Exception
+    {
+        String ldif = 
+            "control: 1.2.840.113556.1.4.805 true\n" +
+            "control: 1.2.840.113556.1.4.806 false: test\n" +
+            "changetype: modify\n" +
+            "add: cn\n" +
+            "-"; 
+
+        LdifEntry ldifEntry1 = new LdifEntry( "cn=app1,ou=applications,ou=conf,dc=apache,dc=org", ldif );
+
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        ObjectOutputStream out = new ObjectOutputStream( baos );
+
+        LdifEntrySerializer.serialize( ldifEntry1, out );
+        
+        ObjectInputStream in = null;
+
+        byte[] data = baos.toByteArray();
+        in = new ObjectInputStream( new ByteArrayInputStream( data ) );
+
+        LdifEntry ldifEntry2 = LdifEntrySerializer.deserialize( null, in );
+
+        assertEquals( ldifEntry1, ldifEntry2 );
+    }
+}