mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

matthew_swift
07.56.2009 9008dca31797ba1b05fa3ed6cacb540ef175c666
Align ASN1Reader with ASN1Writer by adding readEnumerated().
9 files modified
223 ■■■■■ changed files
opends/src/server/org/opends/server/protocols/asn1/ASN1ByteChannelReader.java 7 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/protocols/asn1/ASN1ByteSequenceReader.java 19 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/protocols/asn1/ASN1InputStreamReader.java 19 ●●●●● patch | view | raw | blame | history
opends/src/server/org/opends/server/protocols/asn1/ASN1Reader.java 12 ●●●●● patch | view | raw | blame | history
opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/asn1/ASN1ByteChannelReaderTestCase.java 58 ●●●●● patch | view | raw | blame | history
opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/asn1/ASN1ByteChannelWriterTestCase.java 15 ●●●● patch | view | raw | blame | history
opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/asn1/ASN1OutputStreamWriterTestCase.java 18 ●●●●● patch | view | raw | blame | history
opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/asn1/ASN1ReaderTestCase.java 73 ●●●●● patch | view | raw | blame | history
opends/tests/unit-tests-testng/src/server/org/opends/server/protocols/asn1/ASN1WriterTestCase.java 2 ●●● patch | view | raw | blame | history
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++)
    {