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());
}
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);
}
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);
}
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();
}
Aggregations