@Override public BatchStream fetch(long l) { recordParser.fetch(l); return this; }
@Test public void testParseEmptyChunkOnFetch() { FakeStream<Buffer> stream = new FakeStream<>(); RecordParser parser = RecordParser.newDelimited("\r\n", stream); List<Buffer> emitted = new ArrayList<>(); parser.handler(emitted::add); parser.pause(); stream.emit(Buffer.buffer("abc\r\n\r\n")); parser.fetch(1); assertEquals(Collections.singletonList(Buffer.buffer("abc")), emitted); parser.fetch(1); assertEquals(Arrays.asList(Buffer.buffer("abc"), Buffer.buffer()), emitted); }
@Test public void testSuspendParsing() { FakeStream<Buffer> stream = new FakeStream<>(); RecordParser parser = RecordParser.newDelimited("\r\n", stream); List<Buffer> emitted = new ArrayList<>(); parser.handler(emitted::add); parser.pause().fetch(1); stream.emit(Buffer.buffer("abc\r\ndef\r\n")); parser.fetch(1); assertEquals(Arrays.asList(Buffer.buffer("abc"), Buffer.buffer("def")), emitted); }
@Test public void testSwitchModeResetsState() { FakeStream<Buffer> stream = new FakeStream<>(); RecordParser parser = RecordParser.newDelimited("\r\n", stream); List<Buffer> emitted = new ArrayList<>(); parser.handler(emitted::add); parser.pause(); stream.emit(Buffer.buffer("3\r\nabc\r\n")); parser.fetch(1); assertEquals(Collections.singletonList(Buffer.buffer("3")), emitted); parser.fixedSizeMode(5); parser.fetch(1); assertEquals(Arrays.asList(Buffer.buffer("3"), Buffer.buffer("abc\r\n")), emitted); }
@Test public void testPausedStreamShouldNotPauseOnIncompleteMatch() { FakeStream<Buffer> stream = new FakeStream<>(); RecordParser parser = RecordParser.newDelimited("\r\n", stream); parser.handler(event -> {}); parser.pause().fetch(1); stream.emit(Buffer.buffer("abc")); assertFalse(stream.isPaused()); }
@Test public void testSuspendParsing() { FakeStream<Buffer> stream = new FakeStream<>(); RecordParser parser = RecordParser.newDelimited("\r\n", stream); List<Buffer> emitted = new ArrayList<>(); parser.handler(emitted::add); parser.pause().fetch(1); stream.emit(Buffer.buffer("abc\r\ndef\r\n")); parser.fetch(1); assertEquals(Arrays.asList(Buffer.buffer("abc"), Buffer.buffer("def")), emitted); }
@Test public void testParseEmptyChunkOnFetch() { FakeStream<Buffer> stream = new FakeStream<>(); RecordParser parser = RecordParser.newDelimited("\r\n", stream); List<Buffer> emitted = new ArrayList<>(); parser.handler(emitted::add); parser.pause(); stream.emit(Buffer.buffer("abc\r\n\r\n")); parser.fetch(1); assertEquals(Collections.singletonList(Buffer.buffer("abc")), emitted); parser.fetch(1); assertEquals(Arrays.asList(Buffer.buffer("abc"), Buffer.buffer()), emitted); }
@Test public void testSwitchModeResetsState() { FakeStream<Buffer> stream = new FakeStream<>(); RecordParser parser = RecordParser.newDelimited("\r\n", stream); List<Buffer> emitted = new ArrayList<>(); parser.handler(emitted::add); parser.pause(); stream.emit(Buffer.buffer("3\r\nabc\r\n")); parser.fetch(1); assertEquals(Collections.singletonList(Buffer.buffer("3")), emitted); parser.fixedSizeMode(5); parser.fetch(1); assertEquals(Arrays.asList(Buffer.buffer("3"), Buffer.buffer("abc\r\n")), emitted); }
public io.vertx.rxjava.core.parsetools.RecordParser fetch(long amount) { delegate.fetch(amount); return this; }
public io.vertx.rxjava.core.parsetools.RecordParser fetch(long amount) { delegate.fetch(amount); return this; }
@Test public void testPausedStreamShouldNotPauseOnIncompleteMatch() { FakeStream<Buffer> stream = new FakeStream<>(); RecordParser parser = RecordParser.newDelimited("\r\n", stream); parser.handler(event -> {}); parser.pause().fetch(1); stream.emit(Buffer.buffer("abc")); assertFalse(stream.isPaused()); }
private static void finishEntry(String key, Buffer valueLength, RecordParser parser) { parser.fixedSizeMode(valueLength.getInt(0)); parser.handler(value -> { logger.info("Key: {} / Value: {}", key, value); parser.fixedSizeMode(4); parser.handler(keyLength -> readKey(keyLength, parser)); parser.fetch(1); }); parser.fetch(1); } }
private static void readVersion(Buffer header, RecordParser parser) { logger.info("Version: {}", header.getInt(0)); parser.delimitedMode("\n"); parser.handler(name -> readName(name, parser)); parser.fetch(1); }
private static void readName(Buffer name, RecordParser parser) { logger.info("Name: {}", name.toString()); parser.fixedSizeMode(4); parser.handler(keyLength -> readKey(keyLength, parser)); parser.fetch(1); }
private static void readValue(String key, RecordParser parser) { parser.fixedSizeMode(4); parser.handler(valueLength -> finishEntry(key, valueLength, parser)); parser.fetch(1); }
private static void readMagicNumber(Buffer header, RecordParser parser) { logger.info("Magic number: {}:{}:{}:{}", header.getByte(0), header.getByte(1), header.getByte(2), header.getByte(3)); parser.handler(version -> readVersion(version, parser)); parser.fetch(1); }
private static void readKey(Buffer keyLength, RecordParser parser) { parser.fixedSizeMode(keyLength.getInt(0)); parser.handler(key -> readValue(key.toString(), parser)); parser.fetch(1); }
public static void main(String[] args) { Vertx vertx = Vertx.vertx(); AsyncFile file = vertx.fileSystem().openBlocking("sample.db", new OpenOptions().setRead(true)); RecordParser parser = RecordParser.newFixed(4, file); parser.pause(); parser.fetch(1); parser.handler(header -> readMagicNumber(header, parser)); parser.endHandler(v -> vertx.close()); }