@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(); }
buffer.drainHandler(v -> { assertFalse(draining.get()); draining.set(true); if (drained.compareAndSet(false, true)) {
}); buffer.pause(); assertFalse(emit(5)); buffer.fetch(1); complete();
assertFalse(emit(6)); buffer.resume(); });
AtomicBoolean draining = new AtomicBoolean(); buffer.drainHandler(v2 -> { assertFalse(draining.get()); draining.set(true); switch (drained.getAndIncrement()) {
@Test public void testPauseInElementHandler() { context.runOnContext(v1 -> { buffer = new InboundBuffer<>(context, 4L); AtomicInteger events = new AtomicInteger(); buffer.handler(s -> { events.incrementAndGet(); if (s == 0) { fill(); buffer.pause(); } }); assertFalse(emit()); assertEquals(1, events.get()); assertEquals(5, buffer.size()); testComplete(); }); await(); }
@Test public void testBufferSignalingFullImmediately() { context.runOnContext(v1 -> { buffer = new InboundBuffer<>(context, 0L); List<Integer> emitted = new ArrayList<>(); buffer.drainHandler(v -> { assertEquals(Arrays.asList(0, 1), emitted); testComplete(); }); buffer.handler(emitted::add); assertTrue(emit()); assertEquals(Collections.singletonList(0), emitted); buffer.pause(); assertFalse(emit()); buffer.resume(); }); await(); } }
assertEquals(0, reads.get()); assertEquals(1, events.get()); assertFalse(emit()); assertEquals(0, reads.get()); assertEquals(1, events.get());
@Test public void testEmptyHandler() { context.runOnContext(v1 -> { buffer = new InboundBuffer<>(context, 4L); AtomicInteger emptyCount = new AtomicInteger(); AtomicInteger itemCount = new AtomicInteger(); buffer.handler(item -> itemCount.incrementAndGet()); buffer.emptyHandler(v2 -> { assertEquals(0, emptyCount.getAndIncrement()); testComplete(); }); assertTrue(emit()); assertEquals(1, itemCount.get()); buffer.pause(); assertTrue(emit()); assertTrue(emit()); assertTrue(emit()); assertEquals(1, itemCount.get()); assertFalse(buffer.isEmpty()); for (int i = 0;i < 3;i++) { assertEquals(0, emptyCount.get()); buffer.fetch(1); } }); await(); }
@Test public void testPushReturnsTrueUntilHighWatermark() { context.runOnContext(v1 -> { buffer = new InboundBuffer<>(context, 1L); buffer.pause(); buffer.fetch(1); assertTrue(emit()); assertTrue(emit()); assertFalse(emit()); testComplete(); }); 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 testPauseInElementHandler() { context.runOnContext(v1 -> { buffer = new InboundBuffer<>(context, 4L); AtomicInteger events = new AtomicInteger(); buffer.handler(s -> { events.incrementAndGet(); if (s == 0) { fill(); buffer.pause(); } }); assertFalse(emit()); assertEquals(1, events.get()); assertEquals(5, buffer.size()); testComplete(); }); await(); }
assertFalse(emit(6)); buffer.resume(); });
AtomicBoolean draining = new AtomicBoolean(); buffer.drainHandler(v2 -> { assertFalse(draining.get()); draining.set(true); switch (drained.getAndIncrement()) {
}); buffer.pause(); assertFalse(emit(5)); buffer.fetch(1); complete();
@Test public void testBufferSignalingFullImmediately() { context.runOnContext(v1 -> { buffer = new InboundBuffer<>(context, 0L); List<Integer> emitted = new ArrayList<>(); buffer.drainHandler(v -> { assertEquals(Arrays.asList(0, 1), emitted); testComplete(); }); buffer.handler(emitted::add); assertTrue(emit()); assertEquals(Collections.singletonList(0), emitted); buffer.pause(); assertFalse(emit()); buffer.resume(); }); await(); } }
@Test public void testEmptyHandler() { context.runOnContext(v1 -> { buffer = new InboundBuffer<>(context, 4L); AtomicInteger emptyCount = new AtomicInteger(); AtomicInteger itemCount = new AtomicInteger(); buffer.handler(item -> itemCount.incrementAndGet()); buffer.emptyHandler(v2 -> { assertEquals(0, emptyCount.getAndIncrement()); testComplete(); }); assertTrue(emit()); assertEquals(1, itemCount.get()); buffer.pause(); assertTrue(emit()); assertTrue(emit()); assertTrue(emit()); assertEquals(1, itemCount.get()); assertFalse(buffer.isEmpty()); for (int i = 0;i < 3;i++) { assertEquals(0, emptyCount.get()); buffer.fetch(1); } }); await(); }
@Test public void testPushReturnsTrueUntilHighWatermark() { context.runOnContext(v1 -> { buffer = new InboundBuffer<>(context, 1L); buffer.pause(); buffer.fetch(1); assertTrue(emit()); assertTrue(emit()); assertFalse(emit()); testComplete(); }); await(); }