use of reactor.test.subscriber.AssertSubscriber in project reactor-core by reactor.
the class FluxPublishOnTest method rejectedExecutionExceptionOnDataSignalExecutor.
@Test(timeout = 5000)
public void rejectedExecutionExceptionOnDataSignalExecutor() throws InterruptedException {
final AtomicReference<Throwable> throwableInOnOperatorError = new AtomicReference<>();
final AtomicReference<Object> dataInOnOperatorError = new AtomicReference<>();
try {
CountDownLatch hookLatch = new CountDownLatch(1);
Hooks.onOperatorError((t, d) -> {
throwableInOnOperatorError.set(t);
dataInOnOperatorError.set(d);
hookLatch.countDown();
return t;
});
ExecutorService executor = newCachedThreadPool();
CountDownLatch latch = new CountDownLatch(1);
AssertSubscriber<Integer> assertSubscriber = new AssertSubscriber<>();
Flux.range(0, 5).publishOn(fromExecutorService(executor)).doOnNext(s -> {
try {
latch.await();
} catch (InterruptedException e) {
}
}).publishOn(fromExecutor(executor)).subscribe(assertSubscriber);
executor.shutdownNow();
assertSubscriber.assertNoValues().assertNoError().assertNotComplete();
hookLatch.await();
Assert.assertThat(throwableInOnOperatorError.get(), CoreMatchers.instanceOf(RejectedExecutionException.class));
Assert.assertSame(dataInOnOperatorError.get(), 0);
} finally {
Hooks.resetOnOperatorError();
}
}
use of reactor.test.subscriber.AssertSubscriber in project reactor-core by reactor.
the class FluxFlatMapTest method singleSubscriberOnly.
@Test
public void singleSubscriberOnly() {
AssertSubscriber<Integer> ts = AssertSubscriber.create();
AtomicInteger emission = new AtomicInteger();
Flux<Integer> source = Flux.range(1, 2).doOnNext(v -> emission.getAndIncrement());
EmitterProcessor<Integer> source1 = EmitterProcessor.create();
EmitterProcessor<Integer> source2 = EmitterProcessor.create();
source.flatMap(v -> v == 1 ? source1 : source2, 1, 32).subscribe(ts);
Assert.assertEquals(1, emission.get());
ts.assertNoValues().assertNoError().assertNotComplete();
Assert.assertTrue("source1 no subscribers?", source1.downstreamCount() != 0);
Assert.assertFalse("source2 has subscribers?", source2.downstreamCount() != 0);
source1.onNext(1);
source2.onNext(10);
source1.onComplete();
source2.onNext(2);
source2.onComplete();
ts.assertValues(1, 10, 2).assertNoError().assertComplete();
}
use of reactor.test.subscriber.AssertSubscriber in project reactor-core by reactor.
the class FluxFlatMapTest method flatMapUnbounded.
@Test
public void flatMapUnbounded() {
AssertSubscriber<Integer> ts = AssertSubscriber.create();
AtomicInteger emission = new AtomicInteger();
Flux<Integer> source = Flux.range(1, 1000).doOnNext(v -> emission.getAndIncrement());
EmitterProcessor<Integer> source1 = EmitterProcessor.create();
EmitterProcessor<Integer> source2 = EmitterProcessor.create();
source.flatMap(v -> v == 1 ? source1 : source2, Integer.MAX_VALUE, 32).subscribe(ts);
Assert.assertEquals(1000, emission.get());
ts.assertNoValues().assertNoError().assertNotComplete();
Assert.assertTrue("source1 no subscribers?", source1.downstreamCount() != 0);
Assert.assertTrue("source2 no subscribers?", source2.downstreamCount() != 0);
source1.onNext(1);
source1.onComplete();
source2.onNext(2);
source2.onComplete();
ts.assertValueCount(1000).assertNoError().assertComplete();
}
use of reactor.test.subscriber.AssertSubscriber in project reactor-core by reactor.
the class FluxGenerateTest method stateConsumerCalled.
@Test
public void stateConsumerCalled() {
AssertSubscriber<Integer> ts = AssertSubscriber.create();
AtomicInteger stateConsumer = new AtomicInteger();
Flux.<Integer, Integer>generate(() -> 1, (s, o) -> {
o.complete();
return s;
}, stateConsumer::set).subscribe(ts);
ts.assertNoValues().assertComplete().assertNoError();
Assert.assertEquals(1, stateConsumer.get());
}
use of reactor.test.subscriber.AssertSubscriber in project reactor-core by reactor.
the class FluxGroupByTest method twoGroupsConsumeWithSubscribePrefetchSmaller.
@Test
public void twoGroupsConsumeWithSubscribePrefetchSmaller() {
ForkJoinPool forkJoinPool = new ForkJoinPool();
AssertSubscriber<Integer> ts1 = AssertSubscriber.create();
AssertSubscriber<Integer> ts2 = AssertSubscriber.create();
AssertSubscriber<Integer> ts3 = AssertSubscriber.create();
ts3.onSubscribe(Operators.emptySubscription());
Flux.range(0, 1_000_000).groupBy(v -> v & 1).subscribe(new CoreSubscriber<GroupedFlux<Integer, Integer>>() {
@Override
public void onSubscribe(Subscription s) {
s.request(Long.MAX_VALUE);
}
@Override
public void onNext(GroupedFlux<Integer, Integer> t) {
if (t.key() == 0) {
t.publishOn(Schedulers.fromExecutorService(forkJoinPool), 32).subscribe(ts1);
} else {
t.publishOn(Schedulers.fromExecutorService(forkJoinPool), 32).subscribe(ts2);
}
}
@Override
public void onError(Throwable t) {
ts3.onError(t);
}
@Override
public void onComplete() {
ts3.onComplete();
}
});
if (!ts1.await(Duration.ofSeconds(5)).isTerminated()) {
Assert.fail("main subscriber timed out");
}
if (!ts2.await(Duration.ofSeconds(5)).isTerminated()) {
Assert.fail("group 0 subscriber timed out");
}
if (!ts3.await(Duration.ofSeconds(5)).isTerminated()) {
Assert.fail("group 1 subscriber timed out");
}
ts1.assertValueCount(500_000).assertNoError().assertComplete();
ts2.assertValueCount(500_000).assertNoError().assertComplete();
ts3.assertNoValues().assertNoError().assertComplete();
}
Aggregations