Search in sources :

Example 16 with Disposable

use of reactor.core.Disposable in project reactor-core by reactor.

the class FluxPublishTest method disconnect.

@Test
public void disconnect() {
    AssertSubscriber<Integer> ts = AssertSubscriber.create();
    Sinks.Many<Integer> e = Sinks.many().multicast().onBackpressureBuffer();
    ConnectableFlux<Integer> p = e.asFlux().publish();
    p.subscribe(ts);
    Disposable r = p.connect();
    e.emitNext(1, FAIL_FAST);
    e.emitNext(2, FAIL_FAST);
    r.dispose();
    ts.assertValues(1, 2).assertError(CancellationException.class).assertNotComplete();
    assertThat(e.currentSubscriberCount()).as("still connected").isZero();
}
Also used : AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Disposable(reactor.core.Disposable) CancellationException(java.util.concurrent.CancellationException) FluxOperatorTest(reactor.test.publisher.FluxOperatorTest) Test(org.junit.jupiter.api.Test)

Example 17 with Disposable

use of reactor.core.Disposable in project reactor-core by reactor.

the class FluxPublishTest method disconnectBackpressured.

@Test
public void disconnectBackpressured() {
    AssertSubscriber<Integer> ts = AssertSubscriber.create(0);
    Sinks.Many<Integer> e = Sinks.many().multicast().onBackpressureBuffer();
    ConnectableFlux<Integer> p = e.asFlux().publish();
    p.subscribe(ts);
    Disposable r = p.connect();
    r.dispose();
    ts.assertNoValues().assertError(CancellationException.class).assertNotComplete();
    assertThat(e.currentSubscriberCount()).as("still connected").isZero();
}
Also used : AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Disposable(reactor.core.Disposable) CancellationException(java.util.concurrent.CancellationException) FluxOperatorTest(reactor.test.publisher.FluxOperatorTest) Test(org.junit.jupiter.api.Test)

Example 18 with Disposable

use of reactor.core.Disposable in project reactor-core by reactor.

the class FluxRefCountGraceTest method subscribersComeAndGoBelowThreshold.

@Test
public void subscribersComeAndGoBelowThreshold() {
    Flux<Integer> p = Flux.range(1, 5).publish().refCount(2, Duration.ofMillis(500));
    Disposable r = p.subscribe();
    r.dispose();
    p.subscribe().dispose();
    p.subscribe().dispose();
    p.subscribe().dispose();
    p.subscribe().dispose();
    AssertSubscriber<Integer> ts1 = AssertSubscriber.create();
    p.subscribe(ts1);
    ts1.assertValueCount(0);
    AssertSubscriber<Integer> ts2 = AssertSubscriber.create();
    p.subscribe(ts2);
    ts1.assertValues(1, 2, 3, 4, 5);
    ts2.assertValues(1, 2, 3, 4, 5);
}
Also used : AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Disposable(reactor.core.Disposable) Test(org.junit.jupiter.api.Test)

Example 19 with Disposable

use of reactor.core.Disposable in project reactor-core by reactor.

the class FluxPublishMulticastTest method scenarios_errorFromUpstreamFailure.

@Override
protected List<Scenario<String, String>> scenarios_errorFromUpstreamFailure() {
    return Arrays.asList(scenario(f -> f.publish(p -> p)), scenario(f -> f.publish(p -> {
        // TODO double check this Sink usage
        Sinks.Many<String> sink = Sinks.unsafe().many().unicast().onBackpressureBuffer();
        p.subscribe(v -> sink.emitNext(v, FAIL_FAST), e -> sink.emitError(e, FAIL_FAST), () -> sink.emitComplete(FAIL_FAST));
        return sink.asFlux();
    })).fusionMode(Fuseable.ASYNC), scenario(f -> f.publish(p -> p)).shouldHitDropNextHookAfterTerminate(false), scenario(f -> Flux.never().publish(p -> {
        Disposable d = p.subscribe();
        Disposable d2 = p.subscribe();
        d.dispose();
        d2.dispose();
        return f;
    })).shouldHitDropErrorHookAfterTerminate(false).shouldHitDropNextHookAfterTerminate(false));
}
Also used : Arrays(java.util.Arrays) Flux.range(reactor.core.publisher.Flux.range) Disposable(reactor.core.Disposable) StepVerifier(reactor.test.StepVerifier) Scannable(reactor.core.Scannable) Context(reactor.util.context.Context) Assertions.assertThat(org.assertj.core.api.Assertions.assertThat) Tuples(reactor.util.function.Tuples) Tuple2(reactor.util.function.Tuple2) FluxOperatorTest(reactor.test.publisher.FluxOperatorTest) Function(java.util.function.Function) Fail.fail(org.assertj.core.api.Fail.fail) Queues(reactor.util.concurrent.Queues) TimeUnit(java.util.concurrent.TimeUnit) Test(org.junit.jupiter.api.Test) CountDownLatch(java.util.concurrent.CountDownLatch) List(java.util.List) CoreSubscriber(reactor.core.CoreSubscriber) Fuseable(reactor.core.Fuseable) FAIL_FAST(reactor.core.publisher.Sinks.EmitFailureHandler.FAIL_FAST) Subscription(org.reactivestreams.Subscription) AssertSubscriber(reactor.test.subscriber.AssertSubscriber) Flux.zip(reactor.core.publisher.Flux.zip) Assertions.assertThatExceptionOfType(org.assertj.core.api.Assertions.assertThatExceptionOfType) Disposable(reactor.core.Disposable)

Example 20 with Disposable

use of reactor.core.Disposable in project reactor-core by reactor.

the class FluxTests method consistentMultithreadingWithPartition.

@Test
public void consistentMultithreadingWithPartition() throws InterruptedException {
    Scheduler supplier1 = afterTest.autoDispose(Schedulers.newParallel("groupByPool", 2));
    Scheduler supplier2 = afterTest.autoDispose(Schedulers.newParallel("partitionPool", 5));
    CountDownLatch latch = new CountDownLatch(10);
    /*Disposable c = */
    Flux.range(1, 10).groupBy(n -> n % 2 == 0).flatMap(stream -> stream.publishOn(supplier1).log("groupBy-" + stream.key())).parallel(5).runOn(supplier2).sequential().publishOn(asyncGroup).log("join").subscribe(t -> {
        latch.countDown();
    });
    latch.await(30, TimeUnit.SECONDS);
    assertThat(latch.getCount()).as("dispatch count").isEqualTo(0L);
}
Also used : Sinks(reactor.core.publisher.Sinks) Arrays(java.util.Arrays) StepVerifier(reactor.test.StepVerifier) TestLogger(reactor.test.util.TestLogger) Assertions.assertThat(org.assertj.core.api.Assertions.assertThat) Tuples(reactor.util.function.Tuples) TimeoutException(java.util.concurrent.TimeoutException) Hooks(reactor.core.publisher.Hooks) Timer(java.util.Timer) Disabled(org.junit.jupiter.api.Disabled) CoreSubscriber(reactor.core.CoreSubscriber) Loggers(reactor.util.Loggers) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Duration(java.time.Duration) Map(java.util.Map) Logger(reactor.util.Logger) Tag(org.junit.jupiter.api.Tag) AutoDisposingExtension(reactor.test.AutoDisposingExtension) IdentityHashMap(java.util.IdentityHashMap) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) Set(java.util.Set) Signal(reactor.core.publisher.Signal) Instant(java.time.Instant) Collectors(java.util.stream.Collectors) LockSupport(java.util.concurrent.locks.LockSupport) Test(org.junit.jupiter.api.Test) CountDownLatch(java.util.concurrent.CountDownLatch) List(java.util.List) Fuseable(reactor.core.Fuseable) Assertions.fail(org.assertj.core.api.Assertions.fail) LoggerUtils(reactor.test.util.LoggerUtils) Exceptions(reactor.core.Exceptions) IntStream(java.util.stream.IntStream) Disposable(reactor.core.Disposable) Scannable(reactor.core.Scannable) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) Tuple2(reactor.util.function.Tuple2) Callable(java.util.concurrent.Callable) Scheduler(reactor.core.scheduler.Scheduler) AtomicReference(java.util.concurrent.atomic.AtomicReference) Function(java.util.function.Function) ArrayList(java.util.ArrayList) Level(java.util.logging.Level) Queues(reactor.util.concurrent.Queues) RegisterExtension(org.junit.jupiter.api.extension.RegisterExtension) ThreadLocalRandom(java.util.concurrent.ThreadLocalRandom) Assertions.assertThatExceptionOfType(org.assertj.core.api.Assertions.assertThatExceptionOfType) Schedulers(reactor.core.scheduler.Schedulers) Operators(reactor.core.publisher.Operators) Semaphore(java.util.concurrent.Semaphore) Publisher(org.reactivestreams.Publisher) IOException(java.io.IOException) Mono(reactor.core.publisher.Mono) TimeUnit(java.util.concurrent.TimeUnit) Consumer(java.util.function.Consumer) Flux(reactor.core.publisher.Flux) FAIL_FAST(reactor.core.publisher.Sinks.EmitFailureHandler.FAIL_FAST) Phaser(java.util.concurrent.Phaser) Subscription(org.reactivestreams.Subscription) AssertSubscriber(reactor.test.subscriber.AssertSubscriber) Comparator(java.util.Comparator) Collections(java.util.Collections) Timeout(org.junit.jupiter.api.Timeout) Scheduler(reactor.core.scheduler.Scheduler) CountDownLatch(java.util.concurrent.CountDownLatch) Test(org.junit.jupiter.api.Test)

Aggregations

Disposable (reactor.core.Disposable)120 Test (org.junit.jupiter.api.Test)101 CountDownLatch (java.util.concurrent.CountDownLatch)33 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)32 StepVerifier (reactor.test.StepVerifier)29 AtomicBoolean (java.util.concurrent.atomic.AtomicBoolean)25 AtomicReference (java.util.concurrent.atomic.AtomicReference)18 Duration (java.time.Duration)15 List (java.util.List)15 LinkedBlockingQueue (java.util.concurrent.LinkedBlockingQueue)15 Assertions.assertThat (org.assertj.core.api.Assertions.assertThat)15 Subscription (org.reactivestreams.Subscription)15 TimeUnit (java.util.concurrent.TimeUnit)14 Timeout (org.junit.jupiter.api.Timeout)13 CoreSubscriber (reactor.core.CoreSubscriber)12 ArrayList (java.util.ArrayList)11 Arrays (java.util.Arrays)11 Disabled (org.junit.jupiter.api.Disabled)11 Scannable (reactor.core.Scannable)11 Fuseable (reactor.core.Fuseable)10