/*
* 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);
}
}