Exemple #1
0
 @Test
 public void byteAt() throws Exception {
   OkBuffer buffer = new OkBuffer();
   buffer.writeUtf8("a");
   buffer.writeUtf8(repeat('b', Segment.SIZE));
   buffer.writeUtf8("c");
   assertEquals('a', buffer.getByte(0));
   assertEquals('a', buffer.getByte(0)); // getByte doesn't mutate!
   assertEquals('c', buffer.getByte(buffer.size - 1));
   assertEquals('b', buffer.getByte(buffer.size - 2));
   assertEquals('b', buffer.getByte(buffer.size - 3));
 }
Exemple #2
0
  @Test
  public void moveFewerThanRequestedBytesWithRead() throws Exception {
    OkBuffer sink = new OkBuffer();
    sink.writeUtf8(repeat('a', 10));

    OkBuffer source = new OkBuffer();
    source.writeUtf8(repeat('b', 20));

    assertEquals(20, source.read(sink, 25));
    assertEquals(30, sink.size());
    assertEquals(0, source.size());
    assertEquals(repeat('a', 10) + repeat('b', 20), sink.readUtf8(30));
  }
Exemple #3
0
 @Test
 public void skip() throws Exception {
   OkBuffer buffer = new OkBuffer();
   buffer.writeUtf8("a");
   buffer.writeUtf8(repeat('b', Segment.SIZE));
   buffer.writeUtf8("c");
   buffer.skip(1);
   assertEquals('b', buffer.readByte() & 0xff);
   buffer.skip(Segment.SIZE - 2);
   assertEquals('b', buffer.readByte() & 0xff);
   buffer.skip(1);
   assertEquals(0, buffer.size());
 }
Exemple #4
0
  @Test
  public void writePrefixDoesntSplit() throws Exception {
    OkBuffer sink = new OkBuffer();
    sink.writeUtf8(repeat('b', 10));

    OkBuffer source = new OkBuffer();
    source.writeUtf8(repeat('a', Segment.SIZE * 2));
    sink.write(source, 20);

    assertEquals(asList(30), sink.segmentSizes());
    assertEquals(asList(Segment.SIZE - 20, Segment.SIZE), source.segmentSizes());
    assertEquals(30, sink.size());
    assertEquals(Segment.SIZE * 2 - 20, source.size());
  }
Exemple #5
0
  /** The big part of source's first segment is staying put. */
  @Test
  public void writeSplitSourceBufferRight() throws Exception {
    int writeSize = Segment.SIZE / 2 - 1;

    OkBuffer sink = new OkBuffer();
    sink.writeUtf8(repeat('b', Segment.SIZE - 10));

    OkBuffer source = new OkBuffer();
    source.writeUtf8(repeat('a', Segment.SIZE * 2));
    sink.write(source, writeSize);

    assertEquals(asList(Segment.SIZE - 10, writeSize), sink.segmentSizes());
    assertEquals(asList(Segment.SIZE - writeSize, Segment.SIZE), source.segmentSizes());
  }
Exemple #6
0
  @Test
  public void writePrefixDoesntSplitButRequiresCompact() throws Exception {
    OkBuffer sink = new OkBuffer();
    sink.writeUtf8(repeat('b', Segment.SIZE - 10)); // limit = size - 10
    sink.readUtf8(Segment.SIZE - 20); // pos = size = 20

    OkBuffer source = new OkBuffer();
    source.writeUtf8(repeat('a', Segment.SIZE * 2));
    sink.write(source, 20);

    assertEquals(asList(30), sink.segmentSizes());
    assertEquals(asList(Segment.SIZE - 20, Segment.SIZE), source.segmentSizes());
    assertEquals(30, sink.size());
    assertEquals(Segment.SIZE * 2 - 20, source.size());
  }
Exemple #7
0
  @Test
  public void cloneMultipleSegments() throws Exception {
    OkBuffer original = new OkBuffer();
    original.writeUtf8(repeat('a', Segment.SIZE * 3));
    OkBuffer clone = original.clone();
    original.writeUtf8(repeat('b', Segment.SIZE * 3));
    clone.writeUtf8(repeat('c', Segment.SIZE * 3));

    assertEquals(
        repeat('a', Segment.SIZE * 3) + repeat('b', Segment.SIZE * 3),
        original.readUtf8(Segment.SIZE * 6));
    assertEquals(
        repeat('a', Segment.SIZE * 3) + repeat('c', Segment.SIZE * 3),
        clone.readUtf8(Segment.SIZE * 6));
  }
Exemple #8
0
 @Test
 public void originalDoesNotObserveWritesToClone() throws Exception {
   OkBuffer original = new OkBuffer();
   OkBuffer clone = original.clone();
   clone.writeUtf8("abc");
   assertEquals(0, original.size());
 }
Exemple #9
0
 @Test
 public void readUtf8SpansSegments() throws Exception {
   OkBuffer buffer = new OkBuffer();
   buffer.writeUtf8(repeat('a', Segment.SIZE * 2));
   buffer.readUtf8(Segment.SIZE - 1);
   assertEquals("aa", buffer.readUtf8(2));
 }
Exemple #10
0
 @Test
 public void testWritePrefixToEmptyBuffer() {
   OkBuffer sink = new OkBuffer();
   OkBuffer source = new OkBuffer();
   source.writeUtf8("abcd");
   sink.write(source, 2);
   assertEquals("ab", sink.readUtf8(2));
 }
Exemple #11
0
 @Test
 public void readAndWriteUtf8() throws Exception {
   OkBuffer buffer = new OkBuffer();
   buffer.writeUtf8("ab");
   assertEquals(2, buffer.size());
   buffer.writeUtf8("cdef");
   assertEquals(6, buffer.size());
   assertEquals("abcd", buffer.readUtf8(4));
   assertEquals(2, buffer.size());
   assertEquals("ef", buffer.readUtf8(2));
   assertEquals(0, buffer.size());
   try {
     buffer.readUtf8(1);
     fail();
   } catch (ArrayIndexOutOfBoundsException expected) {
   }
 }
Exemple #12
0
 @Test
 public void indexOfWithOffset() throws Exception {
   OkBuffer buffer = new OkBuffer();
   int halfSegment = Segment.SIZE / 2;
   buffer.writeUtf8(repeat('a', halfSegment));
   buffer.writeUtf8(repeat('b', halfSegment));
   buffer.writeUtf8(repeat('c', halfSegment));
   buffer.writeUtf8(repeat('d', halfSegment));
   assertEquals(0, buffer.indexOf((byte) 'a', 0));
   assertEquals(halfSegment - 1, buffer.indexOf((byte) 'a', halfSegment - 1));
   assertEquals(halfSegment, buffer.indexOf((byte) 'b', halfSegment - 1));
   assertEquals(halfSegment * 2, buffer.indexOf((byte) 'c', halfSegment - 1));
   assertEquals(halfSegment * 3, buffer.indexOf((byte) 'd', halfSegment - 1));
   assertEquals(halfSegment * 3, buffer.indexOf((byte) 'd', halfSegment * 2));
   assertEquals(halfSegment * 3, buffer.indexOf((byte) 'd', halfSegment * 3));
   assertEquals(halfSegment * 4 - 1, buffer.indexOf((byte) 'd', halfSegment * 4 - 1));
 }
Exemple #13
0
 @Test
 public void readIntSplitAcrossMultipleSegments() throws Exception {
   OkBuffer data = new OkBuffer();
   data.writeUtf8(repeat('a', Segment.SIZE - 3));
   data.write(new byte[] {(byte) 0xab, (byte) 0xcd, (byte) 0xef, (byte) 0x01});
   data.readUtf8(Segment.SIZE - 3);
   assertEquals(0xabcdef01, data.readInt());
   assertEquals(0, data.size());
 }
Exemple #14
0
 @Test
 public void readShortSplitAcrossMultipleSegments() throws Exception {
   OkBuffer data = new OkBuffer();
   data.writeUtf8(repeat('a', Segment.SIZE - 1));
   data.write(new byte[] {(byte) 0xab, (byte) 0xcd});
   data.readUtf8(Segment.SIZE - 1);
   assertEquals((short) 0xabcd, data.readShort());
   assertEquals(0, data.size());
 }
Exemple #15
0
  @Test
  public void multipleSegmentBuffers() throws Exception {
    OkBuffer buffer = new OkBuffer();
    buffer.writeUtf8(repeat('a', 1000));
    buffer.writeUtf8(repeat('b', 2500));
    buffer.writeUtf8(repeat('c', 5000));
    buffer.writeUtf8(repeat('d', 10000));
    buffer.writeUtf8(repeat('e', 25000));
    buffer.writeUtf8(repeat('f', 50000));

    assertEquals(repeat('a', 999), buffer.readUtf8(999)); // a...a
    assertEquals("a" + repeat('b', 2500) + "c", buffer.readUtf8(2502)); // ab...bc
    assertEquals(repeat('c', 4998), buffer.readUtf8(4998)); // c...c
    assertEquals("c" + repeat('d', 10000) + "e", buffer.readUtf8(10002)); // cd...de
    assertEquals(repeat('e', 24998), buffer.readUtf8(24998)); // e...e
    assertEquals("e" + repeat('f', 50000), buffer.readUtf8(50001)); // ef...f
    assertEquals(0, buffer.size());
  }
Exemple #16
0
 @Test
 public void originalDoesNotObserveReadsFromClone() throws Exception {
   OkBuffer original = new OkBuffer();
   original.writeUtf8("abc");
   OkBuffer clone = original.clone();
   assertEquals("abc", clone.readUtf8(3));
   assertEquals(3, original.size());
   assertEquals("ab", original.readUtf8(2));
 }
Exemple #17
0
 @Test
 public void writeIntegerDoesntQuiteFitInSegment() throws Exception {
   OkBuffer data = new OkBuffer();
   data.writeUtf8(repeat('a', Segment.SIZE - 3));
   data.writeInt(0xabcdef01);
   data.writeInt(0x87654321);
   assertEquals(asList(Segment.SIZE - 3, 8), data.segmentSizes());
   assertEquals(repeat('a', Segment.SIZE - 3), data.readUtf8(Segment.SIZE - 3));
   assertEquals("OkBuffer[size=8 data=abcdef0187654321]", data.toString());
 }
Exemple #18
0
 @Test
 public void writeLastByteInSegment() throws Exception {
   OkBuffer data = new OkBuffer();
   data.writeUtf8(repeat('a', Segment.SIZE - 1));
   data.writeByte(0x20);
   data.writeByte(0x21);
   assertEquals(asList(Segment.SIZE, 1), data.segmentSizes());
   assertEquals(repeat('a', Segment.SIZE - 1), data.readUtf8(Segment.SIZE - 1));
   assertEquals("OkBuffer[size=2 data=2021]", data.toString());
 }
Exemple #19
0
  @Test
  public void indexOf() throws Exception {
    OkBuffer buffer = new OkBuffer();

    // The segment is empty.
    assertEquals(-1, buffer.indexOf((byte) 'a'));

    // The segment has one value.
    buffer.writeUtf8("a"); // a
    assertEquals(0, buffer.indexOf((byte) 'a'));
    assertEquals(-1, buffer.indexOf((byte) 'b'));

    // The segment has lots of data.
    buffer.writeUtf8(repeat('b', Segment.SIZE - 2)); // ab...b
    assertEquals(0, buffer.indexOf((byte) 'a'));
    assertEquals(1, buffer.indexOf((byte) 'b'));
    assertEquals(-1, buffer.indexOf((byte) 'c'));

    // The segment doesn't start at 0, it starts at 2.
    buffer.readUtf8(2); // b...b
    assertEquals(-1, buffer.indexOf((byte) 'a'));
    assertEquals(0, buffer.indexOf((byte) 'b'));
    assertEquals(-1, buffer.indexOf((byte) 'c'));

    // The segment is full.
    buffer.writeUtf8("c"); // b...bc
    assertEquals(-1, buffer.indexOf((byte) 'a'));
    assertEquals(0, buffer.indexOf((byte) 'b'));
    assertEquals(Segment.SIZE - 3, buffer.indexOf((byte) 'c'));

    // The segment doesn't start at 2, it starts at 4.
    buffer.readUtf8(2); // b...bc
    assertEquals(-1, buffer.indexOf((byte) 'a'));
    assertEquals(0, buffer.indexOf((byte) 'b'));
    assertEquals(Segment.SIZE - 5, buffer.indexOf((byte) 'c'));

    // Two segments.
    buffer.writeUtf8("d"); // b...bcd, d is in the 2nd segment.
    assertEquals(asList(Segment.SIZE - 4, 1), buffer.segmentSizes());
    assertEquals(Segment.SIZE - 4, buffer.indexOf((byte) 'd'));
    assertEquals(-1, buffer.indexOf((byte) 'e'));
  }
Exemple #20
0
  @Test
  public void readExhaustedSource() throws Exception {
    OkBuffer sink = new OkBuffer();
    sink.writeUtf8(repeat('a', 10));

    OkBuffer source = new OkBuffer();

    assertEquals(-1, source.read(sink, 10));
    assertEquals(10, sink.size());
    assertEquals(0, source.size());
  }
Exemple #21
0
 private List<Integer> moveBytesBetweenBuffers(String... contents) {
   StringBuilder expected = new StringBuilder();
   OkBuffer buffer = new OkBuffer();
   for (String s : contents) {
     OkBuffer source = new OkBuffer();
     source.writeUtf8(s);
     buffer.write(source, source.size());
     expected.append(s);
   }
   List<Integer> segmentSizes = buffer.segmentSizes();
   assertEquals(expected.toString(), buffer.readUtf8(expected.length()));
   return segmentSizes;
 }
Exemple #22
0
  @Test
  public void readZeroBytesFromSource() throws Exception {
    OkBuffer sink = new OkBuffer();
    sink.writeUtf8(repeat('a', 10));

    OkBuffer source = new OkBuffer();

    // Either 0 or -1 is reasonable here. For consistency with Android's
    // ByteArrayInputStream we return 0.
    assertEquals(-1, source.read(sink, 0));
    assertEquals(10, sink.size());
    assertEquals(0, source.size());
  }
Exemple #23
0
 @Test
 public void completeSegmentByteCountOnBufferWithIncompleteTailSegment() throws Exception {
   OkBuffer buffer = new OkBuffer();
   buffer.writeUtf8(repeat('a', Segment.SIZE * 4 - 10));
   assertEquals(Segment.SIZE * 3, buffer.completeSegmentByteCount());
 }
Exemple #24
0
 @Test
 public void readUtf8EntireBuffer() throws Exception {
   OkBuffer buffer = new OkBuffer();
   buffer.writeUtf8(repeat('a', Segment.SIZE));
   assertEquals(repeat('a', Segment.SIZE), buffer.readUtf8(Segment.SIZE));
 }
Exemple #25
0
 @Test
 public void toStringOnMultipleSegmentBuffer() throws Exception {
   OkBuffer buffer = new OkBuffer();
   buffer.writeUtf8(repeat('a', 6144));
   assertEquals("OkBuffer[size=6144 md5=d890021f28522533c1cc1b9b1f83ce73]", buffer.toString());
 }