From 919631050d15772fc49dbe3608e4086de7a8382e Mon Sep 17 00:00:00 2001
From: boli <boli@localhost>
Date: Wed, 27 Sep 2006 18:47:15 +0000
Subject: [PATCH] Add test cases for the ModifyDN operation along with test cases for the LDAPFilter class.
---
opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestLDAPFilter.java | 298 +++++++++++++++
opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestModifyDNResponseProtocolOp.java | 435 ++++++++++++++++++++++
opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestModifyDNRequestProtocolOp.java | 361 +++++++++++++++++++
3 files changed, 1,094 insertions(+), 0 deletions(-)
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestLDAPFilter.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestLDAPFilter.java
new file mode 100644
index 0000000..bb8042e
--- /dev/null
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestLDAPFilter.java
@@ -0,0 +1,298 @@
+/*
+ * 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.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+import org.testng.annotations.BeforeTest;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertSame;
+import org.opends.server.types.SearchFilter;
+import org.opends.server.types.FilterType;
+import org.opends.server.types.AttributeType;
+import org.opends.server.protocols.asn1.ASN1OctetString;
+import org.opends.server.TestCaseUtils;
+
+import java.util.ArrayList;
+
+public class TestLDAPFilter extends LdapTestCase
+{
+ @BeforeTest
+ public void setup() throws Exception
+ {
+ TestCaseUtils.startServer();
+ }
+ @DataProvider(name="badfilterstrings")
+ public Object[][] getBadFilterStrings() throws Exception
+ {
+ return new Object[][]
+ {
+ { null, null },
+ { "", null },
+ { "=", null },
+ { "()", null },
+ { "(&(objectClass=*)(sn=s*s)", null },
+ { "(dob>12221)", null },
+ { "(cn=bob\\2 doe)", null },
+ { "(cn=\\4j\\w2\\yu)", null },
+ { "(cn=ds\\2)", null },
+ { "(&(givenname=bob)|(sn=pep)dob=12))", null },
+ { "(:=bob)", null },
+ { "(=sally)", null },
+ { "(cn=billy bob", null }
+
+ };
+ }
+ @DataProvider(name="filterstrings")
+ public Object[][] getFilterStrings() throws Exception
+ {
+ LDAPFilter equal = LDAPFilter.createEqualityFilter("objectClass",
+ new ASN1OctetString("\\test*(Value)"));
+ LDAPFilter equal2 = LDAPFilter.createEqualityFilter("objectClass",
+ new ASN1OctetString(""));
+ LDAPFilter approx = LDAPFilter.createApproximateFilter("sn",
+ new ASN1OctetString("\\test*(Value)"));
+ LDAPFilter greater = LDAPFilter.createGreaterOrEqualFilter("employeeNumber",
+ new ASN1OctetString("\\test*(Value)"));
+ LDAPFilter less = LDAPFilter.createLessOrEqualFilter("dob",
+ new ASN1OctetString("\\test*(Value)"));
+ LDAPFilter presense = LDAPFilter.createPresenceFilter("login");
+
+ ArrayList<ASN1OctetString> any = new ArrayList<ASN1OctetString>(0);
+ ArrayList<ASN1OctetString> multiAny = new ArrayList<ASN1OctetString>(1);
+ multiAny.add(new ASN1OctetString("\\wid*(get)"));
+ multiAny.add(new ASN1OctetString("*"));
+
+ LDAPFilter substring1 = LDAPFilter.createSubstringFilter("givenName",
+ new ASN1OctetString("\\Jo*()"),
+ any,
+ new ASN1OctetString("\\n*()"));
+ LDAPFilter substring2 = LDAPFilter.createSubstringFilter("givenName",
+ new ASN1OctetString("\\Jo*()"),
+ multiAny,
+ new ASN1OctetString("\\n*()"));
+ LDAPFilter substring3 = LDAPFilter.createSubstringFilter("givenName",
+ new ASN1OctetString(""),
+ any,
+ new ASN1OctetString("\\n*()"));
+ LDAPFilter substring4 = LDAPFilter.createSubstringFilter("givenName",
+ new ASN1OctetString("\\Jo*()"),
+ any,
+ new ASN1OctetString(""));
+ LDAPFilter substring5 = LDAPFilter.createSubstringFilter("givenName",
+ new ASN1OctetString(""),
+ multiAny,
+ new ASN1OctetString(""));
+ LDAPFilter extensible1 = LDAPFilter.createExtensibleFilter("2.4.6.8.19",
+ "cn",
+ new ASN1OctetString("\\John* (Doe)"),
+ false);
+ LDAPFilter extensible2 = LDAPFilter.createExtensibleFilter("2.4.6.8.19",
+ "cn",
+ new ASN1OctetString("\\John* (Doe)"),
+ true);
+ LDAPFilter extensible3 = LDAPFilter.createExtensibleFilter("2.4.6.8.19",
+ null,
+ new ASN1OctetString("\\John* (Doe)"),
+ true);
+ LDAPFilter extensible4 = LDAPFilter.createExtensibleFilter(null,
+ "cn",
+ new ASN1OctetString("\\John* (Doe)"),
+ true);
+ LDAPFilter extensible5 = LDAPFilter.createExtensibleFilter("2.4.6.8.19",
+ null,
+ new ASN1OctetString("\\John* (Doe)"),
+ false);
+ LDAPFilter extensible6 = LDAPFilter.createExtensibleFilter(null,
+ null,
+ new ASN1OctetString(""),
+ true);
+
+ ArrayList<LDAPFilter> list1 = new ArrayList<LDAPFilter>();
+ list1.add(equal);
+ list1.add(approx);
+
+ LDAPFilter and = LDAPFilter.createANDFilter(list1);
+
+ ArrayList<LDAPFilter> list2 = new ArrayList<LDAPFilter>();
+ list2.add(substring1);
+ list2.add(extensible1);
+ list2.add(and);
+
+ return new Object[][]
+ {
+ { "(objectClass=\\5ctest\\2a\\28Value\\29)", equal },
+
+ { "(objectClass=)", equal2 },
+
+ { "(sn~=\\5ctest\\2a\\28Value\\29)", approx },
+
+ { "(employeeNumber>=\\5ctest\\2a\\28Value\\29)", greater },
+
+ { "(dob<=\\5ctest\\2a\\28Value\\29)", less },
+
+ { "(login=*)", presense },
+
+ { "(givenName=\\5cJo\\2a\\28\\29*\\5cn\\2a\\28\\29)", substring1 },
+
+ { "(givenName=\\5cJo\\2a\\28\\29*\\5cwid\\2a\\28get\\29*\\2a*\\5cn\\2a\\28\\29)", substring2 },
+
+ { "(givenName=*\\5cn\\2a\\28\\29)", substring3 },
+
+ { "(givenName=\\5cJo\\2a\\28\\29*)", substring4 },
+
+ { "(givenName=*\\5cwid\\2a\\28get\\29*\\2a*)", substring5 },
+
+ { "(cn:2.4.6.8.19:=\\5cJohn\\2a \\28Doe\\29)", extensible1 },
+
+ { "(cn:dn:2.4.6.8.19:=\\5cJohn\\2a \\28Doe\\29)", extensible2 },
+
+ { "(:dn:2.4.6.8.19:=\\5cJohn\\2a \\28Doe\\29)", extensible3 },
+
+ { "(cn:dn:=\\5cJohn\\2a \\28Doe\\29)", extensible4 },
+
+ { "(:2.4.6.8.19:=\\5cJohn\\2a \\28Doe\\29)", extensible5 },
+
+ { "(:dn:=)", extensible6 },
+
+ { "(&(objectClass=\\5ctest\\2a\\28Value\\29)(sn~=\\5ctest\\2a\\28Value\\29))",
+ LDAPFilter.createANDFilter(list1) },
+
+ { "(|(objectClass=\\5ctest\\2a\\28Value\\29)(sn~=\\5ctest\\2a\\28Value\\29))",
+ LDAPFilter.createORFilter(list1) },
+
+ { "(!(objectClass=\\5ctest\\2a\\28Value\\29))", LDAPFilter.createNOTFilter(equal) },
+
+ { "(|(givenName=\\5cJo\\2a\\28\\29*\\5cn\\2a\\28\\29)(cn:2.4.6.8.19:=\\5cJohn\\2a \\28Doe\\29)" +
+ "(&(objectClass=\\5ctest\\2a\\28Value\\29)(sn~=\\5ctest\\2a\\28Value\\29)))",
+ LDAPFilter.createORFilter(list2) }
+
+ };
+ }
+
+ @Test(dataProvider = "filterstrings")
+ public void testDecode(String filterStr, LDAPFilter filter) throws Exception
+ {
+ //LDAPFilter decodedFilter = LDAPFilter.decode(filterStr);
+ //System.out.println(decodedFilter.);
+ //System.out.println(filter.toString());
+ LDAPFilter decoded = LDAPFilter.decode(filterStr);
+ assertEquals(decoded.toString(), filter.toString());
+ assertEquals(decoded.getAssertionValue(), filter.getAssertionValue());
+ assertEquals(decoded.getAttributeType(), filter.getAttributeType());
+ assertEquals(decoded.getDNAttributes(), filter.getDNAttributes());
+ if(decoded.getFilterComponents() != null || filter.getFilterComponents() != null)
+ {
+ assertEquals(decoded.getFilterComponents().toString(), filter.getFilterComponents().toString());
+ }
+ assertEquals(decoded.getFilterType(), filter.getFilterType());
+ assertEquals(decoded.getMatchingRuleID(), filter.getMatchingRuleID());
+ if(decoded.getNOTComponent() != null || filter.getNOTComponent() != null)
+ {
+ assertEquals(decoded.getNOTComponent().toString(), filter.getNOTComponent().toString());
+ }
+ if(decoded.getSubAnyElements() != null && decoded.getSubAnyElements().size() > 0 ||
+ filter.getSubAnyElements() != null && filter.getSubAnyElements().size() > 0)
+ {
+ assertEquals(decoded.getSubAnyElements(), filter.getSubAnyElements());
+ }
+ if(decoded.getSubFinalElement() != null && decoded.getSubFinalElement().stringValue() != "" ||
+ filter.getSubFinalElement() != null && filter.getSubFinalElement().stringValue() != "")
+ {
+ assertEquals(decoded.getSubFinalElement(), filter.getSubFinalElement());
+ }
+ if(decoded.getSubInitialElement() != null && decoded.getSubInitialElement().stringValue() != "" ||
+ filter.getSubInitialElement() != null && filter.getSubInitialElement().stringValue() != "")
+ {
+ assertEquals(decoded.getSubInitialElement(), filter.getSubInitialElement());
+ }
+ }
+
+ @Test(dataProvider = "badfilterstrings", expectedExceptions = LDAPException.class)
+ public void testDecodeException (String filterStr, LDAPFilter filter) throws Exception
+ {
+ LDAPFilter.decode(filterStr);
+ }
+
+ @Test
+ public void testToSearchFilter() throws Exception
+ {
+ LDAPFilter filter = LDAPFilter.decode(
+ "(&" +
+ "(cn>=*)" +
+ "(:1.2.3.4:=Bob)" +
+ "(cn:=Jane)" +
+ "(|" +
+ "(sn<=gh*sh*sl)" +
+ "(!(cn:dn:2.4.6.8.19:=Sally))" +
+ "(cn~=blvd)" +
+ "(cn=*)" +
+ ")" +
+ "(cn=*n)" +
+ "(cn=n*)" +
+ "(cn=n*n)" +
+ "(:dn:=Sally)" +
+ "(:dn:1.2.3.4:=Doe)" +
+ "(cn:2.4.6.8.10:=)" +
+ ")");
+
+ SearchFilter searchFilter = filter.toSearchFilter();
+ LDAPFilter newFilter = new LDAPFilter(searchFilter);
+ assertEquals(filter.toString(), newFilter.toString());
+ }
+
+ @Test(dataProvider = "filterstrings")
+ public void testEncodeDecode(String filterStr, LDAPFilter filter) throws Exception
+ {
+ assertEquals(LDAPFilter.decode(filter.encode()).toString(), filter.toString());
+ }
+
+ @Test
+ public void testEncodeDecodeComplex() throws Exception
+ {
+ LDAPFilter filter = LDAPFilter.decode(
+ "(&" +
+ "(cn>=*)" +
+ "(:1.2.3.4:=Bob)" +
+ "(cn:=Jane)" +
+ "(|" +
+ "(sn<=gh*sh*sl)" +
+ "(!(cn:dn:2.4.6.8.19:=Sally))" +
+ "(cn~=blvd)" +
+ "(cn=*)" +
+ ")" +
+ "(cn=*n)" +
+ "(cn=n*)" +
+ "(cn=n*n)" +
+ "(:dn:=Sally)" +
+ "(:dn:1.2.3.4:=Doe)" +
+ "(cn:2.4.6.8.10:=)" +
+ ")");
+
+ assertEquals(LDAPFilter.decode(filter.encode()).toString(), filter.toString());
+ }
+}
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestModifyDNRequestProtocolOp.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestModifyDNRequestProtocolOp.java
new file mode 100644
index 0000000..3a3d8b5
--- /dev/null
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestModifyDNRequestProtocolOp.java
@@ -0,0 +1,361 @@
+/*
+ * 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.testng.annotations.Test;
+import static org.testng.Assert.*;
+
+import java.util.ArrayList;
+
+/**
+ * This class defines a set of tests for the
+ * org.opends.server.protocol.ldap.ModifyDNRequestProtocolOp class.
+ */
+public class TestModifyDNRequestProtocolOp
+{
+ /**
+ * The protocol op type for modify DN requests.
+ */
+ public static final byte OP_TYPE_MODIFY_DN_REQUEST = 0x6C;
+
+
+
+ /**
+ * The protocol op type for modify DN responses.
+ */
+ public static final byte OP_TYPE_MODIFY_DN_RESPONSE = 0x6D;
+
+ /**
+ * The DN for modify DN requests in this test case.
+ */
+ private static final ASN1OctetString dn =
+ new ASN1OctetString("dc=example,dc=com");
+
+ /**
+ * The alt DN for modify DN requests in this test case.
+ */
+ private static final ASN1OctetString altDn =
+ new ASN1OctetString("dc=alt,dc=example,dc=com");
+
+ /**
+ * The new DN for modify DN requests in this test case.
+ */
+ private static final ASN1OctetString newRdn =
+ new ASN1OctetString("dc=example-new");
+
+ /**
+ * The alt new DN for modify DN requests in this test case.
+ */
+ private static final ASN1OctetString altNewRdn =
+ new ASN1OctetString("ou=alt,dc=example-new");
+
+ /**
+ * The new superiour DN for modify DN requests in this test case.
+ */
+ private static final ASN1OctetString newSuperiorDn =
+ new ASN1OctetString("dc=widget,dc=com");
+
+ /**
+ * The alt new superiour DN for modify DN requests in this test case.
+ */
+ private static final ASN1OctetString altNewSuperiorDn =
+ new ASN1OctetString("dc=alt,dc=widget,dc=com");
+
+ /**
+ * 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
+ {
+ ModifyDNRequestProtocolOp modifyRequest = new ModifyDNRequestProtocolOp(dn,
+ newRdn, true);
+ assertEquals(modifyRequest.getType(), OP_TYPE_MODIFY_DN_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
+ {
+ ModifyDNRequestProtocolOp modifyRequest = new ModifyDNRequestProtocolOp(dn,
+ newRdn, true);
+ assertEquals(modifyRequest.getProtocolOpName(), "Modify DN 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
+ {
+ ModifyDNRequestProtocolOp modifyRequest;
+
+ modifyRequest = new ModifyDNRequestProtocolOp(dn, newRdn, true);
+ assertEquals(modifyRequest.getEntryDN(), dn);
+ assertEquals(modifyRequest.getNewRDN(), newRdn);
+ assertEquals(modifyRequest.deleteOldRDN(), true);
+ assertNull(modifyRequest.getNewSuperior());
+
+ modifyRequest = new ModifyDNRequestProtocolOp(dn, newRdn, false,
+ newSuperiorDn);
+ assertEquals(modifyRequest.getEntryDN(), dn);
+ assertEquals(modifyRequest.getNewRDN(), newRdn);
+ assertEquals(modifyRequest.getNewSuperior(), newSuperiorDn);
+ assertEquals(modifyRequest.deleteOldRDN(), false);
+ }
+
+ /**
+ * Test to make sure that setter methods work.
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test
+ public void testSetMethods() throws Exception
+ {
+ ModifyDNRequestProtocolOp modifyRequest;
+ modifyRequest = new ModifyDNRequestProtocolOp(dn, newRdn, true,
+ newSuperiorDn);
+
+ modifyRequest.setEntryDN(altDn);
+ assertEquals(modifyRequest.getEntryDN(), altDn);
+
+ modifyRequest.setNewRDN(altNewRdn);
+ assertEquals(modifyRequest.getNewRDN(), altNewRdn);
+
+ modifyRequest.setNewSuperior(altNewSuperiorDn);
+ assertEquals(modifyRequest.getNewSuperior(), altNewSuperiorDn);
+
+ modifyRequest.setDeleteOldRDN(false);
+ assertEquals(modifyRequest.deleteOldRDN(), false);
+ }
+
+ /**
+ * 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
+ {
+ ModifyDNRequestProtocolOp.decodeModifyDNRequest(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>();
+ ModifyDNRequestProtocolOp.decode(new ASN1Sequence(OP_TYPE_MODIFY_DN_REQUEST,
+ elements));
+ }
+
+ /**
+ * Test the decode method when the wrong number of elements is passed
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test(expectedExceptions = LDAPException.class)
+ public void testDecodeInvalidElementNum() throws Exception
+ {
+ ArrayList<ASN1Element> elements = new ArrayList<ASN1Element>(2);
+ elements.add(new ASN1Null());
+ elements.add(new ASN1Null());
+ ModifyDNRequestProtocolOp.decode(new ASN1Sequence(OP_TYPE_MODIFY_DN_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>(3);
+ elements.add(new ASN1Null());
+ elements.add(new ASN1Null());
+ elements.add(new ASN1Null());
+ ModifyDNRequestProtocolOp.decode(new ASN1Sequence(OP_TYPE_MODIFY_DN_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>(3);
+ elements.add(dn);
+ elements.add(newRdn);
+ elements.add(new ASN1Boolean(true));
+ ModifyDNRequestProtocolOp.decode(new ASN1Sequence(OP_TYPE_MODIFY_DN_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
+ {
+ ModifyDNRequestProtocolOp modifyEncoded;
+ ModifyDNRequestProtocolOp modifyDecoded;
+ ASN1Element element;
+
+ modifyEncoded = new ModifyDNRequestProtocolOp(null, null, true);
+ element = modifyEncoded.encode();
+ modifyDecoded = (ModifyDNRequestProtocolOp)ModifyDNRequestProtocolOp.decode(
+ element);
+ }
+
+ /**
+ * Test the encode and decode methods and corner cases.
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test
+ public void testEncodeDecode() throws Exception
+ {
+ ModifyDNRequestProtocolOp modifyEncoded;
+ ModifyDNRequestProtocolOp modifyDecoded;
+ ASN1Element element;
+
+ modifyEncoded = new ModifyDNRequestProtocolOp(dn, newRdn, true,
+ newSuperiorDn);
+ element = modifyEncoded.encode();
+ modifyDecoded = (ModifyDNRequestProtocolOp)ModifyDNRequestProtocolOp.decode(
+ element);
+
+ assertEquals(modifyEncoded.getEntryDN(), modifyDecoded.getEntryDN());
+ assertEquals(modifyEncoded.getNewRDN(), modifyDecoded.getNewRDN());
+ assertEquals(modifyEncoded.getNewSuperior(), modifyDecoded.getNewSuperior());
+ assertEquals(modifyEncoded.deleteOldRDN(), modifyDecoded.deleteOldRDN());
+
+ modifyEncoded = new ModifyDNRequestProtocolOp(dn, newRdn, true);
+ element = modifyEncoded.encode();
+ modifyDecoded = (ModifyDNRequestProtocolOp)ModifyDNRequestProtocolOp.decode(
+ element);
+
+ assertEquals(modifyEncoded.getEntryDN(), modifyDecoded.getEntryDN());
+ assertEquals(modifyEncoded.getNewRDN(), modifyDecoded.getNewRDN());
+ assertEquals(modifyEncoded.getNewSuperior(), modifyDecoded.getNewSuperior());
+ assertEquals(modifyEncoded.deleteOldRDN(), modifyDecoded.deleteOldRDN());
+ }
+
+ /**
+ * Test the toString (single line) method.
+ *
+ * @throws Exception If the test fails unexpectedly.
+ */
+ @Test
+ public void TestToStringSingleLine() throws Exception
+ {
+ ModifyDNRequestProtocolOp modifyRequest;
+ StringBuilder buffer = new StringBuilder();
+ StringBuilder key = new StringBuilder();
+
+ modifyRequest = new ModifyDNRequestProtocolOp(dn, newRdn, true,
+ newSuperiorDn);
+ modifyRequest.toString(buffer);
+
+ key.append("ModifyDNRequest(dn="+dn+", newRDN="+newRdn+", " +
+ "deleteOldRDN="+true+", newSuperior="+newSuperiorDn+")");
+
+ assertEquals(buffer.toString(), key.toString());
+ }
+
+ /**
+ * Test the toString (multi line) method.
+ *
+ * @throws Exception If the test fails unexpectedly.
+ */
+ @Test
+ public void TestToStringMultiLine() throws Exception
+ {
+ ModifyDNRequestProtocolOp modifyRequest;
+ StringBuilder buffer = new StringBuilder();
+ StringBuilder key = new StringBuilder();
+ int i;
+ int indent;
+
+ indent = 5;
+ modifyRequest = new ModifyDNRequestProtocolOp(dn, newRdn, true,
+ newSuperiorDn);
+ modifyRequest.toString(buffer, indent);
+
+ StringBuilder indentBuf = new StringBuilder(indent);
+ for (i=0 ; i < indent; i++)
+ {
+ indentBuf.append(' ');
+ }
+
+ key.append(indentBuf);
+ key.append("Modify DN Request");
+ key.append(EOL);
+
+ key.append(indentBuf);
+ key.append(" Entry DN: ");
+ dn.toString(key);
+ key.append(EOL);
+
+ key.append(indentBuf);
+ key.append(" New RDN: ");
+ key.append(newRdn);
+ key.append(EOL);
+
+ key.append(indentBuf);
+ key.append(" Delete Old RDN: ");
+ key.append(true);
+ key.append(EOL);
+
+ key.append(indentBuf);
+ key.append(" New Superior: ");
+ key.append(newSuperiorDn);
+ key.append(EOL);
+
+ assertEquals(buffer.toString(), key.toString());
+ }
+}
diff --git a/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestModifyDNResponseProtocolOp.java b/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestModifyDNResponseProtocolOp.java
new file mode 100644
index 0000000..0001437
--- /dev/null
+++ b/opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestModifyDNResponseProtocolOp.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.ModifyDNResponseProtocolOp class.
+ */
+public class TestModifyDNResponseProtocolOp
+{
+ /**
+ * The protocol op type for modify DN requests.
+ */
+ public static final byte OP_TYPE_MODIFY_DN_REQUEST = 0x6C;
+
+
+
+ /**
+ * The protocol op type for modify DN responses.
+ */
+ public static final byte OP_TYPE_MODIFY_DN_RESPONSE = 0x6D;
+
+ /**
+ * 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
+ {
+ ModifyDNResponseProtocolOp modifyResponse = new ModifyDNResponseProtocolOp(
+ resultCode);
+ assertEquals(modifyResponse.getType(), OP_TYPE_MODIFY_DN_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
+ {
+ ModifyDNResponseProtocolOp modifyResponse = new ModifyDNResponseProtocolOp(
+ resultCode);
+ assertEquals(modifyResponse.getProtocolOpName(), "Modify DN 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
+ {
+ ModifyDNResponseProtocolOp modifyResponse;
+ ArrayList<LDAPAttribute> attributes;
+
+ //Test to make sure the constructor with result code param works.
+ modifyResponse = new ModifyDNResponseProtocolOp(resultCode);
+ assertEquals(modifyResponse.getResultCode(), resultCode);
+
+ //Test to make sure the constructor with result code and error message
+ //params works.
+ modifyResponse = new ModifyDNResponseProtocolOp(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 ModifyDNResponseProtocolOp(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
+ {
+ ModifyDNResponseProtocolOp modifyResponse;
+ modifyResponse = new ModifyDNResponseProtocolOp(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>();
+ ModifyDNResponseProtocolOp.decode(new ASN1Sequence(OP_TYPE_MODIFY_DN_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_MODIFY_DN_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_MODIFY_DN_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_MODIFY_DN_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_MODIFY_DN_RESPONSE,
+ elements));
+ }
+
+ /**
+ * Test the encode and decode methods and corner cases.
+ *
+ * @throws Exception If the test failed unexpectedly.
+ */
+ @Test
+ public void testEncodeDecode() throws Exception
+ {
+ ModifyDNResponseProtocolOp deleteEncoded;
+ ModifyDNResponseProtocolOp 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 ModifyDNResponseProtocolOp(resultCode, resultMsg, dn,
+ referralURLs);
+ element = deleteEncoded.encode();
+ deleteDecoded = (ModifyDNResponseProtocolOp)ModifyDNResponseProtocolOp.decode(
+ element);
+
+ assertEquals(deleteEncoded.getType(), OP_TYPE_MODIFY_DN_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 ModifyDNResponseProtocolOp(resultCode, resultMsg, new DN(),
+ referralURLs);
+ element = deleteEncoded.encode();
+ deleteDecoded = (ModifyDNResponseProtocolOp)ModifyDNResponseProtocolOp.decode(
+ element);
+ assertEquals(deleteDecoded.getMatchedDN(), null);
+
+ //Test case for a full empty referral url param.
+ ArrayList<String> emptyReferralURLs = new ArrayList<String>();
+ deleteEncoded = new ModifyDNResponseProtocolOp(resultCode, resultMsg, dn,
+ emptyReferralURLs);
+ element = deleteEncoded.encode();
+ deleteDecoded = (ModifyDNResponseProtocolOp)ModifyDNResponseProtocolOp.decode(
+ element);
+ assertTrue(deleteDecoded.getReferralURLs() == null);
+
+ //Test case for a full encode decode operation with resultCode param only.
+ deleteEncoded = new ModifyDNResponseProtocolOp(resultCode);
+ element = deleteEncoded.encode();
+ deleteDecoded = (ModifyDNResponseProtocolOp)ModifyDNResponseProtocolOp.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
+ {
+ ModifyDNResponseProtocolOp 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 ModifyDNResponseProtocolOp(resultCode, resultMsg, dn,
+ referralURLs);
+ modifyResponse.toString(buffer);
+
+ key.append("ModifyDNResponse(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
+ {
+ ModifyDNResponseProtocolOp 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 ModifyDNResponseProtocolOp(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 DN 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