/* * 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-2007 Sun Microsystems, Inc. */ package org.opends.server.protocols.asn1; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import static org.testng.Assert.*; /** * This class defines a set of tests for the * org.opends.server.protocols.asn1.ASN1Boolean class. */ public class TestASN1Boolean extends ASN1TestCase { /** * Retrieves the set of boolean values that may be used for testing. * * @return The set of boolean values that may be used for testing. */ @DataProvider(name = "booleanValues") public Object[][] getBooleanValues() { return new Object[][] { new Object[] { false }, new Object[] { true } }; } /** * Tests the first constructor, which takes a single boolean argument. * * @param b The boolean value to use in the test. */ @Test(dataProvider = "booleanValues") public void testConstructor1(boolean b) { new ASN1Boolean(b); } /** * Tests the second constructor, which takes byte and boolean arguments. * * @param b The boolean value to use in the test. */ @Test(dataProvider = "booleanValues") public void testConstructor2(boolean b) { new ASN1Boolean((byte) 0x50, b); } /** * Tests the booleanValue method. * * @param b The boolean value to use in the test. */ @Test(dataProvider = "booleanValues") public void testBooleanValue(boolean b) { assertEquals(new ASN1Boolean(b).booleanValue(), b); } /** * Tests the setValue method that takes a boolean argument. * * @param b The boolean value to use in the test. */ @Test(dataProvider = "booleanValues") public void testSetBooleanValue(boolean b) { ASN1Boolean booleanElement = new ASN1Boolean(!b); booleanElement.setValue(b); assertEquals(booleanElement.booleanValue(), b); } /** * Retrieves the set of byte array values that may be used for testing. * * @return The set of byte array values that may be used for testing. */ @DataProvider(name = "byteValues") public Object[][] getByteValues() { Object[][] array = new Object[256][1]; for (int i=0; i < 256; i++) { array[i] = new Object[] { new byte[] { (byte) (i & 0xFF) } }; } return array; } /** * Tests the setValue method that takes a byte array argument * with valid values. * * @param b The byte array to use in the test. * * @throws Exception If an unexpected problem occurs. */ @Test(dataProvider = "byteValues") public void testSetValidByteValue(byte[] b) throws Exception { ASN1Boolean booleanElement = new ASN1Boolean(false); booleanElement.setValue(b); assertEquals(booleanElement.booleanValue(), (b[0] != 0x00)); } /** * Tests the setValue method that takes a byte array argument * with a null value. * * @throws Exception If an unexpected problem occurs. */ @Test(expectedExceptions = { ASN1Exception.class }) public void testSetNullByteValue() throws Exception { ASN1Boolean booleanElement = new ASN1Boolean(false); byte[] b = null; booleanElement.setValue(b); } /** * Tests the setValue method that takes a byte array argument * with an empty array value. * * @throws Exception If an unexpected problem occurs. */ @Test(expectedExceptions = { ASN1Exception.class }) public void testSetZeroByteValue() throws Exception { ASN1Boolean booleanElement = new ASN1Boolean(false); byte[] b = new byte[0]; booleanElement.setValue(b); } /** * Tests the setValue method that takes a byte array argument * with a multi-byte array value. * * @throws Exception If an unexpected problem occurs. */ @Test(expectedExceptions = { ASN1Exception.class }) public void testSetMultiByteValue() throws Exception { ASN1Boolean booleanElement = new ASN1Boolean(false); byte[] b = new byte[2]; booleanElement.setValue(b); } /** * Tests the decodeAsBoolean method that takes an ASN1Element * argument with valid elements. * * @param b The byte array to use for the element values. * * @throws Exception If an unexpected problem occurs. */ @Test(dataProvider = "byteValues") public void testDecodeValidElementAsBoolean(byte[] b) throws Exception { // First, try with an actual boolean element. ASN1Element e = new ASN1Boolean(false); e.setValue(b); ASN1Boolean booleanElement = ASN1Boolean.decodeAsBoolean(e); assertEquals(booleanElement.booleanValue(), (b[0] != 0x00)); e = new ASN1Boolean((byte) 0x50, false); e.setValue(b); booleanElement = ASN1Boolean.decodeAsBoolean(e); assertEquals(booleanElement.booleanValue(), (b[0] != 0x00)); // Next, test with a generic ASN.1 element. e = new ASN1Element(ASN1Constants.UNIVERSAL_BOOLEAN_TYPE, b); booleanElement = ASN1Boolean.decodeAsBoolean(e); assertEquals(booleanElement.booleanValue(), (b[0] != 0x00)); e = new ASN1Element((byte) 0x50, b); booleanElement = ASN1Boolean.decodeAsBoolean(e); assertEquals(booleanElement.booleanValue(), (b[0] != 0x00)); } /** * Tests the decodeAsBoolean method that takes an ASN1Element * argument with a null element. * * @throws Exception If an unexpected problem occurs. */ @Test(expectedExceptions = { ASN1Exception.class }) public void testDecodeNullElementAsBoolean() throws Exception { ASN1Element e = null; ASN1Boolean.decodeAsBoolean(e); } /** * Tests the decodeAsBoolean method that takes an ASN1Element * argument with a zero-byte element. * * @throws Exception If an unexpected problem occurs. */ @Test(expectedExceptions = { ASN1Exception.class }) public void testDecodeZeroByteElementAsBoolean() throws Exception { ASN1Element e = new ASN1Element((byte) 0x50, new byte[0]); ASN1Boolean.decodeAsBoolean(e); } /** * Tests the decodeAsBoolean method that takes an ASN1Element * argument with a multi-byte element. * * @throws Exception If an unexpected problem occurs. */ @Test(expectedExceptions = { ASN1Exception.class }) public void testDecodeMultiByteElementAsBoolean() throws Exception { ASN1Element e = new ASN1Element((byte) 0x50, new byte[2]); ASN1Boolean.decodeAsBoolean(e); } /** * Tests the decodeAsBoolean method that takes a byte array * argument with valid arrays. * * @param b The byte array to use for the element values. * * @throws Exception If an unexpected problem occurs. */ @Test(dataProvider = "byteValues") public void testDecodeValidArrayAsBoolean(byte[] b) throws Exception { // First, test with the standard Boolean type. byte[] elementArray = new byte[] { 0x01, 0x01, b[0] }; ASN1Boolean booleanElement = ASN1Boolean.decodeAsBoolean(elementArray); assertEquals(booleanElement.booleanValue(), (b[0] != 0x00)); // Next, test with a nonstandard Boolean type. elementArray[0] = (byte) 0x50; booleanElement = ASN1Boolean.decodeAsBoolean(elementArray); assertEquals(booleanElement.booleanValue(), (b[0] != 0x00)); } /** * Tests the decodeAsBoolean method that takes a byte array * argument with valid arrays using extended lengths. * * @param b The byte array to use for the element values. * * @throws Exception If an unexpected problem occurs. */ @Test(dataProvider = "byteValues") public void testDecodeValidExtendedArrayAsBoolean(byte[] b) throws Exception { // First, test with the standard Boolean type. byte[] elementArray = new byte[] { 0x01, (byte) 0x81, 0x01, b[0] }; ASN1Boolean booleanElement = ASN1Boolean.decodeAsBoolean(elementArray); assertEquals(booleanElement.booleanValue(), (b[0] != 0x00)); // Next, test with a nonstandard Boolean type. elementArray[0] = (byte) 0x50; booleanElement = ASN1Boolean.decodeAsBoolean(elementArray); assertEquals(booleanElement.booleanValue(), (b[0] != 0x00)); } /** * Tests the decodeAsBoolean method that takes a byte array * argument with a null array. * * @throws Exception If an unexpected problem occurs. */ @Test(expectedExceptions = { ASN1Exception.class }) public void testDecodeNullArrayAsBoolean() throws Exception { byte[] b = null; ASN1Boolean.decodeAsBoolean(b); } /** * Tests the decodeAsBoolean method that takes a byte array * argument with a short array. * * @throws Exception If an unexpected problem occurs. */ @Test(expectedExceptions = { ASN1Exception.class }) public void testDecodeShortArrayAsBoolean() throws Exception { byte[] b = new byte[1]; ASN1Boolean.decodeAsBoolean(b); } /** * Tests the decodeAsBoolean method that takes a byte array * argument with an array that takes too many bytes to expressthe length. * * @throws Exception If an unexpected problem occurs. */ @Test(expectedExceptions = { ASN1Exception.class }) public void testDecodeLongLengthArrayAsBoolean() throws Exception { byte[] b = { 0x01, (byte) 0x85, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00 }; ASN1Boolean.decodeAsBoolean(b); } /** * Tests the decodeAsBoolean method that takes a byte array * argument with an array that doesn't contain a full length. * * @throws Exception If an unexpected problem occurs. */ @Test(expectedExceptions = { ASN1Exception.class }) public void testDecodeTruncatedLengthArrayAsBoolean() throws Exception { byte[] b = { 0x01, (byte) 0x82, 0x00 }; ASN1Boolean.decodeAsBoolean(b); } /** * Tests the decodeAsBoolean method that takes a byte array * argument with an array that has more bytes than indicated by the length. * * @throws Exception If an unexpected problem occurs. */ @Test(expectedExceptions = { ASN1Exception.class }) public void testDecodeLengthMismatchArrayAsBoolean() throws Exception { byte[] b = { 0x01, 0x01, 0x00, 0x00 }; ASN1Boolean.decodeAsBoolean(b); } /** * Tests the decodeAsBoolean method that takes a byte array * argument with an array that has an invalid number of bytes in the value. * * @throws Exception If an unexpected problem occurs. */ @Test(expectedExceptions = { ASN1Exception.class }) public void testDecodeLongValueArrayAsBoolean() throws Exception { byte[] b = { 0x01, 0x02, 0x00, 0x00 }; ASN1Boolean.decodeAsBoolean(b); } /** * Tests the first toString method which takes a string builder * argument. * * @param b The byte array to use as the element value. * * @throws Exception If an unexpected problem occurs. */ @Test(dataProvider = "byteValues") public void testToString1(byte[] b) throws Exception { ASN1Boolean booleanElement = new ASN1Boolean(false); booleanElement.setValue(b); booleanElement.toString(new StringBuilder()); } /** * Tests the second toString method which takes string builder * and integer arguments. * * @param b The byte array to use as the element value. * * @throws Exception If an unexpected problem occurs. */ @Test(dataProvider = "byteValues") public void testToString2(byte[] b) throws Exception { ASN1Boolean booleanElement = new ASN1Boolean(false); booleanElement.setValue(b); booleanElement.toString(new StringBuilder(), 1); } }