use of reactor.core.CoreSubscriber in project reactor-core by reactor.
the class FluxGroupByTest method twoGroupsConsumeWithSubscribe.
@Test
public void twoGroupsConsumeWithSubscribe() {
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)).subscribe(ts1);
} else {
t.publishOn(Schedulers.fromExecutorService(forkJoinPool)).subscribe(ts2);
}
}
@Override
public void onError(Throwable t) {
ts3.onError(t);
}
@Override
public void onComplete() {
ts3.onComplete();
}
});
ts1.await(Duration.ofSeconds(5));
ts2.await(Duration.ofSeconds(5));
ts3.await(Duration.ofSeconds(5));
ts1.assertValueCount(500_000).assertNoError().assertComplete();
ts2.assertValueCount(500_000).assertNoError().assertComplete();
ts3.assertNoValues().assertNoError().assertComplete();
}
use of reactor.core.CoreSubscriber in project reactor-core by reactor.
the class FluxGroupByTest method twoGroupsConsumeWithSubscribeHide.
@Test
public void twoGroupsConsumeWithSubscribeHide() {
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.hide().publishOn(Schedulers.fromExecutorService(forkJoinPool)).subscribe(ts1);
} else {
t.hide().publishOn(Schedulers.fromExecutorService(forkJoinPool)).subscribe(ts2);
}
}
@Override
public void onError(Throwable t) {
ts3.onError(t);
}
@Override
public void onComplete() {
ts3.onComplete();
}
});
ts1.await(Duration.ofSeconds(5));
ts2.await(Duration.ofSeconds(5));
ts3.await(Duration.ofSeconds(5));
ts1.assertValueCount(500_000).assertNoError().assertComplete();
ts2.assertValueCount(500_000).assertNoError().assertComplete();
ts3.assertNoValues().assertNoError().assertComplete();
}
use of reactor.core.CoreSubscriber in project reactor-core by reactor.
the class ParallelRunOn method subscribe.
@Override
@SuppressWarnings("unchecked")
public void subscribe(CoreSubscriber<? super T>[] subscribers) {
if (!validate(subscribers)) {
return;
}
int n = subscribers.length;
CoreSubscriber<T>[] parents = new CoreSubscriber[n];
boolean conditional = subscribers[0] instanceof Fuseable.ConditionalSubscriber;
for (int i = 0; i < n; i++) {
Worker w = scheduler.createWorker();
if (conditional) {
parents[i] = new FluxPublishOn.PublishOnConditionalSubscriber<>((Fuseable.ConditionalSubscriber<T>) subscribers[i], scheduler, w, true, prefetch, prefetch, queueSupplier);
} else {
parents[i] = new FluxPublishOn.PublishOnSubscriber<>(subscribers[i], scheduler, w, true, prefetch, prefetch, queueSupplier);
}
}
source.subscribe(parents);
}
use of reactor.core.CoreSubscriber in project reactor-core by reactor.
the class FluxGroupByTest method twoGroupsFullAsync.
@Test
@Ignore("temporarily disabled, see gh-1028")
public void twoGroupsFullAsync() {
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).publishOn(Schedulers.fromExecutorService(forkJoinPool), 512).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)).subscribe(ts1);
} else {
t.publishOn(Schedulers.fromExecutorService(forkJoinPool)).subscribe(ts2);
}
}
@Override
public void onError(Throwable t) {
ts3.onError(t);
}
@Override
public void onComplete() {
ts3.onComplete();
}
});
ts1.await(Duration.ofSeconds(5));
ts2.await(Duration.ofSeconds(5));
ts3.await(Duration.ofSeconds(5));
ts1.assertValueCount(500_000).assertNoError().assertComplete();
ts2.assertValueCount(500_000).assertNoError().assertComplete();
ts3.assertNoValues().assertNoError().assertComplete();
}
use of reactor.core.CoreSubscriber in project reactor-core by reactor.
the class DefaultTestPublisherTests method misbehavingAllowsMultipleTerminations.
@Test
public void misbehavingAllowsMultipleTerminations() {
TestPublisher<String> publisher = TestPublisher.createNoncompliant(Violation.CLEANUP_ON_TERMINATE);
AtomicLong count = new AtomicLong();
Subscriber<String> subscriber = new CoreSubscriber<String>() {
@Override
public void onSubscribe(Subscription s) {
s.request(Long.MAX_VALUE);
s.cancel();
}
@Override
public void onNext(String s) {
}
@Override
public void onError(Throwable t) {
count.incrementAndGet();
}
@Override
public void onComplete() {
count.incrementAndGet();
}
};
publisher.subscribe(subscriber);
publisher.error(new IllegalStateException("boom")).complete();
publisher.emit("A", "B", "C");
assertThat(count.get()).isEqualTo(3);
publisher.assertCancelled();
}
Aggregations