MergeOrderedInnerSubscriber(MergeOrderedMainProducer<T> parent, int prefetch) { this.parent = parent; this.prefetch = prefetch; this.limit = prefetch - (prefetch >> 2); this.queue = Queues.<T>small().get(); }
@Test public void parallelism() { ParallelFlux<Integer> source = Flux.range(1, 4).parallel(3); ParallelFlatMap<Integer, Integer> test = new ParallelFlatMap<>(source, i -> Flux.range(1, i), false, 12, Queues.small(), 123, Queues.small()); assertThat(test.parallelism()) .isEqualTo(3) .isEqualTo(source.parallelism()); }
@Test public void scanStartEndMainCompleted() { CoreSubscriber<List<String>> actual = new LambdaSubscriber<>(null, e -> {}, null, null); BufferWhenMainSubscriber<String, Integer, Long, List<String>> test = new BufferWhenMainSubscriber<String, Integer, Long, List<String>>( actual, ArrayList::new, Queues.small(), Mono.just(1), u -> Mono.just(1L)); Subscription parent = Operators.emptySubscription(); test.onSubscribe(parent); assertThat(test.scan(Scannable.Attr.TERMINATED)).isFalse(); test.onComplete(); assertThat(test.scan(Scannable.Attr.TERMINATED)).isTrue(); }
@Test public void scanStartEndMainCancelled() { CoreSubscriber<List<String>> actual = new LambdaSubscriber<>(null, e -> {}, null, null); BufferWhenMainSubscriber<String, Integer, Long, List<String>> test = new BufferWhenMainSubscriber<String, Integer, Long, List<String>>( actual, ArrayList::new, Queues.small(), Mono.just(1), u -> Mono.just(1L)); Subscription parent = Operators.emptySubscription(); test.onSubscribe(parent); test.cancel(); assertThat(test.scan(Scannable.Attr.CANCELLED)).isTrue(); }
@Test public void parallelism() { ParallelFlux<Integer> source = Flux.range(1, 4).parallel(3); ParallelConcatMap<Integer, Integer> test = new ParallelConcatMap<>(source, i -> Flux.range(1, i), Queues.small(), 123, FluxConcatMap.ErrorMode.IMMEDIATE); assertThat(test.parallelism()) .isEqualTo(3) .isEqualTo(source.parallelism()); }
@Test @SuppressWarnings("unchecked") //safe varargs public void secondErrorsDelayed() { new FluxMergeOrdered<>(2, Queues.small(), Comparator.naturalOrder(), Flux.just(1, 3, 5, 7), Flux.error(new IOException("boom")) ) .as(StepVerifier::create) .expectNext(1, 3, 5, 7) .verifyError(IOException.class); }
@Test @SuppressWarnings("unchecked") //safe varargs public void firstErrorsDelayed() { new FluxMergeOrdered<>(2, Queues.small(), Comparator.naturalOrder(), Flux.error(new IOException("boom")), Flux.just(2, 4, 6, 8)) .as(StepVerifier::create) .expectNext(2, 4, 6, 8) .verifyError(IOException.class); }
@Test @SuppressWarnings("unchecked") //safe varargs public void fusedThrowsInPostEmissionCheckDelayed() { new FluxMergeOrdered<>(2, Queues.small(), Comparator.naturalOrder(), Flux.just(1).map(v -> { throw new IllegalArgumentException("boom"); }), Flux.just(2, 3)) .as(f -> StepVerifier.create(f, 0L)) .thenRequest(2) .expectNext(2, 3) .verifyErrorMessage("boom"); }
@Test public void scanOperator() throws Exception { ParallelFlux<String> source = Flux.<String>empty().parallel(2); ParallelRunOn<String> test = new ParallelRunOn<>(source, Schedulers.single(), 123, Queues.small()); assertThat(test.scan(Scannable.Attr.PARENT)).isSameAs(source); assertThat(test.scan(Scannable.Attr.PREFETCH)).isEqualTo(123); }
@Test @SuppressWarnings("unchecked") //safe varargs public void firstErrorsBackpressuredDelayed() { new FluxMergeOrdered<>(2, Queues.small(), Comparator.naturalOrder(), Flux.error(new IOException("boom")), Flux.just(2, 4, 6, 8)) .as(f -> StepVerifier.create(f, 0L)) .thenRequest(4) .expectNext(2, 4, 6, 8) .verifyError(IOException.class); }
@Test @SuppressWarnings("unchecked") //safe varargs public void secondErrorsBackpressuredDelayed() { new FluxMergeOrdered<>(2, Queues.small(), Comparator.naturalOrder(), Flux.just(1, 3, 5, 7), Flux.error(new IOException("boom")) ) .as(f -> StepVerifier.create(f, 0L)) .thenRequest(4) .expectNext(1, 3, 5, 7) .verifyError(IOException.class); }
@Test @SuppressWarnings("unchecked") //safe varargs public void nullFirst() { FluxMergeOrdered<Integer> test = new FluxMergeOrdered<>(2, Queues.small(), Comparator.naturalOrder(), null, Flux.just(1), null); assertThatNullPointerException().isThrownBy(test::subscribe) .withMessage("subscribed with a null source: sources[0]"); }
@Test @SuppressWarnings("unchecked") //safe varargs public void normal2() { new FluxMergeOrdered<>(2, Queues.small(), Comparator.naturalOrder(), Flux.just(1, 3, 5, 7), Flux.just(2, 4, 6, 8)) .as(StepVerifier::create) .expectNext(1, 2, 3, 4, 5, 6, 7, 8) .verifyComplete(); }
@Test @SuppressWarnings("unchecked") //safe varargs public void normal3() { new FluxMergeOrdered<>(2, Queues.small(), Comparator.naturalOrder(), Flux.just(1, 3, 5, 7), Flux.just(2, 4, 6)) .as(StepVerifier::create) .expectNext(1, 2, 3, 4, 5, 6, 7) .verifyComplete(); }
@Test @SuppressWarnings("unchecked") //safe varargs public void normal4() { new FluxMergeOrdered<>(2, Queues.small(), Comparator.naturalOrder(), Flux.just(1, 3, 5, 7), Flux.just(1, 3, 5, 7)) .as(StepVerifier::create) .expectNext(1, 1, 3, 3, 5, 5, 7, 7) .verifyComplete(); }
@Test @SuppressWarnings("unchecked") //safe varargs public void naturalOrder() { new FluxMergeOrdered<>(2, Queues.small(), Comparator.naturalOrder(), Flux.just(1), Flux.just(2)) .as(StepVerifier::create) .expectNext(1, 2) .verifyComplete(); }
@Test public void never() { new FluxMergeOrdered<Integer>(2, Queues.small(), Comparator.naturalOrder(), Flux.never(), Flux.never()) .as(StepVerifier::create) .thenCancel() .verify(); }
@Test @SuppressWarnings("unchecked") //safe varargs public void take() { new FluxMergeOrdered<>(2, Queues.small(), Comparator.naturalOrder(), Flux.just(1, 3, 5, 7), Flux.just(2, 4, 6, 8)) .take(5) .as(StepVerifier::create) .expectNext(1, 2, 3, 4, 5) .verifyComplete(); }
@Test @SuppressWarnings("unchecked") //safe varargs public void backpressure1() { new FluxMergeOrdered<>(2, Queues.small(), Comparator.naturalOrder(), Flux.just(1, 3, 5, 7), Flux.just(2, 4, 6, 8)) .limitRate(1) .as(StepVerifier::create) .expectNext(1, 2, 3, 4, 5, 6, 7, 8) .verifyComplete(); }
@Test @SuppressWarnings("unchecked") //safe varargs public void backpressure3() { new FluxMergeOrdered<>(1, Queues.small(), Comparator.naturalOrder(), Flux.just(1, 3, 5, 7), Flux.just(2, 4, 6, 8)) .limitRate(1) .as(StepVerifier::create) .expectNext(1, 2, 3, 4, 5, 6, 7, 8) .verifyComplete(); }