opends/src/server/org/opends/server/protocols/asn1/ASN1ByteChannelReader.java
@@ -399,6 +399,13 @@ /** * {@inheritDoc} */ public int readEnumerated() throws ASN1Exception { return reader.readEnumerated(); } /** * {@inheritDoc} */ public long readInteger() throws ASN1Exception { return reader.readInteger(); } opends/src/server/org/opends/server/protocols/asn1/ASN1ByteSequenceReader.java
@@ -271,6 +271,25 @@ /** * {@inheritDoc} */ public int readEnumerated() throws ASN1Exception { // Read the header if haven't done so already peekLength(); if ((peekLength < 1) || (peekLength > 4)) { Message message = ERR_ASN1_INTEGER_INVALID_LENGTH.get(peekLength); throw new ASN1Exception(message); } // From an implementation point of view, an enumerated value is // equivalent to an integer. return (int) readInteger(); } /** * {@inheritDoc} */ public long readInteger() throws ASN1Exception { // Read the header if haven't done so already opends/src/server/org/opends/server/protocols/asn1/ASN1InputStreamReader.java
@@ -422,6 +422,25 @@ /** * {@inheritDoc} */ public int readEnumerated() throws ASN1Exception { // Read the header if haven't done so already peekLength(); if ((peekLength < 1) || (peekLength > 4)) { Message message = ERR_ASN1_INTEGER_INVALID_LENGTH.get(peekLength); throw new ASN1Exception(message); } // From an implementation point of view, an enumerated value is // equivalent to an integer. return (int) readInteger(); } /** * {@inheritDoc} */ public long readInteger() throws ASN1Exception { // Read the header if haven't done so already opends/src/server/org/opends/server/protocols/asn1/ASN1Reader.java
@@ -139,6 +139,18 @@ /** * Reads the next ASN.1 element as an enumerated value and advances * the cursor. * * @return The decoded enumerated value. * @throws ASN1Exception * If the element cannot be decoded as an enumerated value. */ int readEnumerated() throws ASN1Exception; /** * Reads the next ASN.1 element as an integer and advances the * cursor. * opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/asn1/ASN1ByteChannelReaderTestCase.java
@@ -38,6 +38,7 @@ */ public class ASN1ByteChannelReaderTestCase extends ASN1ReaderTestCase { @Override ASN1Reader getReader(byte[] b, int maxElementSize) throws IOException { ByteArrayInputStream inStream = new ByteArrayInputStream(b); @@ -54,6 +55,7 @@ * * @throws Exception If an unexpected problem occurs. */ @Override @Test(expectedExceptions = { IllegalBlockingModeException.class }) public void testDecodeShortArrayAsNull() throws Exception @@ -67,6 +69,7 @@ * * @throws Exception If an unexpected problem occurs. */ @Override @Test(expectedExceptions = { IllegalBlockingModeException.class }) public void testDecodeShortArrayAsInteger() throws Exception @@ -75,11 +78,26 @@ } /** * Tests the <CODE>readEnumerated</CODE> method that takes a byte array with * a short array. * * @throws Exception If an unexpected problem occurs. */ @Override @Test(expectedExceptions = { IllegalBlockingModeException.class }) public void testDecodeShortArrayAsEnumerated() throws Exception { super.testDecodeShortArrayAsEnumerated(); } /** * Tests the <CODE>decodeAsBoolean</CODE> method that takes a byte array * argument with a short array. * * @throws Exception If an unexpected problem occurs. */ @Override @Test(expectedExceptions = { IllegalBlockingModeException.class }) public void testDecodeShortArrayAsBoolean() throws Exception @@ -93,6 +111,7 @@ * * @throws Exception If an unexpected problem occurs. */ @Override @Test(expectedExceptions = { IllegalBlockingModeException.class }) public void testDecodeShortArrayAsOctetString() throws Exception @@ -106,6 +125,7 @@ * * @throws Exception If an unexpected problem occurs. */ @Override @Test(expectedExceptions = { IllegalBlockingModeException.class }) public void testDecodeShortArrayAsSequence() throws Exception @@ -119,6 +139,7 @@ * * @throws Exception If an unexpected problem occurs. */ @Override @Test(expectedExceptions = { IllegalBlockingModeException.class }) public void testDecodeLengthMismatchArrayAsBoolean() throws Exception @@ -132,6 +153,7 @@ * * @throws Exception If an unexpected problem occurs. */ @Override @Test(expectedExceptions = { IllegalBlockingModeException.class }) public void testDecodeLengthMismatchArrayAsInteger() throws Exception @@ -140,11 +162,26 @@ } /** * Tests the <CODE>readEnumerated</CODE> method that takes a byte array with * a length mismatch. * * @throws Exception If an unexpected problem occurs. */ @Override @Test(expectedExceptions = { IllegalBlockingModeException.class }) public void testDecodeLengthMismatchArrayAsEnumerated() throws Exception { super.testDecodeLengthMismatchArrayAsEnumerated(); } /** * Tests the <CODE>decodeAsOctetString</CODE> method that takes a byte array * using an array whose actual length doesn't match with the decoded length. * * @throws Exception If an unexpected problem occurs. */ @Override @Test(expectedExceptions = { IllegalBlockingModeException.class }) public void testDecodeLengthMismatchArrayAsOctetString() throws Exception @@ -158,6 +195,7 @@ * * @throws Exception If an unexpected problem occurs. */ @Override @Test(expectedExceptions = { IllegalBlockingModeException.class }) public void testDecodeTruncatedLengthArrayAsBoolean() throws Exception @@ -171,6 +209,7 @@ * * @throws Exception If an unexpected problem occurs. */ @Override @Test(expectedExceptions = { IllegalBlockingModeException.class }) public void testDecodeTruncatedLengthArrayAsInteger() throws Exception @@ -179,11 +218,26 @@ } /** * Tests the <CODE>readEnumerated</CODE> method that takes a byte array with * a truncated length array. * * @throws Exception If an unexpected problem occurs. */ @Override @Test(expectedExceptions = { IllegalBlockingModeException.class }) public void testDecodeTruncatedLengthArrayAsEnumerated() throws Exception { super.testDecodeTruncatedLengthArrayAsEnumerated(); } /** * Tests the <CODE>decodeAsNull</CODE> method that takes a byte array argument * with an array with a truncated length. * * @throws Exception If an unexpected problem occurs. */ @Override @Test(expectedExceptions = { IllegalBlockingModeException.class }) public void testDecodeTruncatedLengthArrayAsNull() throws Exception @@ -197,6 +251,7 @@ * * @throws Exception If an unexpected problem occurs. */ @Override @Test(expectedExceptions = { IllegalBlockingModeException.class }) public void testDecodeTruncatedLengthArrayAsOctetString() throws Exception @@ -210,6 +265,7 @@ * * @throws Exception If an unexpected problem occurs. */ @Override @Test(expectedExceptions = { IllegalBlockingModeException.class }) public void testDecodeTruncatedLengthArrayAsSequence() throws Exception @@ -223,6 +279,7 @@ * * @throws Exception If an unexpected problem occurs. */ @Override @Test(expectedExceptions = { IllegalBlockingModeException.class }) public void testDecodeSequencePrematureEof() throws Exception @@ -235,6 +292,7 @@ * * @throws Exception If an unexpected problem occurs. */ @Override @Test(expectedExceptions = { IllegalBlockingModeException.class }) public void testSkipElementIncompleteRead() throws Exception opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/asn1/ASN1ByteChannelWriterTestCase.java
@@ -26,24 +26,23 @@ */ package org.opends.server.protocols.asn1; import org.opends.server.types.ByteString; import java.io.ByteArrayOutputStream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.nio.channels.WritableByteChannel; import java.nio.channels.Channels; import java.nio.channels.ReadableByteChannel; import java.nio.channels.WritableByteChannel; /** * Test class for ASN1ByteChannelWriter */ public class ASN1ByteChannelWriterTestCase extends ASN1WriterTestCase { ByteArrayOutputStream outStream = new ByteArrayOutputStream(); WritableByteChannel outChannel = Channels.newChannel(outStream); ASN1Writer writer = new ASN1ByteChannelWriter(outChannel, 500); private ByteArrayOutputStream outStream = new ByteArrayOutputStream(); private WritableByteChannel outChannel = Channels.newChannel(outStream); private ASN1Writer writer = new ASN1ByteChannelWriter(outChannel, 500); @Override ASN1Writer getWriter() throws IOException { writer.flush(); @@ -51,6 +50,7 @@ return writer; } @Override ASN1Reader getReader(byte[] encodedBytes) throws ASN1Exception, IOException { ByteArrayInputStream inStream = @@ -65,6 +65,7 @@ return reader; } @Override byte[] getEncodedBytes() throws IOException, ASN1Exception { writer.flush(); opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/asn1/ASN1OutputStreamWriterTestCase.java
@@ -26,32 +26,25 @@ */ package org.opends.server.protocols.asn1; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import static org.testng.Assert.*; import org.opends.server.types.ByteStringBuilder; import org.opends.server.types.ByteString; import static org.opends.server.protocols.asn1.ASN1Constants.*; import org.opends.server.util.StaticUtils; import java.io.ByteArrayOutputStream; import java.io.ByteArrayInputStream; import java.util.Arrays; import java.io.ByteArrayOutputStream; /** * Test class for ASN1OutputStreamWriter */ public class ASN1OutputStreamWriterTestCase extends ASN1WriterTestCase { ByteArrayOutputStream outStream = new ByteArrayOutputStream(); ASN1Writer writer = new ASN1OutputStreamWriter(outStream); private ByteArrayOutputStream outStream = new ByteArrayOutputStream(); private ASN1Writer writer = new ASN1OutputStreamWriter(outStream); @Override ASN1Writer getWriter() { outStream.reset(); return writer; } @Override ASN1Reader getReader(byte[] encodedBytes) { ByteArrayInputStream inStream = @@ -59,6 +52,7 @@ return new ASN1InputStreamReader(inStream, 0); } @Override byte[] getEncodedBytes() { return outStream.toByteArray(); opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/asn1/ASN1ReaderTestCase.java
@@ -67,8 +67,6 @@ * * @return A list of byte arrays with encoded ASN.1 elements that can be * decoded as octet strings. * * @throws Exception If an unexpected problem occurs. */ @DataProvider(name = "elementArrays") public Object[][] getElementArrays() @@ -102,6 +100,17 @@ }; } /** * Gets the reader to be use for the unit tests. * * @param b * The array of bytes to be read. * @param maxElementSize * The max element size. * @return The reader to be use for the unit tests. * @throws IOException * In an unexpected IO exception occurred. */ abstract ASN1Reader getReader(byte[] b, int maxElementSize) throws IOException; @@ -213,6 +222,20 @@ getReader(b, 0).readInteger(); } /** * Tests the <CODE>readEnumerated</CODE> method that takes a byte array with * a short array. * * @throws Exception If an unexpected problem occurs. */ @Test(expectedExceptions = { ASN1Exception.class }) public void testDecodeShortArrayAsEnumerated() throws Exception { byte[] b = new byte[0]; getReader(b, 0).readEnumerated(); } /** @@ -232,6 +255,22 @@ /** * Tests the <CODE>readEnumerated</CODE> method that takes a byte array with * a long length array. * * @throws Exception If an unexpected problem occurs. */ @Test(expectedExceptions = { ASN1Exception.class }) public void testDecodeLongLengthArrayAsEnumerated() throws Exception { byte[] b = { 0x02, (byte) 0x85, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00 }; getReader(b, 0).readEnumerated(); } /** * Tests the <CODE>decodeAsInteger</CODE> method that takes a byte array with * a truncated length array. * @@ -248,6 +287,22 @@ /** * Tests the <CODE>readEnumerated</CODE> method that takes a byte array with * a truncated length array. * * @throws Exception If an unexpected problem occurs. */ @Test(expectedExceptions = { ASN1Exception.class }) public void testDecodeTruncatedLengthArrayAsEnumerated() throws Exception { byte[] b = { 0x02, (byte) 0x82, 0x00 }; getReader(b, 0).readEnumerated(); } /** * Tests the <CODE>decodeAsInteger</CODE> method that takes a byte array with * a length mismatch. * @@ -262,6 +317,20 @@ } /** * Tests the <CODE>readEnumerated</CODE> method that takes a byte array with * a length mismatch. * * @throws Exception If an unexpected problem occurs. */ @Test(expectedExceptions = { ASN1Exception.class }) public void testDecodeLengthMismatchArrayAsEnumerated() throws Exception { byte[] b = { 0x02, (byte) 0x81, 0x01 }; getReader(b, 0).readEnumerated(); } /** * Tests the <CODE>decodeAsBoolean</CODE> method that takes a byte array * argument with valid arrays. * opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/asn1/ASN1WriterTestCase.java
@@ -47,7 +47,7 @@ // Create an array with all of the valid single-byte types. We don't // support multi-byte types, so this should be a comprehensive data set. byte[] testTypes = new byte[0xFF]; private byte[] testTypes = new byte[0xFF]; { for (int i=0x00; i < 0xFF; i++) {