@Test public void testPausedResume() { context.runOnContext(v -> { buffer = new InboundBuffer<>(context, 4L); AtomicInteger events = new AtomicInteger(); buffer.handler(s -> { checkContext(); events.getAndIncrement(); }); AtomicInteger reads = new AtomicInteger(); buffer.drainHandler(v2 -> { checkContext(); assertEquals(0, reads.getAndIncrement()); assertEquals(5, events.get()); testComplete(); }); buffer.pause(); fill(); buffer.resume(); }); await(); }
@Test public void testEmitInElementHandler() { context.runOnContext(v1 -> { buffer = new InboundBuffer<>(context, 4L); AtomicInteger events = new AtomicInteger(); AtomicBoolean receiving = new AtomicBoolean(); buffer.handler(s -> { checkContext(); assertFalse(receiving.getAndSet(true)); events.incrementAndGet(); if (s == 0) { fill(); } receiving.set(false); }); assertTrue(emit()); assertEquals(6, sequence.get()); assertEquals(6, events.get()); testComplete(); }); await(); }
@Test public void testDrainAfter() { context.runOnContext(v1 -> { buffer = new InboundBuffer<>(context, 4L); AtomicInteger events = new AtomicInteger(); AtomicBoolean receiving = new AtomicBoolean(); buffer.handler(s -> { checkContext(); assertFalse(receiving.getAndSet(true)); events.incrementAndGet(); if (s == 0) { fill(); } receiving.set(false); }); assertTrue(emit()); assertEquals(6, sequence.get()); assertEquals(6, events.get()); testComplete(); }); await(); }
@Test public void testPauseWhenFull() { context.runOnContext(v1 -> { buffer = new InboundBuffer<>(context, 4L); AtomicInteger events = new AtomicInteger(); AtomicInteger reads = new AtomicInteger(); buffer.drainHandler(v2 -> { checkContext(); assertEquals(0, reads.getAndIncrement()); }); buffer.handler(s -> { checkContext(); assertEquals(0, reads.get()); assertEquals(0, events.getAndIncrement()); testComplete(); }); buffer.pause(); for (int i = 0; i < 5;i++) { assertEquals(i < 4, emit()); } buffer.fetch(1); }); await(); }
@Test public void testFlowingRefill() { context.runOnContext(v1 -> { buffer = new InboundBuffer<>(context, 4L); AtomicInteger events = new AtomicInteger(); buffer.handler(s -> { checkContext(); events.getAndIncrement(); }); buffer.drainHandler(v2 -> { checkContext(); assertEquals(8, events.get()); testComplete(); }); buffer.pause(); for (int i = 0;i < 8;i++) { assertEquals("Expected " + i + " to be bilto", i < 4, emit()); } buffer.resume(); }); await(); }
@Test public void testPausedDrain() { waitFor(2); context.runOnContext(v1 -> { buffer = new InboundBuffer<>(context, 4L); AtomicInteger drained = new AtomicInteger(); AtomicInteger emitted = new AtomicInteger(); buffer.drainHandler(v2 -> { checkContext(); assertEquals(0, drained.getAndIncrement()); assertEquals(5, emitted.get()); complete(); }); buffer.handler(s -> { checkContext(); assertEquals(0, drained.get()); emitted.getAndIncrement(); }); buffer.pause(); fill(); assertEquals(0, drained.get()); assertEquals(0, emitted.get()); buffer.resume(); complete(); }); await(); }
@Test public void testFlowingAdd() { context.runOnContext(v -> { buffer = new InboundBuffer<>(context); AtomicInteger events = new AtomicInteger(); buffer.handler(elt -> { checkContext(); events.getAndIncrement(); }); assertTrue(emit()); assertEquals(1, events.get()); assertTrue(emit()); assertEquals(2, events.get()); testComplete(); }); await(); }
}); buffer.handler(s -> { checkContext(); switch (s) { case 5:
@Test public void testFlowing() { context.runOnContext(v -> { buffer = new InboundBuffer<>(context); AtomicInteger events = new AtomicInteger(); buffer.handler(elt -> { checkContext(); assertEquals(0, (int)elt); assertEquals(0, events.getAndIncrement()); testComplete(); }); assertTrue(emit()); }); await(); }
@Test public void testRefillQueueInHandlerTriggerDrainHandlerOnce() { context.runOnContext(v1 -> { buffer = new InboundBuffer<>(context, 4L); AtomicInteger events = new AtomicInteger(); AtomicInteger drained = new AtomicInteger(); buffer.drainHandler(v -> { // Check we get a single drain event and it happens after all events have been emitted assertEquals(0, drained.get()); drained.incrementAndGet(); assertEquals(9, events.get()); testComplete(); }); buffer.pause(); buffer.handler(s -> { checkContext(); if (s == 3) { // Re-fill the buffer when we get the last element fill(); } events.incrementAndGet(); }); buffer.pause(); fill(); buffer.resume(); }); await(); }
AtomicInteger events = new AtomicInteger(); buffer.handler(s -> { checkContext(); events.getAndIncrement(); }); AtomicInteger reads = new AtomicInteger(); buffer.drainHandler(v2 -> { checkContext(); assertEquals(0, reads.getAndIncrement()); });
@Test public void testTake() { context.runOnContext(v -> { buffer = new InboundBuffer<>(context); AtomicInteger events = new AtomicInteger(); buffer.handler(elt -> { checkContext(); assertEquals(0, (int)elt); assertEquals(0, events.getAndIncrement()); testComplete(); }); buffer.pause(); buffer.fetch(1); assertTrue(emit()); }); await(); }
@Test public void testPausedResume() { context.runOnContext(v -> { buffer = new InboundBuffer<>(context, 4L); AtomicInteger events = new AtomicInteger(); buffer.handler(s -> { checkContext(); events.getAndIncrement(); }); AtomicInteger reads = new AtomicInteger(); buffer.drainHandler(v2 -> { checkContext(); assertEquals(0, reads.getAndIncrement()); assertEquals(5, events.get()); testComplete(); }); buffer.pause(); fill(); buffer.resume(); }); await(); }
@Test public void testEmitInElementHandler() { context.runOnContext(v1 -> { buffer = new InboundBuffer<>(context, 4L); AtomicInteger events = new AtomicInteger(); AtomicBoolean receiving = new AtomicBoolean(); buffer.handler(s -> { checkContext(); assertFalse(receiving.getAndSet(true)); events.incrementAndGet(); if (s == 0) { fill(); } receiving.set(false); }); assertTrue(emit()); assertEquals(6, sequence.get()); assertEquals(6, events.get()); testComplete(); }); await(); }
@Test public void testDrainAfter() { context.runOnContext(v1 -> { buffer = new InboundBuffer<>(context, 4L); AtomicInteger events = new AtomicInteger(); AtomicBoolean receiving = new AtomicBoolean(); buffer.handler(s -> { checkContext(); assertFalse(receiving.getAndSet(true)); events.incrementAndGet(); if (s == 0) { fill(); } receiving.set(false); }); assertTrue(emit()); assertEquals(6, sequence.get()); assertEquals(6, events.get()); testComplete(); }); await(); }
@Test public void testPauseWhenFull() { context.runOnContext(v1 -> { buffer = new InboundBuffer<>(context, 4L); AtomicInteger events = new AtomicInteger(); AtomicInteger reads = new AtomicInteger(); buffer.drainHandler(v2 -> { checkContext(); assertEquals(0, reads.getAndIncrement()); }); buffer.handler(s -> { checkContext(); assertEquals(0, reads.get()); assertEquals(0, events.getAndIncrement()); testComplete(); }); buffer.pause(); for (int i = 0; i < 5;i++) { assertEquals(i < 4, emit()); } buffer.fetch(1); }); await(); }
@Test public void testFlowingRefill() { context.runOnContext(v1 -> { buffer = new InboundBuffer<>(context, 4L); AtomicInteger events = new AtomicInteger(); buffer.handler(s -> { checkContext(); events.getAndIncrement(); }); buffer.drainHandler(v2 -> { checkContext(); assertEquals(8, events.get()); testComplete(); }); buffer.pause(); for (int i = 0;i < 8;i++) { assertEquals("Expected " + i + " to be bilto", i < 4, emit()); } buffer.resume(); }); await(); }
@Test public void testFlowingAdd() { context.runOnContext(v -> { buffer = new InboundBuffer<>(context); AtomicInteger events = new AtomicInteger(); buffer.handler(elt -> { checkContext(); events.getAndIncrement(); }); assertTrue(emit()); assertEquals(1, events.get()); assertTrue(emit()); assertEquals(2, events.get()); testComplete(); }); await(); }
@Test public void testFlowing() { context.runOnContext(v -> { buffer = new InboundBuffer<>(context); AtomicInteger events = new AtomicInteger(); buffer.handler(elt -> { checkContext(); assertEquals(0, (int)elt); assertEquals(0, events.getAndIncrement()); testComplete(); }); assertTrue(emit()); }); await(); }
@Test public void testTake() { context.runOnContext(v -> { buffer = new InboundBuffer<>(context); AtomicInteger events = new AtomicInteger(); buffer.handler(elt -> { checkContext(); assertEquals(0, (int)elt); assertEquals(0, events.getAndIncrement()); testComplete(); }); buffer.pause(); buffer.fetch(1); assertTrue(emit()); }); await(); }