public void testReset() throws IOException {
   assertEquals("New packet size wrong", 4, targetPacket.getSize());
   testInt();
   assertEquals("New packet size wrong", 4, targetPacket.getSize());
   testShort();
   assertEquals("New packet size wrong", 4, targetPacket.getSize());
 }
  public void testString() throws IOException {
    /** TODO: Test high-order characters */
    ByteArrayOutputStream baos = new ByteArrayOutputStream();

    String testString1 = "Ein groß Baum\nwith blossom";
    String testString2 = "Another string";
    targetPacket.write(testString1, false);
    targetPacket.write(testString2, false);
    targetPacket.xmit('R', new DataOutputStream(baos));

    byte[] ba = baos.toByteArray();
    assertEquals("Packet type character got mangled", 'R', (char) ba[0]);
    BufferedReader utfReader =
        new BufferedReader(
            new InputStreamReader(new ByteArrayInputStream(ba, 5, ba.length - 5), "UTF-8"));
    assertTrue("Packet did not provide a good character stream (1)", utfReader.ready());
    char[] ca = new char[100];
    int charsRead = utfReader.read(ca);
    assertEquals(
        "A test string got mangled (length mismatch)",
        (testString1 + testString2).length(),
        charsRead);
    assertEquals(
        "A test string got mangled", testString1 + testString2, new String(ca, 0, charsRead));
    assertFalse("Packet has extra stuff after character stream", utfReader.ready());
  }
  public void testLong() throws IOException {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();

    targetPacket.writeLong(distinguishableLong);
    assertEquals("Write of first long wrote wrong number of bytes", 12, targetPacket.getSize());
    targetPacket.writeLong(distinguishableLong);
    assertEquals("Write of second long wrote wrong number of bytes", 20, targetPacket.getSize());
    int packetSize = targetPacket.xmit('R', new DataOutputStream(baos));

    byte[] ba = baos.toByteArray();
    assertEquals("Packet type character got mangled", 'R', (char) ba[0]);
    assertEquals(
        "Size header in packet is wrong",
        packetSize,
        OdbcPacketOutputStreamTest.intFromByteArray(ba, 1));
    assertEquals("Retrieved data does not match stream's write count", packetSize + 1, ba.length);
    assertEquals(
        "Value of first long got mangled",
        distinguishableLong,
        OdbcPacketOutputStreamTest.longFromByteArray(ba, 5));
    assertEquals(
        "Value of second long got mangled",
        distinguishableLong,
        OdbcPacketOutputStreamTest.longFromByteArray(ba, 13));
  }
  public void testSizedString() throws IOException {
    /** TODO: Test high-order characters */
    ByteArrayOutputStream baos = new ByteArrayOutputStream();

    String testString1 = "Ein groß Baum\nwith blossom";
    String testString2 = "Another string";
    targetPacket.writeSized(testString1);
    int str2BytePos = targetPacket.getSize();
    targetPacket.writeSized(testString2);
    targetPacket.xmit('R', new DataOutputStream(baos));

    byte[] ba = baos.toByteArray();
    assertEquals("Packet type character got mangled", 'R', (char) ba[0]);
    BufferedReader utfReader;
    char[] ca = new char[100];
    int charsRead;

    utfReader =
        new BufferedReader(
            new InputStreamReader(
                new ByteArrayInputStream(ba, 9, OdbcPacketOutputStreamTest.intFromByteArray(ba, 5)),
                "UTF-8"));
    assertTrue("Packet did not provide a good character stream (1)", utfReader.ready());
    charsRead = utfReader.read(ca);
    assertEquals(
        "First test string got mangled (length mismatch)", testString1.length(), charsRead);
    assertEquals("First test string got mangled", testString1, new String(ca, 0, charsRead));
    assertFalse("Packet has extra stuff after character stream", utfReader.ready());
    utfReader.close();

    utfReader =
        new BufferedReader(
            new InputStreamReader(
                new ByteArrayInputStream(
                    ba,
                    str2BytePos + 5,
                    OdbcPacketOutputStreamTest.intFromByteArray(ba, str2BytePos + 1)),
                "UTF-8"));
    charsRead = utfReader.read(ca);
    assertEquals(
        "Second test string got mangled (length mismatch)", testString2.length(), charsRead);
    assertEquals("Second test string got mangled", testString2, new String(ca, 0, charsRead));
    assertFalse("Packet has extra stuff after character stream", utfReader.ready());
    utfReader.close();
  }
  public void testChar() throws IOException {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();

    targetPacket.writeByteChar('k');
    targetPacket.writeByteChar('X');
    int packetSize = targetPacket.xmit('R', new DataOutputStream(baos));

    byte[] ba = baos.toByteArray();
    assertEquals(
        "Size header in packet is wrong",
        packetSize,
        OdbcPacketOutputStreamTest.intFromByteArray(ba, 1));
    assertEquals("Retrieved data does not match stream's write count", packetSize + 1, ba.length);
    assertEquals("Packet type character got mangled", 'R', (char) ba[0]);
    BufferedReader utfReader =
        new BufferedReader(
            new InputStreamReader(new ByteArrayInputStream(ba, 5, ba.length - 5), "UTF-8"));
    assertTrue("Packet did not provide a good character stream (1)", utfReader.ready());
    assertEquals("Value of first char got mangled", 'k', (char) utfReader.read());
    assertTrue("Packet did not provide a good character stream (2)", utfReader.ready());
    assertEquals("Value of first char got mangled", 'X', (char) utfReader.read());
    assertFalse("Packet has extra stuff after character stream", utfReader.ready());
    utfReader.close();
  }
 /** Invoked before each test*() invocation, by JUnit. */
 protected void setUp() throws IOException {
   targetPacket = OdbcPacketOutputStream.newOdbcPacketOutputStream();
 }
  public void testTypeMix() throws IOException {
    byte[] buffer = new byte[1024];
    String resPath = "/org/hsqldb/resources/odbcPacket.data";
    InputStream is = OdbcPacketOutputStreamTest.class.getResourceAsStream(resPath);
    if (is == null) {
      throw new RuntimeException(
          "CLASSPATH not set properly.  " + "Res file '" + resPath + "' not accessible");
    }
    ByteArrayOutputStream baosA = new ByteArrayOutputStream();
    ByteArrayOutputStream baosE = new ByteArrayOutputStream();
    DataOutputStream dos = new DataOutputStream(baosA);

    int i;
    while ((i = is.read(buffer)) > -1) {
      baosE.write(buffer, 0, i);
    }
    byte[] expectedBa = baosE.toByteArray();
    baosE.close();

    targetPacket.writeShort((short) distinguishableLong);
    targetPacket.writeInt((int) distinguishableLong);
    targetPacket.writeLong(distinguishableLong);
    targetPacket.writeByte((byte) distinguishableLong);
    targetPacket.writeByteChar('k');
    // the writeByteChar() method is explicitly not for ext. characters.

    int preLength = targetPacket.getSize();
    targetPacket.write("Ein gro\u00df Baum\nwith blossom", false);
    if (targetPacket.getSize() - preLength != 27) {
      throw new RuntimeException("Assertion failed.  Fix test because encoding size changed");
    }
    targetPacket.write("Another string", true);
    targetPacket.writeSized("Ein gro\u00df Baum\nmit blossom");
    targetPacket.xmit('a', dos);
    dos.flush();
    dos.close();
    byte[] actualBa = baosA.toByteArray();

    /* Use this to regenerate the test data (which is also used to test
     * the reader).
    java.io.FileOutputStream fos =
        new java.io.FileOutputStream("/tmp/fix.bin");
    fos.write(actualBa);
    fos.flush();
    fos.close();
    */

    // JUnit 4.x has a built-in byte-array comparator.  Until then...
    assertEquals("Byte stream size is wrong", expectedBa.length, actualBa.length);
    for (i = 0; i < expectedBa.length; i++) {
      assertEquals("Bye stream corruption at offset " + i, expectedBa[i], actualBa[i]);
    }
  }
 /** Invoked after each test*() invocation, by JUnit. */
 protected void tearDown() throws IOException {
   targetPacket.close();
   targetPacket = null;
 }