@Test public void noOnNextTimerFuseable() { Mono<Integer> source = Mono.just(123); new MonoMetricsFuseable<>(source, registry) .block(); Timer nextMeter = registry .find(METER_ON_NEXT_DELAY) .timer(); assertThat(nextMeter).isNull(); }
@Test public void requestTrackingHasMeterForNamedSequenceFuseable() { Flux<Integer> source = Flux.range(1, 10) .name("foo"); new FluxMetricsFuseable<>(source, registry) .blockLast(); DistributionSummary meter = registry.find(METER_REQUESTED) .summary(); assertThat(meter).as("global find").isNotNull(); meter = registry.find(METER_REQUESTED) .tag(TAG_SEQUENCE_NAME, "foo") .summary(); assertThat(meter).as("tagged find").isNotNull(); }
@Test public void malformedOnComplete() { TestPublisher<Integer> testPublisher = TestPublisher.createNoncompliant(CLEANUP_ON_TERMINATE); Mono<Integer> source = testPublisher.mono().hide(); new MonoMetrics<>(source, registry) .subscribe(v -> assertThat(v).isEqualTo(1), e -> assertThat(e).hasMessage("malformedOnComplete")); testPublisher.error(new IllegalStateException("malformedOnComplete")) .complete(); Counter malformedMeter = registry .find(METER_MALFORMED) .counter(); assertThat(malformedMeter).isNotNull(); assertThat(malformedMeter.count()).isEqualTo(1); }
@Test public void noOnNextTimer() { Mono<Integer> source = Mono.just(1) .hide(); new MonoMetrics<>(source, registry) .block(); Timer nextMeter = registry .find(METER_ON_NEXT_DELAY) .timer(); assertThat(nextMeter).isNull(); }
@Test public void malformedOnComplete() { TestPublisher<Integer> testPublisher = TestPublisher.createNoncompliant(CLEANUP_ON_TERMINATE); Flux<Integer> source = testPublisher.flux().hide(); new FluxMetrics<>(source, registry) .subscribe(v -> assertThat(v).isEqualTo(1), e -> assertThat(e).hasMessage("malformedOnComplete")); testPublisher.next(1) .error(new IllegalStateException("malformedOnComplete")) .complete(); Counter malformedMeter = registry .find(METER_MALFORMED) .counter(); assertThat(malformedMeter).isNotNull(); assertThat(malformedMeter.count()).isEqualTo(1); }
@Test public void requestTrackingHasMeterForNamedSequence() { Flux<Integer> source = Flux.range(1, 10) .name("foo") .hide(); new FluxMetrics<>(source, registry) .blockLast(); DistributionSummary meter = registry.find(METER_REQUESTED) .summary(); assertThat(meter).as("global find").isNotNull(); meter = registry.find(METER_REQUESTED) .tag(TAG_SEQUENCE_NAME, "foo") .summary(); assertThat(meter).as("tagged find").isNotNull(); }
@Test public void noRequestTrackingEvenForNamedSequence() { Mono<Integer> source = Mono.just(10) .name("foo"); new MonoMetricsFuseable<>(source, registry) .block(); DistributionSummary meter = registry.find(METER_REQUESTED) .summary(); assertThat(meter).as("global find").isNull(); meter = registry.find(METER_REQUESTED) .tag(TAG_SEQUENCE_NAME, "foo") .summary(); assertThat(meter).as("tagged find").isNull(); } }
@Test public void countsSubscriptionsFuseable() { Mono<Integer> source = Mono.just(10); Mono<Integer> test = new MonoMetricsFuseable<>(source, registry); test.subscribe(); Counter meter = registry.find(METER_SUBSCRIBED) .counter(); assertThat(meter).isNotNull(); assertThat(meter.count()).as("after 1s subscribe").isEqualTo(1); test.subscribe(); test.subscribe(); assertThat(meter.count()).as("after more subscribe").isEqualTo(3); }
@Test public void noRequestTrackingEvenForNamedSequence() { Mono<Integer> source = Mono.just(10) .name("foo") .hide(); new MonoMetrics<>(source, registry) .block(); DistributionSummary meter = registry.find(METER_REQUESTED) .summary(); assertThat(meter).as("global find").isNull(); meter = registry.find(METER_REQUESTED) .tag(TAG_SEQUENCE_NAME, "foo") .summary(); assertThat(meter).as("tagged find").isNull(); }
@Test public void countsSubscriptions() { Mono<Integer> source = Mono.just(1) .hide(); Mono<Integer> test = new MonoMetrics<>(source, registry); test.subscribe(); Counter meter = registry.find(METER_SUBSCRIBED) .counter(); assertThat(meter).isNotNull(); assertThat(meter.count()).as("after 1s subscribe").isEqualTo(1); test.subscribe(); test.subscribe(); assertThat(meter.count()).as("after more subscribe").isEqualTo(3); }
@Test public void countsSubscriptionsFuseable() { Flux<Integer> source = Flux.range(1, 10); Flux<Integer> test = new FluxMetricsFuseable<>(source, registry); test.subscribe(); Counter meter = registry.find(METER_SUBSCRIBED) .counter(); assertThat(meter).isNotNull(); assertThat(meter.count()).as("after 1s subscribe").isEqualTo(1); test.subscribe(); test.subscribe(); assertThat(meter.count()).as("after more subscribe").isEqualTo(3); }
@Test public void usesTagsFuseable() { Mono<Integer> source = Mono.just(8) .tag("tag1", "A") .name("usesTags") .tag("tag2", "foo"); new MonoMetricsFuseable<>(source, registry) .block(); Timer meter = registry .find(METER_FLOW_DURATION) .tag(TAG_STATUS, TAGVALUE_ON_COMPLETE) .tag(TAG_SEQUENCE_NAME, "usesTags") .tag("tag1", "A") .tag("tag2", "foo") .timer(); assertThat(meter).isNotNull(); assertThat(meter.count()).isEqualTo(1L); }
@Test public void requestTrackingDisabledIfNotNamedFuseable() { Flux<Integer> source = Flux.range(1, 10); new FluxMetricsFuseable<>(source, registry) .blockLast(); DistributionSummary meter = registry.find(METER_REQUESTED) .summary(); if (meter != null) { //meter could be null in some tests assertThat(meter.count()).isZero(); } }
@Test public void requestTrackingDisabledIfNotNamed() { Flux<Integer> source = Flux.range(1, 10) .hide(); new FluxMetrics<>(source, registry) .blockLast(); DistributionSummary meter = registry.find(METER_REQUESTED) .summary(); if (meter != null) { //meter could be null in some tests assertThat(meter.count()).isZero(); } }
@Test public void countsSubscriptions() { Flux<Integer> source = Flux.range(1, 10) .hide(); Flux<Integer> test = new FluxMetrics<>(source, registry); test.subscribe(); Counter meter = registry.find(METER_SUBSCRIBED) .counter(); assertThat(meter).isNotNull(); assertThat(meter.count()).as("after 1s subscribe").isEqualTo(1); test.subscribe(); test.subscribe(); assertThat(meter.count()).as("after more subscribe").isEqualTo(3); }
@Test public void usesTagsFuseable() { Flux<Integer> source = Flux.range(1, 8) .tag("tag1", "A") .name("usesTags") .tag("tag2", "foo"); new FluxMetricsFuseable<>(source, registry) .blockLast(); Timer meter = registry .find(METER_ON_NEXT_DELAY) .tag(TAG_SEQUENCE_NAME, "usesTags") .tag("tag1", "A") .tag("tag2", "foo") .timer(); assertThat(meter).isNotNull(); assertThat(meter.count()).isEqualTo(8L); }
@Test public void malformedOnNext() { TestPublisher<Integer> testPublisher = TestPublisher.createNoncompliant(CLEANUP_ON_TERMINATE); Mono<Integer> source = testPublisher.mono().hide(); new MonoMetrics<>(source, registry) .subscribe(); testPublisher.complete() .next(2); Counter malformedMeter = registry .find(METER_MALFORMED) .counter(); assertThat(malformedMeter).isNotNull(); assertThat(malformedMeter.count()).isEqualTo(1); }
@Test public void usesTags() { Mono<Integer> source = Mono.just(1) .tag("tag1", "A") .name("usesTags") .tag("tag2", "foo") .hide(); new MonoMetrics<>(source, registry) .block(); Timer meter = registry .find(METER_FLOW_DURATION) .tag(TAG_STATUS, TAGVALUE_ON_COMPLETE) .tag(TAG_SEQUENCE_NAME, "usesTags") .tag("tag1", "A") .tag("tag2", "foo") .timer(); assertThat(meter).isNotNull(); assertThat(meter.count()).isEqualTo(1L); }
@Test public void malformedOnNext() { TestPublisher<Integer> testPublisher = TestPublisher.createNoncompliant(CLEANUP_ON_TERMINATE); Flux<Integer> source = testPublisher.flux().hide(); new FluxMetrics<>(source, registry) .subscribe(); testPublisher.next(1) .complete() .next(2); Counter malformedMeter = registry .find(METER_MALFORMED) .counter(); assertThat(malformedMeter).isNotNull(); assertThat(malformedMeter.count()).isEqualTo(1); }
@Test public void usesTags() { Flux<Integer> source = Flux.range(1, 8) .tag("tag1", "A") .name("usesTags") .tag("tag2", "foo") .hide(); new FluxMetrics<>(source, registry) .blockLast(); Timer meter = registry .find(METER_ON_NEXT_DELAY) .tag(TAG_SEQUENCE_NAME, "usesTags") .tag("tag1", "A") .tag("tag2", "foo") .timer(); assertThat(meter).isNotNull(); assertThat(meter.count()).isEqualTo(8L); }