/** Tests {@link BasePayloadWriter#insert} by adding zero-byte key or value. */
  @Test
  public void addZeroLengthKeyOrValueTest() throws Exception {
    int offset;
    int expectedLength = 0;

    // Both key and value are empty, expect only 8 bytes of two integer length values
    offset = mTestWriter.insert("".getBytes(), "".getBytes());
    Assert.assertEquals(expectedLength, offset);

    mTestWriter.flush();
    expectedLength += 8;
    Assert.assertEquals(expectedLength, mTestOutStream.getBytesWritten());

    offset = mTestWriter.insert(KEY1, "".getBytes());
    Assert.assertEquals(expectedLength, offset);

    mTestWriter.flush();
    expectedLength += 8 + KEY1.length;
    Assert.assertEquals(expectedLength, mTestOutStream.getBytesWritten());

    offset = mTestWriter.insert("".getBytes(), VALUE1);
    Assert.assertEquals(expectedLength, offset);

    mTestWriter.flush();
    expectedLength += 8 + VALUE1.length;
    Assert.assertEquals(expectedLength, mTestOutStream.getBytesWritten());
  }
  /** Tests {@link BasePayloadWriter#insert} by adding multiple key-value pairs. */
  @Test
  public void addMultipleKeyAndValuePairsTest() throws Exception {
    int offset;
    int expectedLength = 0;

    offset = mTestWriter.insert(KEY1, VALUE1);
    Assert.assertEquals(expectedLength, offset);

    mTestWriter.flush();
    expectedLength += 8 + KEY1.length + VALUE1.length;
    Assert.assertEquals(expectedLength, mTestOutStream.getBytesWritten());

    offset = mTestWriter.insert(KEY2, VALUE2);
    Assert.assertEquals(expectedLength, offset);

    mTestWriter.flush();
    expectedLength += 8 + KEY2.length + VALUE2.length;
    Assert.assertEquals(expectedLength, mTestOutStream.getBytesWritten());
  }