/* * 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 * * * Copyright 2006-2008 Sun Microsystems, Inc. */ package org.opends.server.protocols.ldap; import org.opends.server.types.LDAPException; import org.opends.server.types.ByteString; import org.opends.server.types.ByteStringBuilder; import static org.opends.server.util.ServerConstants.EOL; import org.opends.server.protocols.asn1.ASN1Writer; import org.opends.server.protocols.asn1.ASN1; import org.opends.server.protocols.asn1.ASN1Reader; 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 ByteString dn = ByteString.valueOf("dc=example,dc=com"); /** * The alternative DN for compare requests in this test case. */ private static final ByteString dnAlt = ByteString.valueOf("dc=sun,dc=com"); // The assertion value for this compare request. private ByteString assertionValue = ByteString.valueOf("=test"); // The assertion value for this compare request. private ByteString assertionValueAlt = ByteString.valueOf("=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 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 { LDAPReader.readProtocolOp(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 { ByteStringBuilder builder = new ByteStringBuilder(); ASN1Writer writer = ASN1.getWriter(builder); writer.writeStartSequence(OP_TYPE_COMPARE_REQUEST); writer.writeEndSequence(); ASN1Reader reader = ASN1.getReader(builder.toByteString()); LDAPReader.readProtocolOp(reader); } /** * 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 { ByteStringBuilder builder = new ByteStringBuilder(); ASN1Writer writer = ASN1.getWriter(builder); writer.writeStartSequence(OP_TYPE_COMPARE_REQUEST); writer.writeNull(); writer.writeNull(); writer.writeEndSequence(); ASN1Reader reader = ASN1.getReader(builder.toByteString()); LDAPReader.readProtocolOp(reader); } /** * 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 { ByteStringBuilder builder = new ByteStringBuilder(); ASN1Writer writer = ASN1.getWriter(builder); writer.writeStartSequence(OP_TYPE_COMPARE_REQUEST); writer.writeOctetString(dn); writer.writeNull(); writer.writeEndSequence(); ASN1Reader reader = ASN1.getReader(builder.toByteString()); LDAPReader.readProtocolOp(reader); } /** * 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 { ByteStringBuilder builder = new ByteStringBuilder(); ASN1Writer writer = ASN1.getWriter(builder); CompareRequestProtocolOp compareEncoded; CompareRequestProtocolOp compareDecoded; compareEncoded = new CompareRequestProtocolOp(null, null, null); compareEncoded.write(writer); ASN1Reader reader = ASN1.getReader(builder.toByteString()); compareDecoded = (CompareRequestProtocolOp)LDAPReader.readProtocolOp(reader); } /** * Test the encode and decode methods and corner cases. * * @throws Exception If the test failed unexpectedly. */ @Test public void testEncodeDecode() throws Exception { ByteStringBuilder builder = new ByteStringBuilder(); ASN1Writer writer = ASN1.getWriter(builder); CompareRequestProtocolOp compareEncoded; CompareRequestProtocolOp compareDecoded; ArrayList<LDAPAttribute> attributes; //Test case for a full encode decode operation with normal params. compareEncoded = new CompareRequestProtocolOp(dn, attributeType, assertionValue); compareEncoded.write(writer); ASN1Reader reader = ASN1.getReader(builder.toByteString()); compareDecoded = (CompareRequestProtocolOp)LDAPReader.readProtocolOp(reader); 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: "); key.append(dn); 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.toHexPlusAscii(key, indent+4); assertEquals(buffer.toString(), key.toString()); } }