From 4eea76a075c3f954202283a745178b7e5fce7f03 Mon Sep 17 00:00:00 2001
From: boli <boli@localhost>
Date: Wed, 20 Sep 2006 22:04:03 +0000
Subject: [PATCH] Added unit tests for some protocol.ldap classes. Removed messageToBindOperation method since it was NYI.
---
opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/DeleteRequestProtocolOp.java | 32
opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestCompareRequestProtocolOp.java | 321 +++++
opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/ModifyRequestProtocolOp.java | 32
opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/CompareRequestProtocolOp.java | 32
opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestAddRequestProtocolOp.java | 501 ++++++++
opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestCompareResponseProtocolOp.java | 435 +++++++
opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/AddRequestProtocolOp.java | 31
opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestDeleteResponseProtocolOp.java | 434 +++++++
opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestModifyResponseProtocolOp.java | 435 +++++++
opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestDeleteRequestProtocolOp.java | 201 +++
opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestModifyRequestProtocolOp.java | 425 +++++++
opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestAddResponseProtocolOp.java | 424 +++++++
12 files changed, 3,176 insertions(+), 127 deletions(-)
diff --git a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/AddRequestProtocolOp.java b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/AddRequestProtocolOp.java
index e49bc85..c23dfdc 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/AddRequestProtocolOp.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/AddRequestProtocolOp.java
@@ -32,8 +32,6 @@
import java.util.Iterator;
import java.util.List;
-import org.opends.server.core.AddOperation;
-import org.opends.server.core.DirectoryException;
import org.opends.server.protocols.asn1.ASN1Element;
import org.opends.server.protocols.asn1.ASN1OctetString;
import org.opends.server.protocols.asn1.ASN1Sequence;
@@ -296,35 +294,6 @@
/**
- * Converts the provided LDAP message containing an add request protocol op to
- * an <CODE>AddOperation</CODE> object that may be processed by the core
- * server.
- *
- * @param requestMessage The LDAP message containing the add request
- * protocol op.
- * @param clientConnection The client connection from which the request was
- * read.
- *
- * @return The add operation created from the provided request message.
- *
- * @throws DirectoryException If the provided LDAP message cannot be decoded
- * as an add operation.
- */
- public static AddOperation messageToAddOperation(LDAPMessage requestMessage,
- LDAPClientConnection clientConnection)
- throws DirectoryException
- {
- assert debugEnter(CLASS_NAME, "messageToAddOperation",
- String.valueOf(requestMessage),
- String.valueOf(clientConnection));
-
- // NYI
- return null;
- }
-
-
-
- /**
* Appends a string representation of this LDAP protocol op to the provided
* buffer.
*
diff --git a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/CompareRequestProtocolOp.java b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/CompareRequestProtocolOp.java
index e904e7a..cc4f6d5 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/CompareRequestProtocolOp.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/CompareRequestProtocolOp.java
@@ -30,8 +30,6 @@
import java.util.ArrayList;
-import org.opends.server.core.CompareOperation;
-import org.opends.server.core.DirectoryException;
import org.opends.server.protocols.asn1.ASN1Element;
import org.opends.server.protocols.asn1.ASN1OctetString;
import org.opends.server.protocols.asn1.ASN1Sequence;
@@ -346,36 +344,6 @@
/**
- * Converts the provided LDAP message containing a compare request protocol
- * op to a <CODE>CompareOperation</CODE> object that may be processed by the
- * core server.
- *
- * @param requestMessage The LDAP message containing the compare request
- * protocol op.
- * @param clientConnection The client connection from which the request was
- * read.
- *
- * @return The compare operation created from the provided request message.
- *
- * @throws DirectoryException If the provided LDAP message cannot be decoded
- * as a compare operation.
- */
- public static CompareOperation messageToCompareOperation(
- LDAPMessage requestMessage,
- LDAPClientConnection clientConnection)
- throws DirectoryException
- {
- assert debugEnter(CLASS_NAME, "messageToCompareOperation",
- String.valueOf(requestMessage),
- String.valueOf(clientConnection));
-
- // NYI
- return null;
- }
-
-
-
- /**
* Appends a string representation of this LDAP protocol op to the provided
* buffer.
*
diff --git a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/DeleteRequestProtocolOp.java b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/DeleteRequestProtocolOp.java
index 59cf73c..586966a 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/DeleteRequestProtocolOp.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/DeleteRequestProtocolOp.java
@@ -28,8 +28,6 @@
-import org.opends.server.core.DeleteOperation;
-import org.opends.server.core.DirectoryException;
import org.opends.server.protocols.asn1.ASN1Element;
import org.opends.server.protocols.asn1.ASN1OctetString;
@@ -181,36 +179,6 @@
/**
- * Converts the provided LDAP message containing a delete request protocol op
- * to a <CODE>DeleteOperation</CODE> object that may be processed by the core
- * server.
- *
- * @param requestMessage The LDAP message containing the delete request
- * protocol op.
- * @param clientConnection The client connection from which the request was
- * read.
- *
- * @return The delete operation created from the provided request message.
- *
- * @throws DirectoryException If the provided LDAP message cannot be decoded
- * as a delete operation.
- */
- public static DeleteOperation messageToDeleteOperation(
- LDAPMessage requestMessage,
- LDAPClientConnection clientConnection)
- throws DirectoryException
- {
- assert debugEnter(CLASS_NAME, "messageToDeleteOperation",
- String.valueOf(requestMessage),
- String.valueOf(clientConnection));
-
- // NYI
- return null;
- }
-
-
-
- /**
* Appends a string representation of this LDAP protocol op to the provided
* buffer.
*
diff --git a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/ModifyRequestProtocolOp.java b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/ModifyRequestProtocolOp.java
index 81061c3..9541fb8 100644
--- a/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/ModifyRequestProtocolOp.java
+++ b/opendj-sdk/opends/src/server/org/opends/server/protocols/ldap/ModifyRequestProtocolOp.java
@@ -31,8 +31,6 @@
import java.util.ArrayList;
import java.util.Iterator;
-import org.opends.server.core.DirectoryException;
-import org.opends.server.core.ModifyOperation;
import org.opends.server.protocols.asn1.ASN1Element;
import org.opends.server.protocols.asn1.ASN1OctetString;
import org.opends.server.protocols.asn1.ASN1Sequence;
@@ -296,36 +294,6 @@
/**
- * Converts the provided LDAP message containing a modify request protocol op
- * to a <CODE>ModifyOperation</CODE> object that may be processed by the core
- * server.
- *
- * @param requestMessage The LDAP message containing the modify request
- * protocol op.
- * @param clientConnection The client connection from which the request was
- * read.
- *
- * @return The modify operation created from the provided request message.
- *
- * @throws DirectoryException If the provided LDAP message cannot be decoded
- * as a modify operation.
- */
- public static ModifyOperation messageToModifyOperation(
- LDAPMessage requestMessage,
- LDAPClientConnection clientConnection)
- throws DirectoryException
- {
- assert debugEnter(CLASS_NAME, "messageToModifyOperation",
- String.valueOf(requestMessage),
- String.valueOf(clientConnection));
-
- // NYI
- return null;
- }
-
-
-
- /**
* Appends a string representation of this LDAP protocol op to the provided
* buffer.
*
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestAddRequestProtocolOp.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestAddRequestProtocolOp.java
new file mode 100644
index 0000000..cbbb97c
--- /dev/null
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestAddRequestProtocolOp.java
@@ -0,0 +1,501 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
+ * add the following below this CDDL HEADER, with the fields enclosed
+ * by brackets "[]" replaced with your own identifying * information:
+ * Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ * Portions Copyright 2006 Sun Microsystems, Inc.
+ */
+package org.opends.server.protocols.ldap;
+
+import org.opends.server.protocols.asn1.ASN1OctetString;
+import org.opends.server.protocols.asn1.ASN1Element;
+import org.opends.server.protocols.asn1.ASN1Sequence;
+import static org.opends.server.util.ServerConstants.EOL;
+import org.opends.server.util.Base64;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.io.BufferedReader;
+import java.io.StringReader;
+
+import static org.testng.Assert.*;
+
+import org.testng.annotations.*;
+
+/**
+ * This class defines a set of tests for the
+ * org.opends.server.protocol.ldap.AddRequestProtocolOp class.
+ */
+public class TestAddRequestProtocolOp extends LdapTestCase
+{
+ /**
+ * The protocol op type for add requests.
+ */
+ private static final byte OP_TYPE_ADD_REQUEST = 0x68;
+
+
+
+ /**
+ * The protocol op type for add responses.
+ */
+ private static final byte OP_TYPE_ADD_RESPONSE = 0x69;
+
+ /**
+ * The DN for add requests in this test case.
+ */
+ private static final ASN1OctetString dn =
+ new ASN1OctetString("dc=example,dc=com");
+
+ /**
+ * The alternative DN for add requests in this test case.
+ */
+ private static final ASN1OctetString dnAlt =
+ new ASN1OctetString("dc=sun,dc=com");
+
+ /**
+ * Generate attributes for use in test cases. Attributes will have names
+ * like "testAttributeN" where N is the number of the attribute. Values will
+ * have the value of "testValueN.K" where N is the attribute number and K
+ * is the value number.
+ *
+ * @param numAttributes Number of attributes to generate. 0 will return
+ * a empty list.
+ * @param numValues Number of values to assign to each attribute. 0 will
+ * assign a empty list of values to the attribute.
+ * @param prefix String to prefix the attribute values
+ * @return The generate attributes.
+ *
+ */
+ private ArrayList<LDAPAttribute> generateAttributes(int numAttributes,
+ int numValues,
+ String prefix)
+ {
+ ArrayList<LDAPAttribute> attributes = new ArrayList<LDAPAttribute>();
+ LDAPAttribute attribute;
+ ASN1OctetString value;
+ int i, j;
+
+ for(i = 0; i < numAttributes; i++)
+ {
+ ArrayList<ASN1OctetString> values = new ArrayList<ASN1OctetString>();
+ for(j = 0; j < numValues; j++)
+ {
+ value = new ASN1OctetString(prefix + "Value"+i+"."+j);
+ values.add(value);
+ }
+ attribute = new LDAPAttribute("testAttribute"+i, values);
+ attributes.add(attribute);
+ }
+
+ return attributes;
+ }
+
+ private Boolean attributesEquals(List<LDAPAttribute> attributes1,
+ List<LDAPAttribute> attributes2)
+ {
+ if(attributes1.size() != attributes2.size())
+ {
+ return false;
+ }
+
+ int i, j;
+ LDAPAttribute attribute1;
+ LDAPAttribute attribute2;
+ ArrayList<ASN1OctetString> values1;
+ ArrayList<ASN1OctetString> values2;
+
+ for(i = 0; i < attributes1.size(); i++)
+ {
+ attribute1 = attributes1.get(i);
+ attribute2 = attributes2.get(i);
+ if(!attribute1.getAttributeType().equals(attribute2.getAttributeType()))
+ {
+ return false;
+ }
+ if(attribute1.getValues().size() != attribute2.getValues().size())
+ {
+ return false;
+ }
+ values1 = attribute1.getValues();
+ values2 = attribute2.getValues();
+ for(j = 0; j < values1.size(); j++)
+ {
+ if(!values1.get(j).equals(values2.get(j)))
+ {
+ return false;
+ }
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Test to make sure the class processes the right LDAP op type.
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test
+ public void testOpType() throws Exception
+ {
+ AddRequestProtocolOp addRequest = new AddRequestProtocolOp(dn);
+ assertEquals(addRequest.getType(), OP_TYPE_ADD_REQUEST);
+ }
+
+ /**
+ * Test to make sure the class returns the correct protocol name.
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test
+ public void testProtocolOpName() throws Exception
+ {
+ AddRequestProtocolOp addRequest = new AddRequestProtocolOp(dn);
+ assertEquals(addRequest.getProtocolOpName(), "Add Request");
+ }
+
+ /**
+ * Test the constructors to make sure the right objects are constructed.
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test
+ public void testConstructors() throws Exception
+ {
+ AddRequestProtocolOp addRequest;
+ ArrayList<LDAPAttribute> attributes;
+
+ //Test to make sure the constructor with dn param works.
+ addRequest = new AddRequestProtocolOp(dn);
+ assertEquals(addRequest.getDN(), dn);
+ assertNotNull(addRequest.getAttributes());
+ assertEquals(addRequest.getAttributes().size(), 0);
+
+ //Test to make sure the constructor with dn and attribute params works.
+ attributes = generateAttributes(10, 5, "test");
+ addRequest = new AddRequestProtocolOp(dn, attributes);
+ assertEquals(addRequest.getDN(), dn);
+ assertEquals(addRequest.getAttributes(), attributes);
+
+ //Test to make sure the constructor with dn and attribute params works with
+ //null attributes.
+ addRequest = new AddRequestProtocolOp(dn, null);
+ assertEquals(addRequest.getDN(), dn);
+ assertNotNull(addRequest.getAttributes());
+ assertEquals(addRequest.getAttributes().size(), 0);
+ }
+
+ /**
+ * Test to make sure that setter methods work.
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test
+ public void testSetMethods() throws Exception
+ {
+ AddRequestProtocolOp addRequest;
+
+ addRequest = new AddRequestProtocolOp(dn);
+ assertEquals(addRequest.getDN(), dn);
+ addRequest.setDN(dnAlt);
+ assertEquals(addRequest.getDN(), dnAlt);
+ }
+
+ /**
+ * Test the decode method when an null element is passed
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test(expectedExceptions = LDAPException.class)
+ public void testDecodeNullElement() throws Exception
+ {
+ AddRequestProtocolOp.decodeAddRequest(null);
+ }
+
+ /**
+ * Test the decode method when an empty element is passed
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test(expectedExceptions = LDAPException.class)
+ public void testDecodeEmptyElement() throws Exception
+ {
+ ArrayList<ASN1Element> elements = new ArrayList<ASN1Element>();
+ AddRequestProtocolOp.decode(new ASN1Sequence(OP_TYPE_ADD_REQUEST,
+ elements));
+ }
+
+ /**
+ * Test the decode method when invalid attributes in element is passed
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test(expectedExceptions = LDAPException.class)
+ public void testDecodeInvalidElement() throws Exception
+ {
+ ArrayList<ASN1Element> elements = new ArrayList<ASN1Element>(2);
+ ArrayList<ASN1Element> attrElements =
+ new ArrayList<ASN1Element>();
+ elements.add(new ASN1Sequence(attrElements));
+ elements.add(dn);
+ AddRequestProtocolOp.decode(new ASN1Sequence(OP_TYPE_ADD_REQUEST,
+ elements));
+ }
+
+ /**
+ * Test the decode method when an element w/ wrong op type is passed.
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test(expectedExceptions = LDAPException.class)
+ public void testDecodeWrongElementType() throws Exception
+ {
+ ArrayList<ASN1Element> elements = new ArrayList<ASN1Element>(2);
+ ArrayList<ASN1Element> attrElements =
+ new ArrayList<ASN1Element>();
+ elements.add(dn);
+ elements.add(new ASN1Sequence(attrElements));
+ AddRequestProtocolOp.decode(new ASN1Sequence(OP_TYPE_ADD_RESPONSE,
+ elements));
+ }
+
+ /**
+ * Test the encode and decode methods with null params
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test(expectedExceptions = Exception.class)
+ public void testNullEncodeDecode() throws Exception
+ {
+ AddRequestProtocolOp addEncoded;
+ AddRequestProtocolOp addDecoded;
+ ASN1Element element;
+
+ addEncoded = new AddRequestProtocolOp(null, null);
+ element = addEncoded.encode();
+ addDecoded = (AddRequestProtocolOp)AddRequestProtocolOp.decode(element);
+ }
+
+ /**
+ * Test the encode and decode methods and corner cases.
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test
+ public void testEncodeDecode() throws Exception
+ {
+ AddRequestProtocolOp addEncoded;
+ AddRequestProtocolOp addDecoded;
+ ASN1Element element;
+ ArrayList<LDAPAttribute> attributes;
+
+
+ //Test case for a full encode decode operation with normal params.
+ attributes = generateAttributes(10,5, "test");
+ addEncoded = new AddRequestProtocolOp(dn, attributes);
+ element = addEncoded.encode();
+ addDecoded = (AddRequestProtocolOp)AddRequestProtocolOp.decode(element);
+
+ assertEquals(addEncoded.getType(), OP_TYPE_ADD_REQUEST);
+ assertEquals(addEncoded.getDN(), addDecoded.getDN());
+ assertTrue(attributesEquals(addEncoded.getAttributes(),
+ addDecoded.getAttributes()));
+
+ //Test case for a full encode decode operation with large attributes.
+ attributes = generateAttributes(100,50, "test");
+ addEncoded = new AddRequestProtocolOp(dn, attributes);
+ element = addEncoded.encode();
+ addDecoded = (AddRequestProtocolOp)AddRequestProtocolOp.decode(element);
+
+ assertEquals(addEncoded.getDN(), addDecoded.getDN());
+ assertTrue(attributesEquals(addEncoded.getAttributes(),
+ addDecoded.getAttributes()));
+
+ //Test case for a full encode decode operation with no attributes.
+ addEncoded = new AddRequestProtocolOp(dn, null);
+ element = addEncoded.encode();
+ addDecoded = (AddRequestProtocolOp)AddRequestProtocolOp.decode(element);
+
+ assertEquals(addEncoded.getDN(), addDecoded.getDN());
+ assertTrue(attributesEquals(addEncoded.getAttributes(),
+ addDecoded.getAttributes()));
+ }
+
+ /**
+ * Test toLDIF method.
+ *
+ * @throws Exception If the test fails unexpectedly.
+ */
+ @Test
+ public void testToLDIF() throws Exception
+ {
+ AddRequestProtocolOp addRequest;
+ ArrayList<LDAPAttribute> attributes;
+ StringBuilder buffer = new StringBuilder();
+ BufferedReader reader;
+ String line;
+ int i, j;
+ int numAttributes, numValues;
+
+ numAttributes = 10;
+ numValues = 5;
+ attributes = generateAttributes(numAttributes, numValues, "test");
+ addRequest = new AddRequestProtocolOp(dn, attributes);
+ addRequest.toLDIF(buffer, 80);
+
+ reader = new BufferedReader(new StringReader(buffer.toString()));
+ line = reader.readLine();
+ assertEquals(line, "dn: "+dn);
+ for(i = 0; i < numAttributes; i++)
+ {
+ for(j = 0; j < numValues; j++)
+ {
+ line = reader.readLine();
+ assertEquals(line, "testAttribute"+i+": "+"testValue"+i+"."+j);
+ }
+ }
+ }
+
+ /**
+ * Test toLDIF method with values that need base64 encoding.
+ *
+ * @throws Exception If the test fails unexpectedly.
+ */
+ @Test
+ public void testToLDIFBase64() throws Exception
+ {
+ AddRequestProtocolOp addRequest;
+ ArrayList<LDAPAttribute> attributes;
+ StringBuilder buffer = new StringBuilder();
+ BufferedReader reader;
+ String line;
+ String expectedLine;
+ int i, j;
+ int numAttributes, numValues;
+
+ numAttributes = 10;
+ numValues = 5;
+ attributes = generateAttributes(numAttributes, numValues, " test");
+
+ ASN1OctetString dnNeedsBase64 =
+ new ASN1OctetString("dc=example,dc=com ");
+
+ addRequest = new AddRequestProtocolOp(dnNeedsBase64, attributes);
+ addRequest.toLDIF(buffer, 80);
+
+ reader = new BufferedReader(new StringReader(buffer.toString()));
+ line = reader.readLine();
+ assertEquals(line, "dn:: "+Base64.encode(dnNeedsBase64.value()));
+ for(i = 0; i < numAttributes; i++)
+ {
+ for(j = 0; j < numValues; j++)
+ {
+ line = reader.readLine();
+ expectedLine = " testValue"+i+"."+j;
+ assertEquals(line, "testAttribute"+i+":: "+Base64.encode(expectedLine.getBytes()));
+ }
+ }
+ }
+
+ /**
+ * Test the toString (single line) method.
+ *
+ * @throws Exception If the test fails unexpectedly.
+ */
+ @Test
+ public void TestToStringSingleLine() throws Exception
+ {
+ AddRequestProtocolOp addRequest;
+ ArrayList<LDAPAttribute> attributes;
+ StringBuilder buffer = new StringBuilder();
+ StringBuilder key = new StringBuilder();
+ int i;
+ int numAttributes, numValues;
+
+ numAttributes = 10;
+ numValues = 5;
+ attributes = generateAttributes(numAttributes, numValues, "test");
+ addRequest = new AddRequestProtocolOp(dn, attributes);
+ addRequest.toString(buffer);
+
+ key.append("AddRequest(dn="+dn+", attrs={");
+ for(i = 0; i < numAttributes; i++)
+ {
+ attributes.get(i).toString(key);
+ if(i < numAttributes - 1)
+ {
+ key.append(", ");
+ }
+ }
+ key.append("})");
+
+ assertEquals(buffer.toString(), key.toString());
+ }
+
+ /**
+ * Test the toString (multi line) method.
+ *
+ * @throws Exception If the test fails unexpectedly.
+ */
+ @Test
+ public void TestToStringMultiLine() throws Exception
+ {
+ AddRequestProtocolOp addRequest;
+ ArrayList<LDAPAttribute> attributes;
+ StringBuilder buffer = new StringBuilder();
+ StringBuilder key = new StringBuilder();
+ int i;
+ int numAttributes, numValues, indent;
+
+ numAttributes = 10;
+ numValues = 5;
+ indent = 5;
+ attributes = generateAttributes(numAttributes, numValues, "test");
+ addRequest = new AddRequestProtocolOp(dn, attributes);
+ addRequest.toString(buffer, indent);
+
+ StringBuilder indentBuf = new StringBuilder(indent);
+ for (i=0 ; i < indent; i++)
+ {
+ indentBuf.append(' ');
+ }
+
+ key.append(indentBuf);
+ key.append("Add Request");
+ key.append(EOL);
+
+ key.append(indentBuf);
+ key.append(" DN: ");
+ dn.toString(key);
+ key.append(EOL);
+
+ key.append(" Attributes:");
+ key.append(EOL);
+
+ for (LDAPAttribute attribute : attributes)
+ {
+ attribute.toString(key, indent+4);
+ }
+
+ assertEquals(buffer.toString(), key.toString());
+ }
+}
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestAddResponseProtocolOp.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestAddResponseProtocolOp.java
new file mode 100644
index 0000000..7021b77
--- /dev/null
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestAddResponseProtocolOp.java
@@ -0,0 +1,424 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
+ * add the following below this CDDL HEADER, with the fields enclosed
+ * by brackets "[]" replaced with your own identifying * information:
+ * Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ * Portions Copyright 2006 Sun Microsystems, Inc.
+ */
+package org.opends.server.protocols.ldap;
+
+import org.opends.server.protocols.asn1.*;
+import static org.opends.server.util.ServerConstants.EOL;
+import org.opends.server.types.DN;
+import org.opends.server.types.RDN;
+import org.opends.server.types.AttributeType;
+import org.opends.server.types.AttributeValue;
+import org.opends.server.core.DirectoryServer;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import static org.testng.Assert.*;
+
+import org.testng.annotations.*;
+
+/**
+ * This class defines a set of tests for the
+ * org.opends.server.protocol.ldap.AddResponseProtocolOp class.
+ */
+public class TestAddResponseProtocolOp
+{
+ /**
+ * The protocol op type for add requests.
+ */
+ private static final byte OP_TYPE_ADD_REQUEST = 0x68;
+
+ /**
+ * The protocol op type for add responses.
+ */
+ private static final byte OP_TYPE_ADD_RESPONSE = 0x69;
+
+ /**
+ * The result code for add result operations.
+ */
+ private static final int resultCode = 10;
+
+ /**
+ * The error message to use for add result operations.
+ */
+ private static final String resultMsg = "Test Successful";
+
+ /**
+ * The DN to use for add result operations
+ */
+ private DN dn;
+
+ @BeforeClass
+ public void setupDN()
+ {
+ //Setup the DN to use in the response tests.
+
+ AttributeType attribute =
+ DirectoryServer.getDefaultAttributeType("testAttribute");
+
+ AttributeValue attributeValue = new AttributeValue(attribute, "testValue");
+
+ RDN rdn = new RDN(attribute, attributeValue);
+
+ RDN[] rdns = {rdn};
+
+ dn = new DN(rdns);
+ }
+
+ /**
+ * Test to make sure the class processes the right LDAP op type.
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test
+ public void testOpType() throws Exception
+ {
+ AddResponseProtocolOp addResponse = new AddResponseProtocolOp(resultCode);
+ assertEquals(addResponse.getType(), OP_TYPE_ADD_RESPONSE);
+ }
+
+ /**
+ * Test to make sure the class returns the correct protocol name.
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test
+ public void testProtocolOpName() throws Exception
+ {
+ AddResponseProtocolOp addResponse = new AddResponseProtocolOp(resultCode);
+ assertEquals(addResponse.getProtocolOpName(), "Add Response");
+ }
+
+ /**
+ * Test the constructors to make sure the right objects are constructed.
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test
+ public void testConstructors() throws Exception
+ {
+ AddResponseProtocolOp addResponse;
+ ArrayList<LDAPAttribute> attributes;
+
+ //Test to make sure the constructor with result code param works.
+ addResponse = new AddResponseProtocolOp(resultCode);
+ assertEquals(addResponse.getResultCode(), resultCode);
+
+ //Test to make sure the constructor with result code and error message
+ //params works.
+ addResponse = new AddResponseProtocolOp(resultCode, resultMsg);
+ assertEquals(addResponse.getErrorMessage(), resultMsg);
+ assertEquals(addResponse.getResultCode(), resultCode);
+
+ //Test to make sure the constructor with result code, message, dn, and
+ //referal params works.
+ ArrayList<String> referralURLs = new ArrayList<String>();
+ referralURLs.add("ds1.example.com");
+ referralURLs.add("ds2.example.com");
+ referralURLs.add("ds3.example.com");
+
+ addResponse = new AddResponseProtocolOp(resultCode, resultMsg, dn,
+ referralURLs);
+ assertEquals(addResponse.getErrorMessage(), resultMsg);
+ assertEquals(addResponse.getResultCode(), resultCode);
+ assertEquals(addResponse.getMatchedDN(), dn);
+ assertEquals(addResponse.getReferralURLs(), referralURLs);
+ }
+
+ /**
+ * Test to make sure that setter methods work.
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test
+ public void testSetMethods() throws Exception
+ {
+ AddResponseProtocolOp addResponse;
+ addResponse = new AddResponseProtocolOp(resultCode);
+
+ addResponse.setResultCode(resultCode + 1);
+ assertEquals(addResponse.getResultCode(), resultCode + 1);
+
+ addResponse.setErrorMessage(resultMsg);
+ assertEquals(addResponse.getErrorMessage(), resultMsg);
+
+ addResponse.setMatchedDN(dn);
+ assertEquals(addResponse.getMatchedDN(), dn);
+
+ ArrayList<String> referralURLs = new ArrayList<String>();
+ referralURLs.add("ds1.example.com");
+ referralURLs.add("ds2.example.com");
+ referralURLs.add("ds3.example.com");
+ addResponse.setReferralURLs(referralURLs);
+ assertEquals(addResponse.getReferralURLs(), referralURLs);
+ }
+
+ /**
+ * Test the decode method when an empty element is passed
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test(expectedExceptions = LDAPException.class)
+ public void testDecodeEmptyElement() throws Exception
+ {
+ ArrayList<ASN1Element> elements = new ArrayList<ASN1Element>();
+ AddResponseProtocolOp.decode(new ASN1Sequence(OP_TYPE_ADD_RESPONSE,
+ elements));
+ }
+
+ /**
+ * Test the decode method when an element with a invalid result code is
+ * passed
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test(expectedExceptions = LDAPException.class)
+ public void testDecodeInvalidResultCode() throws Exception
+ {
+ ArrayList<ASN1Element> elements = new ArrayList<ASN1Element>(2);
+ elements.add(new ASN1OctetString("Invalid Data"));
+ elements.add(new ASN1Null());
+ elements.add(new ASN1Null());
+ AddRequestProtocolOp.decode(new ASN1Sequence(OP_TYPE_ADD_RESPONSE,
+ elements));
+ }
+
+ /**
+ * Test the decode method when an element with a invalid dn is
+ * passed. Never throws an exception as long as the element is not null.
+ * This is the expected behavior.
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ //@Test(expectedExceptions = LDAPException.class)
+ public void testDecodeInvalidDN() throws Exception
+ {
+ ArrayList<ASN1Element> elements = new ArrayList<ASN1Element>(2);
+ elements.add(new ASN1Enumerated(resultCode));
+ elements.add(new ASN1Null());
+ elements.add(new ASN1Null());
+ AddRequestProtocolOp.decode(new ASN1Sequence(OP_TYPE_ADD_RESPONSE,
+ elements));
+ }
+
+ /**
+ * Test the decode method when an element with a invalid result message is
+ * passed. Never throws an exception as long as the element is not null.
+ * This is the expected behavior.
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ //@Test(expectedExceptions = LDAPException.class)
+ public void testDecodeInvalidResultMsg() throws Exception
+ {
+ ArrayList<ASN1Element> elements = new ArrayList<ASN1Element>(2);
+ elements.add(new ASN1Enumerated(resultCode));
+ elements.add(new ASN1OctetString(dn.toString()));
+ elements.add(new ASN1Null());
+ AddRequestProtocolOp.decode(new ASN1Sequence(OP_TYPE_ADD_RESPONSE,
+ elements));
+ }
+
+ /**
+ * Test the decode method when an element with a invalid referral URL is
+ * passed. Never throws an exception as long as the element is not null.
+ * This is the expected behavior.
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ //@Test(expectedExceptions = LDAPException.class)
+ public void testDecodeInvalidReferralURLs() throws Exception
+ {
+ ArrayList<ASN1Element> elements = new ArrayList<ASN1Element>(2);
+ elements.add(new ASN1Enumerated(resultCode));
+ elements.add(new ASN1OctetString(dn.toString()));
+ elements.add(new ASN1OctetString(resultMsg));
+ elements.add(new ASN1Null());
+ AddRequestProtocolOp.decode(new ASN1Sequence(OP_TYPE_ADD_RESPONSE,
+ elements));
+ }
+
+ /**
+ * Test the encode and decode methods and corner cases.
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test
+ public void testEncodeDecode() throws Exception
+ {
+ AddResponseProtocolOp addEncoded;
+ AddResponseProtocolOp addDecoded;
+ ASN1Element element;
+
+ ArrayList<String> referralURLs = new ArrayList<String>();
+ referralURLs.add("ds1.example.com");
+ referralURLs.add("ds2.example.com");
+ referralURLs.add("ds3.example.com");
+
+
+ //Test case for a full encode decode operation with normal params.
+ addEncoded = new AddResponseProtocolOp(resultCode, resultMsg, dn,
+ referralURLs);
+ element = addEncoded.encode();
+ addDecoded = (AddResponseProtocolOp)AddResponseProtocolOp.decode(element);
+
+ assertEquals(addEncoded.getType(), OP_TYPE_ADD_RESPONSE);
+ assertEquals(addEncoded.getMatchedDN().compareTo(addDecoded.getMatchedDN()),
+ 0);
+ assertEquals(addEncoded.getErrorMessage(), addDecoded.getErrorMessage());
+ assertEquals(addEncoded.getResultCode(), addDecoded.getResultCode());
+ assertEquals(addEncoded.getReferralURLs(), addDecoded.getReferralURLs());
+
+
+ //Test case for a full encode decode operation with an empty DN params.
+ addEncoded = new AddResponseProtocolOp(resultCode, resultMsg, new DN(),
+ referralURLs);
+ element = addEncoded.encode();
+ addDecoded = (AddResponseProtocolOp)AddResponseProtocolOp.decode(element);
+ assertEquals(addDecoded.getMatchedDN(), null);
+
+ //Test case for a full empty referral url param.
+ ArrayList<String> emptyReferralURLs = new ArrayList<String>();
+ addEncoded = new AddResponseProtocolOp(resultCode, resultMsg, dn,
+ emptyReferralURLs);
+ element = addEncoded.encode();
+ addDecoded = (AddResponseProtocolOp)AddResponseProtocolOp.decode(element);
+ assertTrue(addDecoded.getReferralURLs() == null);
+
+ //Test case for a full encode decode operation with resultCode param only.
+ addEncoded = new AddResponseProtocolOp(resultCode);
+ element = addEncoded.encode();
+ addDecoded = (AddResponseProtocolOp)AddResponseProtocolOp.decode(element);
+
+ assertEquals(addDecoded.getMatchedDN(), null);
+ assertEquals(addDecoded.getErrorMessage(), null);
+ assertEquals(addEncoded.getResultCode(), addDecoded.getResultCode());
+ assertTrue(addDecoded.getReferralURLs() == null);
+ }
+
+ /**
+ * Test the toString (single line) method.
+ *
+ * @throws Exception If the test fails unexpectedly.
+ */
+ @Test
+ public void TestToStringSingleLine() throws Exception
+ {
+ AddResponseProtocolOp addResponse;
+ StringBuilder buffer = new StringBuilder();
+ StringBuilder key = new StringBuilder();
+
+ ArrayList<String> referralURLs = new ArrayList<String>();
+ referralURLs.add("ds1.example.com");
+ referralURLs.add("ds2.example.com");
+ referralURLs.add("ds3.example.com");
+
+ addResponse = new AddResponseProtocolOp(resultCode, resultMsg, dn,
+ referralURLs);
+ addResponse.toString(buffer);
+
+ key.append("AddResponse(resultCode="+resultCode+", " +
+ "errorMessage="+resultMsg+", matchedDN="+dn.toString()+", " +
+ "referralURLs={");
+
+ Iterator<String> iterator = referralURLs.iterator();
+ key.append(iterator.next());
+
+ while (iterator.hasNext())
+ {
+ key.append(", ");
+ key.append(iterator.next());
+ }
+
+ key.append("})");
+
+ assertEquals(buffer.toString(), key.toString());
+ }
+
+ /**
+ * Test the toString (multi line) method.
+ *
+ * @throws Exception If the test fails unexpectedly.
+ */
+ @Test
+ public void TestToStringMultiLine() throws Exception
+ {
+ AddResponseProtocolOp addResponse;
+ StringBuilder buffer = new StringBuilder();
+ StringBuilder key = new StringBuilder();
+
+ ArrayList<String> referralURLs = new ArrayList<String>();
+ referralURLs.add("ds1.example.com");
+ referralURLs.add("ds2.example.com");
+ referralURLs.add("ds3.example.com");
+ int indent = 5;
+ int i;
+
+ addResponse = new AddResponseProtocolOp(resultCode, resultMsg, dn,
+ referralURLs);
+ addResponse.toString(buffer, indent);
+
+ StringBuilder indentBuf = new StringBuilder(indent);
+ for (i=0 ; i < indent; i++)
+ {
+ indentBuf.append(' ');
+ }
+
+ key.append(indentBuf);
+ key.append("Add Response");
+ key.append(EOL);
+
+ key.append(indentBuf);
+ key.append(" Result Code: ");
+ key.append(resultCode);
+ key.append(EOL);
+
+ key.append(indentBuf);
+ key.append(" Error Message: ");
+ key.append(resultMsg);
+ key.append(EOL);
+
+ key.append(indentBuf);
+ key.append(" Matched DN: ");
+ key.append(dn.toString());
+ key.append(EOL);
+
+ key.append(indentBuf);
+ key.append(" Referral URLs: ");
+ key.append(EOL);
+
+ for (String url : referralURLs)
+ {
+ key.append(indentBuf);
+ key.append(" ");
+ key.append(url);
+ key.append(EOL);
+ }
+
+ assertEquals(buffer.toString(), key.toString());
+ }
+}
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestCompareRequestProtocolOp.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestCompareRequestProtocolOp.java
new file mode 100644
index 0000000..8965aa5
--- /dev/null
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestCompareRequestProtocolOp.java
@@ -0,0 +1,321 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
+ * add the following below this CDDL HEADER, with the fields enclosed
+ * by brackets "[]" replaced with your own identifying * information:
+ * Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ * Portions Copyright 2006 Sun Microsystems, Inc.
+ */
+package org.opends.server.protocols.ldap;
+
+import org.opends.server.protocols.asn1.ASN1OctetString;
+import org.opends.server.protocols.asn1.ASN1Element;
+import org.opends.server.protocols.asn1.ASN1Sequence;
+import org.opends.server.protocols.asn1.ASN1Null;
+import static org.opends.server.util.ServerConstants.EOL;
+import org.testng.annotations.Test;
+import static org.testng.Assert.assertEquals;
+
+import java.util.ArrayList;
+
+/**
+ * This class defines a set of tests for the
+ * org.opends.server.protocol.ldap.CompareRequestProtocolOp class.
+ */
+public class TestCompareRequestProtocolOp extends LdapTestCase
+{
+ /**
+ * The protocol op type for compare requests.
+ */
+ public static final byte OP_TYPE_COMPARE_REQUEST = 0x6E;
+
+ /**
+ * The protocol op type for compare responses.
+ */
+ public static final byte OP_TYPE_COMPARE_RESPONSE = 0x6F;
+
+ /**
+ * The DN for compare requests in this test case.
+ */
+ private static final ASN1OctetString dn =
+ new ASN1OctetString("dc=example,dc=com");
+
+ /**
+ * The alternative DN for compare requests in this test case.
+ */
+ private static final ASN1OctetString dnAlt =
+ new ASN1OctetString("dc=sun,dc=com");
+
+ // The assertion value for this compare request.
+ private ASN1OctetString assertionValue =
+ new ASN1OctetString("=test");
+
+ // The assertion value for this compare request.
+ private ASN1OctetString assertionValueAlt =
+ new ASN1OctetString("=testAlt");
+
+ // The attribute type for this compare request.
+ private String attributeType = "testAttribute";
+
+ // The alternate attribute type for this compare request.
+ private String attributeTypeAlt = "testAttributeAlt";
+
+ /**
+ * Test to make sure the class processes the right LDAP op type.
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test
+ public void testOpType() throws Exception
+ {
+ CompareRequestProtocolOp compareRequest = new CompareRequestProtocolOp(dn,
+ attributeType, assertionValue);
+ assertEquals(compareRequest.getType(), OP_TYPE_COMPARE_REQUEST);
+ }
+
+ /**
+ * Test to make sure the class returns the correct protocol name.
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test
+ public void testProtocolOpName() throws Exception
+ {
+ CompareRequestProtocolOp compareRequest = new CompareRequestProtocolOp(dn,
+ attributeType, assertionValue);
+ assertEquals(compareRequest.getProtocolOpName(), "Compare Request");
+ }
+
+ /**
+ * Test the constructors to make sure the right objects are constructed.
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test
+ public void testConstructors() throws Exception
+ {
+ CompareRequestProtocolOp compareRequest;
+
+ //Test to make sure the constructor with dn param works.
+ compareRequest = new CompareRequestProtocolOp(dn, attributeType,
+ assertionValue);
+ assertEquals(compareRequest.getDN(), dn);
+ assertEquals(compareRequest.getAssertionValue(), assertionValue);
+ assertEquals(compareRequest.getAttributeType(), attributeType);
+ }
+
+ /**
+ * Test to make sure that setter methods work.
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test
+ public void testSetMethods() throws Exception
+ {
+ CompareRequestProtocolOp compareRequest;
+
+ compareRequest = new CompareRequestProtocolOp(dn, attributeType,
+ assertionValue);
+ assertEquals(compareRequest.getDN(), dn);
+ compareRequest.setDN(dnAlt);
+ assertEquals(compareRequest.getDN(), dnAlt);
+
+ assertEquals(compareRequest.getAttributeType(), attributeType);
+ compareRequest.setAttributeType(attributeTypeAlt);
+ assertEquals(compareRequest.getAttributeType(), attributeTypeAlt);
+
+ assertEquals(compareRequest.getAssertionValue(), assertionValue);
+ compareRequest.setAssertionValue(assertionValueAlt);
+ assertEquals(compareRequest.getAssertionValue(), assertionValueAlt);
+ }
+
+ /**
+ * Test the decode method when an null element is passed
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test(expectedExceptions = LDAPException.class)
+ public void testDecodeNullElement() throws Exception
+ {
+ CompareRequestProtocolOp.decodeCompareRequest(null);
+ }
+
+ /**
+ * Test the decode method when an empty element is passed
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test(expectedExceptions = LDAPException.class)
+ public void testDecodeEmptyElement() throws Exception
+ {
+ ArrayList<ASN1Element> elements = new ArrayList<ASN1Element>();
+ CompareRequestProtocolOp.decode(new ASN1Sequence(OP_TYPE_COMPARE_REQUEST,
+ elements));
+ }
+
+ /**
+ * Test the decode method when invalid elements is passed.
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test(expectedExceptions = LDAPException.class)
+ public void testDecodeInvalidElement() throws Exception
+ {
+ ArrayList<ASN1Element> elements = new ArrayList<ASN1Element>(2);
+ elements.add(new ASN1Null());
+ elements.add(new ASN1Null());
+ CompareRequestProtocolOp.decode(new ASN1Sequence(OP_TYPE_COMPARE_REQUEST,
+ elements));
+ }
+
+ /**
+ * Test the decode method when an element w/ wrong op type is passed.
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test(expectedExceptions = LDAPException.class)
+ public void testDecodeWrongElementType() throws Exception
+ {
+ ArrayList<ASN1Element> elements = new ArrayList<ASN1Element>(2);
+ elements.add(dn);
+ elements.add(new ASN1Null());
+ CompareRequestProtocolOp.decode(new ASN1Sequence(OP_TYPE_COMPARE_RESPONSE,
+ elements));
+ }
+
+ /**
+ * Test the encode and decode methods with null params
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test(expectedExceptions = Exception.class)
+ public void testNullEncodeDecode() throws Exception
+ {
+ CompareRequestProtocolOp compareEncoded;
+ CompareRequestProtocolOp compareDecoded;
+ ASN1Element element;
+
+ compareEncoded = new CompareRequestProtocolOp(null, null, null);
+ element = compareEncoded.encode();
+ compareDecoded = (CompareRequestProtocolOp)CompareRequestProtocolOp.decode(
+ element);
+ }
+
+ /**
+ * Test the encode and decode methods and corner cases.
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test
+ public void testEncodeDecode() throws Exception
+ {
+ CompareRequestProtocolOp compareEncoded;
+ CompareRequestProtocolOp compareDecoded;
+ ASN1Element element;
+ ArrayList<LDAPAttribute> attributes;
+
+
+ //Test case for a full encode decode operation with normal params.
+ compareEncoded = new CompareRequestProtocolOp(dn, attributeType,
+ assertionValue);
+ element = compareEncoded.encode();
+ compareDecoded = (CompareRequestProtocolOp)CompareRequestProtocolOp.decode(
+ element);
+
+ assertEquals(compareEncoded.getType(), OP_TYPE_COMPARE_REQUEST);
+ assertEquals(compareEncoded.getDN(), compareDecoded.getDN());
+ assertEquals(compareEncoded.getAttributeType(),
+ compareDecoded.getAttributeType());
+ assertEquals(compareEncoded.getAssertionValue(),
+ compareDecoded.getAssertionValue());
+ }
+
+
+ /**
+ * Test the toString (single line) method.
+ *
+ * @throws Exception If the test fails unexpectedly.
+ */
+ @Test
+ public void TestToStringSingleLine() throws Exception
+ {
+ CompareRequestProtocolOp compareRequest;
+ StringBuilder buffer = new StringBuilder();
+ StringBuilder key = new StringBuilder();
+ int i;
+
+ compareRequest = new CompareRequestProtocolOp(dn, attributeType,
+ assertionValue);
+ compareRequest.toString(buffer);
+
+ key.append("CompareRequest(dn="+dn+", attribute="+attributeType+", " +
+ "value="+assertionValue+")");
+
+ assertEquals(buffer.toString(), key.toString());
+ }
+
+ /**
+ * Test the toString (multi line) method.
+ *
+ * @throws Exception If the test fails unexpectedly.
+ */
+ @Test
+ public void TestToStringMultiLine() throws Exception
+ {
+ CompareRequestProtocolOp compareRequest;
+ StringBuilder buffer = new StringBuilder();
+ StringBuilder key = new StringBuilder();
+ int i;
+ int indent;
+
+ indent = 5;
+ compareRequest = new CompareRequestProtocolOp(dn, attributeType,
+ assertionValue);
+ compareRequest.toString(buffer, indent);
+
+ StringBuilder indentBuf = new StringBuilder(indent);
+ for (i=0 ; i < indent; i++)
+ {
+ indentBuf.append(' ');
+ }
+
+ key.append(indentBuf);
+ key.append("Compare Request");
+ key.append(EOL);
+
+ key.append(indentBuf);
+ key.append(" Target DN: ");
+ dn.toString(key);
+ key.append(EOL);
+
+ key.append(indentBuf);
+ key.append(" Attribute Type: ");
+ key.append(attributeType);
+ key.append(EOL);
+
+ key.append(indentBuf);
+ key.append(" Assertion Value:");
+ key.append(EOL);
+ assertionValue.toString(key, indent+4);
+
+ assertEquals(buffer.toString(), key.toString());
+ }
+}
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestCompareResponseProtocolOp.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestCompareResponseProtocolOp.java
new file mode 100644
index 0000000..c34b36f
--- /dev/null
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestCompareResponseProtocolOp.java
@@ -0,0 +1,435 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
+ * add the following below this CDDL HEADER, with the fields enclosed
+ * by brackets "[]" replaced with your own identifying * information:
+ * Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ * Portions Copyright 2006 Sun Microsystems, Inc.
+ */
+package org.opends.server.protocols.ldap;
+
+import org.opends.server.types.DN;
+import org.opends.server.types.AttributeType;
+import org.opends.server.types.AttributeValue;
+import org.opends.server.types.RDN;
+import org.opends.server.core.DirectoryServer;
+import org.opends.server.protocols.asn1.*;
+import static org.opends.server.util.ServerConstants.EOL;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertTrue;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+/**
+ * This class defines a set of tests for the
+ * org.opends.server.protocol.ldap.CompareRequestProtocolOp class.
+ */
+public class TestCompareResponseProtocolOp extends LdapTestCase
+{
+ /**
+ * The protocol op type for compare requests.
+ */
+ public static final byte OP_TYPE_COMPARE_REQUEST = 0x6E;
+
+
+
+ /**
+ * The protocol op type for compare responses.
+ */
+ public static final byte OP_TYPE_COMPARE_RESPONSE = 0x6F;
+
+ /**
+ * The result code for compare result operations.
+ */
+ private static final int resultCode = 10;
+
+ /**
+ * The error message to use for compare result operations.
+ */
+ private static final String resultMsg = "Test Successful";
+
+/**
+ * The DN to use for compare result operations
+ */
+ private DN dn;
+
+ @BeforeClass
+ public void setupDN()
+ {
+ //Setup the DN to use in the response tests.
+
+ AttributeType attribute =
+ DirectoryServer.getDefaultAttributeType("testAttribute");
+
+ AttributeValue attributeValue = new AttributeValue(attribute, "testValue");
+
+ RDN rdn = new RDN(attribute, attributeValue);
+
+ RDN[] rdns = {rdn};
+
+ dn = new DN(rdns);
+ }
+
+ /**
+ * Test to make sure the class processes the right LDAP op type.
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test
+ public void testOpType() throws Exception
+ {
+ CompareResponseProtocolOp compareResponse = new CompareResponseProtocolOp(
+ resultCode);
+ assertEquals(compareResponse.getType(), OP_TYPE_COMPARE_RESPONSE);
+ }
+
+ /**
+ * Test to make sure the class returns the correct protocol name.
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test
+ public void testProtocolOpName() throws Exception
+ {
+ CompareResponseProtocolOp compareResponse = new CompareResponseProtocolOp(
+ resultCode);
+ assertEquals(compareResponse.getProtocolOpName(), "Compare Response");
+ }
+
+ /**
+ * Test the constructors to make sure the right objects are constructed.
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test
+ public void testConstructors() throws Exception
+ {
+ CompareResponseProtocolOp compareResponse;
+ ArrayList<LDAPAttribute> attributes;
+
+ //Test to make sure the constructor with result code param works.
+ compareResponse = new CompareResponseProtocolOp(resultCode);
+ assertEquals(compareResponse.getResultCode(), resultCode);
+
+ //Test to make sure the constructor with result code and error message
+ //params works.
+ compareResponse = new CompareResponseProtocolOp(resultCode, resultMsg);
+ assertEquals(compareResponse.getErrorMessage(), resultMsg);
+ assertEquals(compareResponse.getResultCode(), resultCode);
+
+ //Test to make sure the constructor with result code, message, dn, and
+ //referal params works.
+ ArrayList<String> referralURLs = new ArrayList<String>();
+ referralURLs.add("ds1.example.com");
+ referralURLs.add("ds2.example.com");
+ referralURLs.add("ds3.example.com");
+
+ compareResponse = new CompareResponseProtocolOp(resultCode, resultMsg, dn,
+ referralURLs);
+ assertEquals(compareResponse.getErrorMessage(), resultMsg);
+ assertEquals(compareResponse.getResultCode(), resultCode);
+ assertEquals(compareResponse.getMatchedDN(), dn);
+ assertEquals(compareResponse.getReferralURLs(), referralURLs);
+ }
+
+ /**
+ * Test to make sure that setter methods work.
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test
+ public void testSetMethods() throws Exception
+ {
+ CompareResponseProtocolOp compareResponse;
+ compareResponse = new CompareResponseProtocolOp(resultCode);
+
+ compareResponse.setResultCode(resultCode + 1);
+ assertEquals(compareResponse.getResultCode(), resultCode + 1);
+
+ compareResponse.setErrorMessage(resultMsg);
+ assertEquals(compareResponse.getErrorMessage(), resultMsg);
+
+ compareResponse.setMatchedDN(dn);
+ assertEquals(compareResponse.getMatchedDN(), dn);
+
+ ArrayList<String> referralURLs = new ArrayList<String>();
+ referralURLs.add("ds1.example.com");
+ referralURLs.add("ds2.example.com");
+ referralURLs.add("ds3.example.com");
+ compareResponse.setReferralURLs(referralURLs);
+ assertEquals(compareResponse.getReferralURLs(), referralURLs);
+ }
+
+ /**
+ * Test the decode method when an empty element is passed
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test(expectedExceptions = LDAPException.class)
+ public void testDecodeEmptyElement() throws Exception
+ {
+ ArrayList<ASN1Element> elements = new ArrayList<ASN1Element>();
+ CompareResponseProtocolOp.decode(new ASN1Sequence(OP_TYPE_COMPARE_RESPONSE,
+ elements));
+ }
+
+ /**
+ * Test the decode method when an element with a invalid result code is
+ * passed
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test(expectedExceptions = LDAPException.class)
+ public void testDecodeInvalidResultCode() throws Exception
+ {
+ ArrayList<ASN1Element> elements = new ArrayList<ASN1Element>(2);
+ elements.add(new ASN1OctetString("Invalid Data"));
+ elements.add(new ASN1Null());
+ elements.add(new ASN1Null());
+ DeleteResponseProtocolOp.decode(new ASN1Sequence(OP_TYPE_COMPARE_RESPONSE,
+ elements));
+ }
+
+ /**
+ * Test the decode method when an element with a invalid dn is
+ * passed. Never throws an exception as long as the element is not null.
+ * This is the expected behavior.
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ //@Test(expectedExceptions = LDAPException.class)
+ public void testDecodeInvalidDN() throws Exception
+ {
+ ArrayList<ASN1Element> elements = new ArrayList<ASN1Element>(2);
+ elements.add(new ASN1Enumerated(resultCode));
+ elements.add(new ASN1Null());
+ elements.add(new ASN1Null());
+ DeleteResponseProtocolOp.decode(new ASN1Sequence(OP_TYPE_COMPARE_RESPONSE,
+ elements));
+ }
+
+ /**
+ * Test the decode method when an element with a invalid result message is
+ * passed. Never throws an exception as long as the element is not null.
+ * This is the expected behavior.
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ //@Test(expectedExceptions = LDAPException.class)
+ public void testDecodeInvalidResultMsg() throws Exception
+ {
+ ArrayList<ASN1Element> elements = new ArrayList<ASN1Element>(2);
+ elements.add(new ASN1Enumerated(resultCode));
+ elements.add(new ASN1OctetString(dn.toString()));
+ elements.add(new ASN1Null());
+ DeleteResponseProtocolOp.decode(new ASN1Sequence(OP_TYPE_COMPARE_RESPONSE,
+ elements));
+ }
+
+ /**
+ * Test the decode method when an element with a invalid referral URL is
+ * passed. Never throws an exception as long as the element is not null.
+ * This is the expected behavior.
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ //@Test(expectedExceptions = LDAPException.class)
+ public void testDecodeInvalidReferralURLs() throws Exception
+ {
+ ArrayList<ASN1Element> elements = new ArrayList<ASN1Element>(2);
+ elements.add(new ASN1Enumerated(resultCode));
+ elements.add(new ASN1OctetString(dn.toString()));
+ elements.add(new ASN1OctetString(resultMsg));
+ elements.add(new ASN1Null());
+ DeleteResponseProtocolOp.decode(new ASN1Sequence(OP_TYPE_COMPARE_RESPONSE,
+ elements));
+ }
+
+ /**
+ * Test the encode and decode methods and corner cases.
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test
+ public void testEncodeDecode() throws Exception
+ {
+ CompareResponseProtocolOp deleteEncoded;
+ CompareResponseProtocolOp deleteDecoded;
+ ASN1Element element;
+
+ ArrayList<String> referralURLs = new ArrayList<String>();
+ referralURLs.add("ds1.example.com");
+ referralURLs.add("ds2.example.com");
+ referralURLs.add("ds3.example.com");
+
+
+ //Test case for a full encode decode operation with normal params.
+ deleteEncoded = new CompareResponseProtocolOp(resultCode, resultMsg, dn,
+ referralURLs);
+ element = deleteEncoded.encode();
+ deleteDecoded = (CompareResponseProtocolOp)CompareResponseProtocolOp.decode(
+ element);
+
+ assertEquals(deleteEncoded.getType(), OP_TYPE_COMPARE_RESPONSE);
+ assertEquals(deleteEncoded.getMatchedDN().compareTo(
+ deleteDecoded.getMatchedDN()),
+ 0);
+ assertEquals(deleteEncoded.getErrorMessage(),
+ deleteDecoded.getErrorMessage());
+ assertEquals(deleteEncoded.getResultCode(), deleteDecoded.getResultCode());
+ assertEquals(deleteEncoded.getReferralURLs(),
+ deleteDecoded.getReferralURLs());
+
+
+ //Test case for a full encode decode operation with an empty DN params.
+ deleteEncoded = new CompareResponseProtocolOp(resultCode, resultMsg, new DN(),
+ referralURLs);
+ element = deleteEncoded.encode();
+ deleteDecoded = (CompareResponseProtocolOp)CompareResponseProtocolOp.decode(
+ element);
+ assertEquals(deleteDecoded.getMatchedDN(), null);
+
+ //Test case for a full empty referral url param.
+ ArrayList<String> emptyReferralURLs = new ArrayList<String>();
+ deleteEncoded = new CompareResponseProtocolOp(resultCode, resultMsg, dn,
+ emptyReferralURLs);
+ element = deleteEncoded.encode();
+ deleteDecoded = (CompareResponseProtocolOp)CompareResponseProtocolOp.decode(
+ element);
+ assertTrue(deleteDecoded.getReferralURLs() == null);
+
+ //Test case for a full encode decode operation with resultCode param only.
+ deleteEncoded = new CompareResponseProtocolOp(resultCode);
+ element = deleteEncoded.encode();
+ deleteDecoded = (CompareResponseProtocolOp)CompareResponseProtocolOp.decode(
+ element);
+
+ assertEquals(deleteDecoded.getMatchedDN(), null);
+ assertEquals(deleteDecoded.getErrorMessage(), null);
+ assertEquals(deleteEncoded.getResultCode(), deleteDecoded.getResultCode());
+ assertTrue(deleteDecoded.getReferralURLs() == null);
+ }
+
+ /**
+ * Test the toString (single line) method.
+ *
+ * @throws Exception If the test fails unexpectedly.
+ */
+ @Test
+ public void TestToStringSingleLine() throws Exception
+ {
+ CompareResponseProtocolOp compareResponse;
+ StringBuilder buffer = new StringBuilder();
+ StringBuilder key = new StringBuilder();
+
+ ArrayList<String> referralURLs = new ArrayList<String>();
+ referralURLs.add("ds1.example.com");
+ referralURLs.add("ds2.example.com");
+ referralURLs.add("ds3.example.com");
+
+ compareResponse = new CompareResponseProtocolOp(resultCode, resultMsg, dn,
+ referralURLs);
+ compareResponse.toString(buffer);
+
+ key.append("CompareResponse(resultCode="+resultCode+", " +
+ "errorMessage="+resultMsg+", matchedDN="+dn.toString()+", " +
+ "referralURLs={");
+
+ Iterator<String> iterator = referralURLs.iterator();
+ key.append(iterator.next());
+
+ while (iterator.hasNext())
+ {
+ key.append(", ");
+ key.append(iterator.next());
+ }
+
+ key.append("})");
+
+ assertEquals(buffer.toString(), key.toString());
+ }
+
+ /**
+ * Test the toString (multi line) method.
+ *
+ * @throws Exception If the test fails unexpectedly.
+ */
+ @Test
+ public void TestToStringMultiLine() throws Exception
+ {
+ CompareResponseProtocolOp compareResponse;
+ StringBuilder buffer = new StringBuilder();
+ StringBuilder key = new StringBuilder();
+
+ ArrayList<String> referralURLs = new ArrayList<String>();
+ referralURLs.add("ds1.example.com");
+ referralURLs.add("ds2.example.com");
+ referralURLs.add("ds3.example.com");
+ int indent = 5;
+ int i;
+
+ compareResponse = new CompareResponseProtocolOp(resultCode, resultMsg, dn,
+ referralURLs);
+ compareResponse.toString(buffer, indent);
+
+ StringBuilder indentBuf = new StringBuilder(indent);
+ for (i=0 ; i < indent; i++)
+ {
+ indentBuf.append(' ');
+ }
+
+ key.append(indentBuf);
+ key.append("Compare Response");
+ key.append(EOL);
+
+ key.append(indentBuf);
+ key.append(" Result Code: ");
+ key.append(resultCode);
+ key.append(EOL);
+
+ key.append(indentBuf);
+ key.append(" Error Message: ");
+ key.append(resultMsg);
+ key.append(EOL);
+
+ key.append(indentBuf);
+ key.append(" Matched DN: ");
+ key.append(dn.toString());
+ key.append(EOL);
+
+ key.append(indentBuf);
+ key.append(" Referral URLs: ");
+ key.append(EOL);
+
+ for (String url : referralURLs)
+ {
+ key.append(indentBuf);
+ key.append(" ");
+ key.append(url);
+ key.append(EOL);
+ }
+
+ assertEquals(buffer.toString(), key.toString());
+ }
+}
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestDeleteRequestProtocolOp.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestDeleteRequestProtocolOp.java
new file mode 100644
index 0000000..ed7c80b
--- /dev/null
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestDeleteRequestProtocolOp.java
@@ -0,0 +1,201 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
+ * add the following below this CDDL HEADER, with the fields enclosed
+ * by brackets "[]" replaced with your own identifying * information:
+ * Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ * Portions Copyright 2006 Sun Microsystems, Inc.
+ */
+package org.opends.server.protocols.ldap;
+
+import static org.testng.Assert.*;
+
+import org.testng.annotations.*;
+import org.opends.server.protocols.asn1.ASN1OctetString;
+import org.opends.server.protocols.asn1.ASN1Element;
+
+/**
+ * This class defines a set of tests for the
+ * org.opends.server.protocol.ldap.DeleteRequestProtocolOp class.
+ */
+public class TestDeleteRequestProtocolOp extends LdapTestCase
+{
+ /**
+ * The protocol op type for delete requests.
+ */
+ public static final byte OP_TYPE_DELETE_REQUEST = 0x4A;
+
+
+
+ /**
+ * The protocol op type for delete responses.
+ */
+ public static final byte OP_TYPE_DELETE_RESPONSE = 0x6B;
+
+ /**
+ * The DN for delete requests in this test case.
+ */
+ private static final ASN1OctetString dn =
+ new ASN1OctetString("dc=example,dc=com");
+
+ /**
+ * The alternative DN for delete requests in this test case.
+ */
+ private static final ASN1OctetString dnAlt =
+ new ASN1OctetString("dc=sun,dc=com");
+
+ /**
+ * Test the constructors to make sure the right objects are constructed.
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test
+ public void testConstructors() throws Exception
+ {
+ DeleteRequestProtocolOp deleteRequest = new DeleteRequestProtocolOp(dn);
+
+ assertEquals(deleteRequest.getDN(), dn);
+ }
+
+
+ /**
+ * Test to make sure that setter methods work.
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test
+ public void testSetMethods() throws Exception
+ {
+ DeleteRequestProtocolOp deleteRequest = new DeleteRequestProtocolOp(dn);
+
+ deleteRequest.setDN(dnAlt);;
+ assertEquals(deleteRequest.getDN(), dnAlt);
+ }
+
+ /**
+ * Test to make sure the class processes the right LDAP op type.
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test
+ public void testOpType() throws Exception
+ {
+ DeleteRequestProtocolOp deleteRequest = new DeleteRequestProtocolOp(dn);
+ assertEquals(deleteRequest.getType(), OP_TYPE_DELETE_REQUEST);
+ }
+
+ /**
+ * Test to make sure the class returns the correct protocol name.
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test
+ public void testProtocolOpName() throws Exception
+ {
+ DeleteRequestProtocolOp deleteRequest = new DeleteRequestProtocolOp(dn);
+ assertEquals(deleteRequest.getProtocolOpName(), "Delete Request");
+ }
+
+ /**
+ * Test the encode and decode methods and corner cases.
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test
+ public void testEncodeDecode() throws Exception
+ {
+ DeleteRequestProtocolOp deleteEncoded;
+ DeleteRequestProtocolOp deleteDecoded;
+ ASN1Element element;
+
+ deleteEncoded = new DeleteRequestProtocolOp(dn);
+ element = deleteEncoded.encode();
+ deleteDecoded = (DeleteRequestProtocolOp)DeleteRequestProtocolOp.decode(
+ element);
+
+ assertEquals(element.getType(), OP_TYPE_DELETE_REQUEST);
+ assertEquals(deleteDecoded.getDN(), deleteEncoded.getDN());
+ }
+
+ /**
+ * Test the encode and decode methods with null params
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test(expectedExceptions = Exception.class)
+ public void testNullEncodeDecode() throws Exception
+ {
+ DeleteRequestProtocolOp deleteEncoded;
+ DeleteRequestProtocolOp deleteDecoded;
+ ASN1Element element;
+
+ deleteEncoded = new DeleteRequestProtocolOp(null);
+ element = deleteEncoded.encode();
+ deleteDecoded = (DeleteRequestProtocolOp)DeleteRequestProtocolOp.decode(
+ element);
+ }
+
+ /**
+ * Test the decode method when an null element is passed
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test(expectedExceptions = LDAPException.class)
+ public void testDecodeNullElement() throws Exception
+ {
+ DeleteRequestProtocolOp.decode(null);
+ }
+
+ /**
+ * Test the toString (single line) method.
+ *
+ * @throws Exception If the test fails unexpectedly.
+ */
+ @Test
+ public void TestToStringSingleLine() throws Exception
+ {
+ DeleteRequestProtocolOp deleteRequest = new DeleteRequestProtocolOp(dn);
+ StringBuilder buffer = new StringBuilder();
+
+ String expectedStr = "DeleteRequest(dn=" + dn.toString() + ")";
+ deleteRequest.toString(buffer);
+
+ assertEquals(buffer.toString(), expectedStr);
+ }
+
+ /**
+ * Test the toString (multi line) method.
+ *
+ * @throws Exception If the test fails unexpectedly.
+ */
+ @Test
+ public void TestToStringMultiLine() throws Exception
+ {
+ DeleteRequestProtocolOp deleteRequest = new DeleteRequestProtocolOp(dn);
+ StringBuilder buffer = new StringBuilder();
+
+ String expectedStr = " Delete Request\n Entry DN: " + dn.toString() +
+ "\n";
+ deleteRequest.toString(buffer, 3);
+
+ assertEquals(buffer.toString(), expectedStr);
+ }
+}
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestDeleteResponseProtocolOp.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestDeleteResponseProtocolOp.java
new file mode 100644
index 0000000..bb5f2af
--- /dev/null
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestDeleteResponseProtocolOp.java
@@ -0,0 +1,434 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
+ * add the following below this CDDL HEADER, with the fields enclosed
+ * by brackets "[]" replaced with your own identifying * information:
+ * Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ * Portions Copyright 2006 Sun Microsystems, Inc.
+ */
+package org.opends.server.protocols.ldap;
+
+import static org.testng.Assert.*;
+import static org.testng.Assert.assertEquals;
+
+import org.testng.annotations.*;
+import org.opends.server.protocols.asn1.*;
+import org.opends.server.types.DN;
+import org.opends.server.types.AttributeType;
+import org.opends.server.types.AttributeValue;
+import org.opends.server.types.RDN;
+import org.opends.server.core.DirectoryServer;
+import static org.opends.server.util.ServerConstants.EOL;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+/**
+ * This class defines a set of tests for the
+ * org.opends.server.protocol.ldap.DeleteResponseProtocolOp class.
+ */
+public class TestDeleteResponseProtocolOp extends LdapTestCase
+{
+ /**
+ * The protocol op type for delete response.
+ */
+ public static final byte OP_TYPE_DELETE_REQUEST = 0x4A;
+
+ /**
+ * The protocol op type for delete responses.
+ */
+ public static final byte OP_TYPE_DELETE_RESPONSE = 0x6B;
+
+ /**
+ * The result code for delete result operations.
+ */
+ private static final int resultCode = 10;
+
+ /**
+ * The error message to use for delete result operations.
+ */
+ private static final String resultMsg = "Test Successful";
+
+/**
+ * The DN to use for delete result operations
+ */
+ private DN dn;
+
+ @BeforeClass
+ public void setupDN()
+ {
+ //Setup the DN to use in the response tests.
+
+ AttributeType attribute =
+ DirectoryServer.getDefaultAttributeType("testAttribute");
+
+ AttributeValue attributeValue = new AttributeValue(attribute, "testValue");
+
+ RDN rdn = new RDN(attribute, attributeValue);
+
+ RDN[] rdns = {rdn};
+
+ dn = new DN(rdns);
+ }
+
+ /**
+ * Test to make sure the class processes the right LDAP op type.
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test
+ public void testOpType() throws Exception
+ {
+ DeleteResponseProtocolOp deleteResponse = new DeleteResponseProtocolOp(
+ resultCode);
+ assertEquals(deleteResponse.getType(), OP_TYPE_DELETE_RESPONSE);
+ }
+
+ /**
+ * Test to make sure the class returns the correct protocol name.
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test
+ public void testProtocolOpName() throws Exception
+ {
+ DeleteResponseProtocolOp deleteResponse = new DeleteResponseProtocolOp(
+ resultCode);
+ assertEquals(deleteResponse.getProtocolOpName(), "Delete Response");
+ }
+
+ /**
+ * Test the constructors to make sure the right objects are constructed.
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test
+ public void testConstructors() throws Exception
+ {
+ DeleteResponseProtocolOp deleteResponse;
+ ArrayList<LDAPAttribute> attributes;
+
+ //Test to make sure the constructor with result code param works.
+ deleteResponse = new DeleteResponseProtocolOp(resultCode);
+ assertEquals(deleteResponse.getResultCode(), resultCode);
+
+ //Test to make sure the constructor with result code and error message
+ //params works.
+ deleteResponse = new DeleteResponseProtocolOp(resultCode, resultMsg);
+ assertEquals(deleteResponse.getErrorMessage(), resultMsg);
+ assertEquals(deleteResponse.getResultCode(), resultCode);
+
+ //Test to make sure the constructor with result code, message, dn, and
+ //referal params works.
+ ArrayList<String> referralURLs = new ArrayList<String>();
+ referralURLs.add("ds1.example.com");
+ referralURLs.add("ds2.example.com");
+ referralURLs.add("ds3.example.com");
+
+ deleteResponse = new DeleteResponseProtocolOp(resultCode, resultMsg, dn,
+ referralURLs);
+ assertEquals(deleteResponse.getErrorMessage(), resultMsg);
+ assertEquals(deleteResponse.getResultCode(), resultCode);
+ assertEquals(deleteResponse.getMatchedDN(), dn);
+ assertEquals(deleteResponse.getReferralURLs(), referralURLs);
+ }
+
+ /**
+ * Test to make sure that setter methods work.
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test
+ public void testSetMethods() throws Exception
+ {
+ DeleteResponseProtocolOp deleteResponse;
+ deleteResponse = new DeleteResponseProtocolOp(resultCode);
+
+ deleteResponse.setResultCode(resultCode + 1);
+ assertEquals(deleteResponse.getResultCode(), resultCode + 1);
+
+ deleteResponse.setErrorMessage(resultMsg);
+ assertEquals(deleteResponse.getErrorMessage(), resultMsg);
+
+ deleteResponse.setMatchedDN(dn);
+ assertEquals(deleteResponse.getMatchedDN(), dn);
+
+ ArrayList<String> referralURLs = new ArrayList<String>();
+ referralURLs.add("ds1.example.com");
+ referralURLs.add("ds2.example.com");
+ referralURLs.add("ds3.example.com");
+ deleteResponse.setReferralURLs(referralURLs);
+ assertEquals(deleteResponse.getReferralURLs(), referralURLs);
+ }
+
+ /**
+ * Test the decode method when an empty element is passed
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test(expectedExceptions = LDAPException.class)
+ public void testDecodeEmptyElement() throws Exception
+ {
+ ArrayList<ASN1Element> elements = new ArrayList<ASN1Element>();
+ DeleteResponseProtocolOp.decode(new ASN1Sequence(OP_TYPE_DELETE_RESPONSE,
+ elements));
+ }
+
+ /**
+ * Test the decode method when an element with a invalid result code is
+ * passed
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test(expectedExceptions = LDAPException.class)
+ public void testDecodeInvalidResultCode() throws Exception
+ {
+ ArrayList<ASN1Element> elements = new ArrayList<ASN1Element>(2);
+ elements.add(new ASN1OctetString("Invalid Data"));
+ elements.add(new ASN1Null());
+ elements.add(new ASN1Null());
+ DeleteResponseProtocolOp.decode(new ASN1Sequence(OP_TYPE_DELETE_RESPONSE,
+ elements));
+ }
+
+ /**
+ * Test the decode method when an element with a invalid dn is
+ * passed. Never throws an exception as long as the element is not null.
+ * This is the expected behavior.
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ //@Test(expectedExceptions = LDAPException.class)
+ public void testDecodeInvalidDN() throws Exception
+ {
+ ArrayList<ASN1Element> elements = new ArrayList<ASN1Element>(2);
+ elements.add(new ASN1Enumerated(resultCode));
+ elements.add(new ASN1Null());
+ elements.add(new ASN1Null());
+ DeleteResponseProtocolOp.decode(new ASN1Sequence(OP_TYPE_DELETE_RESPONSE,
+ elements));
+ }
+
+ /**
+ * Test the decode method when an element with a invalid result message is
+ * passed. Never throws an exception as long as the element is not null.
+ * This is the expected behavior.
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ //@Test(expectedExceptions = LDAPException.class)
+ public void testDecodeInvalidResultMsg() throws Exception
+ {
+ ArrayList<ASN1Element> elements = new ArrayList<ASN1Element>(2);
+ elements.add(new ASN1Enumerated(resultCode));
+ elements.add(new ASN1OctetString(dn.toString()));
+ elements.add(new ASN1Null());
+ DeleteResponseProtocolOp.decode(new ASN1Sequence(OP_TYPE_DELETE_RESPONSE,
+ elements));
+ }
+
+ /**
+ * Test the decode method when an element with a invalid referral URL is
+ * passed. Never throws an exception as long as the element is not null.
+ * This is the expected behavior.
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ //@Test(expectedExceptions = LDAPException.class)
+ public void testDecodeInvalidReferralURLs() throws Exception
+ {
+ ArrayList<ASN1Element> elements = new ArrayList<ASN1Element>(2);
+ elements.add(new ASN1Enumerated(resultCode));
+ elements.add(new ASN1OctetString(dn.toString()));
+ elements.add(new ASN1OctetString(resultMsg));
+ elements.add(new ASN1Null());
+ DeleteResponseProtocolOp.decode(new ASN1Sequence(OP_TYPE_DELETE_RESPONSE,
+ elements));
+ }
+
+ /**
+ * Test the encode and decode methods and corner cases.
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test
+ public void testEncodeDecode() throws Exception
+ {
+ DeleteResponseProtocolOp deleteEncoded;
+ DeleteResponseProtocolOp deleteDecoded;
+ ASN1Element element;
+
+ ArrayList<String> referralURLs = new ArrayList<String>();
+ referralURLs.add("ds1.example.com");
+ referralURLs.add("ds2.example.com");
+ referralURLs.add("ds3.example.com");
+
+
+ //Test case for a full encode decode operation with normal params.
+ deleteEncoded = new DeleteResponseProtocolOp(resultCode, resultMsg, dn,
+ referralURLs);
+ element = deleteEncoded.encode();
+ deleteDecoded = (DeleteResponseProtocolOp)DeleteResponseProtocolOp.decode(
+ element);
+
+ assertEquals(deleteEncoded.getType(), OP_TYPE_DELETE_RESPONSE);
+ assertEquals(deleteEncoded.getMatchedDN().compareTo(
+ deleteDecoded.getMatchedDN()),
+ 0);
+ assertEquals(deleteEncoded.getErrorMessage(),
+ deleteDecoded.getErrorMessage());
+ assertEquals(deleteEncoded.getResultCode(), deleteDecoded.getResultCode());
+ assertEquals(deleteEncoded.getReferralURLs(),
+ deleteDecoded.getReferralURLs());
+
+
+ //Test case for a full encode decode operation with an empty DN params.
+ deleteEncoded = new DeleteResponseProtocolOp(resultCode, resultMsg, new DN(),
+ referralURLs);
+ element = deleteEncoded.encode();
+ deleteDecoded = (DeleteResponseProtocolOp)DeleteResponseProtocolOp.decode(
+ element);
+ assertEquals(deleteDecoded.getMatchedDN(), null);
+
+ //Test case for a full empty referral url param.
+ ArrayList<String> emptyReferralURLs = new ArrayList<String>();
+ deleteEncoded = new DeleteResponseProtocolOp(resultCode, resultMsg, dn,
+ emptyReferralURLs);
+ element = deleteEncoded.encode();
+ deleteDecoded = (DeleteResponseProtocolOp)DeleteResponseProtocolOp.decode(
+ element);
+ assertTrue(deleteDecoded.getReferralURLs() == null);
+
+ //Test case for a full encode decode operation with resultCode param only.
+ deleteEncoded = new DeleteResponseProtocolOp(resultCode);
+ element = deleteEncoded.encode();
+ deleteDecoded = (DeleteResponseProtocolOp)DeleteResponseProtocolOp.decode(
+ element);
+
+ assertEquals(deleteDecoded.getMatchedDN(), null);
+ assertEquals(deleteDecoded.getErrorMessage(), null);
+ assertEquals(deleteEncoded.getResultCode(), deleteDecoded.getResultCode());
+ assertTrue(deleteDecoded.getReferralURLs() == null);
+ }
+
+ /**
+ * Test the toString (single line) method.
+ *
+ * @throws Exception If the test fails unexpectedly.
+ */
+ @Test
+ public void TestToStringSingleLine() throws Exception
+ {
+ DeleteResponseProtocolOp deleteResponse;
+ StringBuilder buffer = new StringBuilder();
+ StringBuilder key = new StringBuilder();
+
+ ArrayList<String> referralURLs = new ArrayList<String>();
+ referralURLs.add("ds1.example.com");
+ referralURLs.add("ds2.example.com");
+ referralURLs.add("ds3.example.com");
+
+ deleteResponse = new DeleteResponseProtocolOp(resultCode, resultMsg, dn,
+ referralURLs);
+ deleteResponse.toString(buffer);
+
+ key.append("DeleteResponse(resultCode="+resultCode+", " +
+ "errorMessage="+resultMsg+", matchedDN="+dn.toString()+", " +
+ "referralURLs={");
+
+ Iterator<String> iterator = referralURLs.iterator();
+ key.append(iterator.next());
+
+ while (iterator.hasNext())
+ {
+ key.append(", ");
+ key.append(iterator.next());
+ }
+
+ key.append("})");
+
+ assertEquals(buffer.toString(), key.toString());
+ }
+
+ /**
+ * Test the toString (multi line) method.
+ *
+ * @throws Exception If the test fails unexpectedly.
+ */
+ @Test
+ public void TestToStringMultiLine() throws Exception
+ {
+ DeleteResponseProtocolOp deleteResponse;
+ StringBuilder buffer = new StringBuilder();
+ StringBuilder key = new StringBuilder();
+
+ ArrayList<String> referralURLs = new ArrayList<String>();
+ referralURLs.add("ds1.example.com");
+ referralURLs.add("ds2.example.com");
+ referralURLs.add("ds3.example.com");
+ int indent = 5;
+ int i;
+
+ deleteResponse = new DeleteResponseProtocolOp(resultCode, resultMsg, dn,
+ referralURLs);
+ deleteResponse.toString(buffer, indent);
+
+ StringBuilder indentBuf = new StringBuilder(indent);
+ for (i=0 ; i < indent; i++)
+ {
+ indentBuf.append(' ');
+ }
+
+ key.append(indentBuf);
+ key.append("Delete Response");
+ key.append(EOL);
+
+ key.append(indentBuf);
+ key.append(" Result Code: ");
+ key.append(resultCode);
+ key.append(EOL);
+
+ key.append(indentBuf);
+ key.append(" Error Message: ");
+ key.append(resultMsg);
+ key.append(EOL);
+
+ key.append(indentBuf);
+ key.append(" Matched DN: ");
+ key.append(dn.toString());
+ key.append(EOL);
+
+ key.append(indentBuf);
+ key.append(" Referral URLs: ");
+ key.append(EOL);
+
+ for (String url : referralURLs)
+ {
+ key.append(indentBuf);
+ key.append(" ");
+ key.append(url);
+ key.append(EOL);
+ }
+
+ assertEquals(buffer.toString(), key.toString());
+ }
+
+}
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestModifyRequestProtocolOp.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestModifyRequestProtocolOp.java
new file mode 100644
index 0000000..8c6c397
--- /dev/null
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestModifyRequestProtocolOp.java
@@ -0,0 +1,425 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
+ * add the following below this CDDL HEADER, with the fields enclosed
+ * by brackets "[]" replaced with your own identifying * information:
+ * Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ * Portions Copyright 2006 Sun Microsystems, Inc.
+ */
+package org.opends.server.protocols.ldap;
+
+import org.opends.server.protocols.asn1.ASN1OctetString;
+import org.opends.server.protocols.asn1.ASN1Element;
+import org.opends.server.protocols.asn1.ASN1Sequence;
+import static org.opends.server.util.ServerConstants.EOL;
+import org.opends.server.types.ModificationType;
+import org.testng.annotations.Test;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertTrue;
+
+import java.util.ArrayList;
+import java.util.Random;
+
+/**
+ * This class defines a set of tests for the
+ * org.opends.server.protocol.ldap.ModifyRequestProtocolOp class.
+ */
+public class TestModifyRequestProtocolOp extends LdapTestCase
+{
+ /**
+ * The protocol op type for modify requests.
+ */
+ public static final byte OP_TYPE_MODIFY_REQUEST = 0x66;
+
+
+
+ /**
+ * The protocol op type for modify responses.
+ */
+ public static final byte OP_TYPE_MODIFY_RESPONSE = 0x67;
+
+
+ /**
+ * The DN for modify requests in this test case.
+ */
+ private static final ASN1OctetString dn =
+ new ASN1OctetString("dc=example,dc=com");
+
+ /**
+ * The alternative DN for add requests in this test case.
+ */
+ private static final ASN1OctetString dnAlt =
+ new ASN1OctetString("dc=sun,dc=com");
+
+ /**
+ * Generate modifications for use in test cases. Attributes will have names
+ * like "testAttributeN" where N is the number of the attribute. Modification
+ * types will be random.
+ *
+ * @param numAttributes Number of attributes to generate. 0 will return
+ * a empty list.
+ * @param prefix String to prefix the attribute values
+ * @return The generate attributes.
+ *
+ */
+ private ArrayList<LDAPModification> generateModifications(int numAttributes,
+ String prefix)
+ {
+ ArrayList<LDAPModification> modifies = new ArrayList<LDAPModification>();
+ LDAPAttribute attribute;
+ ModificationType modificationType;
+ Random randomGenerator = new Random(0);
+ int i, j;
+
+ for(i = 0; i < numAttributes; i++)
+ {
+ attribute = new LDAPAttribute("testAttribute"+i);
+ switch(i % 4)
+ {
+ case 0 : modificationType = ModificationType.ADD;
+ break;
+ case 1 : modificationType = ModificationType.DELETE;
+ break;
+ case 2 : modificationType = ModificationType.REPLACE;
+ break;
+ case 3 : modificationType = ModificationType.INCREMENT;
+ break;
+ default : modificationType = ModificationType.ADD;
+ }
+
+ modifies.add(new LDAPModification(modificationType, attribute));
+ }
+
+ return modifies;
+ }
+
+ private Boolean modificationsEquals(ArrayList<LDAPModification> modifies1,
+ ArrayList<LDAPModification> modifies2)
+ {
+ if(modifies1.size() != modifies2.size())
+ {
+ return false;
+ }
+
+ int i, j;
+ LDAPModification modify1;
+ LDAPModification modify2;
+
+ for(i = 0; i < modifies1.size(); i++)
+ {
+ modify1 = modifies1.get(i);
+ modify2 = modifies2.get(i);
+ if(!modify1.getAttribute().getAttributeType().equals(
+ modify2.getAttribute().getAttributeType()))
+ {
+ System.out.println(modify1.getAttribute());
+ System.out.println(modify2.getAttribute());
+ System.out.println("attribute !=");
+ return false;
+ }
+ if(!modify1.getModificationType().equals(modify2.getModificationType()))
+ {
+ System.out.println("mod type !=");
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Test to make sure the class processes the right LDAP op type.
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test
+ public void testOpType() throws Exception
+ {
+ ModifyRequestProtocolOp modifyRequest = new ModifyRequestProtocolOp(dn);
+ assertEquals(modifyRequest.getType(), OP_TYPE_MODIFY_REQUEST);
+ }
+
+ /**
+ * Test to make sure the class returns the correct protocol name.
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test
+ public void testProtocolOpName() throws Exception
+ {
+ ModifyRequestProtocolOp modifyRequest = new ModifyRequestProtocolOp(dn);
+ assertEquals(modifyRequest.getProtocolOpName(), "Modify Request");
+ }
+
+ /**
+ * Test the constructors to make sure the right objects are constructed.
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test
+ public void testConstructors() throws Exception
+ {
+ ModifyRequestProtocolOp modifyRequest;
+ ArrayList<LDAPModification> modifications;
+
+ //Test to make sure the constructor with dn param works.
+ modifyRequest = new ModifyRequestProtocolOp(dn);
+ assertEquals(modifyRequest.getDN(), dn);
+ assertNotNull(modifyRequest.getModifications());
+ assertEquals(modifyRequest.getModifications().size(), 0);
+
+ //Test to make sure the constructor with dn and attribute params works.
+ modifications = generateModifications(10, "test");
+ modifyRequest = new ModifyRequestProtocolOp(dn, modifications);
+ assertEquals(modifyRequest.getDN(), dn);
+ assertEquals(modifyRequest.getModifications(), modifications);
+
+ //Test to make sure the constructor with dn and attribute params works with
+ //null attributes.
+ modifyRequest = new ModifyRequestProtocolOp(dn, null);
+ assertEquals(modifyRequest.getDN(), dn);
+ assertNotNull(modifyRequest.getModifications());
+ assertEquals(modifyRequest.getModifications().size(), 0);
+ }
+
+ /**
+ * Test to make sure that setter methods work.
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test
+ public void testSetMethods() throws Exception
+ {
+ ModifyRequestProtocolOp modifyRequest;
+
+ modifyRequest = new ModifyRequestProtocolOp(dn);
+ assertEquals(modifyRequest.getDN(), dn);
+ modifyRequest.setDN(dnAlt);
+ assertEquals(modifyRequest.getDN(), dnAlt);
+
+ }
+
+ /**
+ * Test the decode method when an null element is passed
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test(expectedExceptions = LDAPException.class)
+ public void testDecodeNullElement() throws Exception
+ {
+ ModifyRequestProtocolOp.decodeModifyRequest(null);
+ }
+
+ /**
+ * Test the decode method when an empty element is passed
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test(expectedExceptions = LDAPException.class)
+ public void testDecodeEmptyElement() throws Exception
+ {
+ ArrayList<ASN1Element> elements = new ArrayList<ASN1Element>();
+ ModifyRequestProtocolOp.decode(new ASN1Sequence(OP_TYPE_MODIFY_REQUEST,
+ elements));
+ }
+
+ /**
+ * Test the decode method when invalid modifies in element is passed
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test(expectedExceptions = LDAPException.class)
+ public void testDecodeInvalidElement() throws Exception
+ {
+ ArrayList<ASN1Element> elements = new ArrayList<ASN1Element>(2);
+ ArrayList<ASN1Element> attrElements =
+ new ArrayList<ASN1Element>();
+ elements.add(new ASN1Sequence(attrElements));
+ elements.add(dn);
+ ModifyRequestProtocolOp.decode(new ASN1Sequence(OP_TYPE_MODIFY_REQUEST,
+ elements));
+ }
+
+ /**
+ * Test the decode method when an element w/ wrong op type is passed.
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test(expectedExceptions = LDAPException.class)
+ public void testDecodeWrongElementType() throws Exception
+ {
+ ArrayList<ASN1Element> elements = new ArrayList<ASN1Element>(2);
+ ArrayList<ASN1Element> attrElements =
+ new ArrayList<ASN1Element>();
+ elements.add(dn);
+ elements.add(new ASN1Sequence(attrElements));
+ ModifyRequestProtocolOp.decode(new ASN1Sequence(OP_TYPE_MODIFY_RESPONSE,
+ elements));
+ }
+
+ /**
+ * Test the encode and decode methods with null params
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test(expectedExceptions = Exception.class)
+ public void testNullEncodeDecode() throws Exception
+ {
+ ModifyRequestProtocolOp modifyEncoded;
+ ModifyRequestProtocolOp modifyDecoded;
+ ASN1Element element;
+
+ modifyEncoded = new ModifyRequestProtocolOp(null, null);
+ element = modifyEncoded.encode();
+ modifyDecoded = (ModifyRequestProtocolOp)ModifyRequestProtocolOp.decode(
+ element);
+ }
+
+ /**
+ * Test the encode and decode methods and corner cases.
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test
+ public void testEncodeDecode() throws Exception
+ {
+ ModifyRequestProtocolOp modifyEncoded;
+ ModifyRequestProtocolOp modifyDecoded;
+ ASN1Element element;
+ ArrayList<LDAPModification> modifies;
+
+
+ //Test case for a full encode decode operation with normal params.
+ modifies = generateModifications(10,"test");
+ modifyEncoded = new ModifyRequestProtocolOp(dn, modifies);
+ element = modifyEncoded.encode();
+ modifyDecoded = (ModifyRequestProtocolOp)ModifyRequestProtocolOp.decode(
+ element);
+
+ assertEquals(modifyEncoded.getType(), OP_TYPE_MODIFY_REQUEST);
+ assertEquals(modifyEncoded.getDN(), modifyDecoded.getDN());
+ assertTrue(modificationsEquals(modifyEncoded.getModifications(),
+ modifyDecoded.getModifications()));
+
+ //Test case for a full encode decode operation with large modifications.
+ modifies = generateModifications(100,"test");
+ modifyEncoded = new ModifyRequestProtocolOp(dn, modifies);
+ element = modifyEncoded.encode();
+ modifyDecoded = (ModifyRequestProtocolOp)ModifyRequestProtocolOp.decode(
+ element);
+
+ assertEquals(modifyEncoded.getDN(), modifyDecoded.getDN());
+ assertTrue(modificationsEquals(modifyEncoded.getModifications(),
+ modifyDecoded.getModifications()));
+
+ //Test case for a full encode decode operation with no attributes.
+ modifyEncoded = new ModifyRequestProtocolOp(dn, null);
+ element = modifyEncoded.encode();
+ modifyDecoded = (ModifyRequestProtocolOp)ModifyRequestProtocolOp.decode(
+ element);
+
+ assertEquals(modifyEncoded.getDN(), modifyDecoded.getDN());
+ assertTrue(modificationsEquals(modifyEncoded.getModifications(),
+ modifyDecoded.getModifications()));
+ }
+
+ /**
+ * Test the toString (single line) method.
+ *
+ * @throws Exception If the test fails unexpectedly.
+ */
+ @Test
+ public void TestToStringSingleLine() throws Exception
+ {
+ ModifyRequestProtocolOp modifyRequest;
+ ArrayList<LDAPModification> modifications;
+ StringBuilder buffer = new StringBuilder();
+ StringBuilder key = new StringBuilder();
+ int i;
+ int numModifications;
+
+ numModifications = 10;
+ modifications = generateModifications(numModifications, "test");
+ modifyRequest = new ModifyRequestProtocolOp(dn, modifications);
+ modifyRequest.toString(buffer);
+
+ key.append("ModifyRequest(dn="+dn+", mods={");
+ for(i = 0; i < numModifications; i++)
+ {
+ modifications.get(i).toString(key);
+ if(i < numModifications - 1)
+ {
+ key.append(", ");
+ }
+ }
+ key.append("})");
+
+ assertEquals(buffer.toString(), key.toString());
+ }
+
+ /**
+ * Test the toString (multi line) method.
+ *
+ * @throws Exception If the test fails unexpectedly.
+ */
+ @Test
+ public void TestToStringMultiLine() throws Exception
+ {
+ ModifyRequestProtocolOp modifyRequest;
+ ArrayList<LDAPModification> modifications;
+ StringBuilder buffer = new StringBuilder();
+ StringBuilder key = new StringBuilder();
+ int i;
+ int numModifications, indent;
+
+ numModifications = 10;
+ indent = 5;
+ modifications = generateModifications(numModifications, "test");
+ modifyRequest = new ModifyRequestProtocolOp(dn, modifications);
+ modifyRequest.toString(buffer, indent);
+
+ StringBuilder indentBuf = new StringBuilder(indent);
+ for (i=0 ; i < indent; i++)
+ {
+ indentBuf.append(' ');
+ }
+
+ key.append(indentBuf);
+ key.append("Modify Request");
+ key.append(EOL);
+
+ key.append(indentBuf);
+ key.append(" DN: ");
+ dn.toString(key);
+ key.append(EOL);
+
+ key.append(" Modifications:");
+ key.append(EOL);
+
+ for (LDAPModification modify : modifications)
+ {
+ modify.toString(key, indent+4);
+ }
+
+ assertEquals(buffer.toString(), key.toString());
+ }
+}
diff --git a/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestModifyResponseProtocolOp.java b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestModifyResponseProtocolOp.java
new file mode 100644
index 0000000..d4c3380
--- /dev/null
+++ b/opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestModifyResponseProtocolOp.java
@@ -0,0 +1,435 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE
+ * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at
+ * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
+ * add the following below this CDDL HEADER, with the fields enclosed
+ * by brackets "[]" replaced with your own identifying * information:
+ * Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ * Portions Copyright 2006 Sun Microsystems, Inc.
+ */
+package org.opends.server.protocols.ldap;
+
+import org.opends.server.types.DN;
+import org.opends.server.types.AttributeType;
+import org.opends.server.types.AttributeValue;
+import org.opends.server.types.RDN;
+import org.opends.server.core.DirectoryServer;
+import org.opends.server.protocols.asn1.*;
+import static org.opends.server.util.ServerConstants.EOL;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertTrue;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+/**
+ * This class defines a set of tests for the
+ * org.opends.server.protocol.ldap.ModifyResponseProtocolOp class.
+ */
+public class TestModifyResponseProtocolOp extends LdapTestCase
+{
+ /**
+ * The protocol op type for modify requests.
+ */
+ public static final byte OP_TYPE_MODIFY_REQUEST = 0x66;
+
+
+
+ /**
+ * The protocol op type for modify responses.
+ */
+ public static final byte OP_TYPE_MODIFY_RESPONSE = 0x67;
+
+ /**
+ * The result code for add result operations.
+ */
+ private static final int resultCode = 10;
+
+ /**
+ * The error message to use for add result operations.
+ */
+ private static final String resultMsg = "Test Successful";
+
+/**
+ * The DN to use for add result operations
+ */
+ private DN dn;
+
+ @BeforeClass
+ public void setupDN()
+ {
+ //Setup the DN to use in the response tests.
+
+ AttributeType attribute =
+ DirectoryServer.getDefaultAttributeType("testAttribute");
+
+ AttributeValue attributeValue = new AttributeValue(attribute, "testValue");
+
+ RDN rdn = new RDN(attribute, attributeValue);
+
+ RDN[] rdns = {rdn};
+
+ dn = new DN(rdns);
+ }
+
+ /**
+ * Test to make sure the class processes the right LDAP op type.
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test
+ public void testOpType() throws Exception
+ {
+ ModifyResponseProtocolOp modifyResponse = new ModifyResponseProtocolOp(
+ resultCode);
+ assertEquals(modifyResponse.getType(), OP_TYPE_MODIFY_RESPONSE);
+ }
+
+ /**
+ * Test to make sure the class returns the correct protocol name.
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test
+ public void testProtocolOpName() throws Exception
+ {
+ ModifyResponseProtocolOp modifyResponse = new ModifyResponseProtocolOp(
+ resultCode);
+ assertEquals(modifyResponse.getProtocolOpName(), "Modify Response");
+ }
+
+ /**
+ * Test the constructors to make sure the right objects are constructed.
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test
+ public void testConstructors() throws Exception
+ {
+ ModifyResponseProtocolOp modifyResponse;
+ ArrayList<LDAPAttribute> attributes;
+
+ //Test to make sure the constructor with result code param works.
+ modifyResponse = new ModifyResponseProtocolOp(resultCode);
+ assertEquals(modifyResponse.getResultCode(), resultCode);
+
+ //Test to make sure the constructor with result code and error message
+ //params works.
+ modifyResponse = new ModifyResponseProtocolOp(resultCode, resultMsg);
+ assertEquals(modifyResponse.getErrorMessage(), resultMsg);
+ assertEquals(modifyResponse.getResultCode(), resultCode);
+
+ //Test to make sure the constructor with result code, message, dn, and
+ //referal params works.
+ ArrayList<String> referralURLs = new ArrayList<String>();
+ referralURLs.add("ds1.example.com");
+ referralURLs.add("ds2.example.com");
+ referralURLs.add("ds3.example.com");
+
+ modifyResponse = new ModifyResponseProtocolOp(resultCode, resultMsg, dn,
+ referralURLs);
+ assertEquals(modifyResponse.getErrorMessage(), resultMsg);
+ assertEquals(modifyResponse.getResultCode(), resultCode);
+ assertEquals(modifyResponse.getMatchedDN(), dn);
+ assertEquals(modifyResponse.getReferralURLs(), referralURLs);
+ }
+
+ /**
+ * Test to make sure that setter methods work.
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test
+ public void testSetMethods() throws Exception
+ {
+ ModifyResponseProtocolOp modifyResponse;
+ modifyResponse = new ModifyResponseProtocolOp(resultCode);
+
+ modifyResponse.setResultCode(resultCode + 1);
+ assertEquals(modifyResponse.getResultCode(), resultCode + 1);
+
+ modifyResponse.setErrorMessage(resultMsg);
+ assertEquals(modifyResponse.getErrorMessage(), resultMsg);
+
+ modifyResponse.setMatchedDN(dn);
+ assertEquals(modifyResponse.getMatchedDN(), dn);
+
+ ArrayList<String> referralURLs = new ArrayList<String>();
+ referralURLs.add("ds1.example.com");
+ referralURLs.add("ds2.example.com");
+ referralURLs.add("ds3.example.com");
+ modifyResponse.setReferralURLs(referralURLs);
+ assertEquals(modifyResponse.getReferralURLs(), referralURLs);
+ }
+
+ /**
+ * Test the decode method when an empty element is passed
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test(expectedExceptions = LDAPException.class)
+ public void testDecodeEmptyElement() throws Exception
+ {
+ ArrayList<ASN1Element> elements = new ArrayList<ASN1Element>();
+ ModifyResponseProtocolOp.decode(new ASN1Sequence(OP_TYPE_MODIFY_RESPONSE,
+ elements));
+ }
+
+ /**
+ * Test the decode method when an element with a invalid result code is
+ * passed
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test(expectedExceptions = LDAPException.class)
+ public void testDecodeInvalidResultCode() throws Exception
+ {
+ ArrayList<ASN1Element> elements = new ArrayList<ASN1Element>(2);
+ elements.add(new ASN1OctetString("Invalid Data"));
+ elements.add(new ASN1Null());
+ elements.add(new ASN1Null());
+ ModifyResponseProtocolOp.decode(new ASN1Sequence(OP_TYPE_MODIFY_RESPONSE,
+ elements));
+ }
+
+ /**
+ * Test the decode method when an element with a invalid dn is
+ * passed. Never throws an exception as long as the element is not null.
+ * This is the expected behavior.
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ //@Test(expectedExceptions = LDAPException.class)
+ public void testDecodeInvalidDN() throws Exception
+ {
+ ArrayList<ASN1Element> elements = new ArrayList<ASN1Element>(2);
+ elements.add(new ASN1Enumerated(resultCode));
+ elements.add(new ASN1Null());
+ elements.add(new ASN1Null());
+ ModifyResponseProtocolOp.decode(new ASN1Sequence(OP_TYPE_MODIFY_RESPONSE,
+ elements));
+ }
+
+ /**
+ * Test the decode method when an element with a invalid result message is
+ * passed. Never throws an exception as long as the element is not null.
+ * This is the expected behavior.
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ //@Test(expectedExceptions = LDAPException.class)
+ public void testDecodeInvalidResultMsg() throws Exception
+ {
+ ArrayList<ASN1Element> elements = new ArrayList<ASN1Element>(2);
+ elements.add(new ASN1Enumerated(resultCode));
+ elements.add(new ASN1OctetString(dn.toString()));
+ elements.add(new ASN1Null());
+ ModifyResponseProtocolOp.decode(new ASN1Sequence(OP_TYPE_MODIFY_RESPONSE,
+ elements));
+ }
+
+ /**
+ * Test the decode method when an element with a invalid referral URL is
+ * passed. Never throws an exception as long as the element is not null.
+ * This is the expected behavior.
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ //@Test(expectedExceptions = LDAPException.class)
+ public void testDecodeInvalidReferralURLs() throws Exception
+ {
+ ArrayList<ASN1Element> elements = new ArrayList<ASN1Element>(2);
+ elements.add(new ASN1Enumerated(resultCode));
+ elements.add(new ASN1OctetString(dn.toString()));
+ elements.add(new ASN1OctetString(resultMsg));
+ elements.add(new ASN1Null());
+ ModifyResponseProtocolOp.decode(new ASN1Sequence(OP_TYPE_MODIFY_RESPONSE,
+ elements));
+ }
+
+ /**
+ * Test the encode and decode methods and corner cases.
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test
+ public void testEncodeDecode() throws Exception
+ {
+ ModifyResponseProtocolOp modifyEncoded;
+ ModifyResponseProtocolOp modifyDecoded;
+ ASN1Element element;
+
+ ArrayList<String> referralURLs = new ArrayList<String>();
+ referralURLs.add("ds1.example.com");
+ referralURLs.add("ds2.example.com");
+ referralURLs.add("ds3.example.com");
+
+
+ //Test case for a full encode decode operation with normal params.
+ modifyEncoded = new ModifyResponseProtocolOp(resultCode, resultMsg, dn,
+ referralURLs);
+ element = modifyEncoded.encode();
+ modifyDecoded = (ModifyResponseProtocolOp)ModifyResponseProtocolOp.decode(
+ element);
+
+ assertEquals(modifyEncoded.getType(), OP_TYPE_MODIFY_RESPONSE);
+ assertEquals(modifyEncoded.getMatchedDN().compareTo(
+ modifyDecoded.getMatchedDN()),
+ 0);
+ assertEquals(modifyEncoded.getErrorMessage(),
+ modifyDecoded.getErrorMessage());
+ assertEquals(modifyEncoded.getResultCode(), modifyDecoded.getResultCode());
+ assertEquals(modifyEncoded.getReferralURLs(),
+ modifyDecoded.getReferralURLs());
+
+
+ //Test case for a full encode decode operation with an empty DN params.
+ modifyEncoded = new ModifyResponseProtocolOp(resultCode, resultMsg, new DN(),
+ referralURLs);
+ element = modifyEncoded.encode();
+ modifyDecoded = (ModifyResponseProtocolOp)ModifyResponseProtocolOp.decode(
+ element);
+ assertEquals(modifyDecoded.getMatchedDN(), null);
+
+ //Test case for a full empty referral url param.
+ ArrayList<String> emptyReferralURLs = new ArrayList<String>();
+ modifyEncoded = new ModifyResponseProtocolOp(resultCode, resultMsg, dn,
+ emptyReferralURLs);
+ element = modifyEncoded.encode();
+ modifyDecoded = (ModifyResponseProtocolOp)ModifyResponseProtocolOp.decode(
+ element);
+ assertTrue(modifyDecoded.getReferralURLs() == null);
+
+ //Test case for a full encode decode operation with resultCode param only.
+ modifyEncoded = new ModifyResponseProtocolOp(resultCode);
+ element = modifyEncoded.encode();
+ modifyDecoded = (ModifyResponseProtocolOp)ModifyResponseProtocolOp.decode(
+ element);
+
+ assertEquals(modifyDecoded.getMatchedDN(), null);
+ assertEquals(modifyDecoded.getErrorMessage(), null);
+ assertEquals(modifyEncoded.getResultCode(), modifyDecoded.getResultCode());
+ assertTrue(modifyDecoded.getReferralURLs() == null);
+ }
+
+ /**
+ * Test the toString (single line) method.
+ *
+ * @throws Exception If the test fails unexpectedly.
+ */
+ @Test
+ public void TestToStringSingleLine() throws Exception
+ {
+ ModifyResponseProtocolOp modifyResponse;
+ StringBuilder buffer = new StringBuilder();
+ StringBuilder key = new StringBuilder();
+
+ ArrayList<String> referralURLs = new ArrayList<String>();
+ referralURLs.add("ds1.example.com");
+ referralURLs.add("ds2.example.com");
+ referralURLs.add("ds3.example.com");
+
+ modifyResponse = new ModifyResponseProtocolOp(resultCode, resultMsg, dn,
+ referralURLs);
+ modifyResponse.toString(buffer);
+
+ key.append("ModifyResponse(resultCode="+resultCode+", " +
+ "errorMessage="+resultMsg+", matchedDN="+dn.toString()+", " +
+ "referralURLs={");
+
+ Iterator<String> iterator = referralURLs.iterator();
+ key.append(iterator.next());
+
+ while (iterator.hasNext())
+ {
+ key.append(", ");
+ key.append(iterator.next());
+ }
+
+ key.append("})");
+
+ assertEquals(buffer.toString(), key.toString());
+ }
+
+ /**
+ * Test the toString (multi line) method.
+ *
+ * @throws Exception If the test fails unexpectedly.
+ */
+ @Test
+ public void TestToStringMultiLine() throws Exception
+ {
+ ModifyResponseProtocolOp modifyResponse;
+ StringBuilder buffer = new StringBuilder();
+ StringBuilder key = new StringBuilder();
+
+ ArrayList<String> referralURLs = new ArrayList<String>();
+ referralURLs.add("ds1.example.com");
+ referralURLs.add("ds2.example.com");
+ referralURLs.add("ds3.example.com");
+ int indent = 5;
+ int i;
+
+ modifyResponse = new ModifyResponseProtocolOp(resultCode, resultMsg, dn,
+ referralURLs);
+ modifyResponse.toString(buffer, indent);
+
+ StringBuilder indentBuf = new StringBuilder(indent);
+ for (i=0 ; i < indent; i++)
+ {
+ indentBuf.append(' ');
+ }
+
+ key.append(indentBuf);
+ key.append("Modify Response");
+ key.append(EOL);
+
+ key.append(indentBuf);
+ key.append(" Result Code: ");
+ key.append(resultCode);
+ key.append(EOL);
+
+ key.append(indentBuf);
+ key.append(" Error Message: ");
+ key.append(resultMsg);
+ key.append(EOL);
+
+ key.append(indentBuf);
+ key.append(" Matched DN: ");
+ key.append(dn.toString());
+ key.append(EOL);
+
+ key.append(indentBuf);
+ key.append(" Referral URLs: ");
+ key.append(EOL);
+
+ for (String url : referralURLs)
+ {
+ key.append(indentBuf);
+ key.append(" ");
+ key.append(url);
+ key.append(EOL);
+ }
+
+ assertEquals(buffer.toString(), key.toString());
+ }
+}
--
Gitblit v1.10.0