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 2005/10/16 21:17:06 UTC
svn commit: r322501 -
/directory/shared/ldap/trunk/apache2-provider/src/test/org/apache/asn1new/ldap/codec/ModifyRequestTest.java
Author: elecharny
Date: Sun Oct 16 12:16:59 2005
New Revision: 322501
URL: http://svn.apache.org/viewcvs?rev=322501&view=rev
Log:
Add a test to check another bug condition in the ModifyRequest grammar.
Modified:
directory/shared/ldap/trunk/apache2-provider/src/test/org/apache/asn1new/ldap/codec/ModifyRequestTest.java
Modified: directory/shared/ldap/trunk/apache2-provider/src/test/org/apache/asn1new/ldap/codec/ModifyRequestTest.java
URL: http://svn.apache.org/viewcvs/directory/shared/ldap/trunk/apache2-provider/src/test/org/apache/asn1new/ldap/codec/ModifyRequestTest.java?rev=322501&r1=322500&r2=322501&view=diff
==============================================================================
--- directory/shared/ldap/trunk/apache2-provider/src/test/org/apache/asn1new/ldap/codec/ModifyRequestTest.java (original)
+++ directory/shared/ldap/trunk/apache2-provider/src/test/org/apache/asn1new/ldap/codec/ModifyRequestTest.java Sun Oct 16 12:16:59 2005
@@ -30,10 +30,14 @@
import org.apache.asn1.codec.EncoderException;
import org.apache.asn1new.ber.Asn1Decoder;
import org.apache.asn1new.ber.containers.IAsn1Container;
+import org.apache.asn1new.ldap.codec.grammar.ModifyRequestGrammar;
import org.apache.asn1new.ldap.pojo.LdapMessage;
import org.apache.asn1new.ldap.pojo.ModifyRequest;
import org.apache.asn1new.primitives.OctetString;
import org.apache.asn1new.util.StringUtils;
+import org.apache.log4j.PropertyConfigurator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import junit.framework.Assert;
import junit.framework.TestCase;
@@ -44,6 +48,12 @@
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
public class ModifyRequestTest extends TestCase {
+ private static final Logger log = LoggerFactory.getLogger( ModifyRequestTest.class );
+
+ static
+ {
+ PropertyConfigurator.configure( "conf/log4j.conf" );
+ }
/**
* Test the decoding of a ModifyRequest
*/
@@ -277,6 +287,152 @@
// Check the length
Assert.assertEquals(0x8C, message.computeLength());
+
+ // Check the encoding, by decoding and re-encoding the result
+ try
+ {
+ ByteBuffer bb = message.encode( null );
+ String decodedPdu1 = StringUtils.dumpBytes( bb.array() );
+
+ try
+ {
+ ldapDecoder.decode( bb, ldapMessageContainer );
+ }
+ catch ( DecoderException de )
+ {
+ de.printStackTrace();
+ Assert.fail( de.getMessage() );
+ }
+
+ LdapMessage message2 = ( ( LdapMessageContainer ) ldapMessageContainer ).getLdapMessage();
+
+
+ ByteBuffer bb2 = message2.encode( null );
+ String decodedPdu2 = StringUtils.dumpBytes( bb2.array() );
+
+ Assert.assertEquals( decodedPdu1, decodedPdu2 );
+ }
+ catch ( EncoderException ee )
+ {
+ ee.printStackTrace();
+ Assert.fail( ee.getMessage() );
+ }
+ }
+
+ /**
+ * Test the decoding of a ModifyRequest, with different operations, take 2
+ */
+ public void testDecodeModifyRequestManyOperations2() throws NamingException
+ {
+ Asn1Decoder ldapDecoder = new LdapDecoder();
+
+ ByteBuffer stream = ByteBuffer.allocate( 0x18C );
+
+ stream.put(
+ new byte[]
+ {
+ 0x30, (byte)0x81, (byte)0xB6, // LdapMessage
+ 0x02, 0x01, 0x31, // Message ID : 49
+ 0x66, (byte)0x81, (byte)0x93, // ModifyRequest
+ 0x04, 0x2B, // object : cn=Tori Amos,ou=playground,dc=apache,dc=org
+ 0x63, 0x6E, 0x3D, 0x54, 0x6F, 0x72, 0x69, 0x20,
+ 0x41, 0x6D, 0x6F, 0x73, 0x2C, 0x6F, 0x75, 0x3D,
+ 0x70, 0x6C, 0x61, 0x79, 0x67, 0x72, 0x6F, 0x75,
+ 0x6E, 0x64, 0x2C, 0x64, 0x63, 0x3D, 0x61, 0x70,
+ 0x61, 0x63, 0x68, 0x65, 0x2C, 0x64, 0x63, 0x3D,
+ 0x6F, 0x72, 0x67,
+ 0x30, 0x64, // Modifications
+ 0x30, 0x14, // Modification
+ 0x0A, 0x01, 0x01, // Operation : Delete
+ 0x30, 0x0F, // type : description
+ 0x04, 0x0B,
+ 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74,
+ 0x69, 0x6F, 0x6E,
+ 0x31, 0x00, // Vals = null
+ 0x30, 0x25, // Modification
+ 0x0A, 0x01, 0x00, // Operation : Add
+ 0x30, 0x20, // type : telephoneNumber
+ 0x04, 0x0F,
+ 0x74, 0x65, 0x6C, 0x65, 0x70, 0x68, 0x6F, 0x6E,
+ 0x65, 0x4E, 0x75, 0x6D, 0x62, 0x65, 0x72,
+ 0x31, 0x0D, // Vals : 01234567890
+ 0x04, 0x0B,
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
+ 0x38, 0x39, 0x30,
+ 0x30, 0x25, // Modification
+ 0x0A, 0x01, 0x00, // Operation : Add
+ 0x30, 0x20, // type : telephoneNumber
+ 0x04, 0x0F,
+ 0x74, 0x65, 0x6C, 0x65, 0x70, 0x68, 0x6F, 0x6E,
+ 0x65, 0x4E, 0x75, 0x6D, 0x62, 0x65, 0x72,
+ 0x31, 0x0D, // Vals : 01234567890
+ 0x04, 0x0B,
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
+ 0x38, 0x39, 0x30,
+ (byte)0xA0, 0x1B, // Controls : 2.16.840.1.113730.3.4.2
+ 0x30, 0x19,
+ 0x04, 0x17,
+ 0x32, 0x2E, 0x31, 0x36, 0x2E, 0x38, 0x34, 0x30,
+ 0x2E, 0x31, 0x2E, 0x31, 0x31, 0x33, 0x37, 0x33,
+ 0x30, 0x2E, 0x33, 0x2E, 0x34, 0x2E, 0x32 } );
+
+ stream.flip();
+
+ // Allocate a LdapMessage Container
+ IAsn1Container ldapMessageContainer = new LdapMessageContainer();
+
+ // Decode a ModifyRequest PDU
+ try
+ {
+ ldapDecoder.decode( stream, ldapMessageContainer );
+ }
+ catch ( DecoderException de )
+ {
+ de.printStackTrace();
+ Assert.fail( de.getMessage() );
+ }
+
+ // Check the decoded PDU
+ LdapMessage message = ( ( LdapMessageContainer ) ldapMessageContainer ).getLdapMessage();
+ ModifyRequest modifyRequest = message.getModifyRequest();
+
+ Assert.assertEquals( 49, message.getMessageId() );
+ Assert.assertEquals( "cn=Tori Amos,ou=playground,dc=apache,dc=org", modifyRequest.getObject() );
+
+ ArrayList modifications = modifyRequest.getModifications();
+
+ Assert.assertEquals( 3, modifications.size() );
+
+ HashSet expectedTypes = new HashSet();
+
+ expectedTypes.add("telephonenumber");
+ expectedTypes.add("description");
+
+ HashMap typesVals = new HashMap();
+
+ HashSet telephoneVals = new HashSet();
+ telephoneVals.add("01234567890");
+ typesVals.put("telephonenumber", telephoneVals);
+
+ ModificationItem modification = (ModificationItem)modifications.get( 1 );
+ BasicAttribute attributeValue = (BasicAttribute)modification.getAttribute();
+
+ Assert.assertTrue( expectedTypes.contains( attributeValue.getID().toLowerCase() ) );
+
+ NamingEnumeration values = attributeValue.getAll();
+ HashSet vals = (HashSet)typesVals.get( attributeValue.getID().toLowerCase() );
+
+ while ( values.hasMore() )
+ {
+ OctetString value = (OctetString)values.next();
+
+ Assert.assertTrue( vals.contains( value.toString() ) );
+
+ vals.remove( value.toString() );
+ }
+
+ // Check the length
+ Assert.assertEquals(0xB9, message.computeLength());
// Check the encoding, by decoding and re-encoding the result
try