Search in sources :

Example 6 with CoreSubscriber

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();
}
Also used : Arrays(java.util.Arrays) StepVerifier(reactor.test.StepVerifier) Scannable(reactor.core.Scannable) Assertions.assertThat(org.assertj.core.api.Assertions.assertThat) Test(org.junit.Test) FluxOperatorTest(reactor.test.publisher.FluxOperatorTest) Queues(reactor.util.concurrent.Queues) AtomicLong(java.util.concurrent.atomic.AtomicLong) List(java.util.List) CoreSubscriber(reactor.core.CoreSubscriber) Fuseable(reactor.core.Fuseable) Ignore(org.junit.Ignore) ForkJoinPool(java.util.concurrent.ForkJoinPool) Duration(java.time.Duration) Subscription(org.reactivestreams.Subscription) AssertSubscriber(reactor.test.subscriber.AssertSubscriber) Schedulers(reactor.core.scheduler.Schedulers) Assert(org.junit.Assert) Subscription(org.reactivestreams.Subscription) ForkJoinPool(java.util.concurrent.ForkJoinPool) Test(org.junit.Test) FluxOperatorTest(reactor.test.publisher.FluxOperatorTest)

Example 7 with CoreSubscriber

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();
}
Also used : Arrays(java.util.Arrays) StepVerifier(reactor.test.StepVerifier) Scannable(reactor.core.Scannable) Assertions.assertThat(org.assertj.core.api.Assertions.assertThat) Test(org.junit.Test) FluxOperatorTest(reactor.test.publisher.FluxOperatorTest) Queues(reactor.util.concurrent.Queues) AtomicLong(java.util.concurrent.atomic.AtomicLong) List(java.util.List) CoreSubscriber(reactor.core.CoreSubscriber) Fuseable(reactor.core.Fuseable) Ignore(org.junit.Ignore) ForkJoinPool(java.util.concurrent.ForkJoinPool) Duration(java.time.Duration) Subscription(org.reactivestreams.Subscription) AssertSubscriber(reactor.test.subscriber.AssertSubscriber) Schedulers(reactor.core.scheduler.Schedulers) Assert(org.junit.Assert) Subscription(org.reactivestreams.Subscription) ForkJoinPool(java.util.concurrent.ForkJoinPool) Test(org.junit.Test) FluxOperatorTest(reactor.test.publisher.FluxOperatorTest)

Example 8 with CoreSubscriber

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);
}
Also used : CoreSubscriber(reactor.core.CoreSubscriber) Worker(reactor.core.scheduler.Scheduler.Worker)

Example 9 with CoreSubscriber

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();
}
Also used : Arrays(java.util.Arrays) StepVerifier(reactor.test.StepVerifier) Scannable(reactor.core.Scannable) Assertions.assertThat(org.assertj.core.api.Assertions.assertThat) Test(org.junit.Test) FluxOperatorTest(reactor.test.publisher.FluxOperatorTest) Queues(reactor.util.concurrent.Queues) AtomicLong(java.util.concurrent.atomic.AtomicLong) List(java.util.List) CoreSubscriber(reactor.core.CoreSubscriber) Fuseable(reactor.core.Fuseable) Ignore(org.junit.Ignore) ForkJoinPool(java.util.concurrent.ForkJoinPool) Duration(java.time.Duration) Subscription(org.reactivestreams.Subscription) AssertSubscriber(reactor.test.subscriber.AssertSubscriber) Schedulers(reactor.core.scheduler.Schedulers) Assert(org.junit.Assert) Subscription(org.reactivestreams.Subscription) ForkJoinPool(java.util.concurrent.ForkJoinPool) Ignore(org.junit.Ignore) Test(org.junit.Test) FluxOperatorTest(reactor.test.publisher.FluxOperatorTest)

Example 10 with CoreSubscriber

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();
}
Also used : AtomicLong(java.util.concurrent.atomic.AtomicLong) CoreSubscriber(reactor.core.CoreSubscriber) Subscription(org.reactivestreams.Subscription) Test(org.junit.Test)

Aggregations

CoreSubscriber (reactor.core.CoreSubscriber)10 Test (org.junit.Test)9 Subscription (org.reactivestreams.Subscription)9 AtomicLong (java.util.concurrent.atomic.AtomicLong)8 Assertions.assertThat (org.assertj.core.api.Assertions.assertThat)7 Scannable (reactor.core.Scannable)7 Queues (reactor.util.concurrent.Queues)7 Duration (java.time.Duration)6 Arrays (java.util.Arrays)6 List (java.util.List)6 ForkJoinPool (java.util.concurrent.ForkJoinPool)6 Assert (org.junit.Assert)6 Ignore (org.junit.Ignore)6 Fuseable (reactor.core.Fuseable)6 Schedulers (reactor.core.scheduler.Schedulers)6 StepVerifier (reactor.test.StepVerifier)6 FluxOperatorTest (reactor.test.publisher.FluxOperatorTest)6 AssertSubscriber (reactor.test.subscriber.AssertSubscriber)6 Worker (reactor.core.scheduler.Scheduler.Worker)1