opentelemetry-java/micrometer1-shim/src/test/java/io/opentelemetry/micrometer1shim/FunctionCounterTest.java

93 lines
3.7 KiB
Java

/*
* Copyright The OpenTelemetry Authors
* SPDX-License-Identifier: Apache-2.0
*/
package io.opentelemetry.micrometer1shim;
import static io.opentelemetry.micrometer1shim.OpenTelemetryMeterRegistryBuilder.INSTRUMENTATION_NAME;
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat;
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.attributeEntry;
import io.micrometer.core.instrument.FunctionCounter;
import io.micrometer.core.instrument.Metrics;
import io.opentelemetry.internal.testing.slf4j.SuppressLogger;
import io.opentelemetry.sdk.common.InstrumentationScopeInfo;
import io.opentelemetry.sdk.metrics.internal.state.MetricStorageRegistry;
import java.util.concurrent.atomic.AtomicLong;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
class FunctionCounterTest {
@RegisterExtension
static final MicrometerTestingExtension testing = new MicrometerTestingExtension();
final AtomicLong num = new AtomicLong(12);
final AtomicLong anotherNum = new AtomicLong(13);
@Test
void testFunctionCounter() {
FunctionCounter counter =
FunctionCounter.builder("testFunctionCounter", num, AtomicLong::get)
.description("This is a test function counter")
.tags("tag", "value")
.baseUnit("items")
.register(Metrics.globalRegistry);
assertThat(testing.collectAllMetrics())
.satisfiesExactlyInAnyOrder(
metric ->
assertThat(metric)
.hasName("testFunctionCounter")
.hasInstrumentationScope(InstrumentationScopeInfo.create(INSTRUMENTATION_NAME))
.hasDescription("This is a test function counter")
.hasUnit("items")
.hasDoubleSumSatisfying(
sum ->
sum.hasPointsSatisfying(
point ->
point
.hasValue(12)
.hasAttributes(attributeEntry("tag", "value")))));
Metrics.globalRegistry.remove(counter);
assertThat(testing.collectAllMetrics()).isEmpty();
}
@Test
@SuppressLogger(MetricStorageRegistry.class)
void functionCountersWithSameNameAndDifferentTags() {
FunctionCounter.builder("testFunctionCounterWithTags", num, AtomicLong::get)
.description("First description")
.tags("tag", "1")
.baseUnit("items")
.register(Metrics.globalRegistry);
FunctionCounter.builder("testFunctionCounterWithTags", anotherNum, AtomicLong::get)
.description("ignored")
.tags("tag", "2")
.baseUnit("items")
.register(Metrics.globalRegistry);
assertThat(testing.collectAllMetrics())
.satisfiesExactlyInAnyOrder(
metric ->
assertThat(metric)
.hasName("testFunctionCounterWithTags")
.hasDescription("First description")
.hasUnit("items")
.hasDoubleSumSatisfying(
sum ->
sum.isMonotonic()
.hasPointsSatisfying(
point ->
point
.hasValue(12)
.hasAttributes(attributeEntry("tag", "1")),
point ->
point
.hasValue(13)
.hasAttributes(attributeEntry("tag", "2")))));
}
}