244N/A/*
244N/A * CDDL HEADER START
244N/A *
244N/A * The contents of this file are subject to the terms of the
244N/A * Common Development and Distribution License, Version 1.0 only
244N/A * (the "License"). You may not use this file except in compliance
244N/A * with the License.
244N/A *
244N/A * You can obtain a copy of the license at
244N/A * trunk/opends/resource/legal-notices/OpenDS.LICENSE
244N/A * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
244N/A * See the License for the specific language governing permissions
244N/A * and limitations under the License.
244N/A *
244N/A * When distributing Covered Code, include this CDDL HEADER in each
244N/A * file and include the License file at
244N/A * trunk/opends/resource/legal-notices/OpenDS.LICENSE. If applicable,
244N/A * add the following below this CDDL HEADER, with the fields enclosed
873N/A * by brackets "[]" replaced with your own identifying information:
244N/A * Portions Copyright [yyyy] [name of copyright owner]
244N/A *
244N/A * CDDL HEADER END
244N/A *
244N/A *
3232N/A * Copyright 2006-2008 Sun Microsystems, Inc.
244N/A */
244N/Apackage org.opends.server.protocols.ldap;
244N/A
244N/Aimport static org.testng.Assert.*;
244N/Aimport org.testng.annotations.*;
244N/Aimport org.opends.server.protocols.asn1.*;
4134N/Aimport org.opends.server.types.*;
244N/Aimport org.opends.server.core.DirectoryServer;
244N/Aimport static org.opends.server.util.ServerConstants.EOL;
2086N/Aimport org.opends.messages.Message;
244N/A
244N/Aimport java.util.ArrayList;
244N/Aimport java.util.Iterator;
244N/A
244N/A/**
244N/A * This class defines a set of tests for the
244N/A * org.opends.server.protocol.ldap.DeleteResponseProtocolOp class.
244N/A */
244N/Apublic class TestDeleteResponseProtocolOp extends LdapTestCase
244N/A{
244N/A /**
244N/A * The protocol op type for delete response.
244N/A */
244N/A public static final byte OP_TYPE_DELETE_REQUEST = 0x4A;
244N/A
244N/A /**
244N/A * The protocol op type for delete responses.
244N/A */
244N/A public static final byte OP_TYPE_DELETE_RESPONSE = 0x6B;
244N/A
244N/A /**
244N/A * The result code for delete result operations.
244N/A */
244N/A private static final int resultCode = 10;
244N/A
244N/A /**
244N/A * The error message to use for delete result operations.
244N/A */
2086N/A private static final Message resultMsg = Message.raw("Test Successful");
244N/A
244N/A/**
244N/A * The DN to use for delete result operations
244N/A */
244N/A private DN dn;
244N/A
244N/A @BeforeClass
244N/A public void setupDN()
244N/A {
244N/A //Setup the DN to use in the response tests.
244N/A
244N/A AttributeType attribute =
244N/A DirectoryServer.getDefaultAttributeType("testAttribute");
244N/A
4134N/A AttributeValue attributeValue = AttributeValues.create(attribute, "testValue");
244N/A
796N/A RDN[] rdns = new RDN[1];
796N/A rdns[0] = RDN.create(attribute, attributeValue);
796N/A dn = new DN(rdns);
244N/A }
244N/A
244N/A /**
244N/A * Test to make sure the class processes the right LDAP op type.
244N/A *
244N/A * @throws Exception If the test failed unexpectedly.
244N/A */
244N/A @Test
244N/A public void testOpType() throws Exception
244N/A {
244N/A DeleteResponseProtocolOp deleteResponse = new DeleteResponseProtocolOp(
244N/A resultCode);
244N/A assertEquals(deleteResponse.getType(), OP_TYPE_DELETE_RESPONSE);
244N/A }
244N/A
244N/A /**
244N/A * Test to make sure the class returns the correct protocol name.
244N/A *
244N/A * @throws Exception If the test failed unexpectedly.
244N/A */
244N/A @Test
244N/A public void testProtocolOpName() throws Exception
244N/A {
244N/A DeleteResponseProtocolOp deleteResponse = new DeleteResponseProtocolOp(
244N/A resultCode);
244N/A assertEquals(deleteResponse.getProtocolOpName(), "Delete Response");
244N/A }
244N/A
244N/A /**
244N/A * Test the constructors to make sure the right objects are constructed.
244N/A *
244N/A * @throws Exception If the test failed unexpectedly.
244N/A */
244N/A @Test
244N/A public void testConstructors() throws Exception
244N/A {
244N/A DeleteResponseProtocolOp deleteResponse;
244N/A ArrayList<LDAPAttribute> attributes;
244N/A
244N/A //Test to make sure the constructor with result code param works.
244N/A deleteResponse = new DeleteResponseProtocolOp(resultCode);
244N/A assertEquals(deleteResponse.getResultCode(), resultCode);
244N/A
244N/A //Test to make sure the constructor with result code and error message
244N/A //params works.
244N/A deleteResponse = new DeleteResponseProtocolOp(resultCode, resultMsg);
244N/A assertEquals(deleteResponse.getErrorMessage(), resultMsg);
244N/A assertEquals(deleteResponse.getResultCode(), resultCode);
244N/A
244N/A //Test to make sure the constructor with result code, message, dn, and
244N/A //referal params works.
244N/A ArrayList<String> referralURLs = new ArrayList<String>();
244N/A referralURLs.add("ds1.example.com");
244N/A referralURLs.add("ds2.example.com");
244N/A referralURLs.add("ds3.example.com");
244N/A
244N/A deleteResponse = new DeleteResponseProtocolOp(resultCode, resultMsg, dn,
244N/A referralURLs);
244N/A assertEquals(deleteResponse.getErrorMessage(), resultMsg);
244N/A assertEquals(deleteResponse.getResultCode(), resultCode);
244N/A assertEquals(deleteResponse.getMatchedDN(), dn);
244N/A assertEquals(deleteResponse.getReferralURLs(), referralURLs);
244N/A }
244N/A
244N/A /**
244N/A * Test the decode method when an empty element is passed
244N/A *
244N/A * @throws Exception If the test failed unexpectedly.
244N/A */
244N/A @Test(expectedExceptions = LDAPException.class)
244N/A public void testDecodeEmptyElement() throws Exception
244N/A {
4134N/A ByteStringBuilder builder = new ByteStringBuilder();
4134N/A ASN1Writer writer = ASN1.getWriter(builder);
4134N/A writer.writeStartSequence(OP_TYPE_DELETE_RESPONSE);
4134N/A writer.writeEndSequence();
4134N/A
4134N/A ASN1Reader reader = ASN1.getReader(builder.toByteString());
4134N/A LDAPReader.readProtocolOp(reader);
244N/A }
244N/A
244N/A /**
244N/A * Test the decode method when an element with a invalid result code is
244N/A * passed
244N/A *
244N/A * @throws Exception If the test failed unexpectedly.
244N/A */
244N/A @Test(expectedExceptions = LDAPException.class)
244N/A public void testDecodeInvalidResultCode() throws Exception
244N/A {
4134N/A ByteStringBuilder builder = new ByteStringBuilder();
4134N/A ASN1Writer writer = ASN1.getWriter(builder);
4134N/A writer.writeStartSequence(OP_TYPE_DELETE_RESPONSE);
4134N/A writer.writeOctetString("Invalid Data");
4134N/A writer.writeNull();
4134N/A writer.writeNull();
4134N/A writer.writeEndSequence();
4134N/A
4134N/A ASN1Reader reader = ASN1.getReader(builder.toByteString());
4134N/A LDAPReader.readProtocolOp(reader);
244N/A }
244N/A
244N/A /**
244N/A * Test the decode method when an element with a invalid dn is
244N/A * passed. Never throws an exception as long as the element is not null.
244N/A * This is the expected behavior.
244N/A *
244N/A * @throws Exception If the test failed unexpectedly.
244N/A */
2342N/A @Test
244N/A public void testDecodeInvalidDN() throws Exception
244N/A {
4134N/A ByteStringBuilder builder = new ByteStringBuilder();
4134N/A ASN1Writer writer = ASN1.getWriter(builder);
4134N/A writer.writeStartSequence(OP_TYPE_DELETE_RESPONSE);
4134N/A writer.writeInteger(resultCode);
4134N/A writer.writeNull();
4134N/A writer.writeNull();
4134N/A writer.writeEndSequence();
4134N/A
4134N/A ASN1Reader reader = ASN1.getReader(builder.toByteString());
4134N/A LDAPReader.readProtocolOp(reader);
244N/A }
244N/A
244N/A /**
244N/A * Test the decode method when an element with a invalid result message is
244N/A * passed. Never throws an exception as long as the element is not null.
244N/A * This is the expected behavior.
244N/A *
244N/A * @throws Exception If the test failed unexpectedly.
244N/A */
2342N/A @Test
244N/A public void testDecodeInvalidResultMsg() throws Exception
244N/A {
4134N/A ByteStringBuilder builder = new ByteStringBuilder();
4134N/A ASN1Writer writer = ASN1.getWriter(builder);
4134N/A writer.writeStartSequence(OP_TYPE_DELETE_RESPONSE);
4134N/A writer.writeInteger(resultCode);
4134N/A writer.writeOctetString(dn.toString());
4134N/A writer.writeNull();
4134N/A writer.writeEndSequence();
4134N/A
4134N/A ASN1Reader reader = ASN1.getReader(builder.toByteString());
4134N/A LDAPReader.readProtocolOp(reader);
244N/A }
244N/A
244N/A /**
244N/A * Test the decode method when an element with a invalid referral URL is
244N/A * passed. Never throws an exception as long as the element is not null.
244N/A * This is the expected behavior.
244N/A *
244N/A * @throws Exception If the test failed unexpectedly.
244N/A */
2342N/A @Test
244N/A public void testDecodeInvalidReferralURLs() throws Exception
244N/A {
4134N/A ByteStringBuilder builder = new ByteStringBuilder();
4134N/A ASN1Writer writer = ASN1.getWriter(builder);
4134N/A writer.writeStartSequence(OP_TYPE_DELETE_RESPONSE);
4134N/A writer.writeInteger(resultCode);
4134N/A writer.writeOctetString(dn.toString());
4134N/A writer.writeOctetString(resultMsg.toString());
4134N/A writer.writeNull();
4134N/A writer.writeEndSequence();
4134N/A
4134N/A ASN1Reader reader = ASN1.getReader(builder.toByteString());
4134N/A LDAPReader.readProtocolOp(reader);
244N/A }
244N/A
244N/A /**
244N/A * Test the encode and decode methods and corner cases.
244N/A *
244N/A * @throws Exception If the test failed unexpectedly.
244N/A */
244N/A @Test
244N/A public void testEncodeDecode() throws Exception
244N/A {
4134N/A ByteStringBuilder builder = new ByteStringBuilder();
4134N/A ASN1Writer writer = ASN1.getWriter(builder);
244N/A DeleteResponseProtocolOp deleteEncoded;
244N/A DeleteResponseProtocolOp deleteDecoded;
244N/A
244N/A ArrayList<String> referralURLs = new ArrayList<String>();
244N/A referralURLs.add("ds1.example.com");
244N/A referralURLs.add("ds2.example.com");
244N/A referralURLs.add("ds3.example.com");
244N/A
244N/A
244N/A //Test case for a full encode decode operation with normal params.
244N/A deleteEncoded = new DeleteResponseProtocolOp(resultCode, resultMsg, dn,
244N/A referralURLs);
4134N/A deleteEncoded.write(writer);
4134N/A ASN1Reader reader = ASN1.getReader(builder.toByteString());
4134N/A deleteDecoded = (DeleteResponseProtocolOp)LDAPReader.readProtocolOp(reader);
244N/A
244N/A assertEquals(deleteEncoded.getType(), OP_TYPE_DELETE_RESPONSE);
244N/A assertEquals(deleteEncoded.getMatchedDN().compareTo(
244N/A deleteDecoded.getMatchedDN()),
244N/A 0);
244N/A assertEquals(deleteEncoded.getErrorMessage(),
244N/A deleteDecoded.getErrorMessage());
244N/A assertEquals(deleteEncoded.getResultCode(), deleteDecoded.getResultCode());
244N/A assertEquals(deleteEncoded.getReferralURLs(),
244N/A deleteDecoded.getReferralURLs());
244N/A
244N/A
244N/A //Test case for a full encode decode operation with an empty DN params.
509N/A deleteEncoded = new DeleteResponseProtocolOp(resultCode, resultMsg, DN.nullDN(),
244N/A referralURLs);
4134N/A builder.clear();
4134N/A deleteEncoded.write(writer);
4134N/A reader = ASN1.getReader(builder.toByteString());
4134N/A deleteDecoded = (DeleteResponseProtocolOp)LDAPReader.readProtocolOp(reader);
244N/A assertEquals(deleteDecoded.getMatchedDN(), null);
244N/A
244N/A //Test case for a full empty referral url param.
244N/A ArrayList<String> emptyReferralURLs = new ArrayList<String>();
244N/A deleteEncoded = new DeleteResponseProtocolOp(resultCode, resultMsg, dn,
244N/A emptyReferralURLs);
4134N/A builder.clear();
4134N/A deleteEncoded.write(writer);
4134N/A reader = ASN1.getReader(builder.toByteString());
4134N/A deleteDecoded = (DeleteResponseProtocolOp)LDAPReader.readProtocolOp(reader);
244N/A assertTrue(deleteDecoded.getReferralURLs() == null);
244N/A
244N/A //Test case for a full encode decode operation with resultCode param only.
244N/A deleteEncoded = new DeleteResponseProtocolOp(resultCode);
4134N/A builder.clear();
4134N/A deleteEncoded.write(writer);
4134N/A reader = ASN1.getReader(builder.toByteString());
4134N/A deleteDecoded = (DeleteResponseProtocolOp)LDAPReader.readProtocolOp(reader);
244N/A
244N/A assertEquals(deleteDecoded.getMatchedDN(), null);
244N/A assertEquals(deleteDecoded.getErrorMessage(), null);
244N/A assertEquals(deleteEncoded.getResultCode(), deleteDecoded.getResultCode());
244N/A assertTrue(deleteDecoded.getReferralURLs() == null);
244N/A }
244N/A
244N/A /**
244N/A * Test the toString (single line) method.
244N/A *
244N/A * @throws Exception If the test fails unexpectedly.
244N/A */
244N/A @Test
244N/A public void TestToStringSingleLine() throws Exception
244N/A {
244N/A DeleteResponseProtocolOp deleteResponse;
244N/A StringBuilder buffer = new StringBuilder();
244N/A StringBuilder key = new StringBuilder();
244N/A
244N/A ArrayList<String> referralURLs = new ArrayList<String>();
244N/A referralURLs.add("ds1.example.com");
244N/A referralURLs.add("ds2.example.com");
244N/A referralURLs.add("ds3.example.com");
244N/A
244N/A deleteResponse = new DeleteResponseProtocolOp(resultCode, resultMsg, dn,
244N/A referralURLs);
244N/A deleteResponse.toString(buffer);
244N/A
244N/A key.append("DeleteResponse(resultCode="+resultCode+", " +
244N/A "errorMessage="+resultMsg+", matchedDN="+dn.toString()+", " +
244N/A "referralURLs={");
244N/A
244N/A Iterator<String> iterator = referralURLs.iterator();
244N/A key.append(iterator.next());
244N/A
244N/A while (iterator.hasNext())
244N/A {
244N/A key.append(", ");
244N/A key.append(iterator.next());
244N/A }
244N/A
244N/A key.append("})");
244N/A
244N/A assertEquals(buffer.toString(), key.toString());
244N/A }
244N/A
244N/A /**
244N/A * Test the toString (multi line) method.
244N/A *
244N/A * @throws Exception If the test fails unexpectedly.
244N/A */
244N/A @Test
244N/A public void TestToStringMultiLine() throws Exception
244N/A {
244N/A DeleteResponseProtocolOp deleteResponse;
244N/A StringBuilder buffer = new StringBuilder();
244N/A StringBuilder key = new StringBuilder();
244N/A
244N/A ArrayList<String> referralURLs = new ArrayList<String>();
244N/A referralURLs.add("ds1.example.com");
244N/A referralURLs.add("ds2.example.com");
244N/A referralURLs.add("ds3.example.com");
244N/A int indent = 5;
244N/A int i;
244N/A
244N/A deleteResponse = new DeleteResponseProtocolOp(resultCode, resultMsg, dn,
244N/A referralURLs);
244N/A deleteResponse.toString(buffer, indent);
244N/A
244N/A StringBuilder indentBuf = new StringBuilder(indent);
244N/A for (i=0 ; i < indent; i++)
244N/A {
244N/A indentBuf.append(' ');
244N/A }
244N/A
244N/A key.append(indentBuf);
244N/A key.append("Delete Response");
244N/A key.append(EOL);
244N/A
244N/A key.append(indentBuf);
244N/A key.append(" Result Code: ");
244N/A key.append(resultCode);
244N/A key.append(EOL);
244N/A
244N/A key.append(indentBuf);
244N/A key.append(" Error Message: ");
244N/A key.append(resultMsg);
244N/A key.append(EOL);
244N/A
244N/A key.append(indentBuf);
244N/A key.append(" Matched DN: ");
244N/A key.append(dn.toString());
244N/A key.append(EOL);
244N/A
244N/A key.append(indentBuf);
244N/A key.append(" Referral URLs: ");
244N/A key.append(EOL);
244N/A
244N/A for (String url : referralURLs)
244N/A {
244N/A key.append(indentBuf);
244N/A key.append(" ");
244N/A key.append(url);
244N/A key.append(EOL);
244N/A }
244N/A
244N/A assertEquals(buffer.toString(), key.toString());
244N/A }
244N/A
244N/A}