Search in sources :

Example 1 with MetricsFuseableSubscriber

use of reactor.core.publisher.MonoMetricsFuseable.MetricsFuseableSubscriber in project reactor-core by reactor.

the class MonoMetricsFuseableTest method completeEmptySyncFusion.

@Test
public void completeEmptySyncFusion() {
    MonoMetricsFuseable.MetricsFuseableSubscriber<Object> subscriber = new MetricsFuseableSubscriber<>(AssertSubscriber.create(), registry, clock, REACTOR_DEFAULT_NAME, DEFAULT_TAGS_MONO);
    // trigger the fusion and polling
    subscriber.onSubscribe(new FluxPeekFuseableTest.AssertQueueSubscription<>());
    assertThat(subscriber.requestFusion(Fuseable.SYNC)).as("SYNC requested").isEqualTo(Fuseable.SYNC);
    assertThat(subscriber.poll()).as("poll empty").isNull();
    Timer stcCompleteCounter = registry.find(REACTOR_DEFAULT_NAME + METER_FLOW_DURATION).tags(Tags.of(TAG_ON_COMPLETE)).timer();
    Timer stcCompleteEmptyCounter = registry.find(REACTOR_DEFAULT_NAME + METER_FLOW_DURATION).tags(Tags.of(TAG_ON_COMPLETE_EMPTY)).timer();
    assertThat(stcCompleteCounter).as("complete with element").isNull();
    assertThat(stcCompleteEmptyCounter).as("complete without any element").isNotNull().satisfies(timer -> assertThat(timer.count()).as("timer count").isOne());
}
Also used : Timer(io.micrometer.core.instrument.Timer) MetricsFuseableSubscriber(reactor.core.publisher.MonoMetricsFuseable.MetricsFuseableSubscriber) Test(org.junit.jupiter.api.Test)

Example 2 with MetricsFuseableSubscriber

use of reactor.core.publisher.MonoMetricsFuseable.MetricsFuseableSubscriber in project reactor-core by reactor.

the class MonoMetricsFuseableTest method queuePollError.

@Test
public void queuePollError() {
    AssertSubscriber<Integer> testSubscriber = AssertSubscriber.create();
    MetricsFuseableSubscriber<Integer> fuseableSubscriber = new MetricsFuseableSubscriber<>(testSubscriber, registry, clock, "foo", Tags.empty());
    FluxPeekFuseableTest.AssertQueueSubscription<Integer> testQueue = new FluxPeekFuseableTest.AssertQueueSubscription<>();
    testQueue.setCompleteWithError(true);
    testQueue.offer(1);
    fuseableSubscriber.onSubscribe(testQueue);
    fuseableSubscriber.requestFusion(Fuseable.SYNC);
    clock.add(Duration.ofMillis(200));
    Integer val1 = fuseableSubscriber.poll();
    assertThat(val1).isEqualTo(1);
    clock.add(Duration.ofMillis(123));
    assertThatIllegalStateException().isThrownBy(fuseableSubscriber::poll).withMessage("AssertQueueSubscriber poll error");
    // test meters
    Timer terminationTimer = registry.find("foo" + METER_FLOW_DURATION).tags(Tags.of(TAG_ON_ERROR)).timer();
    assertThat(terminationTimer).isNotNull();
    assertThat(terminationTimer.max(TimeUnit.MILLISECONDS)).as("terminate max delay").isEqualTo(323);
}
Also used : Timer(io.micrometer.core.instrument.Timer) MetricsFuseableSubscriber(reactor.core.publisher.MonoMetricsFuseable.MetricsFuseableSubscriber) Test(org.junit.jupiter.api.Test)

Example 3 with MetricsFuseableSubscriber

use of reactor.core.publisher.MonoMetricsFuseable.MetricsFuseableSubscriber in project reactor-core by reactor.

the class MonoMetricsFuseableTest method queuePollSyncTracksOnComplete.

@Test
public void queuePollSyncTracksOnComplete() {
    AssertSubscriber<Integer> testSubscriber = AssertSubscriber.create();
    MetricsFuseableSubscriber<Integer> fuseableSubscriber = new MetricsFuseableSubscriber<>(testSubscriber, registry, clock, "foo", Tags.empty());
    Fuseable.QueueSubscription<Integer> testQueue = new FluxPeekFuseableTest.AssertQueueSubscription<>();
    testQueue.offer(1);
    fuseableSubscriber.onSubscribe(testQueue);
    fuseableSubscriber.requestFusion(Fuseable.SYNC);
    clock.add(Duration.ofMillis(200));
    Integer val1 = fuseableSubscriber.poll();
    clock.add(Duration.ofMillis(123));
    Integer val2 = fuseableSubscriber.poll();
    assertThat(val1).isEqualTo(1);
    assertThat(val2).isNull();
    // test meters
    Timer terminationTimer = registry.find("foo" + METER_FLOW_DURATION).tags(Tags.of(TAG_ON_COMPLETE)).timer();
    assertThat(terminationTimer).isNotNull();
    assertThat(terminationTimer.max(TimeUnit.MILLISECONDS)).as("terminate max delay").isEqualTo(200);
}
Also used : Timer(io.micrometer.core.instrument.Timer) MetricsFuseableSubscriber(reactor.core.publisher.MonoMetricsFuseable.MetricsFuseableSubscriber) Fuseable(reactor.core.Fuseable) Test(org.junit.jupiter.api.Test)

Example 4 with MetricsFuseableSubscriber

use of reactor.core.publisher.MonoMetricsFuseable.MetricsFuseableSubscriber in project reactor-core by reactor.

the class MonoMetricsFuseableTest method queuePollDoesntTrackOnNext.

@Test
public void queuePollDoesntTrackOnNext() {
    AssertSubscriber<Integer> testSubscriber = AssertSubscriber.create();
    MetricsFuseableSubscriber<Integer> fuseableSubscriber = new MetricsFuseableSubscriber<>(testSubscriber, registry, clock, "foo", Tags.empty());
    Fuseable.QueueSubscription<Integer> testQueue = new FluxPeekFuseableTest.AssertQueueSubscription<>();
    testQueue.offer(1);
    fuseableSubscriber.onSubscribe(testQueue);
    clock.add(Duration.ofMillis(200));
    Integer val1 = fuseableSubscriber.poll();
    Integer val2 = fuseableSubscriber.poll();
    assertThat(val1).isEqualTo(1);
    assertThat(val2).isNull();
    // test meters
    Timer nextTimer = registry.find("foo" + METER_ON_NEXT_DELAY).timer();
    assertThat(nextTimer).as("no onNext delay meter for Mono").isNull();
}
Also used : Timer(io.micrometer.core.instrument.Timer) MetricsFuseableSubscriber(reactor.core.publisher.MonoMetricsFuseable.MetricsFuseableSubscriber) Fuseable(reactor.core.Fuseable) Test(org.junit.jupiter.api.Test)

Aggregations

Timer (io.micrometer.core.instrument.Timer)4 Test (org.junit.jupiter.api.Test)4 MetricsFuseableSubscriber (reactor.core.publisher.MonoMetricsFuseable.MetricsFuseableSubscriber)4 Fuseable (reactor.core.Fuseable)2