From 39724a041e2da1eaf34ecbe42a580e4c9aa69cc2 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 19 Oct 2026 23:31:20 +0000 Subject: [PATCH 01/14] Initial plan From 7dcec3de3869ec2940cad4d7c25da659f09dd4b9 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 19 Oct 2026 23:46:42 +0000 Subject: [PATCH 02/14] Add composable exact histogram point assertions and adopt across tests Co-authored-by: trask <218610+trask@users.noreply.github.com> --- .../apachedubbo/v2_7/AbstractDubboTest.java | 177 ++- .../v2_7/AbstractDubboTraceChainTest.java | 243 ++-- .../avaje/jex/v3_0/JexTest.java | 8 +- .../awssdk/v1_11/SqsMetricsAssertions.java | 73 +- .../v2_2/internal/Aws2BedrockRuntimeTest.java | 721 +++++----- .../v2_2/AbstractAws2BedrockRuntimeTest.java | 1261 ++++++++--------- .../awssdk/v2_2/SqsMetricsAssertions.java | 73 +- .../CamelMessagingMetricsAssertions.java | 86 +- .../cassandra/v4_0/CassandraTest.java | 26 +- .../cassandra/v4_4/CassandraTest.java | 26 +- .../clientv1/v0_5/ClickHouseClientV1Test.java | 8 +- .../clientv2/v0_8/ClickHouseClientV2Test.java | 8 +- .../v4_0/DropwizardMetricsTest.java | 12 +- .../failsafe/v3_0/FailsafeTelemetryTest.java | 44 +- .../grpc/v1_6/AbstractGrpcStreamingTest.java | 92 +- .../grpc/v1_6/AbstractGrpcTest.java | 187 ++- .../iceberg/v1_8/AbstractIcebergTest.java | 28 +- .../javalin/AbstractJavalinTest.java | 8 +- .../jdbc/datasource/JdbcTelemetryTest.java | 8 +- .../jedis/v2_0/ShardedJedisClientTest.java | 8 +- .../jedis/v3_0/ShardedJedis30ClientTest.java | 20 +- .../jedis/v4_0/Jedis40ClientTest.java | 16 +- .../v7_0/KubernetesClientTest.java | 6 +- .../v7_0/KubernetesClientVer20Test.java | 6 +- .../v5_0/LettuceReactiveClientTest.java | 4 +- .../v5_1/AbstractLettuceClientTest.java | 11 +- ...istributionSummaryHistogramGaugesTest.java | 35 +- .../v1_5/AbstractDistributionSummaryTest.java | 58 +- .../v1_5/AbstractNamingConventionTest.java | 23 +- .../v1_5/AbstractPrometheusModeTest.java | 67 +- .../AbstractTimerHistogramGaugesTest.java | 35 +- .../v1_5/AbstractTimerMillisecondsTest.java | 18 +- .../micrometer/v1_5/AbstractTimerTest.java | 56 +- .../mongo/v4_0/MongoConfiguredTargetTest.java | 12 +- .../nats/v2_17/AbstractNatsTest.java | 52 +- .../instrumentation/openai/v1_1/ChatTest.java | 357 +++-- .../openai/v1_1/AbstractChatTest.java | 529 ++++--- .../openai/v1_1/AbstractEmbeddingsTest.java | 110 +- .../v1_10/metrics/MeterTest.java | 29 +- .../v1_31/metrics/MeterTest.java | 35 +- .../v1_32/incubator/metrics/MeterTest.java | 35 +- .../v1_32/metrics/MeterTest.java | 35 +- .../v1_37/incubator/metrics/MeterTest.java | 35 +- .../v1_37/incubator/metrics/MeterTest.java | 35 +- .../v1_37/metrics/MeterTest.java | 35 +- .../v1_65/incubator/metrics/MeterTest.java | 29 +- .../pulsar/v2_8/PulsarClientTest.java | 79 +- .../client/RatpackHttpClientTest.java | 20 +- .../v4_8/RocketMqMetricsTest.java | 29 +- ...RocketMqClientSuppressReceiveSpanTest.java | 47 +- .../v5_0/AbstractRocketMqClientTest.java | 98 +- .../v5_0/RocketMqSimpleConsumerTest.java | 26 +- .../JmxRuntimeMetricsTest.java | 16 +- .../RuntimeTelemetryDefaultsTest.java | 16 +- .../internal/GarbageCollectorTest.java | 42 +- .../JfrVirtualThreadPinnedTest.java | 3 +- .../sofarpc/v5_4/AbstractSofaRpcTest.java | 278 ++-- .../v5_4/AbstractSofaRpcTraceChainTest.java | 276 ++-- .../ai/v1_0/AbstractOpenAiChatModelTest.java | 63 +- .../spring/ai/v1_0/ChatModelTest.java | 84 +- ...ageProducerSupportInstrumentationTest.java | 7 +- .../v4_1/SpringIntegrationTestHelper.java | 45 +- .../pulsar/v1_0/AbstractSpringPulsarTest.java | 21 +- ...t11SimpleMessageListenerContainerTest.java | 7 +- ...t20DirectMessageListenerContainerTest.java | 7 +- ...pringWebfluxClientInstrumentationTest.java | 20 +- .../thrift/v0_13/AbstractThriftTest.java | 83 +- .../junit/db/DbClientMetricsTestUtil.java | 16 +- .../db/DbConnectionPoolMetricsAssertions.java | 10 +- .../junit/http/AbstractHttpClientTest.java | 6 +- .../junit/http/AbstractHttpServerTest.java | 6 +- .../testing/util/MetricAssertions.java | 38 + .../testing/util/MetricAssertionsTest.java | 123 ++ 73 files changed, 3050 insertions(+), 3196 deletions(-) create mode 100644 testing-common/src/main/java/io/opentelemetry/instrumentation/testing/util/MetricAssertions.java create mode 100644 testing-common/src/test/java/io/opentelemetry/instrumentation/testing/util/MetricAssertionsTest.java diff --git a/instrumentation/apache-dubbo-2.7/testing/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/AbstractDubboTest.java b/instrumentation/apache-dubbo-2.7/testing/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/AbstractDubboTest.java index 6930f504a486..21d0b9690a3c 100644 --- a/instrumentation/apache-dubbo-2.7/testing/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/AbstractDubboTest.java +++ b/instrumentation/apache-dubbo-2.7/testing/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/AbstractDubboTest.java @@ -9,6 +9,7 @@ import static io.opentelemetry.instrumentation.testing.junit.rpc.SemconvRpcStabilityUtil.emitOldRpcSemconv; import static io.opentelemetry.instrumentation.testing.junit.rpc.SemconvRpcStabilityUtil.emitPreviewRpcSemconv; import static io.opentelemetry.instrumentation.testing.junit.service.SemconvServiceStabilityUtil.maybeStablePeerService; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.instrumentation.testing.util.TestLatestDeps.testLatestDeps; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; @@ -207,16 +208,15 @@ void testApacheDubboBase() throws ReflectiveOperationException { metric .hasName("rpc.server.duration") .hasUnit("ms") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "apache_dubbo"), - equalTo( - RPC_SERVICE, - "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.HelloService"), - equalTo(RPC_METHOD, "hello"))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "apache_dubbo"), + equalTo( + RPC_SERVICE, + "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.HelloService"), + equalTo(RPC_METHOD, "hello"))))); testing() .waitAndAssertMetrics( @@ -225,22 +225,19 @@ void testApacheDubboBase() throws ReflectiveOperationException { metric .hasName("rpc.client.duration") .hasUnit("ms") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "apache_dubbo"), - equalTo( - RPC_SERVICE, - "org.apache.dubbo.rpc.service.GenericService"), - equalTo(RPC_METHOD, "$invoke"), - equalTo(SERVER_ADDRESS, "localhost"), - satisfies( - SERVER_PORT, val -> val.isInstanceOf(Long.class)), - satisfies( - NETWORK_TYPE, - AbstractDubboTest::assertNetworkType))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "apache_dubbo"), + equalTo( + RPC_SERVICE, + "org.apache.dubbo.rpc.service.GenericService"), + equalTo(RPC_METHOD, "$invoke"), + equalTo(SERVER_ADDRESS, "localhost"), + satisfies(SERVER_PORT, val -> val.isInstanceOf(Long.class)), + satisfies( + NETWORK_TYPE, AbstractDubboTest::assertNetworkType))))); } if (emitPreviewRpcSemconv()) { @@ -251,15 +248,14 @@ void testApacheDubboBase() throws ReflectiveOperationException { metric .hasName("rpc.server.call.duration") .hasUnit("s") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "dubbo"), - equalTo( - RPC_METHOD, - "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.HelloService/hello"))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "dubbo"), + equalTo( + RPC_METHOD, + "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.HelloService/hello"))))); testing() .waitAndAssertMetrics( @@ -268,18 +264,17 @@ void testApacheDubboBase() throws ReflectiveOperationException { metric .hasName("rpc.client.call.duration") .hasUnit("s") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "dubbo"), - equalTo( - RPC_METHOD, - "org.apache.dubbo.rpc.service.GenericService/$invoke"), - equalTo(SERVER_ADDRESS, "localhost"), - satisfies( - SERVER_PORT, val -> val.isInstanceOf(Long.class)))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "dubbo"), + equalTo( + RPC_METHOD, + "org.apache.dubbo.rpc.service.GenericService/$invoke"), + equalTo(SERVER_ADDRESS, "localhost"), + satisfies( + SERVER_PORT, val -> val.isInstanceOf(Long.class)))))); } } @@ -398,16 +393,15 @@ void testApacheDubboTest() throws ReflectiveOperationException { metric .hasName("rpc.server.duration") .hasUnit("ms") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "apache_dubbo"), - equalTo( - RPC_SERVICE, - "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.HelloService"), - equalTo(RPC_METHOD, "hello"))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "apache_dubbo"), + equalTo( + RPC_SERVICE, + "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.HelloService"), + equalTo(RPC_METHOD, "hello"))))); testing() .waitAndAssertMetrics( @@ -416,22 +410,19 @@ void testApacheDubboTest() throws ReflectiveOperationException { metric .hasName("rpc.client.duration") .hasUnit("ms") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "apache_dubbo"), - equalTo( - RPC_SERVICE, - "org.apache.dubbo.rpc.service.GenericService"), - equalTo(RPC_METHOD, "$invokeAsync"), - equalTo(SERVER_ADDRESS, "localhost"), - satisfies( - SERVER_PORT, val -> val.isInstanceOf(Long.class)), - satisfies( - NETWORK_TYPE, - AbstractDubboTest::assertNetworkType))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "apache_dubbo"), + equalTo( + RPC_SERVICE, + "org.apache.dubbo.rpc.service.GenericService"), + equalTo(RPC_METHOD, "$invokeAsync"), + equalTo(SERVER_ADDRESS, "localhost"), + satisfies(SERVER_PORT, val -> val.isInstanceOf(Long.class)), + satisfies( + NETWORK_TYPE, AbstractDubboTest::assertNetworkType))))); } if (emitPreviewRpcSemconv()) { @@ -442,15 +433,14 @@ void testApacheDubboTest() throws ReflectiveOperationException { metric .hasName("rpc.server.call.duration") .hasUnit("s") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "dubbo"), - equalTo( - RPC_METHOD, - "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.HelloService/hello"))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "dubbo"), + equalTo( + RPC_METHOD, + "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.HelloService/hello"))))); testing() .waitAndAssertMetrics( @@ -459,18 +449,17 @@ void testApacheDubboTest() throws ReflectiveOperationException { metric .hasName("rpc.client.call.duration") .hasUnit("s") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "dubbo"), - equalTo( - RPC_METHOD, - "org.apache.dubbo.rpc.service.GenericService/$invokeAsync"), - equalTo(SERVER_ADDRESS, "localhost"), - satisfies( - SERVER_PORT, val -> val.isInstanceOf(Long.class)))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "dubbo"), + equalTo( + RPC_METHOD, + "org.apache.dubbo.rpc.service.GenericService/$invokeAsync"), + equalTo(SERVER_ADDRESS, "localhost"), + satisfies( + SERVER_PORT, val -> val.isInstanceOf(Long.class)))))); } } diff --git a/instrumentation/apache-dubbo-2.7/testing/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/AbstractDubboTraceChainTest.java b/instrumentation/apache-dubbo-2.7/testing/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/AbstractDubboTraceChainTest.java index 285fc46466cb..7b6193a48a2d 100644 --- a/instrumentation/apache-dubbo-2.7/testing/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/AbstractDubboTraceChainTest.java +++ b/instrumentation/apache-dubbo-2.7/testing/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/AbstractDubboTraceChainTest.java @@ -10,6 +10,7 @@ import static io.opentelemetry.instrumentation.testing.junit.rpc.SemconvRpcStabilityUtil.emitOldRpcSemconv; import static io.opentelemetry.instrumentation.testing.junit.rpc.SemconvRpcStabilityUtil.emitPreviewRpcSemconv; import static io.opentelemetry.instrumentation.testing.junit.service.SemconvServiceStabilityUtil.maybeStablePeerService; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.instrumentation.testing.util.TestLatestDeps.testLatestDeps; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; @@ -292,23 +293,22 @@ void testDubboChain() throws ReflectiveOperationException { metric .hasName("rpc.server.duration") .hasUnit("ms") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "apache_dubbo"), - equalTo( - RPC_SERVICE, - "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.HelloService"), - equalTo(RPC_METHOD, "hello")), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "apache_dubbo"), - equalTo( - RPC_SERVICE, - "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.MiddleService"), - equalTo(RPC_METHOD, "hello"))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "apache_dubbo"), + equalTo( + RPC_SERVICE, + "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.HelloService"), + equalTo(RPC_METHOD, "hello")), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "apache_dubbo"), + equalTo( + RPC_SERVICE, + "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.MiddleService"), + equalTo(RPC_METHOD, "hello"))))); testing() .waitAndAssertMetrics( @@ -317,34 +317,30 @@ void testDubboChain() throws ReflectiveOperationException { metric .hasName("rpc.client.duration") .hasUnit("ms") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "apache_dubbo"), - equalTo( - RPC_SERVICE, - "org.apache.dubbo.rpc.service.GenericService"), - equalTo(RPC_METHOD, "$invoke"), - equalTo(SERVER_ADDRESS, "localhost"), - satisfies( - SERVER_PORT, val -> val.isInstanceOf(Long.class)), - satisfies( - NETWORK_TYPE, AbstractDubboTest::assertNetworkType)), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "apache_dubbo"), - equalTo( - RPC_SERVICE, - "org.apache.dubbo.rpc.service.GenericService"), - equalTo(RPC_METHOD, "$invoke"), - equalTo(SERVER_ADDRESS, "localhost"), - satisfies( - SERVER_PORT, val -> val.isInstanceOf(Long.class)), - satisfies( - NETWORK_TYPE, - AbstractDubboTest::assertNetworkType))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "apache_dubbo"), + equalTo( + RPC_SERVICE, + "org.apache.dubbo.rpc.service.GenericService"), + equalTo(RPC_METHOD, "$invoke"), + equalTo(SERVER_ADDRESS, "localhost"), + satisfies(SERVER_PORT, val -> val.isInstanceOf(Long.class)), + satisfies( + NETWORK_TYPE, AbstractDubboTest::assertNetworkType)), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "apache_dubbo"), + equalTo( + RPC_SERVICE, + "org.apache.dubbo.rpc.service.GenericService"), + equalTo(RPC_METHOD, "$invoke"), + equalTo(SERVER_ADDRESS, "localhost"), + satisfies(SERVER_PORT, val -> val.isInstanceOf(Long.class)), + satisfies( + NETWORK_TYPE, AbstractDubboTest::assertNetworkType))))); } if (emitPreviewRpcSemconv()) { @@ -355,21 +351,20 @@ void testDubboChain() throws ReflectiveOperationException { metric .hasName("rpc.server.call.duration") .hasUnit("s") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "dubbo"), - equalTo( - RPC_METHOD, - "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.HelloService/hello")), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "dubbo"), - equalTo( - RPC_METHOD, - "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.MiddleService/hello"))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "dubbo"), + equalTo( + RPC_METHOD, + "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.HelloService/hello")), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "dubbo"), + equalTo( + RPC_METHOD, + "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.MiddleService/hello"))))); testing() .waitAndAssertMetrics( @@ -378,27 +373,25 @@ void testDubboChain() throws ReflectiveOperationException { metric .hasName("rpc.client.call.duration") .hasUnit("s") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "dubbo"), - equalTo( - RPC_METHOD, - "org.apache.dubbo.rpc.service.GenericService/$invoke"), - equalTo(SERVER_ADDRESS, "localhost"), - satisfies( - SERVER_PORT, val -> val.isInstanceOf(Long.class))), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "dubbo"), - equalTo( - RPC_METHOD, - "org.apache.dubbo.rpc.service.GenericService/$invoke"), - equalTo(SERVER_ADDRESS, "localhost"), - satisfies( - SERVER_PORT, val -> val.isInstanceOf(Long.class)))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "dubbo"), + equalTo( + RPC_METHOD, + "org.apache.dubbo.rpc.service.GenericService/$invoke"), + equalTo(SERVER_ADDRESS, "localhost"), + satisfies(SERVER_PORT, val -> val.isInstanceOf(Long.class))), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "dubbo"), + equalTo( + RPC_METHOD, + "org.apache.dubbo.rpc.service.GenericService/$invoke"), + equalTo(SERVER_ADDRESS, "localhost"), + satisfies( + SERVER_PORT, val -> val.isInstanceOf(Long.class)))))); } } @@ -513,16 +506,15 @@ void testDubboChainInJvm() throws ReflectiveOperationException { metric .hasName("rpc.server.duration") .hasUnit("ms") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "apache_dubbo"), - equalTo( - RPC_SERVICE, - "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.MiddleService"), - equalTo(RPC_METHOD, "hello"))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "apache_dubbo"), + equalTo( + RPC_SERVICE, + "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.MiddleService"), + equalTo(RPC_METHOD, "hello"))))); testing() .waitAndAssertMetrics( @@ -531,22 +523,19 @@ void testDubboChainInJvm() throws ReflectiveOperationException { metric .hasName("rpc.client.duration") .hasUnit("ms") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "apache_dubbo"), - equalTo( - RPC_SERVICE, - "org.apache.dubbo.rpc.service.GenericService"), - equalTo(RPC_METHOD, "$invoke"), - equalTo(SERVER_ADDRESS, "localhost"), - satisfies( - SERVER_PORT, val -> val.isInstanceOf(Long.class)), - satisfies( - NETWORK_TYPE, - AbstractDubboTest::assertNetworkType))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "apache_dubbo"), + equalTo( + RPC_SERVICE, + "org.apache.dubbo.rpc.service.GenericService"), + equalTo(RPC_METHOD, "$invoke"), + equalTo(SERVER_ADDRESS, "localhost"), + satisfies(SERVER_PORT, val -> val.isInstanceOf(Long.class)), + satisfies( + NETWORK_TYPE, AbstractDubboTest::assertNetworkType))))); } if (emitPreviewRpcSemconv()) { @@ -557,15 +546,14 @@ void testDubboChainInJvm() throws ReflectiveOperationException { metric .hasName("rpc.server.call.duration") .hasUnit("s") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "dubbo"), - equalTo( - RPC_METHOD, - "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.MiddleService/hello"))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "dubbo"), + equalTo( + RPC_METHOD, + "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.MiddleService/hello"))))); testing() .waitAndAssertMetrics( @@ -574,18 +562,17 @@ void testDubboChainInJvm() throws ReflectiveOperationException { metric .hasName("rpc.client.call.duration") .hasUnit("s") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "dubbo"), - equalTo( - RPC_METHOD, - "org.apache.dubbo.rpc.service.GenericService/$invoke"), - equalTo(SERVER_ADDRESS, "localhost"), - satisfies( - SERVER_PORT, val -> val.isInstanceOf(Long.class)))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "dubbo"), + equalTo( + RPC_METHOD, + "org.apache.dubbo.rpc.service.GenericService/$invoke"), + equalTo(SERVER_ADDRESS, "localhost"), + satisfies( + SERVER_PORT, val -> val.isInstanceOf(Long.class)))))); } } } diff --git a/instrumentation/avaje-jex-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/avaje/jex/v3_0/JexTest.java b/instrumentation/avaje-jex-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/avaje/jex/v3_0/JexTest.java index 2d897e29282d..b4a2b12e05c1 100644 --- a/instrumentation/avaje-jex-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/avaje/jex/v3_0/JexTest.java +++ b/instrumentation/avaje-jex-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/avaje/jex/v3_0/JexTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.avaje.jex.v3_0; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; @@ -125,9 +126,8 @@ void testHttpRouteMetricWithPathParamResponseSuccessful() { metric -> metric .hasName("http.server.request.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> point.hasAttribute(HTTP_ROUTE, "/test/param/{id}")))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> point.hasAttribute(HTTP_ROUTE, "/test/param/{id}")))); } } diff --git a/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/SqsMetricsAssertions.java b/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/SqsMetricsAssertions.java index 5789efb738b6..043bb59961af 100644 --- a/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/SqsMetricsAssertions.java +++ b/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/SqsMetricsAssertions.java @@ -5,6 +5,7 @@ package io.opentelemetry.instrumentation.awssdk.v1_11; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.ErrorAttributes.ERROR_TYPE; @@ -82,25 +83,24 @@ private static void assertClientOperationDuration( .hasUnit("s") .hasDescription( "Duration of messaging operation initiated by a producer or consumer client.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .satisfies( - data -> - assertThat(data.getCount()) - .isEqualTo(operationCount)) - .hasSumGreaterThan(0) - .hasBucketBoundaries(DURATION_BUCKETS) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, operationName), - equalTo(MESSAGING_SYSTEM, AWS_SQS), - equalTo(ERROR_TYPE, null), - equalTo(MESSAGING_DESTINATION_NAME, "testSdkSqs"), - equalTo(MESSAGING_OPERATION_TYPE, operationType), - equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, serverPort)))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .satisfies( + data -> + assertThat(data.getCount()) + .isEqualTo(operationCount)) + .hasSumGreaterThan(0) + .hasBucketBoundaries(DURATION_BUCKETS) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, operationName), + equalTo(MESSAGING_SYSTEM, AWS_SQS), + equalTo(ERROR_TYPE, null), + equalTo(MESSAGING_DESTINATION_NAME, "testSdkSqs"), + equalTo(MESSAGING_OPERATION_TYPE, operationType), + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, serverPort)))))); } private static void assertProcessDuration( @@ -114,24 +114,23 @@ private static void assertProcessDuration( assertThat(metric) .hasUnit("s") .hasDescription("Duration of processing operation.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .satisfies( - data -> - assertThat(data.getCount()) - .isEqualTo(operationCount)) - .hasSumGreaterThan(0) - .hasBucketBoundaries(DURATION_BUCKETS) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "process"), - equalTo(MESSAGING_SYSTEM, AWS_SQS), - equalTo(ERROR_TYPE, null), - equalTo(MESSAGING_DESTINATION_NAME, "testSdkSqs"), - equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, serverPort)))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .satisfies( + data -> + assertThat(data.getCount()) + .isEqualTo(operationCount)) + .hasSumGreaterThan(0) + .hasBucketBoundaries(DURATION_BUCKETS) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "process"), + equalTo(MESSAGING_SYSTEM, AWS_SQS), + equalTo(ERROR_TYPE, null), + equalTo(MESSAGING_DESTINATION_NAME, "testSdkSqs"), + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, serverPort)))))); } private static void assertMessageCounter( diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/library/src/testBedrockRuntime/java/io/opentelemetry/instrumentation/awssdk/v2_2/internal/Aws2BedrockRuntimeTest.java b/instrumentation/aws-sdk/aws-sdk-2.2/library/src/testBedrockRuntime/java/io/opentelemetry/instrumentation/awssdk/v2_2/internal/Aws2BedrockRuntimeTest.java index 0198a01ec9a4..d5dbc823d4b6 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/library/src/testBedrockRuntime/java/io/opentelemetry/instrumentation/awssdk/v2_2/internal/Aws2BedrockRuntimeTest.java +++ b/instrumentation/aws-sdk/aws-sdk-2.2/library/src/testBedrockRuntime/java/io/opentelemetry/instrumentation/awssdk/v2_2/internal/Aws2BedrockRuntimeTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.instrumentation.awssdk.v2_2.internal; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.incubating.EventIncubatingAttributes.EVENT_NAME; import static io.opentelemetry.semconv.incubating.GenAiIncubatingAttributes.GEN_AI_OPERATION_NAME; @@ -179,42 +180,40 @@ void testConverseToolCallNoMessageContent() { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(415) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(162) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(415) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(162) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx0 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -315,42 +314,40 @@ void testConverseToolCallNoMessageContent() { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(554) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(57) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(554) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(57) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx1 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -525,42 +522,40 @@ void testConverseToolCallStreamNoMessageContent() { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(415) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(162) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(415) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(162) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx0 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -681,42 +676,40 @@ void testConverseToolCallStreamNoMessageContent() { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(554) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(59) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(554) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(59) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx1 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -939,42 +932,40 @@ void testInvokeModelToolCallAmazonNovaNoMessageContent() { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(416) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(166) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(416) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(166) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx0 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); getTesting() @@ -1103,42 +1094,40 @@ void testInvokeModelToolCallAmazonNovaNoMessageContent() { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(559) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(59) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(559) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(59) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx1 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -1381,42 +1370,40 @@ public void accept(PayloadPart chunk) { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(416) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(165) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(416) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(165) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx0 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); getTesting() @@ -1589,42 +1576,40 @@ public void accept(PayloadPart chunk) { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(558) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(58) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(558) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(58) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx1 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -1798,42 +1783,40 @@ void testInvokeModelToolCallAnthropicClaudeNoMessageContent() { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(380) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(133) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(380) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(133) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx0 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); getTesting() @@ -1940,42 +1923,40 @@ void testInvokeModelToolCallAnthropicClaudeNoMessageContent() { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(590) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(132) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(590) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(132) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx1 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -2221,42 +2202,40 @@ public void accept(PayloadPart chunk) { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(380) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(144) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(380) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(144) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx0 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); getTesting() @@ -2404,42 +2383,40 @@ public void accept(PayloadPart chunk) { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(601) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(145) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(601) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(145) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx1 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2BedrockRuntimeTest.java b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2BedrockRuntimeTest.java index eae06304a749..1877a5c17c05 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2BedrockRuntimeTest.java +++ b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2BedrockRuntimeTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.instrumentation.awssdk.v2_2; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; import static io.opentelemetry.semconv.incubating.AwsIncubatingAttributes.AWS_BEDROCK_GUARDRAIL_ID; @@ -166,42 +167,40 @@ void testConverseBasic() { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(8) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(14) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(8) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(14) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -288,42 +287,40 @@ void testConverseOptions() { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(8) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(10) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(8) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(10) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -419,42 +416,40 @@ void testConverseToolCall() { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(415) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(162) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(415) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(162) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx0 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -577,42 +572,40 @@ void testConverseToolCall() { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(554) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(57) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(554) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(57) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx1 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -888,42 +881,40 @@ void testConverseToolCallStream() { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(415) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(162) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(415) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(162) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx0 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -1066,42 +1057,40 @@ void testConverseToolCallStream() { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(554) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(59) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(554) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(59) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx1 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -1312,42 +1301,40 @@ void testConverseStream() { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(8) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(10) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(8) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(10) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -1541,42 +1528,40 @@ void testInvokeModelAmazonTitan() { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(5) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, TEXT_COMPLETION), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(10) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, TEXT_COMPLETION), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(5) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, TEXT_COMPLETION), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(10) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, TEXT_COMPLETION), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, TEXT_COMPLETION), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, TEXT_COMPLETION), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -1690,42 +1675,40 @@ void testInvokeModelWithResponseStreamAmazonTitan() { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(7) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, TEXT_COMPLETION), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(100) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, TEXT_COMPLETION), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(7) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, TEXT_COMPLETION), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(100) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, TEXT_COMPLETION), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, TEXT_COMPLETION), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, TEXT_COMPLETION), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -1847,42 +1830,40 @@ void testInvokeModelAmazonNova() { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(5) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(10) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(5) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(10) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -2016,42 +1997,40 @@ void testInvokeModelWithResponseStreamAmazonNova() { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(7) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(100) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(7) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(100) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -2159,42 +2138,40 @@ void testInvokeModelAnthropicClaude(String modelId) { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(14) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(10) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(14) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(10) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -2560,42 +2537,40 @@ void testInvokeModelWithResponseStreamAnthropicClaude() { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(16) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(10) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(16) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(10) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -2756,42 +2731,40 @@ void testInvokeModelToolCallAmazonNova() { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(416) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(166) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(416) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(166) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx0 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); getTesting() @@ -2942,42 +2915,40 @@ void testInvokeModelToolCallAmazonNova() { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(559) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(59) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(559) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(59) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx1 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -3255,42 +3226,40 @@ public void accept(PayloadPart chunk) { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(416) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(165) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(416) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(165) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx0 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); getTesting() @@ -3485,42 +3454,40 @@ public void accept(PayloadPart chunk) { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(558) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(58) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(558) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(58) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx1 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -3730,42 +3697,40 @@ void testInvokeModelToolCallAnthropicClaude() { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(380) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(133) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(380) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(133) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx0 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); getTesting() @@ -3894,42 +3859,40 @@ void testInvokeModelToolCallAnthropicClaude() { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(590) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(132) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(590) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(132) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx1 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -4213,42 +4176,40 @@ public void accept(PayloadPart chunk) { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(380) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(144) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(380) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(144) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx0 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); getTesting() @@ -4418,42 +4379,40 @@ public void accept(PayloadPart chunk) { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(601) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(145) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(601) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(145) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx1 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/SqsMetricsAssertions.java b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/SqsMetricsAssertions.java index 46735508ce7e..4a1a28980d68 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/SqsMetricsAssertions.java +++ b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/SqsMetricsAssertions.java @@ -5,6 +5,7 @@ package io.opentelemetry.instrumentation.awssdk.v2_2; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.ErrorAttributes.ERROR_TYPE; @@ -82,25 +83,24 @@ private static void assertClientOperationDuration( .hasUnit("s") .hasDescription( "Duration of messaging operation initiated by a producer or consumer client.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .satisfies( - data -> - assertThat(data.getCount()) - .isEqualTo(operationCount)) - .hasSumGreaterThan(0) - .hasBucketBoundaries(DURATION_BUCKETS) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, operationName), - equalTo(MESSAGING_SYSTEM, AWS_SQS), - equalTo(ERROR_TYPE, null), - equalTo(MESSAGING_DESTINATION_NAME, "testSdkSqs"), - equalTo(MESSAGING_OPERATION_TYPE, operationType), - equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, serverPort)))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .satisfies( + data -> + assertThat(data.getCount()) + .isEqualTo(operationCount)) + .hasSumGreaterThan(0) + .hasBucketBoundaries(DURATION_BUCKETS) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, operationName), + equalTo(MESSAGING_SYSTEM, AWS_SQS), + equalTo(ERROR_TYPE, null), + equalTo(MESSAGING_DESTINATION_NAME, "testSdkSqs"), + equalTo(MESSAGING_OPERATION_TYPE, operationType), + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, serverPort)))))); } private static void assertProcessDuration( @@ -114,24 +114,23 @@ private static void assertProcessDuration( assertThat(metric) .hasUnit("s") .hasDescription("Duration of processing operation.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .satisfies( - data -> - assertThat(data.getCount()) - .isEqualTo(operationCount)) - .hasSumGreaterThan(0) - .hasBucketBoundaries(DURATION_BUCKETS) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "process"), - equalTo(MESSAGING_SYSTEM, AWS_SQS), - equalTo(ERROR_TYPE, null), - equalTo(MESSAGING_DESTINATION_NAME, "testSdkSqs"), - equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, serverPort)))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .satisfies( + data -> + assertThat(data.getCount()) + .isEqualTo(operationCount)) + .hasSumGreaterThan(0) + .hasBucketBoundaries(DURATION_BUCKETS) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "process"), + equalTo(MESSAGING_SYSTEM, AWS_SQS), + equalTo(ERROR_TYPE, null), + equalTo(MESSAGING_DESTINATION_NAME, "testSdkSqs"), + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, serverPort)))))); } private static void assertMessageCounter( diff --git a/instrumentation/camel-2.20/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/camel/v2_20/CamelMessagingMetricsAssertions.java b/instrumentation/camel-2.20/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/camel/v2_20/CamelMessagingMetricsAssertions.java index 5377b6358ccb..7978c709cb8a 100644 --- a/instrumentation/camel-2.20/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/camel/v2_20/CamelMessagingMetricsAssertions.java +++ b/instrumentation/camel-2.20/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/camel/v2_20/CamelMessagingMetricsAssertions.java @@ -5,6 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.camel.v2_20; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.ErrorAttributes.ERROR_TYPE; @@ -182,49 +183,48 @@ private static void assertDuration( assertThat(metric) .hasUnit("s") .hasDescription(description) - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> { - point.hasCount(1); - if (operationType != null) { - if (destinationPartitionId != null) { - point.hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, operationName), - equalTo(MESSAGING_SYSTEM, system), - equalTo(MESSAGING_DESTINATION_NAME, destination), - equalTo( - MESSAGING_DESTINATION_PARTITION_ID, - destinationPartitionId), - equalTo(MESSAGING_OPERATION_TYPE, operationType), - equalTo(ERROR_TYPE, errorType)); - } else { - point.hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, operationName), - equalTo(MESSAGING_SYSTEM, system), - equalTo(MESSAGING_DESTINATION_NAME, destination), - equalTo(MESSAGING_OPERATION_TYPE, operationType), - equalTo(ERROR_TYPE, errorType)); - } - } else { - if (destinationPartitionId != null) { - point.hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, operationName), - equalTo(MESSAGING_SYSTEM, system), - equalTo(MESSAGING_DESTINATION_NAME, destination), - equalTo( - MESSAGING_DESTINATION_PARTITION_ID, - destinationPartitionId), - equalTo(ERROR_TYPE, errorType)); - } else { - point.hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, operationName), - equalTo(MESSAGING_SYSTEM, system), - equalTo(MESSAGING_DESTINATION_NAME, destination), - equalTo(ERROR_TYPE, errorType)); - } - } - })); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> { + point.hasCount(1); + if (operationType != null) { + if (destinationPartitionId != null) { + point.hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, operationName), + equalTo(MESSAGING_SYSTEM, system), + equalTo(MESSAGING_DESTINATION_NAME, destination), + equalTo( + MESSAGING_DESTINATION_PARTITION_ID, + destinationPartitionId), + equalTo(MESSAGING_OPERATION_TYPE, operationType), + equalTo(ERROR_TYPE, errorType)); + } else { + point.hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, operationName), + equalTo(MESSAGING_SYSTEM, system), + equalTo(MESSAGING_DESTINATION_NAME, destination), + equalTo(MESSAGING_OPERATION_TYPE, operationType), + equalTo(ERROR_TYPE, errorType)); + } + } else { + if (destinationPartitionId != null) { + point.hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, operationName), + equalTo(MESSAGING_SYSTEM, system), + equalTo(MESSAGING_DESTINATION_NAME, destination), + equalTo( + MESSAGING_DESTINATION_PARTITION_ID, + destinationPartitionId), + equalTo(ERROR_TYPE, errorType)); + } else { + point.hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, operationName), + equalTo(MESSAGING_SYSTEM, system), + equalTo(MESSAGING_DESTINATION_NAME, destination), + equalTo(ERROR_TYPE, errorType)); + } + } + })); })); } diff --git a/instrumentation/cassandra/cassandra-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraTest.java b/instrumentation/cassandra/cassandra-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraTest.java index 039345d94388..96d7fcfd81c3 100644 --- a/instrumentation/cassandra/cassandra-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraTest.java +++ b/instrumentation/cassandra/cassandra-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.cassandra.v4_0; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.DbAttributes.DB_COLLECTION_NAME; import static io.opentelemetry.semconv.DbAttributes.DB_OPERATION_NAME; @@ -110,18 +111,17 @@ void responsePeerComesFromTheChannel() { metric -> metric .hasName("db.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(DB_COLLECTION_NAME, "system.local"), - equalTo(DB_OPERATION_NAME, "SELECT"), - equalTo(DB_QUERY_SUMMARY, "SELECT system.local"), - equalTo(DB_SYSTEM_NAME, "cassandra"), - equalTo(NETWORK_PEER_ADDRESS, cassandraIp), - equalTo(NETWORK_PEER_PORT, cassandraPort), - equalTo(SERVER_ADDRESS, cassandraHost), - equalTo(SERVER_PORT, cassandraPort))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(DB_COLLECTION_NAME, "system.local"), + equalTo(DB_OPERATION_NAME, "SELECT"), + equalTo(DB_QUERY_SUMMARY, "SELECT system.local"), + equalTo(DB_SYSTEM_NAME, "cassandra"), + equalTo(NETWORK_PEER_ADDRESS, cassandraIp), + equalTo(NETWORK_PEER_PORT, cassandraPort), + equalTo(SERVER_ADDRESS, cassandraHost), + equalTo(SERVER_PORT, cassandraPort))))); } } diff --git a/instrumentation/cassandra/cassandra-4.4/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_4/CassandraTest.java b/instrumentation/cassandra/cassandra-4.4/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_4/CassandraTest.java index 73b3625db5e1..ac373b9c689a 100644 --- a/instrumentation/cassandra/cassandra-4.4/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_4/CassandraTest.java +++ b/instrumentation/cassandra/cassandra-4.4/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_4/CassandraTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.cassandra.v4_4; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.DbAttributes.DB_COLLECTION_NAME; import static io.opentelemetry.semconv.DbAttributes.DB_OPERATION_NAME; @@ -105,19 +106,18 @@ void responsePeerComesFromTheChannel() throws ReflectiveOperationException { metric -> metric .hasName("db.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(DB_COLLECTION_NAME, "system.local"), - equalTo(DB_OPERATION_NAME, "SELECT"), - equalTo(DB_QUERY_SUMMARY, "SELECT system.local"), - equalTo(DB_SYSTEM_NAME, "cassandra"), - equalTo(NETWORK_PEER_ADDRESS, cassandraIp), - equalTo(NETWORK_PEER_PORT, cassandraPort), - equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, cassandraPort))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(DB_COLLECTION_NAME, "system.local"), + equalTo(DB_OPERATION_NAME, "SELECT"), + equalTo(DB_QUERY_SUMMARY, "SELECT system.local"), + equalTo(DB_SYSTEM_NAME, "cassandra"), + equalTo(NETWORK_PEER_ADDRESS, cassandraIp), + equalTo(NETWORK_PEER_PORT, cassandraPort), + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, cassandraPort))))); } private static CqlSession getDelegate(CqlSession session) throws IllegalAccessException { diff --git a/instrumentation/clickhouse/clickhouse-client-v1-0.5/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/clickhouse/clientv1/v0_5/ClickHouseClientV1Test.java b/instrumentation/clickhouse/clickhouse-client-v1-0.5/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/clickhouse/clientv1/v0_5/ClickHouseClientV1Test.java index 4ffe448ab4bd..c6216d2593f4 100644 --- a/instrumentation/clickhouse/clickhouse-client-v1-0.5/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/clickhouse/clientv1/v0_5/ClickHouseClientV1Test.java +++ b/instrumentation/clickhouse/clickhouse-client-v1-0.5/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/clickhouse/clientv1/v0_5/ClickHouseClientV1Test.java @@ -6,6 +6,7 @@ package io.opentelemetry.javaagent.instrumentation.clickhouse.clientv1.v0_5; import static io.opentelemetry.instrumentation.testing.junit.db.DbClientMetricsTestUtil.assertDurationMetric; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.DbAttributes.DB_NAMESPACE; import static io.opentelemetry.semconv.DbAttributes.DB_QUERY_SUMMARY; @@ -381,10 +382,9 @@ void testExecuteAndWaitThrowsException() { metric -> metric .hasName("db.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> point.hasAttribute(ERROR_TYPE, "60")))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> point.hasAttribute(ERROR_TYPE, "60")))); } @Test diff --git a/instrumentation/clickhouse/clickhouse-client-v2-0.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/clickhouse/clientv2/v0_8/ClickHouseClientV2Test.java b/instrumentation/clickhouse/clickhouse-client-v2-0.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/clickhouse/clientv2/v0_8/ClickHouseClientV2Test.java index d88118a1eebf..ce91b96cecbd 100644 --- a/instrumentation/clickhouse/clickhouse-client-v2-0.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/clickhouse/clientv2/v0_8/ClickHouseClientV2Test.java +++ b/instrumentation/clickhouse/clickhouse-client-v2-0.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/clickhouse/clientv2/v0_8/ClickHouseClientV2Test.java @@ -6,6 +6,7 @@ package io.opentelemetry.javaagent.instrumentation.clickhouse.clientv2.v0_8; import static io.opentelemetry.instrumentation.testing.junit.db.DbClientMetricsTestUtil.assertDurationMetric; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.DbAttributes.DB_NAMESPACE; import static io.opentelemetry.semconv.DbAttributes.DB_QUERY_SUMMARY; @@ -347,10 +348,9 @@ void testQueryThrowsServerException() { metric -> metric .hasName("db.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> point.hasAttribute(ERROR_TYPE, "60")))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> point.hasAttribute(ERROR_TYPE, "60")))); } @Test diff --git a/instrumentation/dropwizard/dropwizard-metrics-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/dropwizardmetrics/v4_0/DropwizardMetricsTest.java b/instrumentation/dropwizard/dropwizard-metrics-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/dropwizardmetrics/v4_0/DropwizardMetricsTest.java index 539b57eab6d2..c042b14a8375 100644 --- a/instrumentation/dropwizard/dropwizard-metrics-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/dropwizardmetrics/v4_0/DropwizardMetricsTest.java +++ b/instrumentation/dropwizard/dropwizard-metrics-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/dropwizardmetrics/v4_0/DropwizardMetricsTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.dropwizardmetrics.v4_0; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static java.util.concurrent.TimeUnit.MILLISECONDS; import static java.util.concurrent.TimeUnit.NANOSECONDS; import static java.util.concurrent.TimeUnit.SECONDS; @@ -101,10 +102,8 @@ void histogram() { metric -> metric .hasName("testhistogram") - .hasHistogramSatisfying( - histogramMetric -> - histogramMetric.hasPointsSatisfying( - point -> point.hasSum(42).hasCount(2)))); + .satisfies( + hasHistogramPointsSatisfyingExactly(point -> point.hasSum(42).hasCount(2)))); testing.clearData(); // when @@ -163,9 +162,8 @@ void timer() { metric .hasName("testtimer") .hasUnit("ms") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying(point -> point.hasSum(1.234).hasCount(2)))); + .satisfies( + hasHistogramPointsSatisfyingExactly(point -> point.hasSum(1.234).hasCount(2)))); testing.clearData(); // when diff --git a/instrumentation/failsafe-3.0/library/src/test/java/io/opentelemetry/instrumentation/failsafe/v3_0/FailsafeTelemetryTest.java b/instrumentation/failsafe-3.0/library/src/test/java/io/opentelemetry/instrumentation/failsafe/v3_0/FailsafeTelemetryTest.java index f937bcaa21cd..70939f460295 100644 --- a/instrumentation/failsafe-3.0/library/src/test/java/io/opentelemetry/instrumentation/failsafe/v3_0/FailsafeTelemetryTest.java +++ b/instrumentation/failsafe-3.0/library/src/test/java/io/opentelemetry/instrumentation/failsafe/v3_0/FailsafeTelemetryTest.java @@ -6,6 +6,7 @@ package io.opentelemetry.instrumentation.failsafe.v3_0; import static io.opentelemetry.api.common.AttributeKey.stringKey; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static org.assertj.core.api.Assertions.assertThat; @@ -120,29 +121,26 @@ void captureRetryPolicyMetrics() { metricAssert -> metricAssert .hasName("failsafe.retry_policy.attempts") - .hasHistogramSatisfying( - histogramAssert -> - histogramAssert.hasPointsSatisfying( - histogramPointAssert -> - histogramPointAssert - .hasCount(3) - .hasMin(1) - .hasMax(3) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("failsafe.retry_policy.name"), "testing"), - equalTo( - stringKey("failsafe.retry_policy.outcome"), "success")) - .hasBucketCounts(1L, 1L, 1L, 0L, 0L), - histogramPointAssert -> - histogramPointAssert - .hasCount(2) - .hasMin(3) - .hasMax(3) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("failsafe.retry_policy.name"), "testing"), - equalTo( - stringKey("failsafe.retry_policy.outcome"), "failure")) - .hasBucketCounts(0L, 0L, 2L, 0L, 0L)))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + histogramPointAssert -> + histogramPointAssert + .hasCount(3) + .hasMin(1) + .hasMax(3) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("failsafe.retry_policy.name"), "testing"), + equalTo(stringKey("failsafe.retry_policy.outcome"), "success")) + .hasBucketCounts(1L, 1L, 1L, 0L, 0L), + histogramPointAssert -> + histogramPointAssert + .hasCount(2) + .hasMin(3) + .hasMax(3) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("failsafe.retry_policy.name"), "testing"), + equalTo(stringKey("failsafe.retry_policy.outcome"), "failure")) + .hasBucketCounts(0L, 0L, 2L, 0L, 0L)))); } private static Consumer buildCircuitBreakerAssertion( diff --git a/instrumentation/grpc-1.6/testing/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/AbstractGrpcStreamingTest.java b/instrumentation/grpc-1.6/testing/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/AbstractGrpcStreamingTest.java index 0da33c2326ca..9b98a88d81f4 100644 --- a/instrumentation/grpc-1.6/testing/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/AbstractGrpcStreamingTest.java +++ b/instrumentation/grpc-1.6/testing/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/AbstractGrpcStreamingTest.java @@ -11,6 +11,7 @@ import static io.opentelemetry.instrumentation.grpc.v1_6.ExperimentalTestHelper.experimentalSatisfies; import static io.opentelemetry.instrumentation.testing.junit.rpc.SemconvRpcStabilityUtil.emitOldRpcSemconv; import static io.opentelemetry.instrumentation.testing.junit.rpc.SemconvRpcStabilityUtil.emitPreviewRpcSemconv; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.instrumentation.testing.util.TestLatestDeps.testLatestDeps; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; @@ -301,20 +302,18 @@ RPC_SERVICE, emitOldRpcSemconv() ? "example.Greeter" : null), metric .hasName("rpc.server.duration") .hasUnit("ms") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, server.getPort()), - equalTo(RPC_METHOD, "Conversation"), - equalTo(RPC_SERVICE, "example.Greeter"), - equalTo(RPC_SYSTEM, "grpc"), - equalTo(NETWORK_TYPE, "ipv4"), - equalTo( - RPC_GRPC_STATUS_CODE, - (long) Status.Code.OK.value()))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, server.getPort()), + equalTo(RPC_METHOD, "Conversation"), + equalTo(RPC_SERVICE, "example.Greeter"), + equalTo(RPC_SYSTEM, "grpc"), + equalTo(NETWORK_TYPE, "ipv4"), + equalTo( + RPC_GRPC_STATUS_CODE, (long) Status.Code.OK.value()))))); } if (emitPreviewRpcSemconv()) { testing() @@ -324,17 +323,15 @@ RPC_SERVICE, emitOldRpcSemconv() ? "example.Greeter" : null), metric .hasName("rpc.server.call.duration") .hasUnit("s") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "grpc"), - equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, server.getPort()), - equalTo(RPC_METHOD, "example.Greeter/Conversation"), - equalTo( - RPC_RESPONSE_STATUS_CODE, Status.Code.OK.name()))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "grpc"), + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, server.getPort()), + equalTo(RPC_METHOD, "example.Greeter/Conversation"), + equalTo(RPC_RESPONSE_STATUS_CODE, Status.Code.OK.name()))))); } if (emitOldRpcSemconv()) { testing() @@ -344,20 +341,17 @@ RPC_SERVICE, emitOldRpcSemconv() ? "example.Greeter" : null), metric .hasName("rpc.client.duration") .hasUnit("ms") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, server.getPort()), - equalTo(RPC_METHOD, "Conversation"), - equalTo(RPC_SERVICE, "example.Greeter"), - equalTo(RPC_SYSTEM, "grpc"), - equalTo( - RPC_GRPC_STATUS_CODE, (long) Status.Code.OK.value()), - equalTo( - NETWORK_TYPE, testLatestDeps() ? "ipv4" : null))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, server.getPort()), + equalTo(RPC_METHOD, "Conversation"), + equalTo(RPC_SERVICE, "example.Greeter"), + equalTo(RPC_SYSTEM, "grpc"), + equalTo(RPC_GRPC_STATUS_CODE, (long) Status.Code.OK.value()), + equalTo(NETWORK_TYPE, testLatestDeps() ? "ipv4" : null))))); } if (emitPreviewRpcSemconv()) { testing() @@ -367,17 +361,15 @@ RPC_SERVICE, emitOldRpcSemconv() ? "example.Greeter" : null), metric .hasName("rpc.client.call.duration") .hasUnit("s") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "grpc"), - equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, server.getPort()), - equalTo(RPC_METHOD, "example.Greeter/Conversation"), - equalTo( - RPC_RESPONSE_STATUS_CODE, Status.Code.OK.name()))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "grpc"), + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, server.getPort()), + equalTo(RPC_METHOD, "example.Greeter/Conversation"), + equalTo(RPC_RESPONSE_STATUS_CODE, Status.Code.OK.name()))))); } } diff --git a/instrumentation/grpc-1.6/testing/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/AbstractGrpcTest.java b/instrumentation/grpc-1.6/testing/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/AbstractGrpcTest.java index 8e34179141ff..b1a780c6227e 100644 --- a/instrumentation/grpc-1.6/testing/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/AbstractGrpcTest.java +++ b/instrumentation/grpc-1.6/testing/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/AbstractGrpcTest.java @@ -12,6 +12,7 @@ import static io.opentelemetry.instrumentation.grpc.v1_6.ExperimentalTestHelper.experimentalSatisfies; import static io.opentelemetry.instrumentation.testing.junit.rpc.SemconvRpcStabilityUtil.emitOldRpcSemconv; import static io.opentelemetry.instrumentation.testing.junit.rpc.SemconvRpcStabilityUtil.emitPreviewRpcSemconv; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.instrumentation.testing.util.TestLatestDeps.testLatestDeps; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; @@ -1815,18 +1816,17 @@ private void assertMetrics(Server server, Status status) { metric .hasName("rpc.server.duration") .hasUnit("ms") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, server.getPort()), - equalTo(RPC_METHOD, "SayHello"), - equalTo(RPC_SERVICE, "example.Greeter"), - equalTo(RPC_SYSTEM, "grpc"), - equalTo(RPC_GRPC_STATUS_CODE, (long) statusCode.value()), - equalTo(NETWORK_TYPE, "ipv4"))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, server.getPort()), + equalTo(RPC_METHOD, "SayHello"), + equalTo(RPC_SERVICE, "example.Greeter"), + equalTo(RPC_SYSTEM, "grpc"), + equalTo(RPC_GRPC_STATUS_CODE, (long) statusCode.value()), + equalTo(NETWORK_TYPE, "ipv4"))))); if (hasSizeMetric) { testing() @@ -1836,19 +1836,17 @@ private void assertMetrics(Server server, Status status) { metric .hasName("rpc.server.request.size") .hasUnit("By") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, server.getPort()), - equalTo(RPC_METHOD, "SayHello"), - equalTo(RPC_SERVICE, "example.Greeter"), - equalTo(RPC_SYSTEM, "grpc"), - equalTo( - RPC_GRPC_STATUS_CODE, (long) statusCode.value()), - equalTo(NETWORK_TYPE, "ipv4"))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, server.getPort()), + equalTo(RPC_METHOD, "SayHello"), + equalTo(RPC_SERVICE, "example.Greeter"), + equalTo(RPC_SYSTEM, "grpc"), + equalTo(RPC_GRPC_STATUS_CODE, (long) statusCode.value()), + equalTo(NETWORK_TYPE, "ipv4"))))); testing() .waitAndAssertMetrics( "io.opentelemetry.grpc-1.6", @@ -1856,19 +1854,17 @@ private void assertMetrics(Server server, Status status) { metric .hasName("rpc.server.response.size") .hasUnit("By") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, server.getPort()), - equalTo(RPC_METHOD, "SayHello"), - equalTo(RPC_SERVICE, "example.Greeter"), - equalTo(RPC_SYSTEM, "grpc"), - equalTo( - RPC_GRPC_STATUS_CODE, (long) statusCode.value()), - equalTo(NETWORK_TYPE, "ipv4"))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, server.getPort()), + equalTo(RPC_METHOD, "SayHello"), + equalTo(RPC_SERVICE, "example.Greeter"), + equalTo(RPC_SYSTEM, "grpc"), + equalTo(RPC_GRPC_STATUS_CODE, (long) statusCode.value()), + equalTo(NETWORK_TYPE, "ipv4"))))); } testing() @@ -1878,19 +1874,17 @@ private void assertMetrics(Server server, Status status) { metric .hasName("rpc.client.duration") .hasUnit("ms") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, server.getPort()), - equalTo(RPC_METHOD, "SayHello"), - equalTo(RPC_SERVICE, "example.Greeter"), - equalTo(RPC_SYSTEM, "grpc"), - equalTo(RPC_GRPC_STATUS_CODE, (long) statusCode.value()), - equalTo( - NETWORK_TYPE, testLatestDeps() ? "ipv4" : null))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, server.getPort()), + equalTo(RPC_METHOD, "SayHello"), + equalTo(RPC_SERVICE, "example.Greeter"), + equalTo(RPC_SYSTEM, "grpc"), + equalTo(RPC_GRPC_STATUS_CODE, (long) statusCode.value()), + equalTo(NETWORK_TYPE, testLatestDeps() ? "ipv4" : null))))); testing() .waitAndAssertMetrics( @@ -1899,19 +1893,17 @@ private void assertMetrics(Server server, Status status) { metric .hasName("rpc.client.request.size") .hasUnit("By") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, server.getPort()), - equalTo(RPC_METHOD, "SayHello"), - equalTo(RPC_SERVICE, "example.Greeter"), - equalTo(RPC_SYSTEM, "grpc"), - equalTo(RPC_GRPC_STATUS_CODE, (long) statusCode.value()), - equalTo( - NETWORK_TYPE, testLatestDeps() ? "ipv4" : null))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, server.getPort()), + equalTo(RPC_METHOD, "SayHello"), + equalTo(RPC_SERVICE, "example.Greeter"), + equalTo(RPC_SYSTEM, "grpc"), + equalTo(RPC_GRPC_STATUS_CODE, (long) statusCode.value()), + equalTo(NETWORK_TYPE, testLatestDeps() ? "ipv4" : null))))); if (hasSizeMetric) { testing() .waitAndAssertMetrics( @@ -1920,20 +1912,17 @@ private void assertMetrics(Server server, Status status) { metric .hasName("rpc.client.response.size") .hasUnit("By") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, server.getPort()), - equalTo(RPC_METHOD, "SayHello"), - equalTo(RPC_SERVICE, "example.Greeter"), - equalTo(RPC_SYSTEM, "grpc"), - equalTo( - RPC_GRPC_STATUS_CODE, (long) statusCode.value()), - equalTo( - NETWORK_TYPE, testLatestDeps() ? "ipv4" : null))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, server.getPort()), + equalTo(RPC_METHOD, "SayHello"), + equalTo(RPC_SERVICE, "example.Greeter"), + equalTo(RPC_SYSTEM, "grpc"), + equalTo(RPC_GRPC_STATUS_CODE, (long) statusCode.value()), + equalTo(NETWORK_TYPE, testLatestDeps() ? "ipv4" : null))))); } } if (emitPreviewRpcSemconv()) { @@ -1944,17 +1933,16 @@ private void assertMetrics(Server server, Status status) { metric .hasName("rpc.server.call.duration") .hasUnit("s") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "grpc"), - equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, server.getPort()), - equalTo(RPC_METHOD, "example.Greeter/SayHello"), - equalTo(RPC_RESPONSE_STATUS_CODE, statusCode.name()), - equalTo(ERROR_TYPE, serverErrorType))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "grpc"), + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, server.getPort()), + equalTo(RPC_METHOD, "example.Greeter/SayHello"), + equalTo(RPC_RESPONSE_STATUS_CODE, statusCode.name()), + equalTo(ERROR_TYPE, serverErrorType))))); testing() .waitAndAssertMetrics( "io.opentelemetry.grpc-1.6", @@ -1962,17 +1950,16 @@ private void assertMetrics(Server server, Status status) { metric .hasName("rpc.client.call.duration") .hasUnit("s") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "grpc"), - equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, server.getPort()), - equalTo(RPC_METHOD, "example.Greeter/SayHello"), - equalTo(RPC_RESPONSE_STATUS_CODE, statusCode.name()), - equalTo(ERROR_TYPE, clientErrorType))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "grpc"), + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, server.getPort()), + equalTo(RPC_METHOD, "example.Greeter/SayHello"), + equalTo(RPC_RESPONSE_STATUS_CODE, statusCode.name()), + equalTo(ERROR_TYPE, clientErrorType))))); } } } diff --git a/instrumentation/iceberg-1.8/testing/src/main/java/io/opentelemetry/instrumentation/iceberg/v1_8/AbstractIcebergTest.java b/instrumentation/iceberg-1.8/testing/src/main/java/io/opentelemetry/instrumentation/iceberg/v1_8/AbstractIcebergTest.java index 3050fda468b0..9933832884fd 100644 --- a/instrumentation/iceberg-1.8/testing/src/main/java/io/opentelemetry/instrumentation/iceberg/v1_8/AbstractIcebergTest.java +++ b/instrumentation/iceberg-1.8/testing/src/main/java/io/opentelemetry/instrumentation/iceberg/v1_8/AbstractIcebergTest.java @@ -7,6 +7,7 @@ import static io.opentelemetry.api.common.AttributeKey.longKey; import static io.opentelemetry.api.common.AttributeKey.stringKey; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static java.util.Arrays.asList; import static org.assertj.core.api.Assertions.assertThat; @@ -116,20 +117,19 @@ private void assertScanDurationMetric(ScanReport expectedReport) { metricAssert .hasName("iceberg.scan.planning.duration") .hasUnit("s") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo( - longKey("iceberg.schema.id"), - expectedReport.schemaId()), - equalTo( - stringKey("iceberg.table.name"), - expectedReport.tableName()))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo( + longKey("iceberg.schema.id"), + expectedReport.schemaId()), + equalTo( + stringKey("iceberg.table.name"), + expectedReport.tableName()))))); } private void assertDataFilesCountMetrics(ScanReport expectedReport) { diff --git a/instrumentation/javalin/testing/src/main/java/io/opentelemetry/instrumentation/javalin/AbstractJavalinTest.java b/instrumentation/javalin/testing/src/main/java/io/opentelemetry/instrumentation/javalin/AbstractJavalinTest.java index 57dd0f071e71..f5dd553d3d63 100644 --- a/instrumentation/javalin/testing/src/main/java/io/opentelemetry/instrumentation/javalin/AbstractJavalinTest.java +++ b/instrumentation/javalin/testing/src/main/java/io/opentelemetry/instrumentation/javalin/AbstractJavalinTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.instrumentation.javalin; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; @@ -166,9 +167,8 @@ void testHttpRouteMetricWithPathParamResponseSuccessful() { metric -> metric .hasName("http.server.request.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> point.hasAttribute(HTTP_ROUTE, "/param/{id}")))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> point.hasAttribute(HTTP_ROUTE, "/param/{id}")))); } } diff --git a/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/datasource/JdbcTelemetryTest.java b/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/datasource/JdbcTelemetryTest.java index 73e91f613f52..86c49ec1aa40 100644 --- a/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/datasource/JdbcTelemetryTest.java +++ b/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/datasource/JdbcTelemetryTest.java @@ -6,6 +6,7 @@ package io.opentelemetry.instrumentation.jdbc.datasource; import static io.opentelemetry.instrumentation.testing.junit.db.DbClientMetricsTestUtil.assertDurationMetric; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.DbAttributes.DB_NAMESPACE; import static io.opentelemetry.semconv.DbAttributes.DB_OPERATION_BATCH_SIZE; @@ -174,10 +175,9 @@ void error(int errorCode, String sqlState, String expectedErrorType) throws SQLE metric -> metric .hasName("db.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> point.hasAttribute(ERROR_TYPE, expectedErrorType)))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> point.hasAttribute(ERROR_TYPE, expectedErrorType)))); } private static Stream errorCodes() { diff --git a/instrumentation/jedis/jedis-2.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v2_0/ShardedJedisClientTest.java b/instrumentation/jedis/jedis-2.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v2_0/ShardedJedisClientTest.java index e49d71d2a987..34a3034e98e7 100644 --- a/instrumentation/jedis/jedis-2.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v2_0/ShardedJedisClientTest.java +++ b/instrumentation/jedis/jedis-2.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v2_0/ShardedJedisClientTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.jedis.v2_0; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.DbAttributes.DB_NAMESPACE; import static io.opentelemetry.semconv.DbAttributes.DB_OPERATION_NAME; @@ -149,10 +150,9 @@ void commandFromAllShardsUsesConfiguredTarget() { metric -> metric .hasName("db.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> point.hasAttribute(SERVER_ADDRESS, configuredTarget)))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> point.hasAttribute(SERVER_ADDRESS, configuredTarget)))); } @Test diff --git a/instrumentation/jedis/jedis-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v3_0/ShardedJedis30ClientTest.java b/instrumentation/jedis/jedis-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v3_0/ShardedJedis30ClientTest.java index 63e62200ec1b..f9d3b81db2b3 100644 --- a/instrumentation/jedis/jedis-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v3_0/ShardedJedis30ClientTest.java +++ b/instrumentation/jedis/jedis-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v3_0/ShardedJedis30ClientTest.java @@ -6,6 +6,7 @@ package io.opentelemetry.javaagent.instrumentation.jedis.v3_0; import static io.opentelemetry.instrumentation.testing.junit.db.DbClientMetricsTestUtil.assertDurationMetric; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; import static io.opentelemetry.semconv.DbAttributes.DB_NAMESPACE; @@ -158,15 +159,14 @@ void commandFromAllShardsUsesConfiguredTarget() { metric -> metric .hasName("db.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasAttribute(SERVER_ADDRESS, configuredTarget) - .hasAttributesSatisfying( - attributes -> - assertThat(attributes.asMap()) - .doesNotContainKey(SERVER_PORT))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasAttribute(SERVER_ADDRESS, configuredTarget) + .hasAttributesSatisfying( + attributes -> + assertThat(attributes.asMap()) + .doesNotContainKey(SERVER_PORT))))); } } diff --git a/instrumentation/jedis/jedis-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v4_0/Jedis40ClientTest.java b/instrumentation/jedis/jedis-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v4_0/Jedis40ClientTest.java index 68afc7385599..ca2177b9d6c9 100644 --- a/instrumentation/jedis/jedis-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v4_0/Jedis40ClientTest.java +++ b/instrumentation/jedis/jedis-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v4_0/Jedis40ClientTest.java @@ -6,6 +6,7 @@ package io.opentelemetry.javaagent.instrumentation.jedis.v4_0; import static io.opentelemetry.instrumentation.testing.junit.db.DbClientMetricsTestUtil.assertDurationMetric; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.DbAttributes.DB_NAMESPACE; import static io.opentelemetry.semconv.DbAttributes.DB_OPERATION_BATCH_SIZE; @@ -159,14 +160,13 @@ void mappedCommandUsesConfiguredTarget() { metric -> metric .hasName("db.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasAttribute(DB_OPERATION_NAME, "SET") - .hasAttribute(SERVER_ADDRESS, configuredHost) - .hasAttribute(SERVER_PORT, (long) configuredPort)))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasAttribute(DB_OPERATION_NAME, "SET") + .hasAttribute(SERVER_ADDRESS, configuredHost) + .hasAttribute(SERVER_PORT, (long) configuredPort)))); } @Test diff --git a/instrumentation/kubernetes-client-7.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/v7_0/KubernetesClientTest.java b/instrumentation/kubernetes-client-7.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/v7_0/KubernetesClientTest.java index 871a638f04f8..6b38a3bc1e71 100644 --- a/instrumentation/kubernetes-client-7.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/v7_0/KubernetesClientTest.java +++ b/instrumentation/kubernetes-client-7.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/v7_0/KubernetesClientTest.java @@ -7,6 +7,7 @@ import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.instrumentation.testing.junit.service.SemconvServiceStabilityUtil.maybeStablePeerService; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.instrumentation.testing.util.TelemetryDataUtil.orderByRootSpanName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; @@ -111,9 +112,8 @@ void synchronousCall() throws ApiException { .hasName("http.client.request.duration") .hasDescription("Duration of HTTP client requests.") .hasUnit("s") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying(point -> point.hasSumGreaterThan(0.0)))); + .satisfies( + hasHistogramPointsSatisfyingExactly(point -> point.hasSumGreaterThan(0.0)))); } @Test diff --git a/instrumentation/kubernetes-client-7.0/javaagent/src/version20Test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/v7_0/KubernetesClientVer20Test.java b/instrumentation/kubernetes-client-7.0/javaagent/src/version20Test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/v7_0/KubernetesClientVer20Test.java index 0696a7cd31f3..e6d4c17d9e2e 100644 --- a/instrumentation/kubernetes-client-7.0/javaagent/src/version20Test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/v7_0/KubernetesClientVer20Test.java +++ b/instrumentation/kubernetes-client-7.0/javaagent/src/version20Test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/v7_0/KubernetesClientVer20Test.java @@ -7,6 +7,7 @@ import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.instrumentation.testing.junit.service.SemconvServiceStabilityUtil.maybeStablePeerService; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.instrumentation.testing.util.TelemetryDataUtil.orderByRootSpanName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; @@ -115,9 +116,8 @@ void synchronousCall() throws ApiException { .hasName("http.client.request.duration") .hasDescription("Duration of HTTP client requests.") .hasUnit("s") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying(point -> point.hasSumGreaterThan(0.0)))); + .satisfies( + hasHistogramPointsSatisfyingExactly(point -> point.hasSumGreaterThan(0.0)))); } @Test diff --git a/instrumentation/lettuce/lettuce-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceReactiveClientTest.java b/instrumentation/lettuce/lettuce-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceReactiveClientTest.java index 29bcfb1cf545..1d88d5012504 100644 --- a/instrumentation/lettuce/lettuce-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceReactiveClientTest.java +++ b/instrumentation/lettuce/lettuce-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceReactiveClientTest.java @@ -7,6 +7,7 @@ import static io.opentelemetry.api.common.AttributeKey.booleanKey; import static io.opentelemetry.api.common.AttributeKey.longKey; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.javaagent.instrumentation.lettuce.v5_0.ExperimentalHelper.EXPERIMENTAL_ATTRIBUTES_ENABLED; import static io.opentelemetry.javaagent.instrumentation.lettuce.v5_0.ExperimentalHelper.experimental; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; @@ -440,8 +441,7 @@ void testNoResponseCommandFluxCancellationEndsSpanOnce() { metrics -> metrics .hasName("db.client.operation.duration") - .hasHistogramSatisfying( - histogram -> histogram.hasPointsSatisfying(point -> point.hasCount(1)))); + .satisfies(hasHistogramPointsSatisfyingExactly(point -> point.hasCount(1)))); }); } diff --git a/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceClientTest.java b/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceClientTest.java index 6846fcece1db..adec2f5f698a 100644 --- a/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceClientTest.java +++ b/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceClientTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.instrumentation.lettuce.v5_1; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.instrumentation.testing.util.TestLatestDeps.testLatestDeps; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; @@ -106,14 +107,8 @@ protected void assertCommandErrorMetric(String errorType) { "db.client.operation.duration", metrics -> metrics.anySatisfy( - metric -> - assertThat(metric) - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfying( - equalTo(ERROR_TYPE, errorType)))))); + hasHistogramPointsSatisfyingExactly( + point -> point.hasAttributesSatisfying(equalTo(ERROR_TYPE, errorType))))); } protected String spanName(String operation) { diff --git a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractDistributionSummaryHistogramGaugesTest.java b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractDistributionSummaryHistogramGaugesTest.java index 318a346dc897..8e762d19dc07 100644 --- a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractDistributionSummaryHistogramGaugesTest.java +++ b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractDistributionSummaryHistogramGaugesTest.java @@ -7,6 +7,7 @@ import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.instrumentation.micrometer.v1_5.AbstractCounterTest.INSTRUMENTATION_NAME; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import io.micrometer.core.instrument.DistributionSummary; @@ -51,15 +52,14 @@ void testMicrometerHistogram() { .hasName("testSummary") .hasDescription("This is a test distribution summary") .hasUnit("things") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - points -> - points - .hasSum(555.5) - .hasCount(4) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("tag"), "value"))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + points -> + points + .hasSum(555.5) + .hasCount(4) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("tag"), "value"))))); testing() .waitAndAssertMetrics( INSTRUMENTATION_NAME, @@ -119,15 +119,14 @@ void testMicrometerPercentiles() { .hasName("testSummary") .hasDescription("This is a test distribution summary") .hasUnit("things") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(150) - .hasCount(2) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("tag"), "value"))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(150) + .hasCount(2) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("tag"), "value"))))); testing() .waitAndAssertMetrics( INSTRUMENTATION_NAME, diff --git a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractDistributionSummaryTest.java b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractDistributionSummaryTest.java index ee0b50d3bb95..651e6b2ba872 100644 --- a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractDistributionSummaryTest.java +++ b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractDistributionSummaryTest.java @@ -7,6 +7,7 @@ import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.instrumentation.micrometer.v1_5.AbstractCounterTest.INSTRUMENTATION_NAME; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import io.micrometer.core.instrument.DistributionSummary; @@ -51,16 +52,15 @@ void testMicrometerDistributionSummary() { .hasName("testSummary") .hasDescription("This is a test distribution summary") .hasUnit("things") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(7) - .hasCount(3) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("tag"), "value")) - .hasBucketBoundaries(NO_BUCKETS)))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(7) + .hasCount(3) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("tag"), "value")) + .hasBucketBoundaries(NO_BUCKETS)))); // micrometer gauge histogram is not emitted testing() @@ -78,15 +78,14 @@ void testMicrometerDistributionSummary() { metric -> metric .hasName("testSummary") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(7) - .hasCount(3) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("tag"), "value"))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(7) + .hasCount(3) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("tag"), "value"))))); } @Test @@ -116,17 +115,16 @@ void testMicrometerDistributionSummaryWithCustomBuckets() { .hasName("testSummaryWithCustomBuckets") .hasDescription("This is a test distribution summary") .hasUnit("things") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - points -> - points - .hasSum(555.5) - .hasCount(4) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("tag"), "value")) - .hasBucketBoundaries(1, 10, 100, 1000) - .hasBucketCounts(1, 1, 1, 1, 0)))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + points -> + points + .hasSum(555.5) + .hasCount(4) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("tag"), "value")) + .hasBucketBoundaries(1, 10, 100, 1000) + .hasBucketCounts(1, 1, 1, 1, 0)))); // micrometer gauge histogram is not emitted testing() diff --git a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractNamingConventionTest.java b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractNamingConventionTest.java index e3ae8cf73f2a..672acefed9a3 100644 --- a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractNamingConventionTest.java +++ b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractNamingConventionTest.java @@ -7,6 +7,7 @@ import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.instrumentation.micrometer.v1_5.AbstractCounterTest.INSTRUMENTATION_NAME; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static java.util.Collections.singletonList; import static java.util.concurrent.TimeUnit.SECONDS; @@ -90,12 +91,11 @@ void renameDistributionSummary() { metric -> metric .hasName("test.renamedSummary") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(stringKey("test.tag"), "test.value"))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(stringKey("test.tag"), "test.value"))))); } @Test @@ -247,11 +247,10 @@ void renameTimer() { metric -> metric .hasName("test.renamedTimer") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(stringKey("test.tag"), "test.value"))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(stringKey("test.tag"), "test.value"))))); } } diff --git a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractPrometheusModeTest.java b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractPrometheusModeTest.java index 2d78a0b1a232..6418ec78b57a 100644 --- a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractPrometheusModeTest.java +++ b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractPrometheusModeTest.java @@ -7,6 +7,7 @@ import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.instrumentation.micrometer.v1_5.AbstractCounterTest.INSTRUMENTATION_NAME; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static java.util.Collections.singletonList; @@ -91,15 +92,14 @@ void testDistributionSummary() { .hasName("testPrometheusSummary.items") .hasDescription("This is a test summary") .hasUnit("items") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(54) - .hasCount(2) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("tag"), "value"))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(54) + .hasCount(2) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("tag"), "value"))))); } @Test @@ -322,15 +322,14 @@ void testTimer() { .hasName("testPrometheusTimer.seconds") .hasDescription("This is a test timer") .hasUnit("s") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(16.789) - .hasCount(3) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("tag"), "value"))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(16.789) + .hasCount(3) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("tag"), "value"))))); } @Test @@ -394,22 +393,20 @@ void testTimerCustomBucketBoundaryFormatting() { .hasName("testPrometheusTimerBoundary.seconds") .hasDescription("This is a test timer") .hasUnit("s") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(0.1) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("tag"), "value")) - .satisfies( - pointData -> { - assertThat(pointData.getBoundaries()).hasSize(1); - assertThat( - Double.toString( - pointData.getBoundaries().get(0))) - .isEqualTo("0.3"); - })))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(0.1) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("tag"), "value")) + .satisfies( + pointData -> { + assertThat(pointData.getBoundaries()).hasSize(1); + assertThat( + Double.toString(pointData.getBoundaries().get(0))) + .isEqualTo("0.3"); + })))); } } diff --git a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerHistogramGaugesTest.java b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerHistogramGaugesTest.java index d206a385ac8a..fa3c140f5556 100644 --- a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerHistogramGaugesTest.java +++ b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerHistogramGaugesTest.java @@ -7,6 +7,7 @@ import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.instrumentation.micrometer.v1_5.AbstractCounterTest.INSTRUMENTATION_NAME; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static java.util.concurrent.TimeUnit.MILLISECONDS; import static java.util.concurrent.TimeUnit.SECONDS; @@ -52,15 +53,14 @@ void testMicrometerHistogram() { .hasName("testTimer") .hasDescription("This is a test timer") .hasUnit("s") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(555.5) - .hasCount(4) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("tag"), "value"))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(555.5) + .hasCount(4) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("tag"), "value"))))); testing() .waitAndAssertMetrics( INSTRUMENTATION_NAME, @@ -119,15 +119,14 @@ void testMicrometerPercentiles() { .hasName("testTimer") .hasDescription("This is a test timer") .hasUnit("s") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(0.55) - .hasCount(2) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("tag"), "value"))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(0.55) + .hasCount(2) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("tag"), "value"))))); testing() .waitAndAssertMetrics( INSTRUMENTATION_NAME, diff --git a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerMillisecondsTest.java b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerMillisecondsTest.java index 8a6d1357d8f3..28c69aa332d0 100644 --- a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerMillisecondsTest.java +++ b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerMillisecondsTest.java @@ -7,6 +7,7 @@ import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.instrumentation.micrometer.v1_5.AbstractCounterTest.INSTRUMENTATION_NAME; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static java.util.concurrent.TimeUnit.MILLISECONDS; import static java.util.concurrent.TimeUnit.SECONDS; @@ -45,15 +46,14 @@ void testTimerWithBaseUnitMilliseconds() { .hasName("testTimerMilliseconds") .hasDescription("This is a test timer") .hasUnit("ms") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(23_345) - .hasCount(3) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("tag"), "value"))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(23_345) + .hasCount(3) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("tag"), "value"))))); // when Metrics.globalRegistry.remove(timer); diff --git a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerTest.java b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerTest.java index 2658fc4b1122..2fdd3af42c13 100644 --- a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerTest.java +++ b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerTest.java @@ -7,6 +7,7 @@ import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.instrumentation.micrometer.v1_5.AbstractCounterTest.INSTRUMENTATION_NAME; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static java.util.concurrent.TimeUnit.MILLISECONDS; @@ -52,16 +53,15 @@ void testTimer() { .hasName("testTimer") .hasDescription("This is a test timer") .hasUnit("s") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(42) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("tag"), "value")) - .hasBucketBoundaries(NO_BUCKETS)))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(42) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("tag"), "value")) + .hasBucketBoundaries(NO_BUCKETS)))); // micrometer gauge histogram is not emitted testing() @@ -94,14 +94,13 @@ void testNanoPrecision() { metric .hasName("testNanoTimer") .hasUnit("s") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(0.001234) - .hasCount(1) - .hasAttributes(Attributes.empty())))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(0.001234) + .hasCount(1) + .hasAttributes(Attributes.empty())))); } @Test @@ -134,17 +133,16 @@ void testMicrometerTimerWithCustomBuckets() { .hasName("testTimerWithCustomBuckets") .hasDescription("This is a test timer") .hasUnit("s") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(555.5) - .hasCount(4) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("tag"), "value")) - .satisfies(hasBucketBoundaries(1, 10, 100, 1_000)) - .hasBucketCounts(1, 1, 1, 1, 0)))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(555.5) + .hasCount(4) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("tag"), "value")) + .satisfies(hasBucketBoundaries(1, 10, 100, 1_000)) + .hasBucketCounts(1, 1, 1, 1, 0)))); } private static ThrowingConsumer hasBucketBoundaries(double... buckets) { diff --git a/instrumentation/mongo/mongo-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/mongo/v4_0/MongoConfiguredTargetTest.java b/instrumentation/mongo/mongo-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/mongo/v4_0/MongoConfiguredTargetTest.java index 06112e14ea42..13a70c1e9a0c 100644 --- a/instrumentation/mongo/mongo-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/mongo/v4_0/MongoConfiguredTargetTest.java +++ b/instrumentation/mongo/mongo-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/mongo/v4_0/MongoConfiguredTargetTest.java @@ -6,6 +6,7 @@ package io.opentelemetry.javaagent.instrumentation.mongo.v4_0; import static io.opentelemetry.instrumentation.testing.junit.db.DbClientMetricsTestUtil.assertDurationMetric; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.semconv.DbAttributes.DB_COLLECTION_NAME; import static io.opentelemetry.semconv.DbAttributes.DB_NAMESPACE; import static io.opentelemetry.semconv.DbAttributes.DB_OPERATION_NAME; @@ -96,11 +97,10 @@ void severalSeedsAreTheOperationDurationLogicalServer() { metric -> metric .hasName("db.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttribute( - SERVER_ADDRESS, "db1.example:27017,db2.example:27018")))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttribute( + SERVER_ADDRESS, "db1.example:27017,db2.example:27018")))); } } diff --git a/instrumentation/nats/nats-2.17/testing/src/main/java/io/opentelemetry/instrumentation/nats/v2_17/AbstractNatsTest.java b/instrumentation/nats/nats-2.17/testing/src/main/java/io/opentelemetry/instrumentation/nats/v2_17/AbstractNatsTest.java index c6120d167e44..22d0bd683039 100644 --- a/instrumentation/nats/nats-2.17/testing/src/main/java/io/opentelemetry/instrumentation/nats/v2_17/AbstractNatsTest.java +++ b/instrumentation/nats/nats-2.17/testing/src/main/java/io/opentelemetry/instrumentation/nats/v2_17/AbstractNatsTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.instrumentation.nats.v2_17; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.ErrorAttributes.ERROR_TYPE; @@ -54,21 +55,18 @@ void assertProducerMetrics(String operationName, String destination, String erro .hasUnit("s") .hasDescription( "Duration of messaging operation initiated by a producer or consumer client.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0) - .hasAttributesSatisfyingExactly( - equalTo( - MESSAGING_OPERATION_NAME, operationName), - equalTo(MESSAGING_SYSTEM, "nats"), - equalTo(ERROR_TYPE, errorType), - equalTo( - MESSAGING_DESTINATION_NAME, destination), - equalTo(MESSAGING_OPERATION_TYPE, "send")) - .hasBucketBoundaries(DURATION_BUCKETS))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, operationName), + equalTo(MESSAGING_SYSTEM, "nats"), + equalTo(ERROR_TYPE, errorType), + equalTo(MESSAGING_DESTINATION_NAME, destination), + equalTo(MESSAGING_OPERATION_TYPE, "send")) + .hasBucketBoundaries(DURATION_BUCKETS))))); testing() .waitAndAssertMetrics( INSTRUMENTATION_NAME, @@ -108,19 +106,17 @@ void assertProcessMetrics(String destination, String errorType) { assertThat(metric) .hasUnit("s") .hasDescription("Duration of processing operation.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "process"), - equalTo(MESSAGING_SYSTEM, "nats"), - equalTo(ERROR_TYPE, errorType), - equalTo( - MESSAGING_DESTINATION_NAME, destination)) - .hasBucketBoundaries(DURATION_BUCKETS))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "process"), + equalTo(MESSAGING_SYSTEM, "nats"), + equalTo(ERROR_TYPE, errorType), + equalTo(MESSAGING_DESTINATION_NAME, destination)) + .hasBucketBoundaries(DURATION_BUCKETS))))); testing() .waitAndAssertMetrics( INSTRUMENTATION_NAME, diff --git a/instrumentation/openai/openai-java-1.1/library/src/test/java/io/opentelemetry/instrumentation/openai/v1_1/ChatTest.java b/instrumentation/openai/openai-java-1.1/library/src/test/java/io/opentelemetry/instrumentation/openai/v1_1/ChatTest.java index dd6ab772df2c..5263347f92ef 100644 --- a/instrumentation/openai/openai-java-1.1/library/src/test/java/io/opentelemetry/instrumentation/openai/v1_1/ChatTest.java +++ b/instrumentation/openai/openai-java-1.1/library/src/test/java/io/opentelemetry/instrumentation/openai/v1_1/ChatTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.instrumentation.openai.v1_1; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; import static io.opentelemetry.semconv.incubating.EventIncubatingAttributes.EVENT_NAME; @@ -131,44 +132,39 @@ void basicNoCaptureContent() { metric -> metric .hasName("gen_ai.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL)))), + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL)))), metric -> metric .hasName("gen_ai.client.token.usage") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(22.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, INPUT)), - point -> - point - .hasSum(2.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(22.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, INPUT)), + point -> + point + .hasSum(2.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT))))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -234,44 +230,39 @@ void multipleChoicesNoCaptureContent() { metric -> metric .hasName("gen_ai.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL)))), + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL)))), metric -> metric .hasName("gen_ai.client.token.usage") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(22.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, INPUT)), - point -> - point - .hasSum(7.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(22.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, INPUT)), + point -> + point + .hasSum(7.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT))))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -366,44 +357,39 @@ void toolCallsNoCaptureContent() { metric -> metric .hasName("gen_ai.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL)))), + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL)))), metric -> metric .hasName("gen_ai.client.token.usage") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(67) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, INPUT)), - point -> - point - .hasSum(46.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(67) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, INPUT)), + point -> + point + .hasSum(46.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT))))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -491,44 +477,39 @@ void toolCallsNoCaptureContent() { metric -> metric .hasName("gen_ai.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL)))), + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL)))), metric -> metric .hasName("gen_ai.client.token.usage") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(99) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, INPUT)), - point -> - point - .hasSum(25.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(99) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, INPUT)), + point -> + point + .hasSum(25.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT))))); SpanContext spanCtx1 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -643,19 +624,17 @@ void streamNoCaptureContent() { metric -> metric .hasName("gen_ai.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, - TEST_CHAT_RESPONSE_MODEL))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo( + GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL))))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -740,19 +719,17 @@ void streamMultipleChoicesNoCaptureContent() { metric -> metric .hasName("gen_ai.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, - TEST_CHAT_RESPONSE_MODEL))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo( + GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL))))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -843,19 +820,17 @@ void streamToolCallsNoCaptureContent() { metric -> metric .hasName("gen_ai.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, - TEST_CHAT_RESPONSE_MODEL))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo( + GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL))))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -946,19 +921,17 @@ void streamToolCallsNoCaptureContent() { metric -> metric .hasName("gen_ai.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, - TEST_CHAT_RESPONSE_MODEL))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo( + GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL))))); SpanContext spanCtx1 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); diff --git a/instrumentation/openai/openai-java-1.1/testing/src/main/java/io/opentelemetry/instrumentation/openai/v1_1/AbstractChatTest.java b/instrumentation/openai/openai-java-1.1/testing/src/main/java/io/opentelemetry/instrumentation/openai/v1_1/AbstractChatTest.java index 455d8e2f712a..8d29404c8bbf 100644 --- a/instrumentation/openai/openai-java-1.1/testing/src/main/java/io/opentelemetry/instrumentation/openai/v1_1/AbstractChatTest.java +++ b/instrumentation/openai/openai-java-1.1/testing/src/main/java/io/opentelemetry/instrumentation/openai/v1_1/AbstractChatTest.java @@ -6,6 +6,7 @@ package io.opentelemetry.instrumentation.openai.v1_1; import static io.opentelemetry.instrumentation.api.internal.SemconvExceptionSignal.emitExceptionAsSpanEvents; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; import static io.opentelemetry.semconv.ErrorAttributes.ERROR_TYPE; @@ -210,44 +211,39 @@ void basic() { metric -> metric .hasName("gen_ai.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL)))), + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL)))), metric -> metric .hasName("gen_ai.client.token.usage") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(22.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, INPUT)), - point -> - point - .hasSum(2.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(22.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, INPUT)), + point -> + point + .hasSum(2.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT))))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -378,44 +374,39 @@ void allTheClientOptions() { metric -> metric .hasName("gen_ai.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL)))), + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL)))), metric -> metric .hasName("gen_ai.client.token.usage") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(22.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, INPUT)), - point -> - point - .hasSum(3.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(22.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, INPUT)), + point -> + point + .hasSum(3.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT))))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -483,44 +474,39 @@ void multipleChoices() { metric -> metric .hasName("gen_ai.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL)))), + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL)))), metric -> metric .hasName("gen_ai.client.token.usage") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(22.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, INPUT)), - point -> - point - .hasSum(7.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(22.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, INPUT)), + point -> + point + .hasSum(7.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT))))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -618,44 +604,39 @@ void toolCalls() { metric -> metric .hasName("gen_ai.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL)))), + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL)))), metric -> metric .hasName("gen_ai.client.token.usage") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(67) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, INPUT)), - point -> - point - .hasSum(46.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(67) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, INPUT)), + point -> + point + .hasSum(46.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT))))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -770,44 +751,39 @@ void toolCalls() { metric -> metric .hasName("gen_ai.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL)))), + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL)))), metric -> metric .hasName("gen_ai.client.token.usage") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(99) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, INPUT)), - point -> - point - .hasSum(25.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(99) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, INPUT)), + point -> + point + .hasSum(25.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT))))); SpanContext spanCtx1 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -944,17 +920,16 @@ void connectionError() { metric -> metric .hasName("gen_ai.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(ERROR_TYPE, OpenAIIoException.class.getName()), - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(ERROR_TYPE, OpenAIIoException.class.getName()), + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL))))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -1012,19 +987,17 @@ void stream() { metric -> metric .hasName("gen_ai.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, - TEST_CHAT_RESPONSE_MODEL))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo( + GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL))))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -1139,44 +1112,39 @@ void streamIncludeUsage() { metric -> metric .hasName("gen_ai.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL)))), + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL)))), metric -> metric .hasName("gen_ai.client.token.usage") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(22.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, INPUT)), - point -> - point - .hasSum(3.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(22.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, INPUT)), + point -> + point + .hasSum(3.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT))))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -1261,19 +1229,17 @@ void streamMultipleChoices() { metric -> metric .hasName("gen_ai.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, - TEST_CHAT_RESPONSE_MODEL))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo( + GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL))))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -1416,19 +1382,17 @@ void streamToolCalls() { metric -> metric .hasName("gen_ai.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, - TEST_CHAT_RESPONSE_MODEL))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo( + GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL))))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -1549,19 +1513,17 @@ void streamToolCalls() { metric -> metric .hasName("gen_ai.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, - TEST_CHAT_RESPONSE_MODEL))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo( + GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL))))); SpanContext spanCtx1 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -1699,17 +1661,16 @@ void streamConnectionError() { metric -> metric .hasName("gen_ai.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(ERROR_TYPE, OpenAIIoException.class.getName()), - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(ERROR_TYPE, OpenAIIoException.class.getName()), + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL))))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); diff --git a/instrumentation/openai/openai-java-1.1/testing/src/main/java/io/opentelemetry/instrumentation/openai/v1_1/AbstractEmbeddingsTest.java b/instrumentation/openai/openai-java-1.1/testing/src/main/java/io/opentelemetry/instrumentation/openai/v1_1/AbstractEmbeddingsTest.java index f3d3cdab7099..713e43a7f8d6 100644 --- a/instrumentation/openai/openai-java-1.1/testing/src/main/java/io/opentelemetry/instrumentation/openai/v1_1/AbstractEmbeddingsTest.java +++ b/instrumentation/openai/openai-java-1.1/testing/src/main/java/io/opentelemetry/instrumentation/openai/v1_1/AbstractEmbeddingsTest.java @@ -6,6 +6,7 @@ package io.opentelemetry.instrumentation.openai.v1_1; import static io.opentelemetry.instrumentation.api.internal.SemconvExceptionSignal.emitExceptionAsSpanEvents; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; @@ -117,32 +118,30 @@ void basic() { metric -> metric .hasName("gen_ai.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, EMBEDDINGS), - equalTo(GEN_AI_REQUEST_MODEL, MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, MODEL)))), + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, EMBEDDINGS), + equalTo(GEN_AI_REQUEST_MODEL, MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, MODEL)))), metric -> metric .hasName("gen_ai.client.token.usage") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(4.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, EMBEDDINGS), - equalTo(GEN_AI_REQUEST_MODEL, MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, MODEL), - equalTo(GEN_AI_TOKEN_TYPE, INPUT))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(4.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, EMBEDDINGS), + equalTo(GEN_AI_REQUEST_MODEL, MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, MODEL), + equalTo(GEN_AI_TOKEN_TYPE, INPUT))))); } @Test @@ -182,32 +181,30 @@ GEN_AI_REQUEST_ENCODING_FORMATS, singletonList("base64")), metric -> metric .hasName("gen_ai.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, EMBEDDINGS), - equalTo(GEN_AI_REQUEST_MODEL, MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, MODEL)))), + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, EMBEDDINGS), + equalTo(GEN_AI_REQUEST_MODEL, MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, MODEL)))), metric -> metric .hasName("gen_ai.client.token.usage") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(4.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, EMBEDDINGS), - equalTo(GEN_AI_REQUEST_MODEL, MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, MODEL), - equalTo(GEN_AI_TOKEN_TYPE, INPUT))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(4.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, EMBEDDINGS), + equalTo(GEN_AI_REQUEST_MODEL, MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, MODEL), + equalTo(GEN_AI_TOKEN_TYPE, INPUT))))); } @Test @@ -266,16 +263,15 @@ void connectionError() { metric -> metric .hasName("gen_ai.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(ERROR_TYPE, OpenAIIoException.class.getName()), - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, EMBEDDINGS), - equalTo(GEN_AI_REQUEST_MODEL, MODEL))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(ERROR_TYPE, OpenAIIoException.class.getName()), + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, EMBEDDINGS), + equalTo(GEN_AI_REQUEST_MODEL, MODEL))))); } } diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/MeterTest.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/MeterTest.java index 6ebe4174f8e6..55a5aef9a793 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/MeterTest.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/MeterTest.java @@ -6,6 +6,7 @@ package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics; import static io.opentelemetry.api.common.AttributeKey.stringKey; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import io.opentelemetry.api.common.Attributes; @@ -349,14 +350,12 @@ void longHistogram() { .setVersion("1.2.3") .setSchemaUrl("http://schema.org") .build()) - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(11.0) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("q"), "r"))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(11.0) + .hasAttributesSatisfyingExactly(equalTo(stringKey("q"), "r"))))); } @Test @@ -379,14 +378,12 @@ void doubleHistogram() { .setVersion("1.2.3") .setSchemaUrl("http://schema.org") .build()) - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(12.1) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("q"), "r"))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(12.1) + .hasAttributesSatisfyingExactly(equalTo(stringKey("q"), "r"))))); } @Test diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.31/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_31/metrics/MeterTest.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.31/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_31/metrics/MeterTest.java index acd7d2d25b35..39a6f79d8c87 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.31/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_31/metrics/MeterTest.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.31/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_31/metrics/MeterTest.java @@ -6,6 +6,7 @@ package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_31.metrics; import static io.opentelemetry.api.common.AttributeKey.stringKey; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static java.util.Collections.singletonList; @@ -237,15 +238,14 @@ void longHistogram() { .setVersion("1.2.3") .setSchemaUrl("http://schema.org") .build()) - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(11.0) - .hasBucketBoundaries(10.0) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("test"), "test"))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(11.0) + .hasBucketBoundaries(10.0) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("test"), "test"))))); } @Test @@ -274,15 +274,14 @@ void doubleHistogram() { .setVersion("1.2.3") .setSchemaUrl("http://schema.org") .build()) - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(12.1) - .hasBucketBoundaries(10.0) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("test"), "test"))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(12.1) + .hasBucketBoundaries(10.0) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("test"), "test"))))); } @Test diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/incubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/incubator/metrics/MeterTest.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/incubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/incubator/metrics/MeterTest.java index 7dd5db361405..3f80bdc5e295 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/incubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/incubator/metrics/MeterTest.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/incubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/incubator/metrics/MeterTest.java @@ -6,6 +6,7 @@ package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_32.incubator.metrics; import static io.opentelemetry.api.common.AttributeKey.stringKey; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static java.util.Collections.singletonList; @@ -237,15 +238,14 @@ void longHistogram() { .setVersion("1.2.3") .setSchemaUrl("http://schema.org") .build()) - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(11.0) - .hasBucketBoundaries(10.0) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("test"), "test"))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(11.0) + .hasBucketBoundaries(10.0) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("test"), "test"))))); } @Test @@ -274,15 +274,14 @@ void doubleHistogram() { .setVersion("1.2.3") .setSchemaUrl("http://schema.org") .build()) - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(12.1) - .hasBucketBoundaries(10.0) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("test"), "test"))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(12.1) + .hasBucketBoundaries(10.0) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("test"), "test"))))); } @Test diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/metrics/MeterTest.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/metrics/MeterTest.java index 0a1f8a2bde9c..8bdeb251e218 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/metrics/MeterTest.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/metrics/MeterTest.java @@ -6,6 +6,7 @@ package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_32.metrics; import static io.opentelemetry.api.common.AttributeKey.stringKey; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static java.util.Collections.singletonList; import static org.assertj.core.api.Assertions.assertThatThrownBy; @@ -76,15 +77,14 @@ void longHistogram() { .setVersion("1.2.3") .setSchemaUrl("http://schema.org") .build()) - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(11.0) - .hasBucketBoundaries(10.0) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("test"), "test"))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(11.0) + .hasBucketBoundaries(10.0) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("test"), "test"))))); } @Test @@ -110,14 +110,13 @@ void doubleHistogram() { .setVersion("1.2.3") .setSchemaUrl("http://schema.org") .build()) - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(12.1) - .hasBucketBoundaries(10.0) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("test"), "test"))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(12.1) + .hasBucketBoundaries(10.0) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("test"), "test"))))); } } diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/incubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/MeterTest.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/incubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/MeterTest.java index c9cf6cc2a2b3..93aa47fc7059 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/incubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/MeterTest.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/incubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/MeterTest.java @@ -6,6 +6,7 @@ package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_37.incubator.metrics; import static io.opentelemetry.api.common.AttributeKey.stringKey; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static java.util.Collections.singletonList; @@ -237,15 +238,14 @@ void longHistogram() { .setVersion("1.2.3") .setSchemaUrl("http://schema.org") .build()) - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(11.0) - .hasBucketBoundaries(10.0) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("test"), "test"))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(11.0) + .hasBucketBoundaries(10.0) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("test"), "test"))))); } @Test @@ -274,15 +274,14 @@ void doubleHistogram() { .setVersion("1.2.3") .setSchemaUrl("http://schema.org") .build()) - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(12.1) - .hasBucketBoundaries(10.0) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("test"), "test"))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(12.1) + .hasBucketBoundaries(10.0) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("test"), "test"))))); } @Test diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/oldAndNewIncubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/MeterTest.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/oldAndNewIncubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/MeterTest.java index c9cf6cc2a2b3..93aa47fc7059 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/oldAndNewIncubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/MeterTest.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/oldAndNewIncubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/MeterTest.java @@ -6,6 +6,7 @@ package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_37.incubator.metrics; import static io.opentelemetry.api.common.AttributeKey.stringKey; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static java.util.Collections.singletonList; @@ -237,15 +238,14 @@ void longHistogram() { .setVersion("1.2.3") .setSchemaUrl("http://schema.org") .build()) - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(11.0) - .hasBucketBoundaries(10.0) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("test"), "test"))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(11.0) + .hasBucketBoundaries(10.0) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("test"), "test"))))); } @Test @@ -274,15 +274,14 @@ void doubleHistogram() { .setVersion("1.2.3") .setSchemaUrl("http://schema.org") .build()) - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(12.1) - .hasBucketBoundaries(10.0) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("test"), "test"))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(12.1) + .hasBucketBoundaries(10.0) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("test"), "test"))))); } @Test diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/metrics/MeterTest.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/metrics/MeterTest.java index b520c8338250..e1b066b9e521 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/metrics/MeterTest.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/metrics/MeterTest.java @@ -6,6 +6,7 @@ package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_37.metrics; import static io.opentelemetry.api.common.AttributeKey.stringKey; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static java.util.Collections.singletonList; import static org.assertj.core.api.Assertions.assertThatThrownBy; @@ -74,15 +75,14 @@ void longHistogram() { .setVersion("1.2.3") .setSchemaUrl("http://schema.org") .build()) - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(11.0) - .hasBucketBoundaries(10.0) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("test"), "test"))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(11.0) + .hasBucketBoundaries(10.0) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("test"), "test"))))); } @Test @@ -108,14 +108,13 @@ void doubleHistogram() { .setVersion("1.2.3") .setSchemaUrl("http://schema.org") .build()) - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(12.1) - .hasBucketBoundaries(10.0) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("test"), "test"))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(12.1) + .hasBucketBoundaries(10.0) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("test"), "test"))))); } } diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.65/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_65/incubator/metrics/MeterTest.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.65/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_65/incubator/metrics/MeterTest.java index 5fd58a2cb2a3..f9ee405c6ce4 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.65/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_65/incubator/metrics/MeterTest.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.65/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_65/incubator/metrics/MeterTest.java @@ -6,6 +6,7 @@ package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_65.incubator.metrics; import static io.opentelemetry.api.common.AttributeKey.stringKey; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; @@ -171,14 +172,12 @@ void boundLongHistogram() { metric -> metric .hasName("test") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(11.0) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("q"), "r"))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(11.0) + .hasAttributesSatisfyingExactly(equalTo(stringKey("q"), "r"))))); } @Test @@ -197,14 +196,12 @@ void boundDoubleHistogram() { metric -> metric .hasName("test") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(12.1) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("q"), "r"))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(12.1) + .hasAttributesSatisfyingExactly(equalTo(stringKey("q"), "r"))))); } @Test diff --git a/instrumentation/pulsar/pulsar-2.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/pulsar/v2_8/PulsarClientTest.java b/instrumentation/pulsar/pulsar-2.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/pulsar/v2_8/PulsarClientTest.java index 04a77471b741..59682944c2b5 100644 --- a/instrumentation/pulsar/pulsar-2.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/pulsar/v2_8/PulsarClientTest.java +++ b/instrumentation/pulsar/pulsar-2.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/pulsar/v2_8/PulsarClientTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.pulsar.v2_8; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.instrumentation.testing.util.TelemetryDataUtil.asRemote; import static io.opentelemetry.instrumentation.testing.util.TelemetryDataUtil.orderByRootSpanKind; import static io.opentelemetry.instrumentation.testing.util.TelemetryDataUtil.orderByRootSpanName; @@ -76,20 +77,19 @@ void testConsumeNonPartitionedTopic() throws Exception { assertThat(metric) .hasUnit("s") .hasDescription("Duration of processing operation.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "process"), - equalTo(MESSAGING_SYSTEM, "pulsar"), - equalTo(MESSAGING_DESTINATION_NAME, topic), - equalTo( - MESSAGING_DESTINATION_SUBSCRIPTION_NAME, - "test_sub")) - .hasBucketBoundaries(DURATION_BUCKETS))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "process"), + equalTo(MESSAGING_SYSTEM, "pulsar"), + equalTo(MESSAGING_DESTINATION_NAME, topic), + equalTo( + MESSAGING_DESTINATION_SUBSCRIPTION_NAME, + "test_sub")) + .hasBucketBoundaries(DURATION_BUCKETS))))); testing.waitAndAssertMetrics( INSTRUMENTATION_NAME, "messaging.client.consumed.messages", @@ -147,32 +147,31 @@ void testConsumeNonPartitionedTopic() throws Exception { .hasUnit("s") .hasDescription( "Duration of messaging operation initiated by a producer or consumer client.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "send"), - equalTo(MESSAGING_SYSTEM, "pulsar"), - equalTo(MESSAGING_DESTINATION_NAME, topic), - equalTo(MESSAGING_OPERATION_TYPE, "send"), - equalTo(SERVER_ADDRESS, brokerHost), - equalTo(SERVER_PORT, brokerPort)), - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "receive"), - equalTo(MESSAGING_SYSTEM, "pulsar"), - equalTo(MESSAGING_DESTINATION_NAME, topic), - equalTo( - MESSAGING_DESTINATION_SUBSCRIPTION_NAME, - "test_sub"), - equalTo(MESSAGING_OPERATION_TYPE, "receive"), - equalTo(SERVER_ADDRESS, brokerHost), - equalTo(SERVER_PORT, brokerPort)))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "send"), + equalTo(MESSAGING_SYSTEM, "pulsar"), + equalTo(MESSAGING_DESTINATION_NAME, topic), + equalTo(MESSAGING_OPERATION_TYPE, "send"), + equalTo(SERVER_ADDRESS, brokerHost), + equalTo(SERVER_PORT, brokerPort)), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "receive"), + equalTo(MESSAGING_SYSTEM, "pulsar"), + equalTo(MESSAGING_DESTINATION_NAME, topic), + equalTo( + MESSAGING_DESTINATION_SUBSCRIPTION_NAME, + "test_sub"), + equalTo(MESSAGING_OPERATION_TYPE, "receive"), + equalTo(SERVER_ADDRESS, brokerHost), + equalTo(SERVER_PORT, brokerPort)))))); AtomicReference producerSpan = new AtomicReference<>(); testing.waitAndAssertSortedTraces( diff --git a/instrumentation/ratpack/ratpack-1.4/javaagent/src/version17Test/java/io/opentelemetry/javaagent/instrumentation/ratpack/v1_4/httpclient/client/RatpackHttpClientTest.java b/instrumentation/ratpack/ratpack-1.4/javaagent/src/version17Test/java/io/opentelemetry/javaagent/instrumentation/ratpack/v1_4/httpclient/client/RatpackHttpClientTest.java index 6c5ec8f0dd8d..bd7534fea0da 100644 --- a/instrumentation/ratpack/ratpack-1.4/javaagent/src/version17Test/java/io/opentelemetry/javaagent/instrumentation/ratpack/v1_4/httpclient/client/RatpackHttpClientTest.java +++ b/instrumentation/ratpack/ratpack-1.4/javaagent/src/version17Test/java/io/opentelemetry/javaagent/instrumentation/ratpack/v1_4/httpclient/client/RatpackHttpClientTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.ratpack.v1_4.httpclient.client; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.HttpAttributes.HTTP_REQUEST_METHOD; import static io.opentelemetry.semconv.HttpAttributes.HTTP_RESPONSE_STATUS_CODE; @@ -73,15 +74,14 @@ void durationMetricHasProtocolVersion() throws Exception { metricData -> assertThat(metricData.getInstrumentationScopeInfo().getVersion()) .isNotEmpty()) - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(HTTP_REQUEST_METHOD, "GET"), - equalTo(HTTP_RESPONSE_STATUS_CODE, 200), - equalTo(NETWORK_PROTOCOL_VERSION, "1.1"), - equalTo(SERVER_ADDRESS, uri.getHost()), - equalTo(SERVER_PORT, uri.getPort()))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(HTTP_REQUEST_METHOD, "GET"), + equalTo(HTTP_RESPONSE_STATUS_CODE, 200), + equalTo(NETWORK_PROTOCOL_VERSION, "1.1"), + equalTo(SERVER_ADDRESS, uri.getHost()), + equalTo(SERVER_PORT, uri.getPort()))))); } } diff --git a/instrumentation/rocketmq/rocketmq-client-4.8/library/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v4_8/RocketMqMetricsTest.java b/instrumentation/rocketmq/rocketmq-client-4.8/library/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v4_8/RocketMqMetricsTest.java index 2fa7072d59d0..3c92e20bb174 100644 --- a/instrumentation/rocketmq/rocketmq-client-4.8/library/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v4_8/RocketMqMetricsTest.java +++ b/instrumentation/rocketmq/rocketmq-client-4.8/library/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v4_8/RocketMqMetricsTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.instrumentation.rocketmqclient.v4_8; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.ErrorAttributes.ERROR_TYPE; @@ -220,22 +221,16 @@ private static void assertDuration( metricName, metrics -> metrics.satisfiesExactly( - metric -> - assertThat(metric) - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, operationName), - equalTo(MESSAGING_SYSTEM, "rocketmq"), - equalTo(ERROR_TYPE, errorType), - equalTo( - MESSAGING_CONSUMER_GROUP_NAME, consumerGroup), - equalTo(MESSAGING_DESTINATION_NAME, destination), - equalTo( - MESSAGING_OPERATION_TYPE, operationType)))))); + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, operationName), + equalTo(MESSAGING_SYSTEM, "rocketmq"), + equalTo(ERROR_TYPE, errorType), + equalTo(MESSAGING_CONSUMER_GROUP_NAME, consumerGroup), + equalTo(MESSAGING_DESTINATION_NAME, destination), + equalTo(MESSAGING_OPERATION_TYPE, operationType))))); } } diff --git a/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/AbstractRocketMqClientSuppressReceiveSpanTest.java b/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/AbstractRocketMqClientSuppressReceiveSpanTest.java index 85500429b6a1..714c094883c7 100644 --- a/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/AbstractRocketMqClientSuppressReceiveSpanTest.java +++ b/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/AbstractRocketMqClientSuppressReceiveSpanTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.instrumentation.rocketmqclient.v5_0; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.instrumentation.testing.util.TelemetryDataUtil.asRemote; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; @@ -175,40 +176,30 @@ private void assertMetrics(String topic, String consumerGroup) { "messaging.client.operation.duration", metrics -> metrics.satisfiesExactly( - metric -> - assertThat(metric) - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "send"), - equalTo(MESSAGING_SYSTEM, "rocketmq"), - equalTo(MESSAGING_DESTINATION_NAME, topic), - equalTo(MESSAGING_OPERATION_TYPE, "send")))))); + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "send"), + equalTo(MESSAGING_SYSTEM, "rocketmq"), + equalTo(MESSAGING_DESTINATION_NAME, topic), + equalTo(MESSAGING_OPERATION_TYPE, "send"))))); testing() .waitAndAssertMetrics( "io.opentelemetry.rocketmq-client-5.0", "messaging.process.duration", metrics -> metrics.satisfiesExactly( - metric -> - assertThat(metric) - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "process"), - equalTo(MESSAGING_SYSTEM, "rocketmq"), - equalTo( - MESSAGING_CONSUMER_GROUP_NAME, - consumerGroup), - equalTo(MESSAGING_DESTINATION_NAME, topic)))))); + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "process"), + equalTo(MESSAGING_SYSTEM, "rocketmq"), + equalTo(MESSAGING_CONSUMER_GROUP_NAME, consumerGroup), + equalTo(MESSAGING_DESTINATION_NAME, topic))))); testing() .waitAndAssertMetrics( "io.opentelemetry.rocketmq-client-5.0", diff --git a/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/AbstractRocketMqClientTest.java b/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/AbstractRocketMqClientTest.java index e32bc5a62abc..12bfce8310a8 100644 --- a/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/AbstractRocketMqClientTest.java +++ b/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/AbstractRocketMqClientTest.java @@ -7,6 +7,7 @@ import static io.opentelemetry.api.trace.SpanKind.CLIENT; import static io.opentelemetry.instrumentation.testing.junit.message.MessageHeaderUtil.headerAttributeKey; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.instrumentation.testing.util.TelemetryDataUtil.asRemote; import static io.opentelemetry.instrumentation.testing.util.TelemetryDataUtil.orderByRootSpanKind; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; @@ -764,25 +765,16 @@ private void assertFailureMetrics() { "messaging.process.duration", metrics -> metrics.satisfiesExactly( - metric -> - assertThat(metric) - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "process"), - equalTo(MESSAGING_SYSTEM, "rocketmq"), - equalTo( - ERROR_TYPE, ConsumeResult.FAILURE.name()), - equalTo( - MESSAGING_CONSUMER_GROUP_NAME, - CONSUMER_GROUP), - equalTo( - MESSAGING_DESTINATION_NAME, - NORMAL_TOPIC)))))); + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "process"), + equalTo(MESSAGING_SYSTEM, "rocketmq"), + equalTo(ERROR_TYPE, ConsumeResult.FAILURE.name()), + equalTo(MESSAGING_CONSUMER_GROUP_NAME, CONSUMER_GROUP), + equalTo(MESSAGING_DESTINATION_NAME, NORMAL_TOPIC))))); // messaging.client.consumed.messages is owned by the receive operation here, which the retry // gate cannot hold back, so the redelivery would race this assertion; the counter is asserted // in testSendAndConsumeNormalMessage instead @@ -833,53 +825,39 @@ private void assertMetrics() { "messaging.client.operation.duration", metrics -> metrics.satisfiesExactly( - metric -> - assertThat(metric) - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "send"), - equalTo(MESSAGING_SYSTEM, "rocketmq"), - equalTo( - MESSAGING_DESTINATION_NAME, NORMAL_TOPIC), - equalTo(MESSAGING_OPERATION_TYPE, "send")), - // the consumer keeps polling, so the number of recorded - // receives is not deterministic - point -> - point.hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "receive"), - equalTo(MESSAGING_SYSTEM, "rocketmq"), - equalTo( - MESSAGING_CONSUMER_GROUP_NAME, CONSUMER_GROUP), - equalTo(MESSAGING_DESTINATION_NAME, NORMAL_TOPIC), - equalTo(MESSAGING_OPERATION_TYPE, "receive")))))); + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "send"), + equalTo(MESSAGING_SYSTEM, "rocketmq"), + equalTo(MESSAGING_DESTINATION_NAME, NORMAL_TOPIC), + equalTo(MESSAGING_OPERATION_TYPE, "send")), + // the consumer keeps polling, so the number of recorded + // receives is not deterministic + point -> + point.hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "receive"), + equalTo(MESSAGING_SYSTEM, "rocketmq"), + equalTo(MESSAGING_CONSUMER_GROUP_NAME, CONSUMER_GROUP), + equalTo(MESSAGING_DESTINATION_NAME, NORMAL_TOPIC), + equalTo(MESSAGING_OPERATION_TYPE, "receive"))))); testing() .waitAndAssertMetrics( "io.opentelemetry.rocketmq-client-5.0", "messaging.process.duration", metrics -> metrics.satisfiesExactly( - metric -> - assertThat(metric) - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "process"), - equalTo(MESSAGING_SYSTEM, "rocketmq"), - equalTo( - MESSAGING_CONSUMER_GROUP_NAME, - CONSUMER_GROUP), - equalTo( - MESSAGING_DESTINATION_NAME, - NORMAL_TOPIC)))))); + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "process"), + equalTo(MESSAGING_SYSTEM, "rocketmq"), + equalTo(MESSAGING_CONSUMER_GROUP_NAME, CONSUMER_GROUP), + equalTo(MESSAGING_DESTINATION_NAME, NORMAL_TOPIC))))); testing() .waitAndAssertMetrics( "io.opentelemetry.rocketmq-client-5.0", diff --git a/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/RocketMqSimpleConsumerTest.java b/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/RocketMqSimpleConsumerTest.java index b045a731e726..9dd35034b3f2 100644 --- a/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/RocketMqSimpleConsumerTest.java +++ b/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/RocketMqSimpleConsumerTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.instrumentation.rocketmqclient.v5_0; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.instrumentation.testing.util.TelemetryDataUtil.asRemote; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; @@ -199,21 +200,16 @@ void shouldInstrumentReceiveWhenReceiveTelemetryDisabled() throws ClientExceptio "messaging.client.operation.duration", metrics -> metrics.satisfiesExactly( - metric -> - assertThat(metric) - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo( - MESSAGING_CONSUMER_GROUP_NAME, CONSUMER_GROUP), - equalTo(MESSAGING_SYSTEM, "rocketmq"), - equalTo(MESSAGING_DESTINATION_NAME, TOPIC), - equalTo(MESSAGING_OPERATION_NAME, "receive"), - equalTo(MESSAGING_OPERATION_TYPE, "receive")))))); + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_CONSUMER_GROUP_NAME, CONSUMER_GROUP), + equalTo(MESSAGING_SYSTEM, "rocketmq"), + equalTo(MESSAGING_DESTINATION_NAME, TOPIC), + equalTo(MESSAGING_OPERATION_NAME, "receive"), + equalTo(MESSAGING_OPERATION_TYPE, "receive"))))); testing.waitAndAssertMetrics( INSTRUMENTATION_NAME, "messaging.client.consumed.messages", diff --git a/instrumentation/runtime-telemetry/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/runtimetelemetry/JmxRuntimeMetricsTest.java b/instrumentation/runtime-telemetry/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/runtimetelemetry/JmxRuntimeMetricsTest.java index 235b3026a798..abf32b56d5c1 100644 --- a/instrumentation/runtime-telemetry/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/runtimetelemetry/JmxRuntimeMetricsTest.java +++ b/instrumentation/runtime-telemetry/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/runtimetelemetry/JmxRuntimeMetricsTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.runtimetelemetry; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; import static io.opentelemetry.semconv.JvmAttributes.JVM_GC_ACTION; import static io.opentelemetry.semconv.JvmAttributes.JVM_GC_NAME; @@ -36,14 +37,13 @@ void runtimeMetricsAreEnabled() { metric -> metric .hasName("jvm.gc.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - satisfies(JVM_GC_NAME, val -> val.isNotBlank()), - satisfies(JVM_GC_ACTION, val -> val.isNotBlank()), - satisfies(JVM_GC_CAUSE, val -> val.isNotBlank())))), + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + satisfies(JVM_GC_NAME, val -> val.isNotBlank()), + satisfies(JVM_GC_ACTION, val -> val.isNotBlank()), + satisfies(JVM_GC_CAUSE, val -> val.isNotBlank())))), metric -> metric.hasName("jvm.memory.used"), metric -> metric.hasName("jvm.memory.committed"), metric -> metric.hasName("jvm.memory.limit"), diff --git a/instrumentation/runtime-telemetry/library/src/test/java/io/opentelemetry/instrumentation/runtimetelemetry/RuntimeTelemetryDefaultsTest.java b/instrumentation/runtime-telemetry/library/src/test/java/io/opentelemetry/instrumentation/runtimetelemetry/RuntimeTelemetryDefaultsTest.java index 007955550fa3..3a5f64a6b473 100644 --- a/instrumentation/runtime-telemetry/library/src/test/java/io/opentelemetry/instrumentation/runtimetelemetry/RuntimeTelemetryDefaultsTest.java +++ b/instrumentation/runtime-telemetry/library/src/test/java/io/opentelemetry/instrumentation/runtimetelemetry/RuntimeTelemetryDefaultsTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.instrumentation.runtimetelemetry; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; import static io.opentelemetry.semconv.JvmAttributes.JVM_GC_ACTION; import static io.opentelemetry.semconv.JvmAttributes.JVM_GC_NAME; @@ -37,14 +38,13 @@ void capturesGcCause(boolean useBuilder) { metric -> metric .hasName("jvm.gc.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - satisfies(JVM_GC_NAME, val -> val.isNotBlank()), - satisfies(JVM_GC_ACTION, val -> val.isNotBlank()), - satisfies(JVM_GC_CAUSE, val -> val.isNotBlank()))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + satisfies(JVM_GC_NAME, val -> val.isNotBlank()), + satisfies(JVM_GC_ACTION, val -> val.isNotBlank()), + satisfies(JVM_GC_CAUSE, val -> val.isNotBlank()))))); } } } diff --git a/instrumentation/runtime-telemetry/library/src/test/java/io/opentelemetry/instrumentation/runtimetelemetry/internal/GarbageCollectorTest.java b/instrumentation/runtime-telemetry/library/src/test/java/io/opentelemetry/instrumentation/runtimetelemetry/internal/GarbageCollectorTest.java index 40b482b43aba..3b3369e9e10c 100644 --- a/instrumentation/runtime-telemetry/library/src/test/java/io/opentelemetry/instrumentation/runtimetelemetry/internal/GarbageCollectorTest.java +++ b/instrumentation/runtime-telemetry/library/src/test/java/io/opentelemetry/instrumentation/runtimetelemetry/internal/GarbageCollectorTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.instrumentation.runtimetelemetry.internal; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.JvmAttributes.JVM_GC_ACTION; import static io.opentelemetry.semconv.JvmAttributes.JVM_GC_NAME; @@ -76,27 +77,26 @@ void registerObservers() { .hasName("jvm.gc.duration") .hasDescription("Duration of JVM garbage collection actions.") .hasUnit("s") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasCount(2) - .hasSum(0.022) - .hasAttributesSatisfyingExactly( - equalTo(JVM_GC_NAME, "G1 Young Generation"), - equalTo(JVM_GC_ACTION, "end of minor GC"), - equalTo(JVM_GC_CAUSE, "Allocation Failure")) - .hasBucketBoundaries(GC_DURATION_BUCKETS), - point -> - point - .hasCount(1) - .hasSum(0.011) - .hasAttributesSatisfyingExactly( - equalTo(JVM_GC_NAME, "G1 Old Generation"), - equalTo(JVM_GC_ACTION, "end of major GC"), - equalTo(JVM_GC_CAUSE, "System.gc()")) - .hasBucketBoundaries(GC_DURATION_BUCKETS)))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasCount(2) + .hasSum(0.022) + .hasAttributesSatisfyingExactly( + equalTo(JVM_GC_NAME, "G1 Young Generation"), + equalTo(JVM_GC_ACTION, "end of minor GC"), + equalTo(JVM_GC_CAUSE, "Allocation Failure")) + .hasBucketBoundaries(GC_DURATION_BUCKETS), + point -> + point + .hasCount(1) + .hasSum(0.011) + .hasAttributesSatisfyingExactly( + equalTo(JVM_GC_NAME, "G1 Old Generation"), + equalTo(JVM_GC_ACTION, "end of major GC"), + equalTo(JVM_GC_CAUSE, "System.gc()")) + .hasBucketBoundaries(GC_DURATION_BUCKETS)))); } private static Notification createTestNotification( diff --git a/instrumentation/runtime-telemetry/library/src/testJava21/java/io/opentelemetry/instrumentation/runtimetelemetry/JfrVirtualThreadPinnedTest.java b/instrumentation/runtime-telemetry/library/src/testJava21/java/io/opentelemetry/instrumentation/runtimetelemetry/JfrVirtualThreadPinnedTest.java index 55cb6d2de5fa..135042cfc346 100644 --- a/instrumentation/runtime-telemetry/library/src/testJava21/java/io/opentelemetry/instrumentation/runtimetelemetry/JfrVirtualThreadPinnedTest.java +++ b/instrumentation/runtime-telemetry/library/src/testJava21/java/io/opentelemetry/instrumentation/runtimetelemetry/JfrVirtualThreadPinnedTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.instrumentation.runtimetelemetry; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static java.util.concurrent.TimeUnit.SECONDS; import static org.assertj.core.api.Assertions.assertThat; @@ -47,6 +48,6 @@ void shouldHaveVirtualThreadPinnedEvents() throws InterruptedException { metric .hasName("jvm.thread.virtual.pinned") .hasUnit(Constants.SECONDS) - .hasHistogramSatisfying(histogram -> histogram.hasPointsSatisfying(point -> {}))); + .satisfies(hasHistogramPointsSatisfyingExactly(point -> {}))); } } diff --git a/instrumentation/sofa-rpc-5.4/testing/src/main/java/io/opentelemetry/instrumentation/sofarpc/v5_4/AbstractSofaRpcTest.java b/instrumentation/sofa-rpc-5.4/testing/src/main/java/io/opentelemetry/instrumentation/sofarpc/v5_4/AbstractSofaRpcTest.java index c3429bc40b4f..d572f6067e40 100644 --- a/instrumentation/sofa-rpc-5.4/testing/src/main/java/io/opentelemetry/instrumentation/sofarpc/v5_4/AbstractSofaRpcTest.java +++ b/instrumentation/sofa-rpc-5.4/testing/src/main/java/io/opentelemetry/instrumentation/sofarpc/v5_4/AbstractSofaRpcTest.java @@ -11,6 +11,7 @@ import static io.opentelemetry.instrumentation.testing.junit.rpc.SemconvRpcStabilityUtil.emitOldRpcSemconv; import static io.opentelemetry.instrumentation.testing.junit.rpc.SemconvRpcStabilityUtil.emitPreviewRpcSemconv; import static io.opentelemetry.instrumentation.testing.junit.service.SemconvServiceStabilityUtil.maybeStablePeerService; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; @@ -237,16 +238,15 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), metric -> assertThat(metric) .hasUnit("ms") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "sofarpc"), - equalTo( - RPC_SERVICE, - "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService"), - equalTo(RPC_METHOD, "hello")))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "sofarpc"), + equalTo( + RPC_SERVICE, + "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService"), + equalTo(RPC_METHOD, "hello")))))); testing() .waitAndAssertMetrics( @@ -257,22 +257,19 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), metric -> assertThat(metric) .hasUnit("ms") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "sofarpc"), - equalTo( - RPC_SERVICE, GenericService.class.getName()), - equalTo(RPC_METHOD, genericMethodName()), - equalTo(SERVER_ADDRESS, "127.0.0.1"), - satisfies( - SERVER_PORT, - val -> val.isInstanceOf(Long.class)), - satisfies( - NETWORK_TYPE, - AbstractSofaRpcTest::assertNetworkType)))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "sofarpc"), + equalTo(RPC_SERVICE, GenericService.class.getName()), + equalTo(RPC_METHOD, genericMethodName()), + equalTo(SERVER_ADDRESS, "127.0.0.1"), + satisfies( + SERVER_PORT, val -> val.isInstanceOf(Long.class)), + satisfies( + NETWORK_TYPE, + AbstractSofaRpcTest::assertNetworkType)))))); } if (emitPreviewRpcSemconv()) { @@ -285,15 +282,14 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), metric -> assertThat(metric) .hasUnit("s") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "sofarpc"), - equalTo( - RPC_METHOD, - "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService/hello")))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "sofarpc"), + equalTo( + RPC_METHOD, + "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService/hello")))))); testing() .waitAndAssertMetrics( @@ -304,17 +300,16 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), metric -> assertThat(metric) .hasUnit("s") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "sofarpc"), - equalTo(RPC_METHOD, genericServiceSpanName()), - equalTo(SERVER_ADDRESS, "127.0.0.1"), - satisfies( - SERVER_PORT, - val -> val.isInstanceOf(Long.class))))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "sofarpc"), + equalTo(RPC_METHOD, genericServiceSpanName()), + equalTo(SERVER_ADDRESS, "127.0.0.1"), + satisfies( + SERVER_PORT, + val -> val.isInstanceOf(Long.class))))))); } } @@ -411,16 +406,15 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), metric -> assertThat(metric) .hasUnit("ms") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "sofarpc"), - equalTo( - RPC_SERVICE, - "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService"), - equalTo(RPC_METHOD, "hello")))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "sofarpc"), + equalTo( + RPC_SERVICE, + "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService"), + equalTo(RPC_METHOD, "hello")))))); testing() .waitAndAssertMetrics( @@ -431,22 +425,19 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), metric -> assertThat(metric) .hasUnit("ms") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "sofarpc"), - equalTo( - RPC_SERVICE, GenericService.class.getName()), - equalTo(RPC_METHOD, genericMethodName()), - equalTo(SERVER_ADDRESS, "127.0.0.1"), - satisfies( - SERVER_PORT, - val -> val.isInstanceOf(Long.class)), - satisfies( - NETWORK_TYPE, - AbstractSofaRpcTest::assertNetworkType)))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "sofarpc"), + equalTo(RPC_SERVICE, GenericService.class.getName()), + equalTo(RPC_METHOD, genericMethodName()), + equalTo(SERVER_ADDRESS, "127.0.0.1"), + satisfies( + SERVER_PORT, val -> val.isInstanceOf(Long.class)), + satisfies( + NETWORK_TYPE, + AbstractSofaRpcTest::assertNetworkType)))))); } if (emitPreviewRpcSemconv()) { @@ -459,15 +450,14 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), metric -> assertThat(metric) .hasUnit("s") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "sofarpc"), - equalTo( - RPC_METHOD, - "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService/hello")))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "sofarpc"), + equalTo( + RPC_METHOD, + "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService/hello")))))); testing() .waitAndAssertMetrics( @@ -478,17 +468,16 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), metric -> assertThat(metric) .hasUnit("s") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "sofarpc"), - equalTo(RPC_METHOD, genericServiceSpanName()), - equalTo(SERVER_ADDRESS, "127.0.0.1"), - satisfies( - SERVER_PORT, - val -> val.isInstanceOf(Long.class))))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "sofarpc"), + equalTo(RPC_METHOD, genericServiceSpanName()), + equalTo(SERVER_ADDRESS, "127.0.0.1"), + satisfies( + SERVER_PORT, + val -> val.isInstanceOf(Long.class))))))); } } @@ -629,16 +618,15 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), metric -> assertThat(metric) .hasUnit("ms") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "sofarpc"), - equalTo( - RPC_SERVICE, - "io.opentelemetry.instrumentation.sofarpc.v5_4.api.ErrorService"), - equalTo(RPC_METHOD, "throwException")))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "sofarpc"), + equalTo( + RPC_SERVICE, + "io.opentelemetry.instrumentation.sofarpc.v5_4.api.ErrorService"), + equalTo(RPC_METHOD, "throwException")))))); testing() .waitAndAssertMetrics( @@ -649,23 +637,21 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), metric -> assertThat(metric) .hasUnit("ms") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "sofarpc"), - equalTo( - RPC_SERVICE, - "io.opentelemetry.instrumentation.sofarpc.v5_4.api.ErrorService"), - equalTo(RPC_METHOD, "throwException"), - equalTo(SERVER_ADDRESS, "127.0.0.1"), - satisfies( - SERVER_PORT, - val -> val.isInstanceOf(Long.class)), - satisfies( - NETWORK_TYPE, - AbstractSofaRpcTest::assertNetworkType)))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "sofarpc"), + equalTo( + RPC_SERVICE, + "io.opentelemetry.instrumentation.sofarpc.v5_4.api.ErrorService"), + equalTo(RPC_METHOD, "throwException"), + equalTo(SERVER_ADDRESS, "127.0.0.1"), + satisfies( + SERVER_PORT, val -> val.isInstanceOf(Long.class)), + satisfies( + NETWORK_TYPE, + AbstractSofaRpcTest::assertNetworkType)))))); } if (emitPreviewRpcSemconv()) { @@ -678,18 +664,17 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), metric -> assertThat(metric) .hasUnit("s") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "sofarpc"), - equalTo( - RPC_METHOD, - "io.opentelemetry.instrumentation.sofarpc.v5_4.api.ErrorService/throwException"), - equalTo( - ERROR_TYPE, - SofaRpcRuntimeException.class.getName())))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "sofarpc"), + equalTo( + RPC_METHOD, + "io.opentelemetry.instrumentation.sofarpc.v5_4.api.ErrorService/throwException"), + equalTo( + ERROR_TYPE, + SofaRpcRuntimeException.class.getName())))))); testing() .waitAndAssertMetrics( @@ -700,22 +685,21 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), metric -> assertThat(metric) .hasUnit("s") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "sofarpc"), - equalTo( - RPC_METHOD, - "io.opentelemetry.instrumentation.sofarpc.v5_4.api.ErrorService/throwException"), - equalTo( - ERROR_TYPE, - SofaRpcRuntimeException.class.getName()), - equalTo(SERVER_ADDRESS, "127.0.0.1"), - satisfies( - SERVER_PORT, - val -> val.isInstanceOf(Long.class))))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "sofarpc"), + equalTo( + RPC_METHOD, + "io.opentelemetry.instrumentation.sofarpc.v5_4.api.ErrorService/throwException"), + equalTo( + ERROR_TYPE, + SofaRpcRuntimeException.class.getName()), + equalTo(SERVER_ADDRESS, "127.0.0.1"), + satisfies( + SERVER_PORT, + val -> val.isInstanceOf(Long.class))))))); } } diff --git a/instrumentation/sofa-rpc-5.4/testing/src/main/java/io/opentelemetry/instrumentation/sofarpc/v5_4/AbstractSofaRpcTraceChainTest.java b/instrumentation/sofa-rpc-5.4/testing/src/main/java/io/opentelemetry/instrumentation/sofarpc/v5_4/AbstractSofaRpcTraceChainTest.java index 800e3f7424f1..2bdafd0e549b 100644 --- a/instrumentation/sofa-rpc-5.4/testing/src/main/java/io/opentelemetry/instrumentation/sofarpc/v5_4/AbstractSofaRpcTraceChainTest.java +++ b/instrumentation/sofa-rpc-5.4/testing/src/main/java/io/opentelemetry/instrumentation/sofarpc/v5_4/AbstractSofaRpcTraceChainTest.java @@ -9,6 +9,7 @@ import static io.opentelemetry.instrumentation.testing.junit.rpc.SemconvRpcStabilityUtil.emitOldRpcSemconv; import static io.opentelemetry.instrumentation.testing.junit.rpc.SemconvRpcStabilityUtil.emitPreviewRpcSemconv; import static io.opentelemetry.instrumentation.testing.junit.service.SemconvServiceStabilityUtil.maybeStablePeerService; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; @@ -272,23 +273,22 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), metric -> assertThat(metric) .hasUnit("ms") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "sofarpc"), - equalTo( - RPC_SERVICE, - "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService"), - equalTo(RPC_METHOD, "hello")), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "sofarpc"), - equalTo( - RPC_SERVICE, - "io.opentelemetry.instrumentation.sofarpc.v5_4.api.MiddleService"), - equalTo(RPC_METHOD, "hello")))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "sofarpc"), + equalTo( + RPC_SERVICE, + "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService"), + equalTo(RPC_METHOD, "hello")), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "sofarpc"), + equalTo( + RPC_SERVICE, + "io.opentelemetry.instrumentation.sofarpc.v5_4.api.MiddleService"), + equalTo(RPC_METHOD, "hello")))))); testing() .waitAndAssertMetrics( @@ -299,36 +299,32 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), metric -> assertThat(metric) .hasUnit("ms") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "sofarpc"), - equalTo( - RPC_SERVICE, GenericService.class.getName()), - equalTo(RPC_METHOD, genericMethodName()), - equalTo(SERVER_ADDRESS, "127.0.0.1"), - satisfies( - SERVER_PORT, - val -> val.isInstanceOf(Long.class)), - satisfies( - NETWORK_TYPE, - AbstractSofaRpcTest::assertNetworkType)), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "sofarpc"), - equalTo( - RPC_SERVICE, - "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService"), - equalTo(RPC_METHOD, "hello"), - equalTo(SERVER_ADDRESS, "127.0.0.1"), - satisfies( - SERVER_PORT, - val -> val.isInstanceOf(Long.class)), - satisfies( - NETWORK_TYPE, - AbstractSofaRpcTest::assertNetworkType)))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "sofarpc"), + equalTo(RPC_SERVICE, GenericService.class.getName()), + equalTo(RPC_METHOD, genericMethodName()), + equalTo(SERVER_ADDRESS, "127.0.0.1"), + satisfies( + SERVER_PORT, val -> val.isInstanceOf(Long.class)), + satisfies( + NETWORK_TYPE, + AbstractSofaRpcTest::assertNetworkType)), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "sofarpc"), + equalTo( + RPC_SERVICE, + "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService"), + equalTo(RPC_METHOD, "hello"), + equalTo(SERVER_ADDRESS, "127.0.0.1"), + satisfies( + SERVER_PORT, val -> val.isInstanceOf(Long.class)), + satisfies( + NETWORK_TYPE, + AbstractSofaRpcTest::assertNetworkType)))))); } if (emitPreviewRpcSemconv()) { @@ -341,21 +337,20 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), metric -> assertThat(metric) .hasUnit("s") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "sofarpc"), - equalTo( - RPC_METHOD, - "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService/hello")), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "sofarpc"), - equalTo( - RPC_METHOD, - "io.opentelemetry.instrumentation.sofarpc.v5_4.api.MiddleService/hello")))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "sofarpc"), + equalTo( + RPC_METHOD, + "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService/hello")), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "sofarpc"), + equalTo( + RPC_METHOD, + "io.opentelemetry.instrumentation.sofarpc.v5_4.api.MiddleService/hello")))))); testing() .waitAndAssertMetrics( @@ -366,27 +361,26 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), metric -> assertThat(metric) .hasUnit("s") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "sofarpc"), - equalTo(RPC_METHOD, genericServiceSpanName()), - equalTo(SERVER_ADDRESS, "127.0.0.1"), - satisfies( - SERVER_PORT, - val -> val.isInstanceOf(Long.class))), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "sofarpc"), - equalTo( - RPC_METHOD, - "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService/hello"), - equalTo(SERVER_ADDRESS, "127.0.0.1"), - satisfies( - SERVER_PORT, - val -> val.isInstanceOf(Long.class))))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "sofarpc"), + equalTo(RPC_METHOD, genericServiceSpanName()), + equalTo(SERVER_ADDRESS, "127.0.0.1"), + satisfies( + SERVER_PORT, + val -> val.isInstanceOf(Long.class))), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "sofarpc"), + equalTo( + RPC_METHOD, + "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService/hello"), + equalTo(SERVER_ADDRESS, "127.0.0.1"), + satisfies( + SERVER_PORT, + val -> val.isInstanceOf(Long.class))))))); } } @@ -525,25 +519,24 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), metric -> assertThat(metric) .hasUnit("ms") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "sofarpc"), - equalTo( - RPC_SERVICE, - "io.opentelemetry.instrumentation.sofarpc.v5_4.api.MiddleService"), - equalTo(RPC_METHOD, "hello")), - // HelloService SERVER metrics are also kept for local - // calls - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "sofarpc"), - equalTo( - RPC_SERVICE, - "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService"), - equalTo(RPC_METHOD, "hello")))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "sofarpc"), + equalTo( + RPC_SERVICE, + "io.opentelemetry.instrumentation.sofarpc.v5_4.api.MiddleService"), + equalTo(RPC_METHOD, "hello")), + // HelloService SERVER metrics are also kept for local + // calls + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "sofarpc"), + equalTo( + RPC_SERVICE, + "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService"), + equalTo(RPC_METHOD, "hello")))))); testing() .waitAndAssertMetrics( @@ -554,22 +547,19 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), metric -> assertThat(metric) .hasUnit("ms") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "sofarpc"), - equalTo( - RPC_SERVICE, GenericService.class.getName()), - equalTo(RPC_METHOD, genericMethodName()), - equalTo(SERVER_ADDRESS, "127.0.0.1"), - satisfies( - SERVER_PORT, - val -> val.isInstanceOf(Long.class)), - satisfies( - NETWORK_TYPE, - AbstractSofaRpcTest::assertNetworkType)))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "sofarpc"), + equalTo(RPC_SERVICE, GenericService.class.getName()), + equalTo(RPC_METHOD, genericMethodName()), + equalTo(SERVER_ADDRESS, "127.0.0.1"), + satisfies( + SERVER_PORT, val -> val.isInstanceOf(Long.class)), + satisfies( + NETWORK_TYPE, + AbstractSofaRpcTest::assertNetworkType)))))); } if (emitPreviewRpcSemconv()) { @@ -582,21 +572,20 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), metric -> assertThat(metric) .hasUnit("s") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "sofarpc"), - equalTo( - RPC_METHOD, - "io.opentelemetry.instrumentation.sofarpc.v5_4.api.MiddleService/hello")), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "sofarpc"), - equalTo( - RPC_METHOD, - "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService/hello")))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "sofarpc"), + equalTo( + RPC_METHOD, + "io.opentelemetry.instrumentation.sofarpc.v5_4.api.MiddleService/hello")), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "sofarpc"), + equalTo( + RPC_METHOD, + "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService/hello")))))); testing() .waitAndAssertMetrics( @@ -607,17 +596,16 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), metric -> assertThat(metric) .hasUnit("s") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "sofarpc"), - equalTo(RPC_METHOD, genericServiceSpanName()), - equalTo(SERVER_ADDRESS, "127.0.0.1"), - satisfies( - SERVER_PORT, - val -> val.isInstanceOf(Long.class))))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "sofarpc"), + equalTo(RPC_METHOD, genericServiceSpanName()), + equalTo(SERVER_ADDRESS, "127.0.0.1"), + satisfies( + SERVER_PORT, + val -> val.isInstanceOf(Long.class))))))); } } } diff --git a/instrumentation/spring/spring-ai-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/ai/v1_0/AbstractOpenAiChatModelTest.java b/instrumentation/spring/spring-ai-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/ai/v1_0/AbstractOpenAiChatModelTest.java index b389fbf190f5..f08cafee24e9 100644 --- a/instrumentation/spring/spring-ai-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/ai/v1_0/AbstractOpenAiChatModelTest.java +++ b/instrumentation/spring/spring-ai-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/ai/v1_0/AbstractOpenAiChatModelTest.java @@ -11,6 +11,7 @@ import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.api.trace.SpanKind.CLIENT; import static io.opentelemetry.api.trace.SpanKind.INTERNAL; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.incubating.GenAiIncubatingAttributes.GEN_AI_OPERATION_NAME; import static io.opentelemetry.semconv.incubating.GenAiIncubatingAttributes.GEN_AI_PROVIDER_NAME; @@ -109,41 +110,39 @@ private static void assertMetrics() { metric -> metric .hasName("gen_ai.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, RESPONSE_MODEL)))), + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, RESPONSE_MODEL)))), metric -> metric .hasName("gen_ai.client.token.usage") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(22.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, INPUT)), - point -> - point - .hasSum(2.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(22.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, INPUT)), + point -> + point + .hasSum(2.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT))))); } private static void assertMessageEvents(SpanContext spanContext) { diff --git a/instrumentation/spring/spring-ai-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/ai/v1_0/ChatModelTest.java b/instrumentation/spring/spring-ai-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/ai/v1_0/ChatModelTest.java index b1257ac1fb9f..ba78f488b997 100644 --- a/instrumentation/spring/spring-ai-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/ai/v1_0/ChatModelTest.java +++ b/instrumentation/spring/spring-ai-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/ai/v1_0/ChatModelTest.java @@ -8,6 +8,7 @@ import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.api.trace.SpanKind.CLIENT; import static io.opentelemetry.api.trace.SpanKind.INTERNAL; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.ErrorAttributes.ERROR_TYPE; @@ -860,41 +861,39 @@ private static void assertMetrics() { metric -> metric .hasName("gen_ai.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, "test"), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, MODEL)))), + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, "test"), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, MODEL)))), metric -> metric .hasName("gen_ai.client.token.usage") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(3.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, "test"), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, MODEL), - equalTo(GEN_AI_TOKEN_TYPE, INPUT)), - point -> - point - .hasSum(2.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, "test"), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, MODEL), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(3.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, "test"), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, MODEL), + equalTo(GEN_AI_TOKEN_TYPE, INPUT)), + point -> + point + .hasSum(2.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, "test"), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, MODEL), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT))))); } private static void assertMetricsWithoutTokenUsage() { @@ -903,17 +902,16 @@ private static void assertMetricsWithoutTokenUsage() { metric -> metric .hasName("gen_ai.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, "test"), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, MODEL))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, "test"), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, MODEL))))); testing.waitAndAssertMetrics( INSTRUMENTATION_NAME, "gen_ai.client.token.usage", metrics -> metrics.isEmpty()); } diff --git a/instrumentation/spring/spring-integration-4.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/integration/v4_1/MessageProducerSupportInstrumentationTest.java b/instrumentation/spring/spring-integration-4.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/integration/v4_1/MessageProducerSupportInstrumentationTest.java index 3358e7af54bb..12b04afc6463 100644 --- a/instrumentation/spring/spring-integration-4.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/integration/v4_1/MessageProducerSupportInstrumentationTest.java +++ b/instrumentation/spring/spring-integration-4.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/integration/v4_1/MessageProducerSupportInstrumentationTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.spring.integration.v4_1; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.instrumentation.testing.util.TestLatestDeps.testLatestDeps; import static io.opentelemetry.javaagent.instrumentation.spring.integration.v4_1.SpringIntegrationTestHelper.assertNoMetrics; import static io.opentelemetry.javaagent.instrumentation.spring.integration.v4_1.SpringIntegrationTestHelper.assertProcessMetrics; @@ -340,11 +341,7 @@ private static void assertSpringRabbitProcessMetrics() { "messaging.process.duration", metrics -> metrics.satisfiesExactly( - metric -> - assertThat(metric) - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying(point -> point.hasCount(1))))); + hasHistogramPointsSatisfyingExactly(point -> point.hasCount(1)))); } private static Message newRawMessage() { diff --git a/instrumentation/spring/spring-integration-4.1/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/integration/v4_1/SpringIntegrationTestHelper.java b/instrumentation/spring/spring-integration-4.1/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/integration/v4_1/SpringIntegrationTestHelper.java index 9fb67727ecea..935009deb2e3 100644 --- a/instrumentation/spring/spring-integration-4.1/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/integration/v4_1/SpringIntegrationTestHelper.java +++ b/instrumentation/spring/spring-integration-4.1/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/integration/v4_1/SpringIntegrationTestHelper.java @@ -5,6 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.spring.integration.v4_1; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; @@ -67,18 +68,16 @@ static void assertProcessMetrics( assertThat(metric) .hasUnit("s") .hasDescription("Duration of processing operation.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasCount(expectedCount) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "process"), - equalTo(MESSAGING_SYSTEM, "spring_integration"), - equalTo( - MESSAGING_DESTINATION_NAME, destinationName), - errorType))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasCount(expectedCount) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "process"), + equalTo(MESSAGING_SYSTEM, "spring_integration"), + equalTo(MESSAGING_DESTINATION_NAME, destinationName), + errorType))))); testing.waitAndAssertMetrics( INSTRUMENTATION_NAME, "messaging.client.consumed.messages", @@ -114,18 +113,16 @@ static void assertSendMetrics(InstrumentationExtension testing, String destinati .hasUnit("s") .hasDescription( "Duration of messaging operation initiated by a producer or consumer client.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "send"), - equalTo(MESSAGING_SYSTEM, "spring_integration"), - equalTo( - MESSAGING_DESTINATION_NAME, destinationName), - equalTo(MESSAGING_OPERATION_TYPE, "send")))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "send"), + equalTo(MESSAGING_SYSTEM, "spring_integration"), + equalTo(MESSAGING_DESTINATION_NAME, destinationName), + equalTo(MESSAGING_OPERATION_TYPE, "send")))))); testing.waitAndAssertMetrics( INSTRUMENTATION_NAME, "messaging.client.sent.messages", diff --git a/instrumentation/spring/spring-pulsar-1.0/testing/src/main/java/io/opentelemetry/instrumentation/spring/pulsar/v1_0/AbstractSpringPulsarTest.java b/instrumentation/spring/spring-pulsar-1.0/testing/src/main/java/io/opentelemetry/instrumentation/spring/pulsar/v1_0/AbstractSpringPulsarTest.java index 798befb4b1cf..c79c3b62068a 100644 --- a/instrumentation/spring/spring-pulsar-1.0/testing/src/main/java/io/opentelemetry/instrumentation/spring/pulsar/v1_0/AbstractSpringPulsarTest.java +++ b/instrumentation/spring/spring-pulsar-1.0/testing/src/main/java/io/opentelemetry/instrumentation/spring/pulsar/v1_0/AbstractSpringPulsarTest.java @@ -6,6 +6,7 @@ package io.opentelemetry.instrumentation.spring.pulsar.v1_0; import static io.opentelemetry.api.common.AttributeKey.stringKey; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; @@ -121,17 +122,15 @@ protected void assertProcessMetrics() { assertThat(metric) .hasUnit("s") .hasDescription("Duration of processing operation.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "process"), - equalTo(MESSAGING_SYSTEM, "pulsar"), - equalTo( - MESSAGING_DESTINATION_NAME, OTEL_TOPIC)))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "process"), + equalTo(MESSAGING_SYSTEM, "pulsar"), + equalTo(MESSAGING_DESTINATION_NAME, OTEL_TOPIC)))))); testing.waitAndAssertMetrics( "io.opentelemetry.pulsar-2.8", diff --git a/instrumentation/spring/spring-rabbit-1.0/javaagent/src/version11Test/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbit11SimpleMessageListenerContainerTest.java b/instrumentation/spring/spring-rabbit-1.0/javaagent/src/version11Test/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbit11SimpleMessageListenerContainerTest.java index 8bef994eb938..85a2077dc7e5 100644 --- a/instrumentation/spring/spring-rabbit-1.0/javaagent/src/version11Test/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbit11SimpleMessageListenerContainerTest.java +++ b/instrumentation/spring/spring-rabbit-1.0/javaagent/src/version11Test/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbit11SimpleMessageListenerContainerTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.spring.rabbit.v1_0; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static java.util.concurrent.TimeUnit.SECONDS; import static org.assertj.core.api.Assertions.assertThat; @@ -111,11 +112,7 @@ void shouldUseSpringProcessTelemetry() throws InterruptedException { "messaging.process.duration", metrics -> metrics.satisfiesExactly( - metric -> - assertThat(metric) - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying(point -> point.hasCount(1))))); + hasHistogramPointsSatisfyingExactly(point -> point.hasCount(1)))); testing.waitAndAssertMetrics( SPRING_INSTRUMENTATION_NAME, "messaging.client.consumed.messages", diff --git a/instrumentation/spring/spring-rabbit-1.0/javaagent/src/version20Test/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbit20DirectMessageListenerContainerTest.java b/instrumentation/spring/spring-rabbit-1.0/javaagent/src/version20Test/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbit20DirectMessageListenerContainerTest.java index 7a2b6ab1c648..25bdc80f5ba4 100644 --- a/instrumentation/spring/spring-rabbit-1.0/javaagent/src/version20Test/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbit20DirectMessageListenerContainerTest.java +++ b/instrumentation/spring/spring-rabbit-1.0/javaagent/src/version20Test/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbit20DirectMessageListenerContainerTest.java @@ -6,6 +6,7 @@ package io.opentelemetry.javaagent.instrumentation.spring.rabbit.v1_0; import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static java.util.concurrent.TimeUnit.SECONDS; import static org.assertj.core.api.Assertions.assertThat; @@ -106,11 +107,7 @@ void shouldUseSpringProcessTelemetry() throws InterruptedException { "messaging.process.duration", metrics -> metrics.satisfiesExactly( - metric -> - assertThat(metric) - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying(point -> point.hasCount(1))))); + hasHistogramPointsSatisfyingExactly(point -> point.hasCount(1)))); testing.waitAndAssertMetrics( SPRING_INSTRUMENTATION_NAME, "messaging.client.consumed.messages", diff --git a/instrumentation/spring/spring-webflux/spring-webflux-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/webflux/v5_0/client/SpringWebfluxClientInstrumentationTest.java b/instrumentation/spring/spring-webflux/spring-webflux-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/webflux/v5_0/client/SpringWebfluxClientInstrumentationTest.java index 70045d60f343..1cfcc04ec219 100644 --- a/instrumentation/spring/spring-webflux/spring-webflux-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/webflux/v5_0/client/SpringWebfluxClientInstrumentationTest.java +++ b/instrumentation/spring/spring-webflux/spring-webflux-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/webflux/v5_0/client/SpringWebfluxClientInstrumentationTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.spring.webflux.v5_0.client; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.HttpAttributes.HTTP_REQUEST_METHOD; import static io.opentelemetry.semconv.HttpAttributes.HTTP_RESPONSE_STATUS_CODE; @@ -71,15 +72,14 @@ void shouldAddProtocolVersionToDurationMetric() { metric -> metric .hasName("http.client.request.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(HTTP_REQUEST_METHOD, "GET"), - equalTo(HTTP_RESPONSE_STATUS_CODE, 200), - equalTo(NETWORK_PROTOCOL_VERSION, "1.1"), - equalTo(SERVER_ADDRESS, uri.getHost()), - equalTo(SERVER_PORT, uri.getPort()))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(HTTP_REQUEST_METHOD, "GET"), + equalTo(HTTP_RESPONSE_STATUS_CODE, 200), + equalTo(NETWORK_PROTOCOL_VERSION, "1.1"), + equalTo(SERVER_ADDRESS, uri.getHost()), + equalTo(SERVER_PORT, uri.getPort()))))); } } diff --git a/instrumentation/thrift-0.13/testing/src/main/java/io/opentelemetry/instrumentation/thrift/v0_13/AbstractThriftTest.java b/instrumentation/thrift-0.13/testing/src/main/java/io/opentelemetry/instrumentation/thrift/v0_13/AbstractThriftTest.java index 12d6f80f97e5..172d69074ab4 100644 --- a/instrumentation/thrift-0.13/testing/src/main/java/io/opentelemetry/instrumentation/thrift/v0_13/AbstractThriftTest.java +++ b/instrumentation/thrift-0.13/testing/src/main/java/io/opentelemetry/instrumentation/thrift/v0_13/AbstractThriftTest.java @@ -25,6 +25,7 @@ import static io.opentelemetry.instrumentation.testing.junit.rpc.SemconvRpcStabilityUtil.emitOldRpcSemconv; import static io.opentelemetry.instrumentation.testing.junit.rpc.SemconvRpcStabilityUtil.emitPreviewRpcSemconv; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.instrumentation.testing.util.TestLatestDeps.testLatestDeps; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; @@ -360,17 +361,16 @@ private void assertMetrics(int serverPort) { metric .hasName("rpc.server.duration") .hasUnit("ms") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(SERVER_ADDRESS, "127.0.0.1"), - equalTo(SERVER_PORT, serverPort), - equalTo(RPC_METHOD, "say"), - equalTo(RPC_SERVICE, CustomHandler.class.getName()), - equalTo(RPC_SYSTEM, "apache_thrift"), - equalTo(NETWORK_TYPE, "ipv4"))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(SERVER_ADDRESS, "127.0.0.1"), + equalTo(SERVER_PORT, serverPort), + equalTo(RPC_METHOD, "say"), + equalTo(RPC_SERVICE, CustomHandler.class.getName()), + equalTo(RPC_SYSTEM, "apache_thrift"), + equalTo(NETWORK_TYPE, "ipv4"))))); getTesting() .waitAndAssertMetrics( "io.opentelemetry.thrift-0.13", @@ -378,17 +378,16 @@ private void assertMetrics(int serverPort) { metric .hasName("rpc.client.duration") .hasUnit("ms") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, serverPort), - equalTo(RPC_METHOD, "say"), - equalTo(RPC_SERVICE, CustomService.class.getName()), - equalTo(RPC_SYSTEM, "apache_thrift"), - equalTo(NETWORK_TYPE, "ipv4"))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, serverPort), + equalTo(RPC_METHOD, "say"), + equalTo(RPC_SERVICE, CustomService.class.getName()), + equalTo(RPC_SYSTEM, "apache_thrift"), + equalTo(NETWORK_TYPE, "ipv4"))))); } if (emitPreviewRpcSemconv()) { getTesting() @@ -398,17 +397,15 @@ private void assertMetrics(int serverPort) { metric .hasName("rpc.server.call.duration") .hasUnit("s") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "apache_thrift"), - equalTo(SERVER_ADDRESS, "127.0.0.1"), - equalTo(SERVER_PORT, serverPort), - equalTo( - RPC_METHOD, - CustomHandler.class.getName() + "/say"))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "apache_thrift"), + equalTo(SERVER_ADDRESS, "127.0.0.1"), + equalTo(SERVER_PORT, serverPort), + equalTo( + RPC_METHOD, CustomHandler.class.getName() + "/say"))))); getTesting() .waitAndAssertMetrics( "io.opentelemetry.thrift-0.13", @@ -416,17 +413,15 @@ private void assertMetrics(int serverPort) { metric .hasName("rpc.client.call.duration") .hasUnit("s") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "apache_thrift"), - equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, serverPort), - equalTo( - RPC_METHOD, - CustomService.class.getName() + "/say"))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "apache_thrift"), + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, serverPort), + equalTo( + RPC_METHOD, CustomService.class.getName() + "/say"))))); } } diff --git a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbClientMetricsTestUtil.java b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbClientMetricsTestUtil.java index f02dd7fec5eb..e779e9506032 100644 --- a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbClientMetricsTestUtil.java +++ b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbClientMetricsTestUtil.java @@ -5,6 +5,7 @@ package io.opentelemetry.instrumentation.testing.junit.db; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.semconv.DbAttributes.DB_SYSTEM_NAME; @@ -29,13 +30,12 @@ public static void assertDurationMetric( .hasName("db.client.operation.duration") .hasUnit("s") .hasDescription("Duration of database client operations.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfying( - attributes -> - assertThat(attributes.asMap()) - .containsOnlyKeys(expectedKeys))))); + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfying( + attributes -> + assertThat(attributes.asMap()) + .containsOnlyKeys(expectedKeys))))); } } diff --git a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbConnectionPoolMetricsAssertions.java b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbConnectionPoolMetricsAssertions.java index a1657def0225..d542b0d51a14 100644 --- a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbConnectionPoolMetricsAssertions.java +++ b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbConnectionPoolMetricsAssertions.java @@ -5,6 +5,7 @@ package io.opentelemetry.instrumentation.testing.junit.db; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_CLIENT_CONNECTION_POOL_NAME; @@ -267,8 +268,7 @@ private void verifyCreateTimeMetric(MetricData metric) { assertThat(metric) .hasUnit("s") .hasDescription("The time it took to create a new connection.") - .hasHistogramSatisfying( - histogram -> histogram.hasPointsSatisfying(this::verifyPointAttributes)); + .satisfies(hasHistogramPointsSatisfyingExactly(this::verifyPointAttributes)); } private void verifyWaitTime() { @@ -282,8 +282,7 @@ private void verifyWaitTimeMetric(MetricData metric) { assertThat(metric) .hasUnit("s") .hasDescription("The time it took to obtain an open connection from the pool.") - .hasHistogramSatisfying( - histogram -> histogram.hasPointsSatisfying(this::verifyPointAttributes)); + .satisfies(hasHistogramPointsSatisfyingExactly(this::verifyPointAttributes)); } private void verifyUseTime() { @@ -297,7 +296,6 @@ private MetricAssert verifyUseTimeMetric(MetricData metric) { return assertThat(metric) .hasUnit("s") .hasDescription("The time between borrowing a connection and returning it to the pool.") - .hasHistogramSatisfying( - histogram -> histogram.hasPointsSatisfying(this::verifyPointAttributes)); + .satisfies(hasHistogramPointsSatisfyingExactly(this::verifyPointAttributes)); } } diff --git a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpClientTest.java b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpClientTest.java index 0db2de1c64df..32c913138f35 100644 --- a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpClientTest.java +++ b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpClientTest.java @@ -11,6 +11,7 @@ import static io.opentelemetry.instrumentation.api.internal.SemconvExceptionSignal.emitExceptionAsSpanEvents; import static io.opentelemetry.instrumentation.testing.junit.service.SemconvServiceStabilityUtil.maybeStablePeerService; import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeSchemaUrl; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.instrumentation.testing.util.TelemetryDataUtil.comparingRootSpanAttribute; import static io.opentelemetry.instrumentation.testing.util.TelemetryDataUtil.orderByRootSpanName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; @@ -799,9 +800,8 @@ void httpClientMetrics() throws Exception { .hasName("http.client.request.duration") .hasDescription("Duration of HTTP client requests.") .hasUnit("s") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying(point -> point.hasSumGreaterThan(0.0)))); + .satisfies( + hasHistogramPointsSatisfyingExactly(point -> point.hasSumGreaterThan(0.0)))); } /** diff --git a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpServerTest.java b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpServerTest.java index 60d14b5c1760..c9b7e8914e64 100644 --- a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpServerTest.java +++ b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpServerTest.java @@ -21,6 +21,7 @@ import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.REDIRECT; import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.SUCCESS; import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeSchemaUrl; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; @@ -461,9 +462,8 @@ void httpServerMetrics() { .hasName("http.server.request.duration") .hasDescription("Duration of HTTP server requests.") .hasUnit("s") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying(point -> point.hasSumGreaterThan(0.0)))); + .satisfies( + hasHistogramPointsSatisfyingExactly(point -> point.hasSumGreaterThan(0.0)))); } /** diff --git a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/util/MetricAssertions.java b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/util/MetricAssertions.java new file mode 100644 index 000000000000..1ffe299979b2 --- /dev/null +++ b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/util/MetricAssertions.java @@ -0,0 +1,38 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.testing.util; + +import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; + +import io.opentelemetry.sdk.metrics.data.MetricData; +import io.opentelemetry.sdk.testing.assertj.HistogramPointAssert; +import java.util.function.Consumer; +import org.assertj.core.api.ThrowingConsumer; + +/** Composable assertions on {@link MetricData}, intended to be passed to {@code satisfies(...)}. */ +public final class MetricAssertions { + + /** + * Asserts that the metric is a histogram whose points match exactly the given assertions, in any + * order. + * + *
{@code
+   * assertThat(metric)
+   *     .hasName("duration")
+   *     .satisfies(hasHistogramPointsSatisfyingExactly(point -> point.hasCount(1)));
+   * }
+ */ + @SafeVarargs + @SuppressWarnings("varargs") + public static ThrowingConsumer hasHistogramPointsSatisfyingExactly( + Consumer... assertions) { + return metric -> + assertThat(metric) + .hasHistogramSatisfying(histogram -> histogram.hasPointsSatisfying(assertions)); + } + + private MetricAssertions() {} +} diff --git a/testing-common/src/test/java/io/opentelemetry/instrumentation/testing/util/MetricAssertionsTest.java b/testing-common/src/test/java/io/opentelemetry/instrumentation/testing/util/MetricAssertionsTest.java new file mode 100644 index 000000000000..69a6d4caa920 --- /dev/null +++ b/testing-common/src/test/java/io/opentelemetry/instrumentation/testing/util/MetricAssertionsTest.java @@ -0,0 +1,123 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.testing.util; + +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; +import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; +import static java.util.Arrays.asList; +import static java.util.Collections.emptyList; +import static java.util.Collections.singletonList; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +import io.opentelemetry.api.common.Attributes; +import io.opentelemetry.sdk.common.InstrumentationScopeInfo; +import io.opentelemetry.sdk.metrics.data.AggregationTemporality; +import io.opentelemetry.sdk.metrics.data.HistogramPointData; +import io.opentelemetry.sdk.metrics.data.MetricData; +import io.opentelemetry.sdk.metrics.internal.data.ImmutableGaugeData; +import io.opentelemetry.sdk.metrics.internal.data.ImmutableHistogramData; +import io.opentelemetry.sdk.metrics.internal.data.ImmutableHistogramPointData; +import io.opentelemetry.sdk.metrics.internal.data.ImmutableMetricData; +import io.opentelemetry.sdk.resources.Resource; +import org.junit.jupiter.api.Test; + +class MetricAssertionsTest { + + private static final InstrumentationScopeInfo SCOPE = InstrumentationScopeInfo.create("test"); + + @Test + void singlePoint() { + assertThat(histogram(point(1))) + .hasName("duration") + .hasUnit("s") + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasCount(1) + .hasSum(1) + .hasBucketBoundaries() + .hasBucketCounts(1) + .hasAttributes(Attributes.empty()))); + } + + @Test + void multiplePointsInAnyOrder() { + assertThat(singletonList(histogram(point(1), point(2)))) + .satisfiesExactly( + hasHistogramPointsSatisfyingExactly( + point -> point.hasCount(2).hasSum(2), point -> point.hasCount(1).hasSum(1))); + } + + @Test + void zeroPoints() { + assertThat(histogram()).satisfies(hasHistogramPointsSatisfyingExactly()); + } + + @Test + void missingPoint() { + assertThatThrownBy( + () -> + assertThat(histogram(point(1))) + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> point.hasCount(1), point -> point.hasCount(2)))) + .isInstanceOf(AssertionError.class); + } + + @Test + void extraPoint() { + assertThatThrownBy( + () -> + assertThat(histogram(point(1), point(2))) + .satisfies(hasHistogramPointsSatisfyingExactly(point -> point.hasCount(1)))) + .isInstanceOf(AssertionError.class); + } + + @Test + void wrongMetricType() { + MetricData gauge = + ImmutableMetricData.createLongGauge( + Resource.empty(), SCOPE, "gauge", "", "", ImmutableGaugeData.empty()); + + assertThatThrownBy(() -> assertThat(gauge).satisfies(hasHistogramPointsSatisfyingExactly())) + .isInstanceOf(AssertionError.class); + } + + @Test + void failedPointAssertion() { + assertThatThrownBy( + () -> + assertThat(histogram(point(1))) + .satisfies(hasHistogramPointsSatisfyingExactly(point -> point.hasCount(999)))) + .isInstanceOf(AssertionError.class) + .hasMessageContaining("to satisfy all the consumers in any order"); + } + + private static MetricData histogram(HistogramPointData... points) { + return ImmutableMetricData.createDoubleHistogram( + Resource.empty(), + SCOPE, + "duration", + "", + "s", + ImmutableHistogramData.create(AggregationTemporality.CUMULATIVE, asList(points))); + } + + private static HistogramPointData point(long count) { + return ImmutableHistogramPointData.create( + 0, + 1, + Attributes.empty(), + (double) count, + false, + 0, + false, + 0, + emptyList(), + singletonList(count)); + } +} From d55434382f38c270ea1d1254980ae2ad765b2a0d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 20 Oct 2026 00:55:18 +0000 Subject: [PATCH 03/14] Add histogram wait assertion helper Co-authored-by: trask <218610+trask@users.noreply.github.com> --- .../avaje/jex/v3_0/JexTest.java | 12 +- .../cassandra/v4_0/CassandraTest.java | 30 ++--- .../cassandra/v4_4/CassandraTest.java | 30 ++--- .../clientv1/v0_5/ClickHouseClientV1Test.java | 12 +- .../clientv2/v0_8/ClickHouseClientV2Test.java | 12 +- .../v4_0/DropwizardMetricsTest.java | 22 ++-- .../failsafe/v3_0/FailsafeTelemetryTest.java | 1 + .../iceberg/v1_8/AbstractIcebergTest.java | 29 ++--- .../javalin/AbstractJavalinTest.java | 12 +- .../jdbc/datasource/JdbcTelemetryTest.java | 12 +- .../jedis/v2_0/ShardedJedisClientTest.java | 12 +- .../jedis/v3_0/ShardedJedis30ClientTest.java | 22 ++-- .../jedis/v4_0/Jedis40ClientTest.java | 20 ++-- .../v7_0/KubernetesClientTest.java | 13 +- .../v7_0/KubernetesClientVer20Test.java | 13 +- .../v5_0/LettuceReactiveClientTest.java | 10 +- .../v5_1/AbstractLettuceClientTest.java | 10 +- .../v1_5/AbstractDistributionSummaryTest.java | 20 ++-- .../v1_5/AbstractNamingConventionTest.java | 29 ++--- .../mongo/v4_0/MongoConfiguredTargetTest.java | 14 +-- .../instrumentation/openai/v1_1/ChatTest.java | 112 ++++++++---------- .../openai/v1_1/AbstractChatTest.java | 18 +++ .../openai/v1_1/AbstractEmbeddingsTest.java | 29 ++--- .../v1_10/metrics/MeterTest.java | 27 ++--- .../v1_65/incubator/metrics/MeterTest.java | 29 ++--- .../client/RatpackHttpClientTest.java | 28 ++--- .../v4_8/RocketMqMetricsTest.java | 27 ++--- ...RocketMqClientSuppressReceiveSpanTest.java | 45 ++++--- .../v5_0/AbstractRocketMqClientTest.java | 86 ++++++-------- .../v5_0/RocketMqSimpleConsumerTest.java | 25 ++-- .../JmxRuntimeMetricsTest.java | 1 + .../RuntimeTelemetryDefaultsTest.java | 20 ++-- .../ai/v1_0/AbstractOpenAiChatModelTest.java | 2 + .../spring/ai/v1_0/ChatModelTest.java | 27 ++--- ...ageProducerSupportInstrumentationTest.java | 8 +- ...t11SimpleMessageListenerContainerTest.java | 8 +- ...t20DirectMessageListenerContainerTest.java | 8 +- ...pringWebfluxClientInstrumentationTest.java | 24 ++-- .../testing/InstrumentationTestRunner.java | 27 +++++ .../junit/InstrumentationExtension.java | 16 +++ .../junit/db/DbClientMetricsTestUtil.java | 20 +--- .../db/DbConnectionPoolMetricsAssertions.java | 5 +- .../junit/http/AbstractHttpClientTest.java | 13 +- .../junit/http/AbstractHttpServerTest.java | 13 +- .../LibraryInstrumentationExtensionTest.java | 65 ++++++++++ 45 files changed, 487 insertions(+), 531 deletions(-) diff --git a/instrumentation/avaje-jex-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/avaje/jex/v3_0/JexTest.java b/instrumentation/avaje-jex-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/avaje/jex/v3_0/JexTest.java index b4a2b12e05c1..472f343be28f 100644 --- a/instrumentation/avaje-jex-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/avaje/jex/v3_0/JexTest.java +++ b/instrumentation/avaje-jex-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/avaje/jex/v3_0/JexTest.java @@ -5,7 +5,6 @@ package io.opentelemetry.javaagent.instrumentation.avaje.jex.v3_0; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; @@ -121,13 +120,10 @@ void testHttpRouteMetricWithPathParamResponseSuccessful() { assertThat(content).isEqualTo(id); assertThat(response.status().code()).isEqualTo(200); - testing.waitAndAssertMetrics( + testing.waitAndAssertHistogramPoints( instrumentation, - metric -> - metric - .hasName("http.server.request.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> point.hasAttribute(HTTP_ROUTE, "/test/param/{id}")))); + "http.server.request.duration", + metric -> metric.hasUnit("s"), + point -> point.hasAttribute(HTTP_ROUTE, "/test/param/{id}")); } } diff --git a/instrumentation/cassandra/cassandra-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraTest.java b/instrumentation/cassandra/cassandra-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraTest.java index 96d7fcfd81c3..ad23a13f6a05 100644 --- a/instrumentation/cassandra/cassandra-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraTest.java +++ b/instrumentation/cassandra/cassandra-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraTest.java @@ -5,7 +5,6 @@ package io.opentelemetry.javaagent.instrumentation.cassandra.v4_0; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.DbAttributes.DB_COLLECTION_NAME; import static io.opentelemetry.semconv.DbAttributes.DB_OPERATION_NAME; @@ -106,22 +105,19 @@ void responsePeerComesFromTheChannel() { assertThat(span.getAttributes().get(NETWORK_PEER_PORT)).isEqualTo(cassandraPort); assertThat(span.getAttributes().get(NETWORK_TYPE)).isEqualTo(null); }); - testing.waitAndAssertMetrics( + testing.waitAndAssertHistogramPoints( getInstrumentationName(), - metric -> - metric - .hasName("db.client.operation.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(DB_COLLECTION_NAME, "system.local"), - equalTo(DB_OPERATION_NAME, "SELECT"), - equalTo(DB_QUERY_SUMMARY, "SELECT system.local"), - equalTo(DB_SYSTEM_NAME, "cassandra"), - equalTo(NETWORK_PEER_ADDRESS, cassandraIp), - equalTo(NETWORK_PEER_PORT, cassandraPort), - equalTo(SERVER_ADDRESS, cassandraHost), - equalTo(SERVER_PORT, cassandraPort))))); + "db.client.operation.duration", + metric -> metric.hasUnit("s"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(DB_COLLECTION_NAME, "system.local"), + equalTo(DB_OPERATION_NAME, "SELECT"), + equalTo(DB_QUERY_SUMMARY, "SELECT system.local"), + equalTo(DB_SYSTEM_NAME, "cassandra"), + equalTo(NETWORK_PEER_ADDRESS, cassandraIp), + equalTo(NETWORK_PEER_PORT, cassandraPort), + equalTo(SERVER_ADDRESS, cassandraHost), + equalTo(SERVER_PORT, cassandraPort))); } } diff --git a/instrumentation/cassandra/cassandra-4.4/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_4/CassandraTest.java b/instrumentation/cassandra/cassandra-4.4/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_4/CassandraTest.java index ac373b9c689a..d1ad627d9e87 100644 --- a/instrumentation/cassandra/cassandra-4.4/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_4/CassandraTest.java +++ b/instrumentation/cassandra/cassandra-4.4/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_4/CassandraTest.java @@ -5,7 +5,6 @@ package io.opentelemetry.javaagent.instrumentation.cassandra.v4_4; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.DbAttributes.DB_COLLECTION_NAME; import static io.opentelemetry.semconv.DbAttributes.DB_OPERATION_NAME; @@ -101,23 +100,20 @@ void responsePeerComesFromTheChannel() throws ReflectiveOperationException { assertThat(span.getAttributes().get(NETWORK_PEER_PORT)).isEqualTo(cassandraPort); assertThat(span.getAttributes().get(NETWORK_TYPE)).isEqualTo(null); }); - testing.waitAndAssertMetrics( + testing.waitAndAssertHistogramPoints( getInstrumentationName(), - metric -> - metric - .hasName("db.client.operation.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(DB_COLLECTION_NAME, "system.local"), - equalTo(DB_OPERATION_NAME, "SELECT"), - equalTo(DB_QUERY_SUMMARY, "SELECT system.local"), - equalTo(DB_SYSTEM_NAME, "cassandra"), - equalTo(NETWORK_PEER_ADDRESS, cassandraIp), - equalTo(NETWORK_PEER_PORT, cassandraPort), - equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, cassandraPort))))); + "db.client.operation.duration", + metric -> metric.hasUnit("s"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(DB_COLLECTION_NAME, "system.local"), + equalTo(DB_OPERATION_NAME, "SELECT"), + equalTo(DB_QUERY_SUMMARY, "SELECT system.local"), + equalTo(DB_SYSTEM_NAME, "cassandra"), + equalTo(NETWORK_PEER_ADDRESS, cassandraIp), + equalTo(NETWORK_PEER_PORT, cassandraPort), + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, cassandraPort))); } private static CqlSession getDelegate(CqlSession session) throws IllegalAccessException { diff --git a/instrumentation/clickhouse/clickhouse-client-v1-0.5/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/clickhouse/clientv1/v0_5/ClickHouseClientV1Test.java b/instrumentation/clickhouse/clickhouse-client-v1-0.5/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/clickhouse/clientv1/v0_5/ClickHouseClientV1Test.java index c6216d2593f4..a6c887912f7a 100644 --- a/instrumentation/clickhouse/clickhouse-client-v1-0.5/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/clickhouse/clientv1/v0_5/ClickHouseClientV1Test.java +++ b/instrumentation/clickhouse/clickhouse-client-v1-0.5/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/clickhouse/clientv1/v0_5/ClickHouseClientV1Test.java @@ -6,7 +6,6 @@ package io.opentelemetry.javaagent.instrumentation.clickhouse.clientv1.v0_5; import static io.opentelemetry.instrumentation.testing.junit.db.DbClientMetricsTestUtil.assertDurationMetric; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.DbAttributes.DB_NAMESPACE; import static io.opentelemetry.semconv.DbAttributes.DB_QUERY_SUMMARY; @@ -377,14 +376,11 @@ void testExecuteAndWaitThrowsException() { NETWORK_PEER_PORT, SERVER_ADDRESS, SERVER_PORT); - testing.waitAndAssertMetrics( + testing.waitAndAssertHistogramPoints( "io.opentelemetry.clickhouse-client-v1-0.5", - metric -> - metric - .hasName("db.client.operation.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> point.hasAttribute(ERROR_TYPE, "60")))); + "db.client.operation.duration", + metric -> metric.hasUnit("s"), + point -> point.hasAttribute(ERROR_TYPE, "60")); } @Test diff --git a/instrumentation/clickhouse/clickhouse-client-v2-0.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/clickhouse/clientv2/v0_8/ClickHouseClientV2Test.java b/instrumentation/clickhouse/clickhouse-client-v2-0.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/clickhouse/clientv2/v0_8/ClickHouseClientV2Test.java index ce91b96cecbd..439280e37af5 100644 --- a/instrumentation/clickhouse/clickhouse-client-v2-0.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/clickhouse/clientv2/v0_8/ClickHouseClientV2Test.java +++ b/instrumentation/clickhouse/clickhouse-client-v2-0.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/clickhouse/clientv2/v0_8/ClickHouseClientV2Test.java @@ -6,7 +6,6 @@ package io.opentelemetry.javaagent.instrumentation.clickhouse.clientv2.v0_8; import static io.opentelemetry.instrumentation.testing.junit.db.DbClientMetricsTestUtil.assertDurationMetric; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.DbAttributes.DB_NAMESPACE; import static io.opentelemetry.semconv.DbAttributes.DB_QUERY_SUMMARY; @@ -343,14 +342,11 @@ void testQueryThrowsServerException() { NETWORK_PEER_PORT, SERVER_ADDRESS, SERVER_PORT); - testing.waitAndAssertMetrics( + testing.waitAndAssertHistogramPoints( "io.opentelemetry.clickhouse-client-v2-0.8", - metric -> - metric - .hasName("db.client.operation.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> point.hasAttribute(ERROR_TYPE, "60")))); + "db.client.operation.duration", + metric -> metric.hasUnit("s"), + point -> point.hasAttribute(ERROR_TYPE, "60")); } @Test diff --git a/instrumentation/dropwizard/dropwizard-metrics-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/dropwizardmetrics/v4_0/DropwizardMetricsTest.java b/instrumentation/dropwizard/dropwizard-metrics-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/dropwizardmetrics/v4_0/DropwizardMetricsTest.java index c042b14a8375..74a277d5599d 100644 --- a/instrumentation/dropwizard/dropwizard-metrics-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/dropwizardmetrics/v4_0/DropwizardMetricsTest.java +++ b/instrumentation/dropwizard/dropwizard-metrics-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/dropwizardmetrics/v4_0/DropwizardMetricsTest.java @@ -5,7 +5,6 @@ package io.opentelemetry.javaagent.instrumentation.dropwizardmetrics.v4_0; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static java.util.concurrent.TimeUnit.MILLISECONDS; import static java.util.concurrent.TimeUnit.NANOSECONDS; import static java.util.concurrent.TimeUnit.SECONDS; @@ -97,13 +96,11 @@ void histogram() { histogram.update(30); // then - testing.waitAndAssertMetrics( + testing.waitAndAssertHistogramPoints( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("testhistogram") - .satisfies( - hasHistogramPointsSatisfyingExactly(point -> point.hasSum(42).hasCount(2)))); + "testhistogram", + metric -> metric.hasUnit(""), + point -> point.hasSum(42).hasCount(2)); testing.clearData(); // when @@ -156,14 +153,11 @@ void timer() { timer.update(234_000, NANOSECONDS); // then - testing.waitAndAssertMetrics( + testing.waitAndAssertHistogramPoints( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("testtimer") - .hasUnit("ms") - .satisfies( - hasHistogramPointsSatisfyingExactly(point -> point.hasSum(1.234).hasCount(2)))); + "testtimer", + metric -> metric.hasUnit("ms"), + point -> point.hasSum(1.234).hasCount(2)); testing.clearData(); // when diff --git a/instrumentation/failsafe-3.0/library/src/test/java/io/opentelemetry/instrumentation/failsafe/v3_0/FailsafeTelemetryTest.java b/instrumentation/failsafe-3.0/library/src/test/java/io/opentelemetry/instrumentation/failsafe/v3_0/FailsafeTelemetryTest.java index 70939f460295..fcae66cb70b5 100644 --- a/instrumentation/failsafe-3.0/library/src/test/java/io/opentelemetry/instrumentation/failsafe/v3_0/FailsafeTelemetryTest.java +++ b/instrumentation/failsafe-3.0/library/src/test/java/io/opentelemetry/instrumentation/failsafe/v3_0/FailsafeTelemetryTest.java @@ -121,6 +121,7 @@ void captureRetryPolicyMetrics() { metricAssert -> metricAssert .hasName("failsafe.retry_policy.attempts") + .hasUnit("{attempt}") .satisfies( hasHistogramPointsSatisfyingExactly( histogramPointAssert -> diff --git a/instrumentation/iceberg-1.8/testing/src/main/java/io/opentelemetry/instrumentation/iceberg/v1_8/AbstractIcebergTest.java b/instrumentation/iceberg-1.8/testing/src/main/java/io/opentelemetry/instrumentation/iceberg/v1_8/AbstractIcebergTest.java index 9933832884fd..5b5205a926f1 100644 --- a/instrumentation/iceberg-1.8/testing/src/main/java/io/opentelemetry/instrumentation/iceberg/v1_8/AbstractIcebergTest.java +++ b/instrumentation/iceberg-1.8/testing/src/main/java/io/opentelemetry/instrumentation/iceberg/v1_8/AbstractIcebergTest.java @@ -7,7 +7,6 @@ import static io.opentelemetry.api.common.AttributeKey.longKey; import static io.opentelemetry.api.common.AttributeKey.stringKey; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static java.util.Arrays.asList; import static org.assertj.core.api.Assertions.assertThat; @@ -111,25 +110,17 @@ void testCreateTelemetry() throws IOException { private void assertScanDurationMetric(ScanReport expectedReport) { testing() - .waitAndAssertMetrics( + .waitAndAssertHistogramPoints( INSTRUMENTATION_NAME, - metricAssert -> - metricAssert - .hasName("iceberg.scan.planning.duration") - .hasUnit("s") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo( - longKey("iceberg.schema.id"), - expectedReport.schemaId()), - equalTo( - stringKey("iceberg.table.name"), - expectedReport.tableName()))))); + "iceberg.scan.planning.duration", + metricAssert -> metricAssert.hasUnit("s"), + point -> + point + .hasSumGreaterThan(0.0) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(longKey("iceberg.schema.id"), expectedReport.schemaId()), + equalTo(stringKey("iceberg.table.name"), expectedReport.tableName()))); } private void assertDataFilesCountMetrics(ScanReport expectedReport) { diff --git a/instrumentation/javalin/testing/src/main/java/io/opentelemetry/instrumentation/javalin/AbstractJavalinTest.java b/instrumentation/javalin/testing/src/main/java/io/opentelemetry/instrumentation/javalin/AbstractJavalinTest.java index f5dd553d3d63..0897aa4d27fc 100644 --- a/instrumentation/javalin/testing/src/main/java/io/opentelemetry/instrumentation/javalin/AbstractJavalinTest.java +++ b/instrumentation/javalin/testing/src/main/java/io/opentelemetry/instrumentation/javalin/AbstractJavalinTest.java @@ -5,7 +5,6 @@ package io.opentelemetry.instrumentation.javalin; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; @@ -162,13 +161,10 @@ void testHttpRouteMetricWithPathParamResponseSuccessful() { assertThat(content).isEqualTo(id); assertThat(response.status().code()).isEqualTo(200); testing() - .waitAndAssertMetrics( + .waitAndAssertHistogramPoints( getJettyInstrumentation(), - metric -> - metric - .hasName("http.server.request.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> point.hasAttribute(HTTP_ROUTE, "/param/{id}")))); + "http.server.request.duration", + metric -> metric.hasUnit("s"), + point -> point.hasAttribute(HTTP_ROUTE, "/param/{id}")); } } diff --git a/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/datasource/JdbcTelemetryTest.java b/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/datasource/JdbcTelemetryTest.java index 86c49ec1aa40..90ce61346855 100644 --- a/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/datasource/JdbcTelemetryTest.java +++ b/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/datasource/JdbcTelemetryTest.java @@ -6,7 +6,6 @@ package io.opentelemetry.instrumentation.jdbc.datasource; import static io.opentelemetry.instrumentation.testing.junit.db.DbClientMetricsTestUtil.assertDurationMetric; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.DbAttributes.DB_NAMESPACE; import static io.opentelemetry.semconv.DbAttributes.DB_OPERATION_BATCH_SIZE; @@ -170,14 +169,11 @@ void error(int errorCode, String sqlState, String expectedErrorType) throws SQLE DB_SYSTEM_NAME, ERROR_TYPE, SERVER_ADDRESS); - testing.waitAndAssertMetrics( + testing.waitAndAssertHistogramPoints( "io.opentelemetry.jdbc", - metric -> - metric - .hasName("db.client.operation.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> point.hasAttribute(ERROR_TYPE, expectedErrorType)))); + "db.client.operation.duration", + metric -> metric.hasUnit("s"), + point -> point.hasAttribute(ERROR_TYPE, expectedErrorType)); } private static Stream errorCodes() { diff --git a/instrumentation/jedis/jedis-2.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v2_0/ShardedJedisClientTest.java b/instrumentation/jedis/jedis-2.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v2_0/ShardedJedisClientTest.java index 34a3034e98e7..3eca4bf665f2 100644 --- a/instrumentation/jedis/jedis-2.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v2_0/ShardedJedisClientTest.java +++ b/instrumentation/jedis/jedis-2.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v2_0/ShardedJedisClientTest.java @@ -5,7 +5,6 @@ package io.opentelemetry.javaagent.instrumentation.jedis.v2_0; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.DbAttributes.DB_NAMESPACE; import static io.opentelemetry.semconv.DbAttributes.DB_OPERATION_NAME; @@ -145,14 +144,11 @@ void commandFromAllShardsUsesConfiguredTarget() { NETWORK_PEER_ADDRESS, peerAddress.getAddress().getHostAddress()), equalTo(NETWORK_PEER_PORT, (long) peerAddress.getPort())))); - testing.waitAndAssertMetrics( + testing.waitAndAssertHistogramPoints( "io.opentelemetry.jedis-2.0", - metric -> - metric - .hasName("db.client.operation.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> point.hasAttribute(SERVER_ADDRESS, configuredTarget)))); + "db.client.operation.duration", + metric -> metric.hasUnit("s"), + point -> point.hasAttribute(SERVER_ADDRESS, configuredTarget)); } @Test diff --git a/instrumentation/jedis/jedis-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v3_0/ShardedJedis30ClientTest.java b/instrumentation/jedis/jedis-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v3_0/ShardedJedis30ClientTest.java index f9d3b81db2b3..9c792bc1e112 100644 --- a/instrumentation/jedis/jedis-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v3_0/ShardedJedis30ClientTest.java +++ b/instrumentation/jedis/jedis-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v3_0/ShardedJedis30ClientTest.java @@ -6,7 +6,6 @@ package io.opentelemetry.javaagent.instrumentation.jedis.v3_0; import static io.opentelemetry.instrumentation.testing.junit.db.DbClientMetricsTestUtil.assertDurationMetric; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; import static io.opentelemetry.semconv.DbAttributes.DB_NAMESPACE; @@ -154,19 +153,14 @@ void commandFromAllShardsUsesConfiguredTarget() { SERVER_ADDRESS, NETWORK_PEER_ADDRESS, NETWORK_PEER_PORT); - testing.waitAndAssertMetrics( + testing.waitAndAssertHistogramPoints( "io.opentelemetry.jedis-3.0", - metric -> - metric - .hasName("db.client.operation.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasAttribute(SERVER_ADDRESS, configuredTarget) - .hasAttributesSatisfying( - attributes -> - assertThat(attributes.asMap()) - .doesNotContainKey(SERVER_PORT))))); + "db.client.operation.duration", + metric -> metric.hasUnit("s"), + point -> + point + .hasAttribute(SERVER_ADDRESS, configuredTarget) + .hasAttributesSatisfying( + attributes -> assertThat(attributes.asMap()).doesNotContainKey(SERVER_PORT))); } } diff --git a/instrumentation/jedis/jedis-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v4_0/Jedis40ClientTest.java b/instrumentation/jedis/jedis-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v4_0/Jedis40ClientTest.java index ca2177b9d6c9..c264802cc188 100644 --- a/instrumentation/jedis/jedis-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v4_0/Jedis40ClientTest.java +++ b/instrumentation/jedis/jedis-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v4_0/Jedis40ClientTest.java @@ -6,7 +6,6 @@ package io.opentelemetry.javaagent.instrumentation.jedis.v4_0; import static io.opentelemetry.instrumentation.testing.junit.db.DbClientMetricsTestUtil.assertDurationMetric; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.DbAttributes.DB_NAMESPACE; import static io.opentelemetry.semconv.DbAttributes.DB_OPERATION_BATCH_SIZE; @@ -155,18 +154,15 @@ void mappedCommandUsesConfiguredTarget() { equalTo(NETWORK_PEER_PORT, port), equalTo(NETWORK_PEER_ADDRESS, ip)))); - testing.waitAndAssertMetrics( + testing.waitAndAssertHistogramPoints( "io.opentelemetry.jedis-4.0", - metric -> - metric - .hasName("db.client.operation.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasAttribute(DB_OPERATION_NAME, "SET") - .hasAttribute(SERVER_ADDRESS, configuredHost) - .hasAttribute(SERVER_PORT, (long) configuredPort)))); + "db.client.operation.duration", + metric -> metric.hasUnit("s"), + point -> + point + .hasAttribute(DB_OPERATION_NAME, "SET") + .hasAttribute(SERVER_ADDRESS, configuredHost) + .hasAttribute(SERVER_PORT, (long) configuredPort)); } @Test diff --git a/instrumentation/kubernetes-client-7.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/v7_0/KubernetesClientTest.java b/instrumentation/kubernetes-client-7.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/v7_0/KubernetesClientTest.java index 6b38a3bc1e71..70ba8c16d57d 100644 --- a/instrumentation/kubernetes-client-7.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/v7_0/KubernetesClientTest.java +++ b/instrumentation/kubernetes-client-7.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/v7_0/KubernetesClientTest.java @@ -7,7 +7,6 @@ import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.instrumentation.testing.junit.service.SemconvServiceStabilityUtil.maybeStablePeerService; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.instrumentation.testing.util.TelemetryDataUtil.orderByRootSpanName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; @@ -105,15 +104,11 @@ void synchronousCall() throws ApiException { experimental("namespace")), equalTo(stringKey("kubernetes-client.name"), experimental("name"))))); - testing.waitAndAssertMetrics( + testing.waitAndAssertHistogramPoints( "io.opentelemetry.kubernetes-client-7.0", - metric -> - metric - .hasName("http.client.request.duration") - .hasDescription("Duration of HTTP client requests.") - .hasUnit("s") - .satisfies( - hasHistogramPointsSatisfyingExactly(point -> point.hasSumGreaterThan(0.0)))); + "http.client.request.duration", + metric -> metric.hasDescription("Duration of HTTP client requests.").hasUnit("s"), + point -> point.hasSumGreaterThan(0.0)); } @Test diff --git a/instrumentation/kubernetes-client-7.0/javaagent/src/version20Test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/v7_0/KubernetesClientVer20Test.java b/instrumentation/kubernetes-client-7.0/javaagent/src/version20Test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/v7_0/KubernetesClientVer20Test.java index e6d4c17d9e2e..05952c5b7185 100644 --- a/instrumentation/kubernetes-client-7.0/javaagent/src/version20Test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/v7_0/KubernetesClientVer20Test.java +++ b/instrumentation/kubernetes-client-7.0/javaagent/src/version20Test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/v7_0/KubernetesClientVer20Test.java @@ -7,7 +7,6 @@ import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.instrumentation.testing.junit.service.SemconvServiceStabilityUtil.maybeStablePeerService; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.instrumentation.testing.util.TelemetryDataUtil.orderByRootSpanName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; @@ -109,15 +108,11 @@ void synchronousCall() throws ApiException { experimental("namespace")), equalTo(stringKey("kubernetes-client.name"), experimental("name"))))); - testing.waitAndAssertMetrics( + testing.waitAndAssertHistogramPoints( "io.opentelemetry.kubernetes-client-7.0", - metric -> - metric - .hasName("http.client.request.duration") - .hasDescription("Duration of HTTP client requests.") - .hasUnit("s") - .satisfies( - hasHistogramPointsSatisfyingExactly(point -> point.hasSumGreaterThan(0.0)))); + "http.client.request.duration", + metric -> metric.hasDescription("Duration of HTTP client requests.").hasUnit("s"), + point -> point.hasSumGreaterThan(0.0)); } @Test diff --git a/instrumentation/lettuce/lettuce-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceReactiveClientTest.java b/instrumentation/lettuce/lettuce-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceReactiveClientTest.java index 1d88d5012504..126bcc73ef6e 100644 --- a/instrumentation/lettuce/lettuce-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceReactiveClientTest.java +++ b/instrumentation/lettuce/lettuce-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceReactiveClientTest.java @@ -7,7 +7,6 @@ import static io.opentelemetry.api.common.AttributeKey.booleanKey; import static io.opentelemetry.api.common.AttributeKey.longKey; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.javaagent.instrumentation.lettuce.v5_0.ExperimentalHelper.EXPERIMENTAL_ATTRIBUTES_ENABLED; import static io.opentelemetry.javaagent.instrumentation.lettuce.v5_0.ExperimentalHelper.experimental; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; @@ -436,12 +435,11 @@ void testNoResponseCommandFluxCancellationEndsSpanOnce() { trace -> trace.hasSpansSatisfyingExactly( span -> span.hasName("DEBUG " + host + ":" + port).hasKind(SpanKind.CLIENT))); - testing.waitAndAssertMetrics( + testing.waitAndAssertHistogramPoints( "io.opentelemetry.lettuce-5.0", - metrics -> - metrics - .hasName("db.client.operation.duration") - .satisfies(hasHistogramPointsSatisfyingExactly(point -> point.hasCount(1)))); + "db.client.operation.duration", + metric -> metric.hasUnit("s"), + point -> point.hasCount(1)); }); } diff --git a/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceClientTest.java b/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceClientTest.java index adec2f5f698a..e3daed3c04f9 100644 --- a/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceClientTest.java +++ b/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceClientTest.java @@ -107,8 +107,14 @@ protected void assertCommandErrorMetric(String errorType) { "db.client.operation.duration", metrics -> metrics.anySatisfy( - hasHistogramPointsSatisfyingExactly( - point -> point.hasAttributesSatisfying(equalTo(ERROR_TYPE, errorType))))); + metric -> + assertThat(metric) + .hasUnit("s") + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfying( + equalTo(ERROR_TYPE, errorType)))))); } protected String spanName(String operation) { diff --git a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractDistributionSummaryTest.java b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractDistributionSummaryTest.java index 651e6b2ba872..64e9a0c3578d 100644 --- a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractDistributionSummaryTest.java +++ b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractDistributionSummaryTest.java @@ -73,19 +73,15 @@ void testMicrometerDistributionSummary() { // then // The synchronous histogram returns its previous value after removal. testing() - .waitAndAssertMetrics( + .waitAndAssertHistogramPoints( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("testSummary") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(7) - .hasCount(3) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("tag"), "value"))))); + "testSummary", + metric -> metric.hasUnit("things"), + point -> + point + .hasSum(7) + .hasCount(3) + .hasAttributesSatisfyingExactly(equalTo(stringKey("tag"), "value"))); } @Test diff --git a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractNamingConventionTest.java b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractNamingConventionTest.java index 672acefed9a3..64be5b32fdf4 100644 --- a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractNamingConventionTest.java +++ b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractNamingConventionTest.java @@ -7,7 +7,6 @@ import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.instrumentation.micrometer.v1_5.AbstractCounterTest.INSTRUMENTATION_NAME; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static java.util.Collections.singletonList; import static java.util.concurrent.TimeUnit.SECONDS; @@ -86,16 +85,12 @@ void renameDistributionSummary() { // then testing() - .waitAndAssertMetrics( + .waitAndAssertHistogramPoints( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("test.renamedSummary") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(stringKey("test.tag"), "test.value"))))); + "test.renamedSummary", + metric -> metric.hasUnit(""), + point -> + point.hasAttributesSatisfyingExactly(equalTo(stringKey("test.tag"), "test.value"))); } @Test @@ -242,15 +237,11 @@ void renameTimer() { // then testing() - .waitAndAssertMetrics( + .waitAndAssertHistogramPoints( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("test.renamedTimer") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(stringKey("test.tag"), "test.value"))))); + "test.renamedTimer", + metric -> metric.hasUnit("s"), + point -> + point.hasAttributesSatisfyingExactly(equalTo(stringKey("test.tag"), "test.value"))); } } diff --git a/instrumentation/mongo/mongo-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/mongo/v4_0/MongoConfiguredTargetTest.java b/instrumentation/mongo/mongo-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/mongo/v4_0/MongoConfiguredTargetTest.java index 13a70c1e9a0c..52dde08863f0 100644 --- a/instrumentation/mongo/mongo-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/mongo/v4_0/MongoConfiguredTargetTest.java +++ b/instrumentation/mongo/mongo-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/mongo/v4_0/MongoConfiguredTargetTest.java @@ -6,7 +6,6 @@ package io.opentelemetry.javaagent.instrumentation.mongo.v4_0; import static io.opentelemetry.instrumentation.testing.junit.db.DbClientMetricsTestUtil.assertDurationMetric; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.semconv.DbAttributes.DB_COLLECTION_NAME; import static io.opentelemetry.semconv.DbAttributes.DB_NAMESPACE; import static io.opentelemetry.semconv.DbAttributes.DB_OPERATION_NAME; @@ -92,15 +91,10 @@ void severalSeedsAreTheOperationDurationLogicalServer() { DB_OPERATION_NAME, DB_COLLECTION_NAME, SERVER_ADDRESS); - testing.waitAndAssertMetrics( + testing.waitAndAssertHistogramPoints( "io.opentelemetry.mongo-4.0", - metric -> - metric - .hasName("db.client.operation.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttribute( - SERVER_ADDRESS, "db1.example:27017,db2.example:27018")))); + "db.client.operation.duration", + metric -> metric.hasUnit("s"), + point -> point.hasAttribute(SERVER_ADDRESS, "db1.example:27017,db2.example:27018")); } } diff --git a/instrumentation/openai/openai-java-1.1/library/src/test/java/io/opentelemetry/instrumentation/openai/v1_1/ChatTest.java b/instrumentation/openai/openai-java-1.1/library/src/test/java/io/opentelemetry/instrumentation/openai/v1_1/ChatTest.java index 5263347f92ef..306d5253fccc 100644 --- a/instrumentation/openai/openai-java-1.1/library/src/test/java/io/opentelemetry/instrumentation/openai/v1_1/ChatTest.java +++ b/instrumentation/openai/openai-java-1.1/library/src/test/java/io/opentelemetry/instrumentation/openai/v1_1/ChatTest.java @@ -132,6 +132,7 @@ void basicNoCaptureContent() { metric -> metric .hasName("gen_ai.client.operation.duration") + .hasUnit("s") .satisfies( hasHistogramPointsSatisfyingExactly( point -> @@ -145,6 +146,7 @@ void basicNoCaptureContent() { metric -> metric .hasName("gen_ai.client.token.usage") + .hasUnit("{token}") .satisfies( hasHistogramPointsSatisfyingExactly( point -> @@ -230,6 +232,7 @@ void multipleChoicesNoCaptureContent() { metric -> metric .hasName("gen_ai.client.operation.duration") + .hasUnit("s") .satisfies( hasHistogramPointsSatisfyingExactly( point -> @@ -243,6 +246,7 @@ void multipleChoicesNoCaptureContent() { metric -> metric .hasName("gen_ai.client.token.usage") + .hasUnit("{token}") .satisfies( hasHistogramPointsSatisfyingExactly( point -> @@ -357,6 +361,7 @@ void toolCallsNoCaptureContent() { metric -> metric .hasName("gen_ai.client.operation.duration") + .hasUnit("s") .satisfies( hasHistogramPointsSatisfyingExactly( point -> @@ -370,6 +375,7 @@ void toolCallsNoCaptureContent() { metric -> metric .hasName("gen_ai.client.token.usage") + .hasUnit("{token}") .satisfies( hasHistogramPointsSatisfyingExactly( point -> @@ -477,6 +483,7 @@ void toolCallsNoCaptureContent() { metric -> metric .hasName("gen_ai.client.operation.duration") + .hasUnit("s") .satisfies( hasHistogramPointsSatisfyingExactly( point -> @@ -490,6 +497,7 @@ void toolCallsNoCaptureContent() { metric -> metric .hasName("gen_ai.client.token.usage") + .hasUnit("{token}") .satisfies( hasHistogramPointsSatisfyingExactly( point -> @@ -619,22 +627,18 @@ void streamNoCaptureContent() { val -> val.containsExactly("stop")))))); getTesting() - .waitAndAssertMetrics( + .waitAndAssertHistogramPoints( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL))))); + "gen_ai.client.operation.duration", + metric -> metric.hasUnit("s"), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -714,22 +718,18 @@ void streamMultipleChoicesNoCaptureContent() { val -> val.containsExactly("stop", "stop")))))); getTesting() - .waitAndAssertMetrics( + .waitAndAssertHistogramPoints( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL))))); + "gen_ai.client.operation.duration", + metric -> metric.hasUnit("s"), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -815,22 +815,18 @@ void streamToolCallsNoCaptureContent() { val -> val.containsExactly("tool_calls")))))); getTesting() - .waitAndAssertMetrics( + .waitAndAssertHistogramPoints( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL))))); + "gen_ai.client.operation.duration", + metric -> metric.hasUnit("s"), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -916,22 +912,18 @@ void streamToolCallsNoCaptureContent() { val -> val.containsExactly("stop")))))); getTesting() - .waitAndAssertMetrics( + .waitAndAssertHistogramPoints( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL))))); + "gen_ai.client.operation.duration", + metric -> metric.hasUnit("s"), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL))); SpanContext spanCtx1 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); diff --git a/instrumentation/openai/openai-java-1.1/testing/src/main/java/io/opentelemetry/instrumentation/openai/v1_1/AbstractChatTest.java b/instrumentation/openai/openai-java-1.1/testing/src/main/java/io/opentelemetry/instrumentation/openai/v1_1/AbstractChatTest.java index 8d29404c8bbf..f601b58a99ab 100644 --- a/instrumentation/openai/openai-java-1.1/testing/src/main/java/io/opentelemetry/instrumentation/openai/v1_1/AbstractChatTest.java +++ b/instrumentation/openai/openai-java-1.1/testing/src/main/java/io/opentelemetry/instrumentation/openai/v1_1/AbstractChatTest.java @@ -211,6 +211,7 @@ void basic() { metric -> metric .hasName("gen_ai.client.operation.duration") + .hasUnit("s") .satisfies( hasHistogramPointsSatisfyingExactly( point -> @@ -224,6 +225,7 @@ void basic() { metric -> metric .hasName("gen_ai.client.token.usage") + .hasUnit("{token}") .satisfies( hasHistogramPointsSatisfyingExactly( point -> @@ -374,6 +376,7 @@ void allTheClientOptions() { metric -> metric .hasName("gen_ai.client.operation.duration") + .hasUnit("s") .satisfies( hasHistogramPointsSatisfyingExactly( point -> @@ -387,6 +390,7 @@ void allTheClientOptions() { metric -> metric .hasName("gen_ai.client.token.usage") + .hasUnit("{token}") .satisfies( hasHistogramPointsSatisfyingExactly( point -> @@ -474,6 +478,7 @@ void multipleChoices() { metric -> metric .hasName("gen_ai.client.operation.duration") + .hasUnit("s") .satisfies( hasHistogramPointsSatisfyingExactly( point -> @@ -487,6 +492,7 @@ void multipleChoices() { metric -> metric .hasName("gen_ai.client.token.usage") + .hasUnit("{token}") .satisfies( hasHistogramPointsSatisfyingExactly( point -> @@ -604,6 +610,7 @@ void toolCalls() { metric -> metric .hasName("gen_ai.client.operation.duration") + .hasUnit("s") .satisfies( hasHistogramPointsSatisfyingExactly( point -> @@ -617,6 +624,7 @@ void toolCalls() { metric -> metric .hasName("gen_ai.client.token.usage") + .hasUnit("{token}") .satisfies( hasHistogramPointsSatisfyingExactly( point -> @@ -751,6 +759,7 @@ void toolCalls() { metric -> metric .hasName("gen_ai.client.operation.duration") + .hasUnit("s") .satisfies( hasHistogramPointsSatisfyingExactly( point -> @@ -764,6 +773,7 @@ void toolCalls() { metric -> metric .hasName("gen_ai.client.token.usage") + .hasUnit("{token}") .satisfies( hasHistogramPointsSatisfyingExactly( point -> @@ -920,6 +930,7 @@ void connectionError() { metric -> metric .hasName("gen_ai.client.operation.duration") + .hasUnit("s") .satisfies( hasHistogramPointsSatisfyingExactly( point -> @@ -987,6 +998,7 @@ void stream() { metric -> metric .hasName("gen_ai.client.operation.duration") + .hasUnit("s") .satisfies( hasHistogramPointsSatisfyingExactly( point -> @@ -1112,6 +1124,7 @@ void streamIncludeUsage() { metric -> metric .hasName("gen_ai.client.operation.duration") + .hasUnit("s") .satisfies( hasHistogramPointsSatisfyingExactly( point -> @@ -1125,6 +1138,7 @@ void streamIncludeUsage() { metric -> metric .hasName("gen_ai.client.token.usage") + .hasUnit("{token}") .satisfies( hasHistogramPointsSatisfyingExactly( point -> @@ -1229,6 +1243,7 @@ void streamMultipleChoices() { metric -> metric .hasName("gen_ai.client.operation.duration") + .hasUnit("s") .satisfies( hasHistogramPointsSatisfyingExactly( point -> @@ -1382,6 +1397,7 @@ void streamToolCalls() { metric -> metric .hasName("gen_ai.client.operation.duration") + .hasUnit("s") .satisfies( hasHistogramPointsSatisfyingExactly( point -> @@ -1513,6 +1529,7 @@ void streamToolCalls() { metric -> metric .hasName("gen_ai.client.operation.duration") + .hasUnit("s") .satisfies( hasHistogramPointsSatisfyingExactly( point -> @@ -1661,6 +1678,7 @@ void streamConnectionError() { metric -> metric .hasName("gen_ai.client.operation.duration") + .hasUnit("s") .satisfies( hasHistogramPointsSatisfyingExactly( point -> diff --git a/instrumentation/openai/openai-java-1.1/testing/src/main/java/io/opentelemetry/instrumentation/openai/v1_1/AbstractEmbeddingsTest.java b/instrumentation/openai/openai-java-1.1/testing/src/main/java/io/opentelemetry/instrumentation/openai/v1_1/AbstractEmbeddingsTest.java index 713e43a7f8d6..bf64eb802dca 100644 --- a/instrumentation/openai/openai-java-1.1/testing/src/main/java/io/opentelemetry/instrumentation/openai/v1_1/AbstractEmbeddingsTest.java +++ b/instrumentation/openai/openai-java-1.1/testing/src/main/java/io/opentelemetry/instrumentation/openai/v1_1/AbstractEmbeddingsTest.java @@ -118,6 +118,7 @@ void basic() { metric -> metric .hasName("gen_ai.client.operation.duration") + .hasUnit("s") .satisfies( hasHistogramPointsSatisfyingExactly( point -> @@ -131,6 +132,7 @@ void basic() { metric -> metric .hasName("gen_ai.client.token.usage") + .hasUnit("{token}") .satisfies( hasHistogramPointsSatisfyingExactly( point -> @@ -181,6 +183,7 @@ GEN_AI_REQUEST_ENCODING_FORMATS, singletonList("base64")), metric -> metric .hasName("gen_ai.client.operation.duration") + .hasUnit("s") .satisfies( hasHistogramPointsSatisfyingExactly( point -> @@ -194,6 +197,7 @@ GEN_AI_REQUEST_ENCODING_FORMATS, singletonList("base64")), metric -> metric .hasName("gen_ai.client.token.usage") + .hasUnit("{token}") .satisfies( hasHistogramPointsSatisfyingExactly( point -> @@ -258,20 +262,17 @@ void connectionError() { getTesting().waitAndAssertLogRecords(genAiClientExceptionLogs(thrown)); getTesting() - .waitAndAssertMetrics( + .waitAndAssertHistogramPoints( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(ERROR_TYPE, OpenAIIoException.class.getName()), - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, EMBEDDINGS), - equalTo(GEN_AI_REQUEST_MODEL, MODEL))))); + "gen_ai.client.operation.duration", + metric -> metric.hasUnit("s"), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(ERROR_TYPE, OpenAIIoException.class.getName()), + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, EMBEDDINGS), + equalTo(GEN_AI_REQUEST_MODEL, MODEL))); } } diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/MeterTest.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/MeterTest.java index 55a5aef9a793..bf93ef69aef2 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/MeterTest.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/MeterTest.java @@ -6,7 +6,6 @@ package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics; import static io.opentelemetry.api.common.AttributeKey.stringKey; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import io.opentelemetry.api.common.Attributes; @@ -338,24 +337,19 @@ void longHistogram() { instrument.record(5, Attributes.of(stringKey("q"), "r")); instrument.record(6, Attributes.of(stringKey("q"), "r")); - testing.waitAndAssertMetrics( + testing.waitAndAssertHistogramPoints( instrumentationName, + "test", metric -> metric - .hasName("test") .hasDescription("d") .hasUnit("u") .hasInstrumentationScope( InstrumentationScopeInfo.builder(instrumentationName) .setVersion("1.2.3") .setSchemaUrl("http://schema.org") - .build()) - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(11.0) - .hasAttributesSatisfyingExactly(equalTo(stringKey("q"), "r"))))); + .build()), + point -> point.hasSum(11.0).hasAttributesSatisfyingExactly(equalTo(stringKey("q"), "r"))); } @Test @@ -366,24 +360,19 @@ void doubleHistogram() { instrument.record(5.5, Attributes.of(stringKey("q"), "r")); instrument.record(6.6, Attributes.of(stringKey("q"), "r")); - testing.waitAndAssertMetrics( + testing.waitAndAssertHistogramPoints( instrumentationName, + "test", metric -> metric - .hasName("test") .hasDescription("d") .hasUnit("u") .hasInstrumentationScope( InstrumentationScopeInfo.builder(instrumentationName) .setVersion("1.2.3") .setSchemaUrl("http://schema.org") - .build()) - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(12.1) - .hasAttributesSatisfyingExactly(equalTo(stringKey("q"), "r"))))); + .build()), + point -> point.hasSum(12.1).hasAttributesSatisfyingExactly(equalTo(stringKey("q"), "r"))); } @Test diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.65/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_65/incubator/metrics/MeterTest.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.65/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_65/incubator/metrics/MeterTest.java index f9ee405c6ce4..bd634ecdc26f 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.65/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_65/incubator/metrics/MeterTest.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.65/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_65/incubator/metrics/MeterTest.java @@ -6,7 +6,6 @@ package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_65.incubator.metrics; import static io.opentelemetry.api.common.AttributeKey.stringKey; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; @@ -167,17 +166,11 @@ void boundLongHistogram() { ((ExtendedLongHistogram) longHistogram).bind(Attributes.of(stringKey("q"), "r")); bound.record(11); - testing.waitAndAssertMetrics( + testing.waitAndAssertHistogramPoints( "test-bound-long-histogram", - metric -> - metric - .hasName("test") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(11.0) - .hasAttributesSatisfyingExactly(equalTo(stringKey("q"), "r"))))); + "test", + metric -> metric.hasUnit(""), + point -> point.hasSum(11.0).hasAttributesSatisfyingExactly(equalTo(stringKey("q"), "r"))); } @Test @@ -191,17 +184,11 @@ void boundDoubleHistogram() { ((ExtendedDoubleHistogram) doubleHistogram).bind(Attributes.of(stringKey("q"), "r")); bound.record(12.1); - testing.waitAndAssertMetrics( + testing.waitAndAssertHistogramPoints( "test-bound-double-histogram", - metric -> - metric - .hasName("test") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(12.1) - .hasAttributesSatisfyingExactly(equalTo(stringKey("q"), "r"))))); + "test", + metric -> metric.hasUnit(""), + point -> point.hasSum(12.1).hasAttributesSatisfyingExactly(equalTo(stringKey("q"), "r"))); } @Test diff --git a/instrumentation/ratpack/ratpack-1.4/javaagent/src/version17Test/java/io/opentelemetry/javaagent/instrumentation/ratpack/v1_4/httpclient/client/RatpackHttpClientTest.java b/instrumentation/ratpack/ratpack-1.4/javaagent/src/version17Test/java/io/opentelemetry/javaagent/instrumentation/ratpack/v1_4/httpclient/client/RatpackHttpClientTest.java index bd7534fea0da..22e63a000f1a 100644 --- a/instrumentation/ratpack/ratpack-1.4/javaagent/src/version17Test/java/io/opentelemetry/javaagent/instrumentation/ratpack/v1_4/httpclient/client/RatpackHttpClientTest.java +++ b/instrumentation/ratpack/ratpack-1.4/javaagent/src/version17Test/java/io/opentelemetry/javaagent/instrumentation/ratpack/v1_4/httpclient/client/RatpackHttpClientTest.java @@ -5,7 +5,6 @@ package io.opentelemetry.javaagent.instrumentation.ratpack.v1_4.httpclient.client; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.HttpAttributes.HTTP_REQUEST_METHOD; import static io.opentelemetry.semconv.HttpAttributes.HTTP_RESPONSE_STATUS_CODE; @@ -65,23 +64,16 @@ void durationMetricHasProtocolVersion() throws Exception { }), span -> assertServerSpan(span).hasParent(trace.getSpan(0)))); - testing.waitAndAssertMetrics( + testing.waitAndAssertHistogramPoints( "io.opentelemetry.ratpack-1.4", - metric -> - metric - .hasName("http.client.request.duration") - .satisfies( - metricData -> - assertThat(metricData.getInstrumentationScopeInfo().getVersion()) - .isNotEmpty()) - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(HTTP_REQUEST_METHOD, "GET"), - equalTo(HTTP_RESPONSE_STATUS_CODE, 200), - equalTo(NETWORK_PROTOCOL_VERSION, "1.1"), - equalTo(SERVER_ADDRESS, uri.getHost()), - equalTo(SERVER_PORT, uri.getPort()))))); + "http.client.request.duration", + metric -> metric.hasUnit("s"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(HTTP_REQUEST_METHOD, "GET"), + equalTo(HTTP_RESPONSE_STATUS_CODE, 200), + equalTo(NETWORK_PROTOCOL_VERSION, "1.1"), + equalTo(SERVER_ADDRESS, uri.getHost()), + equalTo(SERVER_PORT, uri.getPort()))); } } diff --git a/instrumentation/rocketmq/rocketmq-client-4.8/library/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v4_8/RocketMqMetricsTest.java b/instrumentation/rocketmq/rocketmq-client-4.8/library/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v4_8/RocketMqMetricsTest.java index 3c92e20bb174..c386d64d8885 100644 --- a/instrumentation/rocketmq/rocketmq-client-4.8/library/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v4_8/RocketMqMetricsTest.java +++ b/instrumentation/rocketmq/rocketmq-client-4.8/library/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v4_8/RocketMqMetricsTest.java @@ -5,7 +5,6 @@ package io.opentelemetry.instrumentation.rocketmqclient.v4_8; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.ErrorAttributes.ERROR_TYPE; @@ -216,21 +215,19 @@ private static void assertDuration( String consumerGroup, String operationType, String errorType) { - testing.waitAndAssertMetrics( + testing.waitAndAssertHistogramPoints( INSTRUMENTATION_NAME, metricName, - metrics -> - metrics.satisfiesExactly( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, operationName), - equalTo(MESSAGING_SYSTEM, "rocketmq"), - equalTo(ERROR_TYPE, errorType), - equalTo(MESSAGING_CONSUMER_GROUP_NAME, consumerGroup), - equalTo(MESSAGING_DESTINATION_NAME, destination), - equalTo(MESSAGING_OPERATION_TYPE, operationType))))); + metric -> metric.hasUnit("s"), + point -> + point + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, operationName), + equalTo(MESSAGING_SYSTEM, "rocketmq"), + equalTo(ERROR_TYPE, errorType), + equalTo(MESSAGING_CONSUMER_GROUP_NAME, consumerGroup), + equalTo(MESSAGING_DESTINATION_NAME, destination), + equalTo(MESSAGING_OPERATION_TYPE, operationType))); } } diff --git a/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/AbstractRocketMqClientSuppressReceiveSpanTest.java b/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/AbstractRocketMqClientSuppressReceiveSpanTest.java index 714c094883c7..8f241664b940 100644 --- a/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/AbstractRocketMqClientSuppressReceiveSpanTest.java +++ b/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/AbstractRocketMqClientSuppressReceiveSpanTest.java @@ -5,7 +5,6 @@ package io.opentelemetry.instrumentation.rocketmqclient.v5_0; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.instrumentation.testing.util.TelemetryDataUtil.asRemote; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; @@ -171,35 +170,31 @@ private void assertMetrics(String topic, String consumerGroup) { equalTo(MESSAGING_SYSTEM, "rocketmq"), equalTo(MESSAGING_DESTINATION_NAME, topic)))))); testing() - .waitAndAssertMetrics( + .waitAndAssertHistogramPoints( "io.opentelemetry.rocketmq-client-5.0", "messaging.client.operation.duration", - metrics -> - metrics.satisfiesExactly( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "send"), - equalTo(MESSAGING_SYSTEM, "rocketmq"), - equalTo(MESSAGING_DESTINATION_NAME, topic), - equalTo(MESSAGING_OPERATION_TYPE, "send"))))); + metric -> metric.hasUnit("s"), + point -> + point + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "send"), + equalTo(MESSAGING_SYSTEM, "rocketmq"), + equalTo(MESSAGING_DESTINATION_NAME, topic), + equalTo(MESSAGING_OPERATION_TYPE, "send"))); testing() - .waitAndAssertMetrics( + .waitAndAssertHistogramPoints( "io.opentelemetry.rocketmq-client-5.0", "messaging.process.duration", - metrics -> - metrics.satisfiesExactly( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "process"), - equalTo(MESSAGING_SYSTEM, "rocketmq"), - equalTo(MESSAGING_CONSUMER_GROUP_NAME, consumerGroup), - equalTo(MESSAGING_DESTINATION_NAME, topic))))); + metric -> metric.hasUnit("s"), + point -> + point + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "process"), + equalTo(MESSAGING_SYSTEM, "rocketmq"), + equalTo(MESSAGING_CONSUMER_GROUP_NAME, consumerGroup), + equalTo(MESSAGING_DESTINATION_NAME, topic))); testing() .waitAndAssertMetrics( "io.opentelemetry.rocketmq-client-5.0", diff --git a/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/AbstractRocketMqClientTest.java b/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/AbstractRocketMqClientTest.java index 12bfce8310a8..4b9bf84cfd23 100644 --- a/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/AbstractRocketMqClientTest.java +++ b/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/AbstractRocketMqClientTest.java @@ -7,7 +7,6 @@ import static io.opentelemetry.api.trace.SpanKind.CLIENT; import static io.opentelemetry.instrumentation.testing.junit.message.MessageHeaderUtil.headerAttributeKey; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.instrumentation.testing.util.TelemetryDataUtil.asRemote; import static io.opentelemetry.instrumentation.testing.util.TelemetryDataUtil.orderByRootSpanKind; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; @@ -760,21 +759,19 @@ private static SpanDataAssert assertProcessSpanWithDelayMessage( private void assertFailureMetrics() { testing() - .waitAndAssertMetrics( + .waitAndAssertHistogramPoints( "io.opentelemetry.rocketmq-client-5.0", "messaging.process.duration", - metrics -> - metrics.satisfiesExactly( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "process"), - equalTo(MESSAGING_SYSTEM, "rocketmq"), - equalTo(ERROR_TYPE, ConsumeResult.FAILURE.name()), - equalTo(MESSAGING_CONSUMER_GROUP_NAME, CONSUMER_GROUP), - equalTo(MESSAGING_DESTINATION_NAME, NORMAL_TOPIC))))); + metric -> metric.hasUnit("s"), + point -> + point + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "process"), + equalTo(MESSAGING_SYSTEM, "rocketmq"), + equalTo(ERROR_TYPE, ConsumeResult.FAILURE.name()), + equalTo(MESSAGING_CONSUMER_GROUP_NAME, CONSUMER_GROUP), + equalTo(MESSAGING_DESTINATION_NAME, NORMAL_TOPIC))); // messaging.client.consumed.messages is owned by the receive operation here, which the retry // gate cannot hold back, so the redelivery would race this assertion; the counter is asserted // in testSendAndConsumeNormalMessage instead @@ -820,44 +817,39 @@ private void assertMetrics() { MESSAGING_DESTINATION_NAME, NORMAL_TOPIC)))))); testing() - .waitAndAssertMetrics( + .waitAndAssertHistogramPoints( "io.opentelemetry.rocketmq-client-5.0", "messaging.client.operation.duration", - metrics -> - metrics.satisfiesExactly( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "send"), - equalTo(MESSAGING_SYSTEM, "rocketmq"), - equalTo(MESSAGING_DESTINATION_NAME, NORMAL_TOPIC), - equalTo(MESSAGING_OPERATION_TYPE, "send")), - // the consumer keeps polling, so the number of recorded - // receives is not deterministic - point -> - point.hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "receive"), - equalTo(MESSAGING_SYSTEM, "rocketmq"), - equalTo(MESSAGING_CONSUMER_GROUP_NAME, CONSUMER_GROUP), - equalTo(MESSAGING_DESTINATION_NAME, NORMAL_TOPIC), - equalTo(MESSAGING_OPERATION_TYPE, "receive"))))); + metric -> metric.hasUnit("s"), + point -> + point + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "send"), + equalTo(MESSAGING_SYSTEM, "rocketmq"), + equalTo(MESSAGING_DESTINATION_NAME, NORMAL_TOPIC), + equalTo(MESSAGING_OPERATION_TYPE, "send")), + // The consumer keeps polling, so the number of recorded receives is not deterministic. + point -> + point.hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "receive"), + equalTo(MESSAGING_SYSTEM, "rocketmq"), + equalTo(MESSAGING_CONSUMER_GROUP_NAME, CONSUMER_GROUP), + equalTo(MESSAGING_DESTINATION_NAME, NORMAL_TOPIC), + equalTo(MESSAGING_OPERATION_TYPE, "receive"))); testing() - .waitAndAssertMetrics( + .waitAndAssertHistogramPoints( "io.opentelemetry.rocketmq-client-5.0", "messaging.process.duration", - metrics -> - metrics.satisfiesExactly( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "process"), - equalTo(MESSAGING_SYSTEM, "rocketmq"), - equalTo(MESSAGING_CONSUMER_GROUP_NAME, CONSUMER_GROUP), - equalTo(MESSAGING_DESTINATION_NAME, NORMAL_TOPIC))))); + metric -> metric.hasUnit("s"), + point -> + point + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "process"), + equalTo(MESSAGING_SYSTEM, "rocketmq"), + equalTo(MESSAGING_CONSUMER_GROUP_NAME, CONSUMER_GROUP), + equalTo(MESSAGING_DESTINATION_NAME, NORMAL_TOPIC))); testing() .waitAndAssertMetrics( "io.opentelemetry.rocketmq-client-5.0", diff --git a/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/RocketMqSimpleConsumerTest.java b/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/RocketMqSimpleConsumerTest.java index 9dd35034b3f2..c4a22005b03a 100644 --- a/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/RocketMqSimpleConsumerTest.java +++ b/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/RocketMqSimpleConsumerTest.java @@ -5,7 +5,6 @@ package io.opentelemetry.instrumentation.rocketmqclient.v5_0; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.instrumentation.testing.util.TelemetryDataUtil.asRemote; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; @@ -195,21 +194,19 @@ void shouldInstrumentReceiveWhenReceiveTelemetryDisabled() throws ClientExceptio }); assertSuccessfulReceiveTrace("disabled receive parent", sendSpan); - testing.waitAndAssertMetrics( + testing.waitAndAssertHistogramPoints( INSTRUMENTATION_NAME, "messaging.client.operation.duration", - metrics -> - metrics.satisfiesExactly( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_CONSUMER_GROUP_NAME, CONSUMER_GROUP), - equalTo(MESSAGING_SYSTEM, "rocketmq"), - equalTo(MESSAGING_DESTINATION_NAME, TOPIC), - equalTo(MESSAGING_OPERATION_NAME, "receive"), - equalTo(MESSAGING_OPERATION_TYPE, "receive"))))); + metric -> metric.hasUnit("s"), + point -> + point + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_CONSUMER_GROUP_NAME, CONSUMER_GROUP), + equalTo(MESSAGING_SYSTEM, "rocketmq"), + equalTo(MESSAGING_DESTINATION_NAME, TOPIC), + equalTo(MESSAGING_OPERATION_NAME, "receive"), + equalTo(MESSAGING_OPERATION_TYPE, "receive"))); testing.waitAndAssertMetrics( INSTRUMENTATION_NAME, "messaging.client.consumed.messages", diff --git a/instrumentation/runtime-telemetry/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/runtimetelemetry/JmxRuntimeMetricsTest.java b/instrumentation/runtime-telemetry/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/runtimetelemetry/JmxRuntimeMetricsTest.java index abf32b56d5c1..6906f9286af4 100644 --- a/instrumentation/runtime-telemetry/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/runtimetelemetry/JmxRuntimeMetricsTest.java +++ b/instrumentation/runtime-telemetry/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/runtimetelemetry/JmxRuntimeMetricsTest.java @@ -37,6 +37,7 @@ void runtimeMetricsAreEnabled() { metric -> metric .hasName("jvm.gc.duration") + .hasUnit("s") .satisfies( hasHistogramPointsSatisfyingExactly( point -> diff --git a/instrumentation/runtime-telemetry/library/src/test/java/io/opentelemetry/instrumentation/runtimetelemetry/RuntimeTelemetryDefaultsTest.java b/instrumentation/runtime-telemetry/library/src/test/java/io/opentelemetry/instrumentation/runtimetelemetry/RuntimeTelemetryDefaultsTest.java index 3a5f64a6b473..148e60e736ad 100644 --- a/instrumentation/runtime-telemetry/library/src/test/java/io/opentelemetry/instrumentation/runtimetelemetry/RuntimeTelemetryDefaultsTest.java +++ b/instrumentation/runtime-telemetry/library/src/test/java/io/opentelemetry/instrumentation/runtimetelemetry/RuntimeTelemetryDefaultsTest.java @@ -5,7 +5,6 @@ package io.opentelemetry.instrumentation.runtimetelemetry; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; import static io.opentelemetry.semconv.JvmAttributes.JVM_GC_ACTION; import static io.opentelemetry.semconv.JvmAttributes.JVM_GC_NAME; @@ -33,18 +32,15 @@ void capturesGcCause(boolean useBuilder) { assertThat(telemetry.getJfrTelemetry()).isNull(); System.gc(); - testing.waitAndAssertMetrics( + testing.waitAndAssertHistogramPoints( "io.opentelemetry.runtime-telemetry", - metric -> - metric - .hasName("jvm.gc.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - satisfies(JVM_GC_NAME, val -> val.isNotBlank()), - satisfies(JVM_GC_ACTION, val -> val.isNotBlank()), - satisfies(JVM_GC_CAUSE, val -> val.isNotBlank()))))); + "jvm.gc.duration", + metric -> metric.hasUnit("s"), + point -> + point.hasAttributesSatisfyingExactly( + satisfies(JVM_GC_NAME, val -> val.isNotBlank()), + satisfies(JVM_GC_ACTION, val -> val.isNotBlank()), + satisfies(JVM_GC_CAUSE, val -> val.isNotBlank()))); } } } diff --git a/instrumentation/spring/spring-ai-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/ai/v1_0/AbstractOpenAiChatModelTest.java b/instrumentation/spring/spring-ai-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/ai/v1_0/AbstractOpenAiChatModelTest.java index f08cafee24e9..0373ef3704f4 100644 --- a/instrumentation/spring/spring-ai-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/ai/v1_0/AbstractOpenAiChatModelTest.java +++ b/instrumentation/spring/spring-ai-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/ai/v1_0/AbstractOpenAiChatModelTest.java @@ -110,6 +110,7 @@ private static void assertMetrics() { metric -> metric .hasName("gen_ai.client.operation.duration") + .hasUnit("s") .satisfies( hasHistogramPointsSatisfyingExactly( point -> @@ -123,6 +124,7 @@ private static void assertMetrics() { metric -> metric .hasName("gen_ai.client.token.usage") + .hasUnit("{token}") .satisfies( hasHistogramPointsSatisfyingExactly( point -> diff --git a/instrumentation/spring/spring-ai-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/ai/v1_0/ChatModelTest.java b/instrumentation/spring/spring-ai-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/ai/v1_0/ChatModelTest.java index ba78f488b997..427606c394fa 100644 --- a/instrumentation/spring/spring-ai-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/ai/v1_0/ChatModelTest.java +++ b/instrumentation/spring/spring-ai-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/ai/v1_0/ChatModelTest.java @@ -861,6 +861,7 @@ private static void assertMetrics() { metric -> metric .hasName("gen_ai.client.operation.duration") + .hasUnit("s") .satisfies( hasHistogramPointsSatisfyingExactly( point -> @@ -874,6 +875,7 @@ private static void assertMetrics() { metric -> metric .hasName("gen_ai.client.token.usage") + .hasUnit("{token}") .satisfies( hasHistogramPointsSatisfyingExactly( point -> @@ -897,21 +899,18 @@ private static void assertMetrics() { } private static void assertMetricsWithoutTokenUsage() { - testing.waitAndAssertMetrics( + testing.waitAndAssertHistogramPoints( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, "test"), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, MODEL))))); + "gen_ai.client.operation.duration", + metric -> metric.hasUnit("s"), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, "test"), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, MODEL))); testing.waitAndAssertMetrics( INSTRUMENTATION_NAME, "gen_ai.client.token.usage", metrics -> metrics.isEmpty()); } diff --git a/instrumentation/spring/spring-integration-4.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/integration/v4_1/MessageProducerSupportInstrumentationTest.java b/instrumentation/spring/spring-integration-4.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/integration/v4_1/MessageProducerSupportInstrumentationTest.java index 12b04afc6463..e420f9ec4c05 100644 --- a/instrumentation/spring/spring-integration-4.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/integration/v4_1/MessageProducerSupportInstrumentationTest.java +++ b/instrumentation/spring/spring-integration-4.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/integration/v4_1/MessageProducerSupportInstrumentationTest.java @@ -5,7 +5,6 @@ package io.opentelemetry.javaagent.instrumentation.spring.integration.v4_1; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.instrumentation.testing.util.TestLatestDeps.testLatestDeps; import static io.opentelemetry.javaagent.instrumentation.spring.integration.v4_1.SpringIntegrationTestHelper.assertNoMetrics; import static io.opentelemetry.javaagent.instrumentation.spring.integration.v4_1.SpringIntegrationTestHelper.assertProcessMetrics; @@ -336,12 +335,11 @@ private static void assertUnrelatedProcessMetrics() { private static void assertSpringRabbitProcessMetrics() { - testing.waitAndAssertMetrics( + testing.waitAndAssertHistogramPoints( SPRING_RABBIT_INSTRUMENTATION_NAME, "messaging.process.duration", - metrics -> - metrics.satisfiesExactly( - hasHistogramPointsSatisfyingExactly(point -> point.hasCount(1)))); + metric -> metric.hasUnit("s"), + point -> point.hasCount(1)); } private static Message newRawMessage() { diff --git a/instrumentation/spring/spring-rabbit-1.0/javaagent/src/version11Test/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbit11SimpleMessageListenerContainerTest.java b/instrumentation/spring/spring-rabbit-1.0/javaagent/src/version11Test/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbit11SimpleMessageListenerContainerTest.java index 85a2077dc7e5..fbe3497dbd53 100644 --- a/instrumentation/spring/spring-rabbit-1.0/javaagent/src/version11Test/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbit11SimpleMessageListenerContainerTest.java +++ b/instrumentation/spring/spring-rabbit-1.0/javaagent/src/version11Test/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbit11SimpleMessageListenerContainerTest.java @@ -5,7 +5,6 @@ package io.opentelemetry.javaagent.instrumentation.spring.rabbit.v1_0; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static java.util.concurrent.TimeUnit.SECONDS; import static org.assertj.core.api.Assertions.assertThat; @@ -107,12 +106,11 @@ void shouldUseSpringProcessTelemetry() throws InterruptedException { span -> span.hasName("consumer").hasParent(processSpan)); }); - testing.waitAndAssertMetrics( + testing.waitAndAssertHistogramPoints( SPRING_INSTRUMENTATION_NAME, "messaging.process.duration", - metrics -> - metrics.satisfiesExactly( - hasHistogramPointsSatisfyingExactly(point -> point.hasCount(1)))); + metric -> metric.hasUnit("s"), + point -> point.hasCount(1)); testing.waitAndAssertMetrics( SPRING_INSTRUMENTATION_NAME, "messaging.client.consumed.messages", diff --git a/instrumentation/spring/spring-rabbit-1.0/javaagent/src/version20Test/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbit20DirectMessageListenerContainerTest.java b/instrumentation/spring/spring-rabbit-1.0/javaagent/src/version20Test/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbit20DirectMessageListenerContainerTest.java index 25bdc80f5ba4..c16c0874d5c8 100644 --- a/instrumentation/spring/spring-rabbit-1.0/javaagent/src/version20Test/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbit20DirectMessageListenerContainerTest.java +++ b/instrumentation/spring/spring-rabbit-1.0/javaagent/src/version20Test/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbit20DirectMessageListenerContainerTest.java @@ -6,7 +6,6 @@ package io.opentelemetry.javaagent.instrumentation.spring.rabbit.v1_0; import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static java.util.concurrent.TimeUnit.SECONDS; import static org.assertj.core.api.Assertions.assertThat; @@ -102,12 +101,11 @@ void shouldUseSpringProcessTelemetry() throws InterruptedException { span -> span.hasName("consumer").hasParent(processSpan)); }); - testing.waitAndAssertMetrics( + testing.waitAndAssertHistogramPoints( SPRING_INSTRUMENTATION_NAME, "messaging.process.duration", - metrics -> - metrics.satisfiesExactly( - hasHistogramPointsSatisfyingExactly(point -> point.hasCount(1)))); + metric -> metric.hasUnit("s"), + point -> point.hasCount(1)); testing.waitAndAssertMetrics( SPRING_INSTRUMENTATION_NAME, "messaging.client.consumed.messages", diff --git a/instrumentation/spring/spring-webflux/spring-webflux-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/webflux/v5_0/client/SpringWebfluxClientInstrumentationTest.java b/instrumentation/spring/spring-webflux/spring-webflux-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/webflux/v5_0/client/SpringWebfluxClientInstrumentationTest.java index 1cfcc04ec219..11987eabefa7 100644 --- a/instrumentation/spring/spring-webflux/spring-webflux-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/webflux/v5_0/client/SpringWebfluxClientInstrumentationTest.java +++ b/instrumentation/spring/spring-webflux/spring-webflux-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/webflux/v5_0/client/SpringWebfluxClientInstrumentationTest.java @@ -5,7 +5,6 @@ package io.opentelemetry.javaagent.instrumentation.spring.webflux.v5_0.client; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.HttpAttributes.HTTP_REQUEST_METHOD; import static io.opentelemetry.semconv.HttpAttributes.HTTP_RESPONSE_STATUS_CODE; @@ -67,19 +66,16 @@ void shouldAddProtocolVersionToDurationMetric() { assertThat(responseCode).isEqualTo(200); - testing.waitAndAssertMetrics( + testing.waitAndAssertHistogramPoints( "io.opentelemetry.spring-webflux-5.0", - metric -> - metric - .hasName("http.client.request.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(HTTP_REQUEST_METHOD, "GET"), - equalTo(HTTP_RESPONSE_STATUS_CODE, 200), - equalTo(NETWORK_PROTOCOL_VERSION, "1.1"), - equalTo(SERVER_ADDRESS, uri.getHost()), - equalTo(SERVER_PORT, uri.getPort()))))); + "http.client.request.duration", + metric -> metric.hasUnit("s"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(HTTP_REQUEST_METHOD, "GET"), + equalTo(HTTP_RESPONSE_STATUS_CODE, 200), + equalTo(NETWORK_PROTOCOL_VERSION, "1.1"), + equalTo(SERVER_ADDRESS, uri.getHost()), + equalTo(SERVER_PORT, uri.getPort()))); } } diff --git a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/InstrumentationTestRunner.java b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/InstrumentationTestRunner.java index e6c286ae7881..3b0727e35340 100644 --- a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/InstrumentationTestRunner.java +++ b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/InstrumentationTestRunner.java @@ -5,6 +5,7 @@ package io.opentelemetry.instrumentation.testing; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static java.util.Arrays.asList; import static java.util.concurrent.TimeUnit.SECONDS; @@ -25,6 +26,7 @@ import io.opentelemetry.sdk.common.InstrumentationScopeInfo; import io.opentelemetry.sdk.logs.data.LogRecordData; import io.opentelemetry.sdk.metrics.data.MetricData; +import io.opentelemetry.sdk.testing.assertj.HistogramPointAssert; import io.opentelemetry.sdk.testing.assertj.LogRecordDataAssert; import io.opentelemetry.sdk.testing.assertj.MetricAssert; import io.opentelemetry.sdk.testing.assertj.TraceAssert; @@ -244,6 +246,31 @@ public final void waitAndAssertMetrics( } } + /** + * Waits for exactly one histogram with the given instrumentation scope and metric name, then + * asserts its metadata and points. + */ + @SafeVarargs + public final void waitAndAssertHistogramPoints( + String instrumentationName, + String metricName, + Consumer metricAssertion, + Consumer... pointAssertions) { + waitAndAssertMetrics( + instrumentationName, + metricName, + metrics -> + metrics + .hasSize(1) + .singleElement() + .satisfies( + metric -> { + MetricAssert metricAssert = assertThat(metric); + metricAssertion.accept(metricAssert); + metricAssert.satisfies(hasHistogramPointsSatisfyingExactly(pointAssertions)); + })); + } + private List metricsForScope(String instrumentationName) { return getExportedMetrics().stream() .filter(m -> m.getInstrumentationScopeInfo().getName().equals(instrumentationName)) diff --git a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/InstrumentationExtension.java b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/InstrumentationExtension.java index eaade23e08a7..3a15f39aa52c 100644 --- a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/InstrumentationExtension.java +++ b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/InstrumentationExtension.java @@ -15,6 +15,7 @@ import io.opentelemetry.sdk.OpenTelemetrySdk; import io.opentelemetry.sdk.logs.data.LogRecordData; import io.opentelemetry.sdk.metrics.data.MetricData; +import io.opentelemetry.sdk.testing.assertj.HistogramPointAssert; import io.opentelemetry.sdk.testing.assertj.LogRecordDataAssert; import io.opentelemetry.sdk.testing.assertj.MetricAssert; import io.opentelemetry.sdk.testing.assertj.TraceAssert; @@ -115,6 +116,21 @@ public final void waitAndAssertMetrics( testRunner.waitAndAssertMetrics(instrumentationName, assertions); } + /** + * Waits for exactly one histogram with the given instrumentation scope and metric name, then + * asserts its metadata and points. + */ + @SafeVarargs + @SuppressWarnings("varargs") + public final void waitAndAssertHistogramPoints( + String instrumentationName, + String metricName, + Consumer metricAssertion, + Consumer... pointAssertions) { + testRunner.waitAndAssertHistogramPoints( + instrumentationName, metricName, metricAssertion, pointAssertions); + } + /** * Removes all captured telemetry data. After calling this method {@link #spans()} and {@link * #metrics()} will return empty lists until more telemetry data is captured. diff --git a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbClientMetricsTestUtil.java b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbClientMetricsTestUtil.java index e779e9506032..0d53d8f751d2 100644 --- a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbClientMetricsTestUtil.java +++ b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbClientMetricsTestUtil.java @@ -5,7 +5,6 @@ package io.opentelemetry.instrumentation.testing.junit.db; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.semconv.DbAttributes.DB_SYSTEM_NAME; @@ -23,19 +22,12 @@ public static void assertDurationMetric( // db.system.name is required - see // https://opentelemetry.io/docs/specs/semconv/database/database-metrics/#metric-dbclientoperationduration assertThat(expectedKeys).extracting(AttributeKey::getKey).contains(DB_SYSTEM_NAME.getKey()); - testing.waitAndAssertMetrics( + testing.waitAndAssertHistogramPoints( instrumentationName, - metrics -> - metrics - .hasName("db.client.operation.duration") - .hasUnit("s") - .hasDescription("Duration of database client operations.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfying( - attributes -> - assertThat(attributes.asMap()) - .containsOnlyKeys(expectedKeys))))); + "db.client.operation.duration", + metric -> metric.hasUnit("s").hasDescription("Duration of database client operations."), + point -> + point.hasAttributesSatisfying( + attributes -> assertThat(attributes.asMap()).containsOnlyKeys(expectedKeys))); } } diff --git a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbConnectionPoolMetricsAssertions.java b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbConnectionPoolMetricsAssertions.java index d542b0d51a14..b9b0143ca830 100644 --- a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbConnectionPoolMetricsAssertions.java +++ b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbConnectionPoolMetricsAssertions.java @@ -18,7 +18,6 @@ import io.opentelemetry.sdk.testing.assertj.AbstractPointAssert; import io.opentelemetry.sdk.testing.assertj.AttributeAssertion; import io.opentelemetry.sdk.testing.assertj.LongSumAssert; -import io.opentelemetry.sdk.testing.assertj.MetricAssert; import java.util.ArrayList; import java.util.List; @@ -292,8 +291,8 @@ private void verifyUseTime() { metrics -> metrics.anySatisfy(this::verifyUseTimeMetric)); } - private MetricAssert verifyUseTimeMetric(MetricData metric) { - return assertThat(metric) + private void verifyUseTimeMetric(MetricData metric) { + assertThat(metric) .hasUnit("s") .hasDescription("The time between borrowing a connection and returning it to the pool.") .satisfies(hasHistogramPointsSatisfyingExactly(this::verifyPointAttributes)); diff --git a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpClientTest.java b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpClientTest.java index 32c913138f35..8dbbe68ba1dd 100644 --- a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpClientTest.java +++ b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpClientTest.java @@ -11,7 +11,6 @@ import static io.opentelemetry.instrumentation.api.internal.SemconvExceptionSignal.emitExceptionAsSpanEvents; import static io.opentelemetry.instrumentation.testing.junit.service.SemconvServiceStabilityUtil.maybeStablePeerService; import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeSchemaUrl; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.instrumentation.testing.util.TelemetryDataUtil.comparingRootSpanAttribute; import static io.opentelemetry.instrumentation.testing.util.TelemetryDataUtil.orderByRootSpanName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; @@ -793,15 +792,11 @@ void httpClientMetrics() throws Exception { span -> assertServerSpan(span).hasParent(trace.getSpan(0))); }); - testing.waitAndAssertMetrics( + testing.waitAndAssertHistogramPoints( instrumentationName.get(), - metric -> - metric - .hasName("http.client.request.duration") - .hasDescription("Duration of HTTP client requests.") - .hasUnit("s") - .satisfies( - hasHistogramPointsSatisfyingExactly(point -> point.hasSumGreaterThan(0.0)))); + "http.client.request.duration", + metric -> metric.hasDescription("Duration of HTTP client requests.").hasUnit("s"), + point -> point.hasSumGreaterThan(0.0)); } /** diff --git a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpServerTest.java b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpServerTest.java index c9b7e8914e64..b53137bc579d 100644 --- a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpServerTest.java +++ b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpServerTest.java @@ -21,7 +21,6 @@ import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.REDIRECT; import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.SUCCESS; import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeSchemaUrl; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; @@ -455,15 +454,11 @@ void httpServerMetrics() { spanData -> assertServerSpan(assertThat(spanData), method, SUCCESS, SUCCESS.status)); }); - testing.waitAndAssertMetrics( + testing.waitAndAssertHistogramPoints( instrumentationName.get(), - metric -> - metric - .hasName("http.server.request.duration") - .hasDescription("Duration of HTTP server requests.") - .hasUnit("s") - .satisfies( - hasHistogramPointsSatisfyingExactly(point -> point.hasSumGreaterThan(0.0)))); + "http.server.request.duration", + metric -> metric.hasDescription("Duration of HTTP server requests.").hasUnit("s"), + point -> point.hasSumGreaterThan(0.0)); } /** diff --git a/testing-common/src/test/java/io/opentelemetry/instrumentation/testing/junit/LibraryInstrumentationExtensionTest.java b/testing-common/src/test/java/io/opentelemetry/instrumentation/testing/junit/LibraryInstrumentationExtensionTest.java index cc048e8f7d38..6b073a38e3e6 100644 --- a/testing-common/src/test/java/io/opentelemetry/instrumentation/testing/junit/LibraryInstrumentationExtensionTest.java +++ b/testing-common/src/test/java/io/opentelemetry/instrumentation/testing/junit/LibraryInstrumentationExtensionTest.java @@ -5,7 +5,12 @@ package io.opentelemetry.instrumentation.testing.junit; +import static io.opentelemetry.api.common.AttributeKey.stringKey; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +import io.opentelemetry.api.common.Attributes; import org.junit.jupiter.api.RepeatedTest; +import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; class LibraryInstrumentationExtensionTest { @@ -36,4 +41,64 @@ void shouldCollectTraces() { parentSpan -> parentSpan.hasName("parent"), childSpan -> childSpan.hasName("child"))); } + + @Test + void shouldAssertHistogramPoints() { + Attributes firstAttributes = Attributes.of(stringKey("key"), "first"); + Attributes secondAttributes = Attributes.of(stringKey("key"), "second"); + testing + .getOpenTelemetry() + .getMeter("test") + .histogramBuilder("duration") + .setUnit("s") + .setDescription("Test duration.") + .build() + .record(2, firstAttributes); + testing + .getOpenTelemetry() + .getMeter("test") + .histogramBuilder("duration") + .setUnit("s") + .setDescription("Test duration.") + .build() + .record(4, secondAttributes); + testing + .getOpenTelemetry() + .getMeter("test") + .histogramBuilder("other") + .setUnit("ms") + .build() + .record(3); + + testing.waitAndAssertHistogramPoints( + "test", + "duration", + metric -> metric.hasUnit("s").hasDescription("Test duration."), + point -> point.hasCount(1).hasSum(4).hasAttributes(secondAttributes), + point -> point.hasCount(1).hasSum(2).hasAttributes(firstAttributes)); + testing.waitAndAssertHistogramPoints( + "test", "other", metric -> metric.hasUnit("ms"), point -> point.hasCount(1).hasSum(3)); + } + + @Test + void shouldPropagateMetricAssertionFailure() { + testing + .getOpenTelemetry() + .getMeter("test") + .histogramBuilder("failed-duration") + .setUnit("s") + .build() + .record(2); + + assertThatThrownBy( + () -> + testing.waitAndAssertHistogramPoints( + "test", + "failed-duration", + metric -> { + throw new IllegalStateException("metric assertion failed"); + })) + .isInstanceOf(IllegalStateException.class) + .hasMessage("metric assertion failed"); + } } From acc6e7392618ed2e282d7f9e66e59ef7409d4e24 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 20 Oct 2026 02:16:22 +0000 Subject: [PATCH 04/14] Revise histogram wait API and migrate assertions Co-authored-by: trask <218610+trask@users.noreply.github.com> --- .../apachedubbo/v2_7/AbstractDubboTest.java | 187 ++++----- .../v2_7/AbstractDubboTraceChainTest.java | 245 +++++------ .../avaje/jex/v3_0/JexTest.java | 6 +- .../awssdk/v1_11/SqsMetricsAssertions.java | 96 ++--- .../awssdk/v2_2/SqsMetricsAssertions.java | 96 ++--- .../CamelMessagingMetricsAssertions.java | 97 ++--- .../cassandra/v4_0/CassandraTest.java | 8 +- .../cassandra/v4_4/CassandraTest.java | 8 +- .../clientv1/v0_5/ClickHouseClientV1Test.java | 8 +- .../clientv2/v0_8/ClickHouseClientV2Test.java | 8 +- .../v4_0/DropwizardMetricsTest.java | 10 +- .../failsafe/v3_0/FailsafeTelemetryTest.java | 1 - .../grpc/v1_6/AbstractGrpcStreamingTest.java | 99 ++--- .../grpc/v1_6/AbstractGrpcTest.java | 206 +++++----- .../iceberg/v1_8/AbstractIcebergTest.java | 9 +- .../javalin/AbstractJavalinTest.java | 8 +- .../jdbc/datasource/JdbcTelemetryTest.java | 8 +- .../jedis/v2_0/ShardedJedisClientTest.java | 8 +- .../jedis/v3_0/ShardedJedis30ClientTest.java | 8 +- .../jedis/v4_0/Jedis40ClientTest.java | 8 +- .../v7_0/KubernetesClientTest.java | 10 +- .../v7_0/KubernetesClientVer20Test.java | 10 +- .../v5_0/LettuceReactiveClientTest.java | 8 +- .../v5_1/AbstractLettuceClientTest.java | 21 +- ...istributionSummaryHistogramGaugesTest.java | 40 +- .../v1_5/AbstractDistributionSummaryTest.java | 53 ++- .../v1_5/AbstractNamingConventionTest.java | 11 +- .../v1_5/AbstractPrometheusModeTest.java | 70 ++-- .../AbstractTimerHistogramGaugesTest.java | 40 +- .../v1_5/AbstractTimerMillisecondsTest.java | 21 +- .../micrometer/v1_5/AbstractTimerTest.java | 60 ++- .../mongo/v4_0/MongoConfiguredTargetTest.java | 8 +- .../nats/v2_17/AbstractNatsTest.java | 78 ++-- .../instrumentation/openai/v1_1/ChatTest.java | 37 +- .../openai/v1_1/AbstractChatTest.java | 167 +++----- .../openai/v1_1/AbstractEmbeddingsTest.java | 12 +- .../v1_10/metrics/MeterTest.java | 17 +- .../v1_31/metrics/MeterTest.java | 40 +- .../v1_32/incubator/metrics/MeterTest.java | 40 +- .../v1_32/metrics/MeterTest.java | 40 +- .../v1_37/incubator/metrics/MeterTest.java | 40 +- .../v1_37/incubator/metrics/MeterTest.java | 40 +- .../v1_37/metrics/MeterTest.java | 40 +- .../v1_65/incubator/metrics/MeterTest.java | 9 +- .../pulsar/v2_8/PulsarClientTest.java | 104 +++-- .../client/RatpackHttpClientTest.java | 12 +- .../v4_8/RocketMqMetricsTest.java | 5 +- ...RocketMqClientSuppressReceiveSpanTest.java | 15 +- .../v5_0/AbstractRocketMqClientTest.java | 22 +- .../v5_0/RocketMqSimpleConsumerTest.java | 8 +- .../JmxRuntimeMetricsTest.java | 1 - .../RuntimeTelemetryDefaultsTest.java | 8 +- .../internal/GarbageCollectorTest.java | 46 +-- .../sofarpc/v5_4/AbstractSofaRpcTest.java | 387 ++++++++---------- .../v5_4/AbstractSofaRpcTraceChainTest.java | 345 +++++++--------- .../ai/v1_0/AbstractOpenAiChatModelTest.java | 2 - .../spring/ai/v1_0/ChatModelTest.java | 10 +- ...ageProducerSupportInstrumentationTest.java | 8 +- .../v4_1/SpringIntegrationTestHelper.java | 72 ++-- .../pulsar/v1_0/AbstractSpringPulsarTest.java | 34 +- ...t11SimpleMessageListenerContainerTest.java | 8 +- ...t20DirectMessageListenerContainerTest.java | 7 +- ...pringWebfluxClientInstrumentationTest.java | 8 +- .../thrift/v0_13/AbstractThriftTest.java | 92 ++--- .../testing/InstrumentationTestRunner.java | 42 +- .../junit/InstrumentationExtension.java | 13 +- .../junit/db/DbClientMetricsTestUtil.java | 10 +- .../db/DbConnectionPoolMetricsAssertions.java | 60 ++- .../junit/http/AbstractHttpClientTest.java | 10 +- .../junit/http/AbstractHttpServerTest.java | 10 +- .../LibraryInstrumentationExtensionTest.java | 20 +- 71 files changed, 1522 insertions(+), 1873 deletions(-) diff --git a/instrumentation/apache-dubbo-2.7/testing/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/AbstractDubboTest.java b/instrumentation/apache-dubbo-2.7/testing/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/AbstractDubboTest.java index 21d0b9690a3c..88f720eb151f 100644 --- a/instrumentation/apache-dubbo-2.7/testing/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/AbstractDubboTest.java +++ b/instrumentation/apache-dubbo-2.7/testing/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/AbstractDubboTest.java @@ -9,7 +9,7 @@ import static io.opentelemetry.instrumentation.testing.junit.rpc.SemconvRpcStabilityUtil.emitOldRpcSemconv; import static io.opentelemetry.instrumentation.testing.junit.rpc.SemconvRpcStabilityUtil.emitPreviewRpcSemconv; import static io.opentelemetry.instrumentation.testing.junit.service.SemconvServiceStabilityUtil.maybeStablePeerService; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.instrumentation.testing.util.TestLatestDeps.testLatestDeps; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; @@ -202,79 +202,65 @@ void testApacheDubboBase() throws ReflectiveOperationException { if (emitOldRpcSemconv()) { testing() - .waitAndAssertMetrics( - "io.opentelemetry.apache-dubbo-2.7", + .waitAndAssertHistogramPoints( metric -> metric + .satisfies(hasScopeName("io.opentelemetry.apache-dubbo-2.7")) .hasName("rpc.server.duration") - .hasUnit("ms") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "apache_dubbo"), - equalTo( - RPC_SERVICE, - "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.HelloService"), - equalTo(RPC_METHOD, "hello"))))); + .hasUnit("ms"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "apache_dubbo"), + equalTo( + RPC_SERVICE, + "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.HelloService"), + equalTo(RPC_METHOD, "hello"))); testing() - .waitAndAssertMetrics( - "io.opentelemetry.apache-dubbo-2.7", + .waitAndAssertHistogramPoints( metric -> metric + .satisfies(hasScopeName("io.opentelemetry.apache-dubbo-2.7")) .hasName("rpc.client.duration") - .hasUnit("ms") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "apache_dubbo"), - equalTo( - RPC_SERVICE, - "org.apache.dubbo.rpc.service.GenericService"), - equalTo(RPC_METHOD, "$invoke"), - equalTo(SERVER_ADDRESS, "localhost"), - satisfies(SERVER_PORT, val -> val.isInstanceOf(Long.class)), - satisfies( - NETWORK_TYPE, AbstractDubboTest::assertNetworkType))))); + .hasUnit("ms"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "apache_dubbo"), + equalTo(RPC_SERVICE, "org.apache.dubbo.rpc.service.GenericService"), + equalTo(RPC_METHOD, "$invoke"), + equalTo(SERVER_ADDRESS, "localhost"), + satisfies(SERVER_PORT, val -> val.isInstanceOf(Long.class)), + satisfies(NETWORK_TYPE, AbstractDubboTest::assertNetworkType))); } if (emitPreviewRpcSemconv()) { testing() - .waitAndAssertMetrics( - "io.opentelemetry.apache-dubbo-2.7", + .waitAndAssertHistogramPoints( metric -> metric + .satisfies(hasScopeName("io.opentelemetry.apache-dubbo-2.7")) .hasName("rpc.server.call.duration") - .hasUnit("s") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "dubbo"), - equalTo( - RPC_METHOD, - "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.HelloService/hello"))))); + .hasUnit("s"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "dubbo"), + equalTo( + RPC_METHOD, + "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.HelloService/hello"))); testing() - .waitAndAssertMetrics( - "io.opentelemetry.apache-dubbo-2.7", + .waitAndAssertHistogramPoints( metric -> metric + .satisfies(hasScopeName("io.opentelemetry.apache-dubbo-2.7")) .hasName("rpc.client.call.duration") - .hasUnit("s") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "dubbo"), - equalTo( - RPC_METHOD, - "org.apache.dubbo.rpc.service.GenericService/$invoke"), - equalTo(SERVER_ADDRESS, "localhost"), - satisfies( - SERVER_PORT, val -> val.isInstanceOf(Long.class)))))); + .hasUnit("s"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "dubbo"), + equalTo(RPC_METHOD, "org.apache.dubbo.rpc.service.GenericService/$invoke"), + equalTo(SERVER_ADDRESS, "localhost"), + satisfies(SERVER_PORT, val -> val.isInstanceOf(Long.class)))); } } @@ -387,79 +373,66 @@ void testApacheDubboTest() throws ReflectiveOperationException { if (emitOldRpcSemconv()) { testing() - .waitAndAssertMetrics( - "io.opentelemetry.apache-dubbo-2.7", + .waitAndAssertHistogramPoints( metric -> metric + .satisfies(hasScopeName("io.opentelemetry.apache-dubbo-2.7")) .hasName("rpc.server.duration") - .hasUnit("ms") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "apache_dubbo"), - equalTo( - RPC_SERVICE, - "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.HelloService"), - equalTo(RPC_METHOD, "hello"))))); + .hasUnit("ms"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "apache_dubbo"), + equalTo( + RPC_SERVICE, + "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.HelloService"), + equalTo(RPC_METHOD, "hello"))); testing() - .waitAndAssertMetrics( - "io.opentelemetry.apache-dubbo-2.7", + .waitAndAssertHistogramPoints( metric -> metric + .satisfies(hasScopeName("io.opentelemetry.apache-dubbo-2.7")) .hasName("rpc.client.duration") - .hasUnit("ms") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "apache_dubbo"), - equalTo( - RPC_SERVICE, - "org.apache.dubbo.rpc.service.GenericService"), - equalTo(RPC_METHOD, "$invokeAsync"), - equalTo(SERVER_ADDRESS, "localhost"), - satisfies(SERVER_PORT, val -> val.isInstanceOf(Long.class)), - satisfies( - NETWORK_TYPE, AbstractDubboTest::assertNetworkType))))); + .hasUnit("ms"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "apache_dubbo"), + equalTo(RPC_SERVICE, "org.apache.dubbo.rpc.service.GenericService"), + equalTo(RPC_METHOD, "$invokeAsync"), + equalTo(SERVER_ADDRESS, "localhost"), + satisfies(SERVER_PORT, val -> val.isInstanceOf(Long.class)), + satisfies(NETWORK_TYPE, AbstractDubboTest::assertNetworkType))); } if (emitPreviewRpcSemconv()) { testing() - .waitAndAssertMetrics( - "io.opentelemetry.apache-dubbo-2.7", + .waitAndAssertHistogramPoints( metric -> metric + .satisfies(hasScopeName("io.opentelemetry.apache-dubbo-2.7")) .hasName("rpc.server.call.duration") - .hasUnit("s") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "dubbo"), - equalTo( - RPC_METHOD, - "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.HelloService/hello"))))); + .hasUnit("s"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "dubbo"), + equalTo( + RPC_METHOD, + "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.HelloService/hello"))); testing() - .waitAndAssertMetrics( - "io.opentelemetry.apache-dubbo-2.7", + .waitAndAssertHistogramPoints( metric -> metric + .satisfies(hasScopeName("io.opentelemetry.apache-dubbo-2.7")) .hasName("rpc.client.call.duration") - .hasUnit("s") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "dubbo"), - equalTo( - RPC_METHOD, - "org.apache.dubbo.rpc.service.GenericService/$invokeAsync"), - equalTo(SERVER_ADDRESS, "localhost"), - satisfies( - SERVER_PORT, val -> val.isInstanceOf(Long.class)))))); + .hasUnit("s"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "dubbo"), + equalTo( + RPC_METHOD, "org.apache.dubbo.rpc.service.GenericService/$invokeAsync"), + equalTo(SERVER_ADDRESS, "localhost"), + satisfies(SERVER_PORT, val -> val.isInstanceOf(Long.class)))); } } diff --git a/instrumentation/apache-dubbo-2.7/testing/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/AbstractDubboTraceChainTest.java b/instrumentation/apache-dubbo-2.7/testing/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/AbstractDubboTraceChainTest.java index 7b6193a48a2d..2ee27fcd24b5 100644 --- a/instrumentation/apache-dubbo-2.7/testing/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/AbstractDubboTraceChainTest.java +++ b/instrumentation/apache-dubbo-2.7/testing/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/AbstractDubboTraceChainTest.java @@ -10,7 +10,7 @@ import static io.opentelemetry.instrumentation.testing.junit.rpc.SemconvRpcStabilityUtil.emitOldRpcSemconv; import static io.opentelemetry.instrumentation.testing.junit.rpc.SemconvRpcStabilityUtil.emitPreviewRpcSemconv; import static io.opentelemetry.instrumentation.testing.junit.service.SemconvServiceStabilityUtil.maybeStablePeerService; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.instrumentation.testing.util.TestLatestDeps.testLatestDeps; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; @@ -287,111 +287,92 @@ void testDubboChain() throws ReflectiveOperationException { if (emitOldRpcSemconv()) { testing() - .waitAndAssertMetrics( - "io.opentelemetry.apache-dubbo-2.7", + .waitAndAssertHistogramPoints( metric -> metric + .satisfies(hasScopeName("io.opentelemetry.apache-dubbo-2.7")) .hasName("rpc.server.duration") - .hasUnit("ms") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "apache_dubbo"), - equalTo( - RPC_SERVICE, - "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.HelloService"), - equalTo(RPC_METHOD, "hello")), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "apache_dubbo"), - equalTo( - RPC_SERVICE, - "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.MiddleService"), - equalTo(RPC_METHOD, "hello"))))); + .hasUnit("ms"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "apache_dubbo"), + equalTo( + RPC_SERVICE, + "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.HelloService"), + equalTo(RPC_METHOD, "hello")), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "apache_dubbo"), + equalTo( + RPC_SERVICE, + "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.MiddleService"), + equalTo(RPC_METHOD, "hello"))); testing() - .waitAndAssertMetrics( - "io.opentelemetry.apache-dubbo-2.7", + .waitAndAssertHistogramPoints( metric -> metric + .satisfies(hasScopeName("io.opentelemetry.apache-dubbo-2.7")) .hasName("rpc.client.duration") - .hasUnit("ms") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "apache_dubbo"), - equalTo( - RPC_SERVICE, - "org.apache.dubbo.rpc.service.GenericService"), - equalTo(RPC_METHOD, "$invoke"), - equalTo(SERVER_ADDRESS, "localhost"), - satisfies(SERVER_PORT, val -> val.isInstanceOf(Long.class)), - satisfies( - NETWORK_TYPE, AbstractDubboTest::assertNetworkType)), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "apache_dubbo"), - equalTo( - RPC_SERVICE, - "org.apache.dubbo.rpc.service.GenericService"), - equalTo(RPC_METHOD, "$invoke"), - equalTo(SERVER_ADDRESS, "localhost"), - satisfies(SERVER_PORT, val -> val.isInstanceOf(Long.class)), - satisfies( - NETWORK_TYPE, AbstractDubboTest::assertNetworkType))))); + .hasUnit("ms"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "apache_dubbo"), + equalTo(RPC_SERVICE, "org.apache.dubbo.rpc.service.GenericService"), + equalTo(RPC_METHOD, "$invoke"), + equalTo(SERVER_ADDRESS, "localhost"), + satisfies(SERVER_PORT, val -> val.isInstanceOf(Long.class)), + satisfies(NETWORK_TYPE, AbstractDubboTest::assertNetworkType)), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "apache_dubbo"), + equalTo(RPC_SERVICE, "org.apache.dubbo.rpc.service.GenericService"), + equalTo(RPC_METHOD, "$invoke"), + equalTo(SERVER_ADDRESS, "localhost"), + satisfies(SERVER_PORT, val -> val.isInstanceOf(Long.class)), + satisfies(NETWORK_TYPE, AbstractDubboTest::assertNetworkType))); } if (emitPreviewRpcSemconv()) { testing() - .waitAndAssertMetrics( - "io.opentelemetry.apache-dubbo-2.7", + .waitAndAssertHistogramPoints( metric -> metric + .satisfies(hasScopeName("io.opentelemetry.apache-dubbo-2.7")) .hasName("rpc.server.call.duration") - .hasUnit("s") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "dubbo"), - equalTo( - RPC_METHOD, - "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.HelloService/hello")), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "dubbo"), - equalTo( - RPC_METHOD, - "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.MiddleService/hello"))))); + .hasUnit("s"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "dubbo"), + equalTo( + RPC_METHOD, + "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.HelloService/hello")), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "dubbo"), + equalTo( + RPC_METHOD, + "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.MiddleService/hello"))); testing() - .waitAndAssertMetrics( - "io.opentelemetry.apache-dubbo-2.7", + .waitAndAssertHistogramPoints( metric -> metric + .satisfies(hasScopeName("io.opentelemetry.apache-dubbo-2.7")) .hasName("rpc.client.call.duration") - .hasUnit("s") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "dubbo"), - equalTo( - RPC_METHOD, - "org.apache.dubbo.rpc.service.GenericService/$invoke"), - equalTo(SERVER_ADDRESS, "localhost"), - satisfies(SERVER_PORT, val -> val.isInstanceOf(Long.class))), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "dubbo"), - equalTo( - RPC_METHOD, - "org.apache.dubbo.rpc.service.GenericService/$invoke"), - equalTo(SERVER_ADDRESS, "localhost"), - satisfies( - SERVER_PORT, val -> val.isInstanceOf(Long.class)))))); + .hasUnit("s"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "dubbo"), + equalTo(RPC_METHOD, "org.apache.dubbo.rpc.service.GenericService/$invoke"), + equalTo(SERVER_ADDRESS, "localhost"), + satisfies(SERVER_PORT, val -> val.isInstanceOf(Long.class))), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "dubbo"), + equalTo(RPC_METHOD, "org.apache.dubbo.rpc.service.GenericService/$invoke"), + equalTo(SERVER_ADDRESS, "localhost"), + satisfies(SERVER_PORT, val -> val.isInstanceOf(Long.class)))); } } @@ -500,79 +481,65 @@ void testDubboChainInJvm() throws ReflectiveOperationException { if (emitOldRpcSemconv()) { testing() - .waitAndAssertMetrics( - "io.opentelemetry.apache-dubbo-2.7", + .waitAndAssertHistogramPoints( metric -> metric + .satisfies(hasScopeName("io.opentelemetry.apache-dubbo-2.7")) .hasName("rpc.server.duration") - .hasUnit("ms") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "apache_dubbo"), - equalTo( - RPC_SERVICE, - "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.MiddleService"), - equalTo(RPC_METHOD, "hello"))))); + .hasUnit("ms"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "apache_dubbo"), + equalTo( + RPC_SERVICE, + "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.MiddleService"), + equalTo(RPC_METHOD, "hello"))); testing() - .waitAndAssertMetrics( - "io.opentelemetry.apache-dubbo-2.7", + .waitAndAssertHistogramPoints( metric -> metric + .satisfies(hasScopeName("io.opentelemetry.apache-dubbo-2.7")) .hasName("rpc.client.duration") - .hasUnit("ms") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "apache_dubbo"), - equalTo( - RPC_SERVICE, - "org.apache.dubbo.rpc.service.GenericService"), - equalTo(RPC_METHOD, "$invoke"), - equalTo(SERVER_ADDRESS, "localhost"), - satisfies(SERVER_PORT, val -> val.isInstanceOf(Long.class)), - satisfies( - NETWORK_TYPE, AbstractDubboTest::assertNetworkType))))); + .hasUnit("ms"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "apache_dubbo"), + equalTo(RPC_SERVICE, "org.apache.dubbo.rpc.service.GenericService"), + equalTo(RPC_METHOD, "$invoke"), + equalTo(SERVER_ADDRESS, "localhost"), + satisfies(SERVER_PORT, val -> val.isInstanceOf(Long.class)), + satisfies(NETWORK_TYPE, AbstractDubboTest::assertNetworkType))); } if (emitPreviewRpcSemconv()) { testing() - .waitAndAssertMetrics( - "io.opentelemetry.apache-dubbo-2.7", + .waitAndAssertHistogramPoints( metric -> metric + .satisfies(hasScopeName("io.opentelemetry.apache-dubbo-2.7")) .hasName("rpc.server.call.duration") - .hasUnit("s") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "dubbo"), - equalTo( - RPC_METHOD, - "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.MiddleService/hello"))))); + .hasUnit("s"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "dubbo"), + equalTo( + RPC_METHOD, + "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.MiddleService/hello"))); testing() - .waitAndAssertMetrics( - "io.opentelemetry.apache-dubbo-2.7", + .waitAndAssertHistogramPoints( metric -> metric + .satisfies(hasScopeName("io.opentelemetry.apache-dubbo-2.7")) .hasName("rpc.client.call.duration") - .hasUnit("s") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "dubbo"), - equalTo( - RPC_METHOD, - "org.apache.dubbo.rpc.service.GenericService/$invoke"), - equalTo(SERVER_ADDRESS, "localhost"), - satisfies( - SERVER_PORT, val -> val.isInstanceOf(Long.class)))))); + .hasUnit("s"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "dubbo"), + equalTo(RPC_METHOD, "org.apache.dubbo.rpc.service.GenericService/$invoke"), + equalTo(SERVER_ADDRESS, "localhost"), + satisfies(SERVER_PORT, val -> val.isInstanceOf(Long.class)))); } } } diff --git a/instrumentation/avaje-jex-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/avaje/jex/v3_0/JexTest.java b/instrumentation/avaje-jex-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/avaje/jex/v3_0/JexTest.java index 472f343be28f..3314c385b8eb 100644 --- a/instrumentation/avaje-jex-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/avaje/jex/v3_0/JexTest.java +++ b/instrumentation/avaje-jex-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/avaje/jex/v3_0/JexTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.avaje.jex.v3_0; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; @@ -121,9 +122,8 @@ void testHttpRouteMetricWithPathParamResponseSuccessful() { assertThat(content).isEqualTo(id); assertThat(response.status().code()).isEqualTo(200); testing.waitAndAssertHistogramPoints( - instrumentation, - "http.server.request.duration", - metric -> metric.hasUnit("s"), + metric -> + metric.satisfies(hasScopeName(instrumentation)).hasName("http.server.request.duration"), point -> point.hasAttribute(HTTP_ROUTE, "/test/param/{id}")); } } diff --git a/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/SqsMetricsAssertions.java b/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/SqsMetricsAssertions.java index 043bb59961af..a3edc12fe7e5 100644 --- a/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/SqsMetricsAssertions.java +++ b/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/SqsMetricsAssertions.java @@ -5,7 +5,7 @@ package io.opentelemetry.instrumentation.awssdk.v1_11; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.ErrorAttributes.ERROR_TYPE; @@ -73,64 +73,50 @@ private static void assertClientOperationDuration( long operationCount, String operationName, String operationType) { - testing.waitAndAssertMetrics( - INSTRUMENTATION_NAME, - "messaging.client.operation.duration", - metrics -> - metrics.satisfiesExactly( - metric -> - assertThat(metric) - .hasUnit("s") - .hasDescription( - "Duration of messaging operation initiated by a producer or consumer client.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .satisfies( - data -> - assertThat(data.getCount()) - .isEqualTo(operationCount)) - .hasSumGreaterThan(0) - .hasBucketBoundaries(DURATION_BUCKETS) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, operationName), - equalTo(MESSAGING_SYSTEM, AWS_SQS), - equalTo(ERROR_TYPE, null), - equalTo(MESSAGING_DESTINATION_NAME, "testSdkSqs"), - equalTo(MESSAGING_OPERATION_TYPE, operationType), - equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, serverPort)))))); + testing.waitAndAssertHistogramPoints( + metric -> + metric + .satisfies(hasScopeName(INSTRUMENTATION_NAME)) + .hasName("messaging.client.operation.duration") + .hasUnit("s") + .hasDescription( + "Duration of messaging operation initiated by a producer or consumer client."), + point -> + point + .satisfies(data -> assertThat(data.getCount()).isEqualTo(operationCount)) + .hasSumGreaterThan(0) + .hasBucketBoundaries(DURATION_BUCKETS) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, operationName), + equalTo(MESSAGING_SYSTEM, AWS_SQS), + equalTo(ERROR_TYPE, null), + equalTo(MESSAGING_DESTINATION_NAME, "testSdkSqs"), + equalTo(MESSAGING_OPERATION_TYPE, operationType), + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, serverPort))); } private static void assertProcessDuration( InstrumentationExtension testing, int serverPort, long operationCount) { - testing.waitAndAssertMetrics( - INSTRUMENTATION_NAME, - "messaging.process.duration", - metrics -> - metrics.satisfiesExactly( - metric -> - assertThat(metric) - .hasUnit("s") - .hasDescription("Duration of processing operation.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .satisfies( - data -> - assertThat(data.getCount()) - .isEqualTo(operationCount)) - .hasSumGreaterThan(0) - .hasBucketBoundaries(DURATION_BUCKETS) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "process"), - equalTo(MESSAGING_SYSTEM, AWS_SQS), - equalTo(ERROR_TYPE, null), - equalTo(MESSAGING_DESTINATION_NAME, "testSdkSqs"), - equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, serverPort)))))); + testing.waitAndAssertHistogramPoints( + metric -> + metric + .satisfies(hasScopeName(INSTRUMENTATION_NAME)) + .hasName("messaging.process.duration") + .hasUnit("s") + .hasDescription("Duration of processing operation."), + point -> + point + .satisfies(data -> assertThat(data.getCount()).isEqualTo(operationCount)) + .hasSumGreaterThan(0) + .hasBucketBoundaries(DURATION_BUCKETS) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "process"), + equalTo(MESSAGING_SYSTEM, AWS_SQS), + equalTo(ERROR_TYPE, null), + equalTo(MESSAGING_DESTINATION_NAME, "testSdkSqs"), + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, serverPort))); } private static void assertMessageCounter( diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/SqsMetricsAssertions.java b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/SqsMetricsAssertions.java index 4a1a28980d68..abe36d5e2e0a 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/SqsMetricsAssertions.java +++ b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/SqsMetricsAssertions.java @@ -5,7 +5,7 @@ package io.opentelemetry.instrumentation.awssdk.v2_2; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.ErrorAttributes.ERROR_TYPE; @@ -73,64 +73,50 @@ private static void assertClientOperationDuration( long operationCount, String operationName, String operationType) { - testing.waitAndAssertMetrics( - INSTRUMENTATION_NAME, - "messaging.client.operation.duration", - metrics -> - metrics.satisfiesExactly( - metric -> - assertThat(metric) - .hasUnit("s") - .hasDescription( - "Duration of messaging operation initiated by a producer or consumer client.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .satisfies( - data -> - assertThat(data.getCount()) - .isEqualTo(operationCount)) - .hasSumGreaterThan(0) - .hasBucketBoundaries(DURATION_BUCKETS) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, operationName), - equalTo(MESSAGING_SYSTEM, AWS_SQS), - equalTo(ERROR_TYPE, null), - equalTo(MESSAGING_DESTINATION_NAME, "testSdkSqs"), - equalTo(MESSAGING_OPERATION_TYPE, operationType), - equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, serverPort)))))); + testing.waitAndAssertHistogramPoints( + metric -> + metric + .satisfies(hasScopeName(INSTRUMENTATION_NAME)) + .hasName("messaging.client.operation.duration") + .hasUnit("s") + .hasDescription( + "Duration of messaging operation initiated by a producer or consumer client."), + point -> + point + .satisfies(data -> assertThat(data.getCount()).isEqualTo(operationCount)) + .hasSumGreaterThan(0) + .hasBucketBoundaries(DURATION_BUCKETS) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, operationName), + equalTo(MESSAGING_SYSTEM, AWS_SQS), + equalTo(ERROR_TYPE, null), + equalTo(MESSAGING_DESTINATION_NAME, "testSdkSqs"), + equalTo(MESSAGING_OPERATION_TYPE, operationType), + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, serverPort))); } private static void assertProcessDuration( InstrumentationExtension testing, int serverPort, long operationCount) { - testing.waitAndAssertMetrics( - INSTRUMENTATION_NAME, - "messaging.process.duration", - metrics -> - metrics.satisfiesExactly( - metric -> - assertThat(metric) - .hasUnit("s") - .hasDescription("Duration of processing operation.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .satisfies( - data -> - assertThat(data.getCount()) - .isEqualTo(operationCount)) - .hasSumGreaterThan(0) - .hasBucketBoundaries(DURATION_BUCKETS) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "process"), - equalTo(MESSAGING_SYSTEM, AWS_SQS), - equalTo(ERROR_TYPE, null), - equalTo(MESSAGING_DESTINATION_NAME, "testSdkSqs"), - equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, serverPort)))))); + testing.waitAndAssertHistogramPoints( + metric -> + metric + .satisfies(hasScopeName(INSTRUMENTATION_NAME)) + .hasName("messaging.process.duration") + .hasUnit("s") + .hasDescription("Duration of processing operation."), + point -> + point + .satisfies(data -> assertThat(data.getCount()).isEqualTo(operationCount)) + .hasSumGreaterThan(0) + .hasBucketBoundaries(DURATION_BUCKETS) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "process"), + equalTo(MESSAGING_SYSTEM, AWS_SQS), + equalTo(ERROR_TYPE, null), + equalTo(MESSAGING_DESTINATION_NAME, "testSdkSqs"), + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, serverPort))); } private static void assertMessageCounter( diff --git a/instrumentation/camel-2.20/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/camel/v2_20/CamelMessagingMetricsAssertions.java b/instrumentation/camel-2.20/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/camel/v2_20/CamelMessagingMetricsAssertions.java index 7978c709cb8a..f645582ee9e6 100644 --- a/instrumentation/camel-2.20/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/camel/v2_20/CamelMessagingMetricsAssertions.java +++ b/instrumentation/camel-2.20/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/camel/v2_20/CamelMessagingMetricsAssertions.java @@ -5,7 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.camel.v2_20; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.ErrorAttributes.ERROR_TYPE; @@ -174,58 +174,49 @@ private static void assertDuration( String destination, String errorType, String destinationPartitionId) { - testing.waitAndAssertMetrics( - INSTRUMENTATION_NAME, - metricName, - metrics -> - metrics.satisfiesExactly( - metric -> { - assertThat(metric) - .hasUnit("s") - .hasDescription(description) - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> { - point.hasCount(1); - if (operationType != null) { - if (destinationPartitionId != null) { - point.hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, operationName), - equalTo(MESSAGING_SYSTEM, system), - equalTo(MESSAGING_DESTINATION_NAME, destination), - equalTo( - MESSAGING_DESTINATION_PARTITION_ID, - destinationPartitionId), - equalTo(MESSAGING_OPERATION_TYPE, operationType), - equalTo(ERROR_TYPE, errorType)); - } else { - point.hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, operationName), - equalTo(MESSAGING_SYSTEM, system), - equalTo(MESSAGING_DESTINATION_NAME, destination), - equalTo(MESSAGING_OPERATION_TYPE, operationType), - equalTo(ERROR_TYPE, errorType)); - } - } else { - if (destinationPartitionId != null) { - point.hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, operationName), - equalTo(MESSAGING_SYSTEM, system), - equalTo(MESSAGING_DESTINATION_NAME, destination), - equalTo( - MESSAGING_DESTINATION_PARTITION_ID, - destinationPartitionId), - equalTo(ERROR_TYPE, errorType)); - } else { - point.hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, operationName), - equalTo(MESSAGING_SYSTEM, system), - equalTo(MESSAGING_DESTINATION_NAME, destination), - equalTo(ERROR_TYPE, errorType)); - } - } - })); - })); + testing.waitAndAssertHistogramPoints( + metric -> + metric + .satisfies(hasScopeName(INSTRUMENTATION_NAME)) + .hasName(metricName) + .hasDescription(description) + .hasUnit("s"), + point -> { + point.hasCount(1); + if (operationType != null) { + if (destinationPartitionId != null) { + point.hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, operationName), + equalTo(MESSAGING_SYSTEM, system), + equalTo(MESSAGING_DESTINATION_NAME, destination), + equalTo(MESSAGING_DESTINATION_PARTITION_ID, destinationPartitionId), + equalTo(MESSAGING_OPERATION_TYPE, operationType), + equalTo(ERROR_TYPE, errorType)); + } else { + point.hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, operationName), + equalTo(MESSAGING_SYSTEM, system), + equalTo(MESSAGING_DESTINATION_NAME, destination), + equalTo(MESSAGING_OPERATION_TYPE, operationType), + equalTo(ERROR_TYPE, errorType)); + } + } else { + if (destinationPartitionId != null) { + point.hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, operationName), + equalTo(MESSAGING_SYSTEM, system), + equalTo(MESSAGING_DESTINATION_NAME, destination), + equalTo(MESSAGING_DESTINATION_PARTITION_ID, destinationPartitionId), + equalTo(ERROR_TYPE, errorType)); + } else { + point.hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, operationName), + equalTo(MESSAGING_SYSTEM, system), + equalTo(MESSAGING_DESTINATION_NAME, destination), + equalTo(ERROR_TYPE, errorType)); + } + } + }); } private static void assertCounter( diff --git a/instrumentation/cassandra/cassandra-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraTest.java b/instrumentation/cassandra/cassandra-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraTest.java index ad23a13f6a05..0b4d913024b7 100644 --- a/instrumentation/cassandra/cassandra-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraTest.java +++ b/instrumentation/cassandra/cassandra-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.cassandra.v4_0; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.DbAttributes.DB_COLLECTION_NAME; import static io.opentelemetry.semconv.DbAttributes.DB_OPERATION_NAME; @@ -106,9 +107,10 @@ void responsePeerComesFromTheChannel() { assertThat(span.getAttributes().get(NETWORK_TYPE)).isEqualTo(null); }); testing.waitAndAssertHistogramPoints( - getInstrumentationName(), - "db.client.operation.duration", - metric -> metric.hasUnit("s"), + metric -> + metric + .satisfies(hasScopeName(getInstrumentationName())) + .hasName("db.client.operation.duration"), point -> point.hasAttributesSatisfyingExactly( equalTo(DB_COLLECTION_NAME, "system.local"), diff --git a/instrumentation/cassandra/cassandra-4.4/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_4/CassandraTest.java b/instrumentation/cassandra/cassandra-4.4/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_4/CassandraTest.java index d1ad627d9e87..0d839c2d82f8 100644 --- a/instrumentation/cassandra/cassandra-4.4/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_4/CassandraTest.java +++ b/instrumentation/cassandra/cassandra-4.4/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_4/CassandraTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.cassandra.v4_4; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.DbAttributes.DB_COLLECTION_NAME; import static io.opentelemetry.semconv.DbAttributes.DB_OPERATION_NAME; @@ -101,9 +102,10 @@ void responsePeerComesFromTheChannel() throws ReflectiveOperationException { assertThat(span.getAttributes().get(NETWORK_TYPE)).isEqualTo(null); }); testing.waitAndAssertHistogramPoints( - getInstrumentationName(), - "db.client.operation.duration", - metric -> metric.hasUnit("s"), + metric -> + metric + .satisfies(hasScopeName(getInstrumentationName())) + .hasName("db.client.operation.duration"), point -> point.hasAttributesSatisfyingExactly( equalTo(DB_COLLECTION_NAME, "system.local"), diff --git a/instrumentation/clickhouse/clickhouse-client-v1-0.5/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/clickhouse/clientv1/v0_5/ClickHouseClientV1Test.java b/instrumentation/clickhouse/clickhouse-client-v1-0.5/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/clickhouse/clientv1/v0_5/ClickHouseClientV1Test.java index a6c887912f7a..6ddfc241262f 100644 --- a/instrumentation/clickhouse/clickhouse-client-v1-0.5/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/clickhouse/clientv1/v0_5/ClickHouseClientV1Test.java +++ b/instrumentation/clickhouse/clickhouse-client-v1-0.5/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/clickhouse/clientv1/v0_5/ClickHouseClientV1Test.java @@ -6,6 +6,7 @@ package io.opentelemetry.javaagent.instrumentation.clickhouse.clientv1.v0_5; import static io.opentelemetry.instrumentation.testing.junit.db.DbClientMetricsTestUtil.assertDurationMetric; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.DbAttributes.DB_NAMESPACE; import static io.opentelemetry.semconv.DbAttributes.DB_QUERY_SUMMARY; @@ -377,9 +378,10 @@ void testExecuteAndWaitThrowsException() { SERVER_ADDRESS, SERVER_PORT); testing.waitAndAssertHistogramPoints( - "io.opentelemetry.clickhouse-client-v1-0.5", - "db.client.operation.duration", - metric -> metric.hasUnit("s"), + metric -> + metric + .satisfies(hasScopeName("io.opentelemetry.clickhouse-client-v1-0.5")) + .hasName("db.client.operation.duration"), point -> point.hasAttribute(ERROR_TYPE, "60")); } diff --git a/instrumentation/clickhouse/clickhouse-client-v2-0.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/clickhouse/clientv2/v0_8/ClickHouseClientV2Test.java b/instrumentation/clickhouse/clickhouse-client-v2-0.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/clickhouse/clientv2/v0_8/ClickHouseClientV2Test.java index 439280e37af5..09cd57eaf32d 100644 --- a/instrumentation/clickhouse/clickhouse-client-v2-0.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/clickhouse/clientv2/v0_8/ClickHouseClientV2Test.java +++ b/instrumentation/clickhouse/clickhouse-client-v2-0.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/clickhouse/clientv2/v0_8/ClickHouseClientV2Test.java @@ -6,6 +6,7 @@ package io.opentelemetry.javaagent.instrumentation.clickhouse.clientv2.v0_8; import static io.opentelemetry.instrumentation.testing.junit.db.DbClientMetricsTestUtil.assertDurationMetric; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.DbAttributes.DB_NAMESPACE; import static io.opentelemetry.semconv.DbAttributes.DB_QUERY_SUMMARY; @@ -343,9 +344,10 @@ void testQueryThrowsServerException() { SERVER_ADDRESS, SERVER_PORT); testing.waitAndAssertHistogramPoints( - "io.opentelemetry.clickhouse-client-v2-0.8", - "db.client.operation.duration", - metric -> metric.hasUnit("s"), + metric -> + metric + .satisfies(hasScopeName("io.opentelemetry.clickhouse-client-v2-0.8")) + .hasName("db.client.operation.duration"), point -> point.hasAttribute(ERROR_TYPE, "60")); } diff --git a/instrumentation/dropwizard/dropwizard-metrics-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/dropwizardmetrics/v4_0/DropwizardMetricsTest.java b/instrumentation/dropwizard/dropwizard-metrics-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/dropwizardmetrics/v4_0/DropwizardMetricsTest.java index 74a277d5599d..88faf770e28b 100644 --- a/instrumentation/dropwizard/dropwizard-metrics-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/dropwizardmetrics/v4_0/DropwizardMetricsTest.java +++ b/instrumentation/dropwizard/dropwizard-metrics-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/dropwizardmetrics/v4_0/DropwizardMetricsTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.dropwizardmetrics.v4_0; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static java.util.concurrent.TimeUnit.MILLISECONDS; import static java.util.concurrent.TimeUnit.NANOSECONDS; import static java.util.concurrent.TimeUnit.SECONDS; @@ -97,9 +98,7 @@ void histogram() { // then testing.waitAndAssertHistogramPoints( - INSTRUMENTATION_NAME, - "testhistogram", - metric -> metric.hasUnit(""), + metric -> metric.satisfies(hasScopeName(INSTRUMENTATION_NAME)).hasName("testhistogram"), point -> point.hasSum(42).hasCount(2)); testing.clearData(); @@ -154,9 +153,8 @@ void timer() { // then testing.waitAndAssertHistogramPoints( - INSTRUMENTATION_NAME, - "testtimer", - metric -> metric.hasUnit("ms"), + metric -> + metric.satisfies(hasScopeName(INSTRUMENTATION_NAME)).hasName("testtimer").hasUnit("ms"), point -> point.hasSum(1.234).hasCount(2)); testing.clearData(); diff --git a/instrumentation/failsafe-3.0/library/src/test/java/io/opentelemetry/instrumentation/failsafe/v3_0/FailsafeTelemetryTest.java b/instrumentation/failsafe-3.0/library/src/test/java/io/opentelemetry/instrumentation/failsafe/v3_0/FailsafeTelemetryTest.java index fcae66cb70b5..70939f460295 100644 --- a/instrumentation/failsafe-3.0/library/src/test/java/io/opentelemetry/instrumentation/failsafe/v3_0/FailsafeTelemetryTest.java +++ b/instrumentation/failsafe-3.0/library/src/test/java/io/opentelemetry/instrumentation/failsafe/v3_0/FailsafeTelemetryTest.java @@ -121,7 +121,6 @@ void captureRetryPolicyMetrics() { metricAssert -> metricAssert .hasName("failsafe.retry_policy.attempts") - .hasUnit("{attempt}") .satisfies( hasHistogramPointsSatisfyingExactly( histogramPointAssert -> diff --git a/instrumentation/grpc-1.6/testing/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/AbstractGrpcStreamingTest.java b/instrumentation/grpc-1.6/testing/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/AbstractGrpcStreamingTest.java index 9b98a88d81f4..e2c22b4c45bc 100644 --- a/instrumentation/grpc-1.6/testing/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/AbstractGrpcStreamingTest.java +++ b/instrumentation/grpc-1.6/testing/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/AbstractGrpcStreamingTest.java @@ -11,7 +11,7 @@ import static io.opentelemetry.instrumentation.grpc.v1_6.ExperimentalTestHelper.experimentalSatisfies; import static io.opentelemetry.instrumentation.testing.junit.rpc.SemconvRpcStabilityUtil.emitOldRpcSemconv; import static io.opentelemetry.instrumentation.testing.junit.rpc.SemconvRpcStabilityUtil.emitPreviewRpcSemconv; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.instrumentation.testing.util.TestLatestDeps.testLatestDeps; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; @@ -296,80 +296,71 @@ RPC_SERVICE, emitOldRpcSemconv() ? "example.Greeter" : null), .hasParent(trace.getSpan(0)))); if (emitOldRpcSemconv()) { testing() - .waitAndAssertMetrics( - "io.opentelemetry.grpc-1.6", + .waitAndAssertHistogramPoints( metric -> metric + .satisfies(hasScopeName("io.opentelemetry.grpc-1.6")) .hasName("rpc.server.duration") - .hasUnit("ms") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, server.getPort()), - equalTo(RPC_METHOD, "Conversation"), - equalTo(RPC_SERVICE, "example.Greeter"), - equalTo(RPC_SYSTEM, "grpc"), - equalTo(NETWORK_TYPE, "ipv4"), - equalTo( - RPC_GRPC_STATUS_CODE, (long) Status.Code.OK.value()))))); + .hasUnit("ms"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, server.getPort()), + equalTo(RPC_METHOD, "Conversation"), + equalTo(RPC_SERVICE, "example.Greeter"), + equalTo(RPC_SYSTEM, "grpc"), + equalTo(NETWORK_TYPE, "ipv4"), + equalTo(RPC_GRPC_STATUS_CODE, (long) Status.Code.OK.value()))); } if (emitPreviewRpcSemconv()) { testing() - .waitAndAssertMetrics( - "io.opentelemetry.grpc-1.6", + .waitAndAssertHistogramPoints( metric -> metric + .satisfies(hasScopeName("io.opentelemetry.grpc-1.6")) .hasName("rpc.server.call.duration") - .hasUnit("s") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "grpc"), - equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, server.getPort()), - equalTo(RPC_METHOD, "example.Greeter/Conversation"), - equalTo(RPC_RESPONSE_STATUS_CODE, Status.Code.OK.name()))))); + .hasUnit("s"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "grpc"), + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, server.getPort()), + equalTo(RPC_METHOD, "example.Greeter/Conversation"), + equalTo(RPC_RESPONSE_STATUS_CODE, Status.Code.OK.name()))); } if (emitOldRpcSemconv()) { testing() - .waitAndAssertMetrics( - "io.opentelemetry.grpc-1.6", + .waitAndAssertHistogramPoints( metric -> metric + .satisfies(hasScopeName("io.opentelemetry.grpc-1.6")) .hasName("rpc.client.duration") - .hasUnit("ms") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, server.getPort()), - equalTo(RPC_METHOD, "Conversation"), - equalTo(RPC_SERVICE, "example.Greeter"), - equalTo(RPC_SYSTEM, "grpc"), - equalTo(RPC_GRPC_STATUS_CODE, (long) Status.Code.OK.value()), - equalTo(NETWORK_TYPE, testLatestDeps() ? "ipv4" : null))))); + .hasUnit("ms"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, server.getPort()), + equalTo(RPC_METHOD, "Conversation"), + equalTo(RPC_SERVICE, "example.Greeter"), + equalTo(RPC_SYSTEM, "grpc"), + equalTo(RPC_GRPC_STATUS_CODE, (long) Status.Code.OK.value()), + equalTo(NETWORK_TYPE, testLatestDeps() ? "ipv4" : null))); } if (emitPreviewRpcSemconv()) { testing() - .waitAndAssertMetrics( - "io.opentelemetry.grpc-1.6", + .waitAndAssertHistogramPoints( metric -> metric + .satisfies(hasScopeName("io.opentelemetry.grpc-1.6")) .hasName("rpc.client.call.duration") - .hasUnit("s") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "grpc"), - equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, server.getPort()), - equalTo(RPC_METHOD, "example.Greeter/Conversation"), - equalTo(RPC_RESPONSE_STATUS_CODE, Status.Code.OK.name()))))); + .hasUnit("s"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "grpc"), + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, server.getPort()), + equalTo(RPC_METHOD, "example.Greeter/Conversation"), + equalTo(RPC_RESPONSE_STATUS_CODE, Status.Code.OK.name()))); } } diff --git a/instrumentation/grpc-1.6/testing/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/AbstractGrpcTest.java b/instrumentation/grpc-1.6/testing/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/AbstractGrpcTest.java index b1a780c6227e..0cdc54823f36 100644 --- a/instrumentation/grpc-1.6/testing/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/AbstractGrpcTest.java +++ b/instrumentation/grpc-1.6/testing/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/AbstractGrpcTest.java @@ -12,7 +12,7 @@ import static io.opentelemetry.instrumentation.grpc.v1_6.ExperimentalTestHelper.experimentalSatisfies; import static io.opentelemetry.instrumentation.testing.junit.rpc.SemconvRpcStabilityUtil.emitOldRpcSemconv; import static io.opentelemetry.instrumentation.testing.junit.rpc.SemconvRpcStabilityUtil.emitPreviewRpcSemconv; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.instrumentation.testing.util.TestLatestDeps.testLatestDeps; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; @@ -1810,156 +1810,140 @@ private void assertMetrics(Server server, Status status) { : null; if (emitOldRpcSemconv()) { testing() - .waitAndAssertMetrics( - "io.opentelemetry.grpc-1.6", + .waitAndAssertHistogramPoints( metric -> metric + .satisfies(hasScopeName("io.opentelemetry.grpc-1.6")) .hasName("rpc.server.duration") - .hasUnit("ms") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, server.getPort()), - equalTo(RPC_METHOD, "SayHello"), - equalTo(RPC_SERVICE, "example.Greeter"), - equalTo(RPC_SYSTEM, "grpc"), - equalTo(RPC_GRPC_STATUS_CODE, (long) statusCode.value()), - equalTo(NETWORK_TYPE, "ipv4"))))); + .hasUnit("ms"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, server.getPort()), + equalTo(RPC_METHOD, "SayHello"), + equalTo(RPC_SERVICE, "example.Greeter"), + equalTo(RPC_SYSTEM, "grpc"), + equalTo(RPC_GRPC_STATUS_CODE, (long) statusCode.value()), + equalTo(NETWORK_TYPE, "ipv4"))); if (hasSizeMetric) { testing() - .waitAndAssertMetrics( - "io.opentelemetry.grpc-1.6", + .waitAndAssertHistogramPoints( metric -> metric + .satisfies(hasScopeName("io.opentelemetry.grpc-1.6")) .hasName("rpc.server.request.size") - .hasUnit("By") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, server.getPort()), - equalTo(RPC_METHOD, "SayHello"), - equalTo(RPC_SERVICE, "example.Greeter"), - equalTo(RPC_SYSTEM, "grpc"), - equalTo(RPC_GRPC_STATUS_CODE, (long) statusCode.value()), - equalTo(NETWORK_TYPE, "ipv4"))))); + .hasUnit("By"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, server.getPort()), + equalTo(RPC_METHOD, "SayHello"), + equalTo(RPC_SERVICE, "example.Greeter"), + equalTo(RPC_SYSTEM, "grpc"), + equalTo(RPC_GRPC_STATUS_CODE, (long) statusCode.value()), + equalTo(NETWORK_TYPE, "ipv4"))); testing() - .waitAndAssertMetrics( - "io.opentelemetry.grpc-1.6", + .waitAndAssertHistogramPoints( metric -> metric + .satisfies(hasScopeName("io.opentelemetry.grpc-1.6")) .hasName("rpc.server.response.size") - .hasUnit("By") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, server.getPort()), - equalTo(RPC_METHOD, "SayHello"), - equalTo(RPC_SERVICE, "example.Greeter"), - equalTo(RPC_SYSTEM, "grpc"), - equalTo(RPC_GRPC_STATUS_CODE, (long) statusCode.value()), - equalTo(NETWORK_TYPE, "ipv4"))))); + .hasUnit("By"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, server.getPort()), + equalTo(RPC_METHOD, "SayHello"), + equalTo(RPC_SERVICE, "example.Greeter"), + equalTo(RPC_SYSTEM, "grpc"), + equalTo(RPC_GRPC_STATUS_CODE, (long) statusCode.value()), + equalTo(NETWORK_TYPE, "ipv4"))); } testing() - .waitAndAssertMetrics( - "io.opentelemetry.grpc-1.6", + .waitAndAssertHistogramPoints( metric -> metric + .satisfies(hasScopeName("io.opentelemetry.grpc-1.6")) .hasName("rpc.client.duration") - .hasUnit("ms") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, server.getPort()), - equalTo(RPC_METHOD, "SayHello"), - equalTo(RPC_SERVICE, "example.Greeter"), - equalTo(RPC_SYSTEM, "grpc"), - equalTo(RPC_GRPC_STATUS_CODE, (long) statusCode.value()), - equalTo(NETWORK_TYPE, testLatestDeps() ? "ipv4" : null))))); + .hasUnit("ms"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, server.getPort()), + equalTo(RPC_METHOD, "SayHello"), + equalTo(RPC_SERVICE, "example.Greeter"), + equalTo(RPC_SYSTEM, "grpc"), + equalTo(RPC_GRPC_STATUS_CODE, (long) statusCode.value()), + equalTo(NETWORK_TYPE, testLatestDeps() ? "ipv4" : null))); testing() - .waitAndAssertMetrics( - "io.opentelemetry.grpc-1.6", + .waitAndAssertHistogramPoints( metric -> metric + .satisfies(hasScopeName("io.opentelemetry.grpc-1.6")) .hasName("rpc.client.request.size") - .hasUnit("By") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, server.getPort()), - equalTo(RPC_METHOD, "SayHello"), - equalTo(RPC_SERVICE, "example.Greeter"), - equalTo(RPC_SYSTEM, "grpc"), - equalTo(RPC_GRPC_STATUS_CODE, (long) statusCode.value()), - equalTo(NETWORK_TYPE, testLatestDeps() ? "ipv4" : null))))); + .hasUnit("By"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, server.getPort()), + equalTo(RPC_METHOD, "SayHello"), + equalTo(RPC_SERVICE, "example.Greeter"), + equalTo(RPC_SYSTEM, "grpc"), + equalTo(RPC_GRPC_STATUS_CODE, (long) statusCode.value()), + equalTo(NETWORK_TYPE, testLatestDeps() ? "ipv4" : null))); if (hasSizeMetric) { testing() - .waitAndAssertMetrics( - "io.opentelemetry.grpc-1.6", + .waitAndAssertHistogramPoints( metric -> metric + .satisfies(hasScopeName("io.opentelemetry.grpc-1.6")) .hasName("rpc.client.response.size") - .hasUnit("By") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, server.getPort()), - equalTo(RPC_METHOD, "SayHello"), - equalTo(RPC_SERVICE, "example.Greeter"), - equalTo(RPC_SYSTEM, "grpc"), - equalTo(RPC_GRPC_STATUS_CODE, (long) statusCode.value()), - equalTo(NETWORK_TYPE, testLatestDeps() ? "ipv4" : null))))); + .hasUnit("By"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, server.getPort()), + equalTo(RPC_METHOD, "SayHello"), + equalTo(RPC_SERVICE, "example.Greeter"), + equalTo(RPC_SYSTEM, "grpc"), + equalTo(RPC_GRPC_STATUS_CODE, (long) statusCode.value()), + equalTo(NETWORK_TYPE, testLatestDeps() ? "ipv4" : null))); } } if (emitPreviewRpcSemconv()) { testing() - .waitAndAssertMetrics( - "io.opentelemetry.grpc-1.6", + .waitAndAssertHistogramPoints( metric -> metric + .satisfies(hasScopeName("io.opentelemetry.grpc-1.6")) .hasName("rpc.server.call.duration") - .hasUnit("s") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "grpc"), - equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, server.getPort()), - equalTo(RPC_METHOD, "example.Greeter/SayHello"), - equalTo(RPC_RESPONSE_STATUS_CODE, statusCode.name()), - equalTo(ERROR_TYPE, serverErrorType))))); + .hasUnit("s"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "grpc"), + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, server.getPort()), + equalTo(RPC_METHOD, "example.Greeter/SayHello"), + equalTo(RPC_RESPONSE_STATUS_CODE, statusCode.name()), + equalTo(ERROR_TYPE, serverErrorType))); testing() - .waitAndAssertMetrics( - "io.opentelemetry.grpc-1.6", + .waitAndAssertHistogramPoints( metric -> metric + .satisfies(hasScopeName("io.opentelemetry.grpc-1.6")) .hasName("rpc.client.call.duration") - .hasUnit("s") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "grpc"), - equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, server.getPort()), - equalTo(RPC_METHOD, "example.Greeter/SayHello"), - equalTo(RPC_RESPONSE_STATUS_CODE, statusCode.name()), - equalTo(ERROR_TYPE, clientErrorType))))); + .hasUnit("s"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "grpc"), + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, server.getPort()), + equalTo(RPC_METHOD, "example.Greeter/SayHello"), + equalTo(RPC_RESPONSE_STATUS_CODE, statusCode.name()), + equalTo(ERROR_TYPE, clientErrorType))); } } } diff --git a/instrumentation/iceberg-1.8/testing/src/main/java/io/opentelemetry/instrumentation/iceberg/v1_8/AbstractIcebergTest.java b/instrumentation/iceberg-1.8/testing/src/main/java/io/opentelemetry/instrumentation/iceberg/v1_8/AbstractIcebergTest.java index 5b5205a926f1..ca56dff6ce62 100644 --- a/instrumentation/iceberg-1.8/testing/src/main/java/io/opentelemetry/instrumentation/iceberg/v1_8/AbstractIcebergTest.java +++ b/instrumentation/iceberg-1.8/testing/src/main/java/io/opentelemetry/instrumentation/iceberg/v1_8/AbstractIcebergTest.java @@ -7,6 +7,7 @@ import static io.opentelemetry.api.common.AttributeKey.longKey; import static io.opentelemetry.api.common.AttributeKey.stringKey; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static java.util.Arrays.asList; import static org.assertj.core.api.Assertions.assertThat; @@ -111,9 +112,11 @@ void testCreateTelemetry() throws IOException { private void assertScanDurationMetric(ScanReport expectedReport) { testing() .waitAndAssertHistogramPoints( - INSTRUMENTATION_NAME, - "iceberg.scan.planning.duration", - metricAssert -> metricAssert.hasUnit("s"), + metricAssert -> + metricAssert + .satisfies(hasScopeName(INSTRUMENTATION_NAME)) + .hasName("iceberg.scan.planning.duration") + .hasUnit("s"), point -> point .hasSumGreaterThan(0.0) diff --git a/instrumentation/javalin/testing/src/main/java/io/opentelemetry/instrumentation/javalin/AbstractJavalinTest.java b/instrumentation/javalin/testing/src/main/java/io/opentelemetry/instrumentation/javalin/AbstractJavalinTest.java index 0897aa4d27fc..6d221fada83c 100644 --- a/instrumentation/javalin/testing/src/main/java/io/opentelemetry/instrumentation/javalin/AbstractJavalinTest.java +++ b/instrumentation/javalin/testing/src/main/java/io/opentelemetry/instrumentation/javalin/AbstractJavalinTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.instrumentation.javalin; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; @@ -162,9 +163,10 @@ void testHttpRouteMetricWithPathParamResponseSuccessful() { assertThat(response.status().code()).isEqualTo(200); testing() .waitAndAssertHistogramPoints( - getJettyInstrumentation(), - "http.server.request.duration", - metric -> metric.hasUnit("s"), + metric -> + metric + .satisfies(hasScopeName(getJettyInstrumentation())) + .hasName("http.server.request.duration"), point -> point.hasAttribute(HTTP_ROUTE, "/param/{id}")); } } diff --git a/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/datasource/JdbcTelemetryTest.java b/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/datasource/JdbcTelemetryTest.java index 90ce61346855..de3c7678572b 100644 --- a/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/datasource/JdbcTelemetryTest.java +++ b/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/datasource/JdbcTelemetryTest.java @@ -6,6 +6,7 @@ package io.opentelemetry.instrumentation.jdbc.datasource; import static io.opentelemetry.instrumentation.testing.junit.db.DbClientMetricsTestUtil.assertDurationMetric; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.DbAttributes.DB_NAMESPACE; import static io.opentelemetry.semconv.DbAttributes.DB_OPERATION_BATCH_SIZE; @@ -170,9 +171,10 @@ void error(int errorCode, String sqlState, String expectedErrorType) throws SQLE ERROR_TYPE, SERVER_ADDRESS); testing.waitAndAssertHistogramPoints( - "io.opentelemetry.jdbc", - "db.client.operation.duration", - metric -> metric.hasUnit("s"), + metric -> + metric + .satisfies(hasScopeName("io.opentelemetry.jdbc")) + .hasName("db.client.operation.duration"), point -> point.hasAttribute(ERROR_TYPE, expectedErrorType)); } diff --git a/instrumentation/jedis/jedis-2.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v2_0/ShardedJedisClientTest.java b/instrumentation/jedis/jedis-2.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v2_0/ShardedJedisClientTest.java index 3eca4bf665f2..60e26a532ed2 100644 --- a/instrumentation/jedis/jedis-2.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v2_0/ShardedJedisClientTest.java +++ b/instrumentation/jedis/jedis-2.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v2_0/ShardedJedisClientTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.jedis.v2_0; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.DbAttributes.DB_NAMESPACE; import static io.opentelemetry.semconv.DbAttributes.DB_OPERATION_NAME; @@ -145,9 +146,10 @@ void commandFromAllShardsUsesConfiguredTarget() { equalTo(NETWORK_PEER_PORT, (long) peerAddress.getPort())))); testing.waitAndAssertHistogramPoints( - "io.opentelemetry.jedis-2.0", - "db.client.operation.duration", - metric -> metric.hasUnit("s"), + metric -> + metric + .satisfies(hasScopeName("io.opentelemetry.jedis-2.0")) + .hasName("db.client.operation.duration"), point -> point.hasAttribute(SERVER_ADDRESS, configuredTarget)); } diff --git a/instrumentation/jedis/jedis-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v3_0/ShardedJedis30ClientTest.java b/instrumentation/jedis/jedis-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v3_0/ShardedJedis30ClientTest.java index 9c792bc1e112..c4c2a45f87e6 100644 --- a/instrumentation/jedis/jedis-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v3_0/ShardedJedis30ClientTest.java +++ b/instrumentation/jedis/jedis-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v3_0/ShardedJedis30ClientTest.java @@ -6,6 +6,7 @@ package io.opentelemetry.javaagent.instrumentation.jedis.v3_0; import static io.opentelemetry.instrumentation.testing.junit.db.DbClientMetricsTestUtil.assertDurationMetric; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; import static io.opentelemetry.semconv.DbAttributes.DB_NAMESPACE; @@ -154,9 +155,10 @@ void commandFromAllShardsUsesConfiguredTarget() { NETWORK_PEER_ADDRESS, NETWORK_PEER_PORT); testing.waitAndAssertHistogramPoints( - "io.opentelemetry.jedis-3.0", - "db.client.operation.duration", - metric -> metric.hasUnit("s"), + metric -> + metric + .satisfies(hasScopeName("io.opentelemetry.jedis-3.0")) + .hasName("db.client.operation.duration"), point -> point .hasAttribute(SERVER_ADDRESS, configuredTarget) diff --git a/instrumentation/jedis/jedis-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v4_0/Jedis40ClientTest.java b/instrumentation/jedis/jedis-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v4_0/Jedis40ClientTest.java index c264802cc188..5a76f17a9297 100644 --- a/instrumentation/jedis/jedis-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v4_0/Jedis40ClientTest.java +++ b/instrumentation/jedis/jedis-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v4_0/Jedis40ClientTest.java @@ -6,6 +6,7 @@ package io.opentelemetry.javaagent.instrumentation.jedis.v4_0; import static io.opentelemetry.instrumentation.testing.junit.db.DbClientMetricsTestUtil.assertDurationMetric; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.DbAttributes.DB_NAMESPACE; import static io.opentelemetry.semconv.DbAttributes.DB_OPERATION_BATCH_SIZE; @@ -155,9 +156,10 @@ void mappedCommandUsesConfiguredTarget() { equalTo(NETWORK_PEER_ADDRESS, ip)))); testing.waitAndAssertHistogramPoints( - "io.opentelemetry.jedis-4.0", - "db.client.operation.duration", - metric -> metric.hasUnit("s"), + metric -> + metric + .satisfies(hasScopeName("io.opentelemetry.jedis-4.0")) + .hasName("db.client.operation.duration"), point -> point .hasAttribute(DB_OPERATION_NAME, "SET") diff --git a/instrumentation/kubernetes-client-7.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/v7_0/KubernetesClientTest.java b/instrumentation/kubernetes-client-7.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/v7_0/KubernetesClientTest.java index 70ba8c16d57d..099da31bc045 100644 --- a/instrumentation/kubernetes-client-7.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/v7_0/KubernetesClientTest.java +++ b/instrumentation/kubernetes-client-7.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/v7_0/KubernetesClientTest.java @@ -7,6 +7,7 @@ import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.instrumentation.testing.junit.service.SemconvServiceStabilityUtil.maybeStablePeerService; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.instrumentation.testing.util.TelemetryDataUtil.orderByRootSpanName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; @@ -105,9 +106,12 @@ void synchronousCall() throws ApiException { equalTo(stringKey("kubernetes-client.name"), experimental("name"))))); testing.waitAndAssertHistogramPoints( - "io.opentelemetry.kubernetes-client-7.0", - "http.client.request.duration", - metric -> metric.hasDescription("Duration of HTTP client requests.").hasUnit("s"), + metric -> + metric + .satisfies(hasScopeName("io.opentelemetry.kubernetes-client-7.0")) + .hasName("http.client.request.duration") + .hasDescription("Duration of HTTP client requests.") + .hasUnit("s"), point -> point.hasSumGreaterThan(0.0)); } diff --git a/instrumentation/kubernetes-client-7.0/javaagent/src/version20Test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/v7_0/KubernetesClientVer20Test.java b/instrumentation/kubernetes-client-7.0/javaagent/src/version20Test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/v7_0/KubernetesClientVer20Test.java index 05952c5b7185..6b3c6217732d 100644 --- a/instrumentation/kubernetes-client-7.0/javaagent/src/version20Test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/v7_0/KubernetesClientVer20Test.java +++ b/instrumentation/kubernetes-client-7.0/javaagent/src/version20Test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/v7_0/KubernetesClientVer20Test.java @@ -7,6 +7,7 @@ import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.instrumentation.testing.junit.service.SemconvServiceStabilityUtil.maybeStablePeerService; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.instrumentation.testing.util.TelemetryDataUtil.orderByRootSpanName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; @@ -109,9 +110,12 @@ void synchronousCall() throws ApiException { equalTo(stringKey("kubernetes-client.name"), experimental("name"))))); testing.waitAndAssertHistogramPoints( - "io.opentelemetry.kubernetes-client-7.0", - "http.client.request.duration", - metric -> metric.hasDescription("Duration of HTTP client requests.").hasUnit("s"), + metric -> + metric + .satisfies(hasScopeName("io.opentelemetry.kubernetes-client-7.0")) + .hasName("http.client.request.duration") + .hasDescription("Duration of HTTP client requests.") + .hasUnit("s"), point -> point.hasSumGreaterThan(0.0)); } diff --git a/instrumentation/lettuce/lettuce-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceReactiveClientTest.java b/instrumentation/lettuce/lettuce-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceReactiveClientTest.java index 126bcc73ef6e..e39f39dbe215 100644 --- a/instrumentation/lettuce/lettuce-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceReactiveClientTest.java +++ b/instrumentation/lettuce/lettuce-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceReactiveClientTest.java @@ -7,6 +7,7 @@ import static io.opentelemetry.api.common.AttributeKey.booleanKey; import static io.opentelemetry.api.common.AttributeKey.longKey; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.javaagent.instrumentation.lettuce.v5_0.ExperimentalHelper.EXPERIMENTAL_ATTRIBUTES_ENABLED; import static io.opentelemetry.javaagent.instrumentation.lettuce.v5_0.ExperimentalHelper.experimental; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; @@ -436,9 +437,10 @@ void testNoResponseCommandFluxCancellationEndsSpanOnce() { trace.hasSpansSatisfyingExactly( span -> span.hasName("DEBUG " + host + ":" + port).hasKind(SpanKind.CLIENT))); testing.waitAndAssertHistogramPoints( - "io.opentelemetry.lettuce-5.0", - "db.client.operation.duration", - metric -> metric.hasUnit("s"), + metric -> + metric + .satisfies(hasScopeName("io.opentelemetry.lettuce-5.0")) + .hasName("db.client.operation.duration"), point -> point.hasCount(1)); }); } diff --git a/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceClientTest.java b/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceClientTest.java index e3daed3c04f9..572713971e99 100644 --- a/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceClientTest.java +++ b/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceClientTest.java @@ -5,7 +5,7 @@ package io.opentelemetry.instrumentation.lettuce.v5_1; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.instrumentation.testing.util.TestLatestDeps.testLatestDeps; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; @@ -102,19 +102,12 @@ protected static void assertCommandErrorEvents(SpanData span) { protected void assertCommandErrorMetric(String errorType) { testing() - .waitAndAssertMetrics( - "io.opentelemetry.lettuce-5.1", - "db.client.operation.duration", - metrics -> - metrics.anySatisfy( - metric -> - assertThat(metric) - .hasUnit("s") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfying( - equalTo(ERROR_TYPE, errorType)))))); + .waitAndAssertHistogramPoints( + metric -> + metric + .satisfies(hasScopeName("io.opentelemetry.lettuce-5.1")) + .hasName("db.client.operation.duration"), + point -> point.hasAttributesSatisfying(equalTo(ERROR_TYPE, errorType))); } protected String spanName(String operation) { diff --git a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractDistributionSummaryHistogramGaugesTest.java b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractDistributionSummaryHistogramGaugesTest.java index 8e762d19dc07..77c6c34f7579 100644 --- a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractDistributionSummaryHistogramGaugesTest.java +++ b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractDistributionSummaryHistogramGaugesTest.java @@ -7,7 +7,7 @@ import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.instrumentation.micrometer.v1_5.AbstractCounterTest.INSTRUMENTATION_NAME; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import io.micrometer.core.instrument.DistributionSummary; @@ -45,21 +45,18 @@ void testMicrometerHistogram() { // then testing() - .waitAndAssertMetrics( - INSTRUMENTATION_NAME, + .waitAndAssertHistogramPoints( metric -> metric + .satisfies(hasScopeName(INSTRUMENTATION_NAME)) .hasName("testSummary") .hasDescription("This is a test distribution summary") - .hasUnit("things") - .satisfies( - hasHistogramPointsSatisfyingExactly( - points -> - points - .hasSum(555.5) - .hasCount(4) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("tag"), "value"))))); + .hasUnit("things"), + points -> + points + .hasSum(555.5) + .hasCount(4) + .hasAttributesSatisfyingExactly(equalTo(stringKey("tag"), "value"))); testing() .waitAndAssertMetrics( INSTRUMENTATION_NAME, @@ -112,21 +109,18 @@ void testMicrometerPercentiles() { // then testing() - .waitAndAssertMetrics( - INSTRUMENTATION_NAME, + .waitAndAssertHistogramPoints( metric -> metric + .satisfies(hasScopeName(INSTRUMENTATION_NAME)) .hasName("testSummary") .hasDescription("This is a test distribution summary") - .hasUnit("things") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(150) - .hasCount(2) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("tag"), "value"))))); + .hasUnit("things"), + point -> + point + .hasSum(150) + .hasCount(2) + .hasAttributesSatisfyingExactly(equalTo(stringKey("tag"), "value"))); testing() .waitAndAssertMetrics( INSTRUMENTATION_NAME, diff --git a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractDistributionSummaryTest.java b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractDistributionSummaryTest.java index 64e9a0c3578d..53cb56167ae2 100644 --- a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractDistributionSummaryTest.java +++ b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractDistributionSummaryTest.java @@ -7,7 +7,7 @@ import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.instrumentation.micrometer.v1_5.AbstractCounterTest.INSTRUMENTATION_NAME; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import io.micrometer.core.instrument.DistributionSummary; @@ -45,22 +45,19 @@ void testMicrometerDistributionSummary() { // then testing() - .waitAndAssertMetrics( - INSTRUMENTATION_NAME, + .waitAndAssertHistogramPoints( metric -> metric + .satisfies(hasScopeName(INSTRUMENTATION_NAME)) .hasName("testSummary") .hasDescription("This is a test distribution summary") - .hasUnit("things") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(7) - .hasCount(3) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("tag"), "value")) - .hasBucketBoundaries(NO_BUCKETS)))); + .hasUnit("things"), + point -> + point + .hasSum(7) + .hasCount(3) + .hasAttributesSatisfyingExactly(equalTo(stringKey("tag"), "value")) + .hasBucketBoundaries(NO_BUCKETS)); // micrometer gauge histogram is not emitted testing() @@ -74,9 +71,10 @@ void testMicrometerDistributionSummary() { // The synchronous histogram returns its previous value after removal. testing() .waitAndAssertHistogramPoints( - INSTRUMENTATION_NAME, - "testSummary", - metric -> metric.hasUnit("things"), + metric -> + metric + .satisfies(hasScopeName(INSTRUMENTATION_NAME)) + .hasName("testSummary"), point -> point .hasSum(7) @@ -104,23 +102,20 @@ void testMicrometerDistributionSummaryWithCustomBuckets() { // then testing() - .waitAndAssertMetrics( - INSTRUMENTATION_NAME, + .waitAndAssertHistogramPoints( metric -> metric + .satisfies(hasScopeName(INSTRUMENTATION_NAME)) .hasName("testSummaryWithCustomBuckets") .hasDescription("This is a test distribution summary") - .hasUnit("things") - .satisfies( - hasHistogramPointsSatisfyingExactly( - points -> - points - .hasSum(555.5) - .hasCount(4) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("tag"), "value")) - .hasBucketBoundaries(1, 10, 100, 1000) - .hasBucketCounts(1, 1, 1, 1, 0)))); + .hasUnit("things"), + points -> + points + .hasSum(555.5) + .hasCount(4) + .hasAttributesSatisfyingExactly(equalTo(stringKey("tag"), "value")) + .hasBucketBoundaries(1, 10, 100, 1000) + .hasBucketCounts(1, 1, 1, 1, 0)); // micrometer gauge histogram is not emitted testing() diff --git a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractNamingConventionTest.java b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractNamingConventionTest.java index 64be5b32fdf4..91605cf56ed2 100644 --- a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractNamingConventionTest.java +++ b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractNamingConventionTest.java @@ -7,6 +7,7 @@ import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.instrumentation.micrometer.v1_5.AbstractCounterTest.INSTRUMENTATION_NAME; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static java.util.Collections.singletonList; import static java.util.concurrent.TimeUnit.SECONDS; @@ -86,9 +87,8 @@ void renameDistributionSummary() { // then testing() .waitAndAssertHistogramPoints( - INSTRUMENTATION_NAME, - "test.renamedSummary", - metric -> metric.hasUnit(""), + metric -> + metric.satisfies(hasScopeName(INSTRUMENTATION_NAME)).hasName("test.renamedSummary"), point -> point.hasAttributesSatisfyingExactly(equalTo(stringKey("test.tag"), "test.value"))); } @@ -238,9 +238,8 @@ void renameTimer() { // then testing() .waitAndAssertHistogramPoints( - INSTRUMENTATION_NAME, - "test.renamedTimer", - metric -> metric.hasUnit("s"), + metric -> + metric.satisfies(hasScopeName(INSTRUMENTATION_NAME)).hasName("test.renamedTimer"), point -> point.hasAttributesSatisfyingExactly(equalTo(stringKey("test.tag"), "test.value"))); } diff --git a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractPrometheusModeTest.java b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractPrometheusModeTest.java index 6418ec78b57a..2e09f7d51b21 100644 --- a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractPrometheusModeTest.java +++ b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractPrometheusModeTest.java @@ -7,7 +7,7 @@ import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.instrumentation.micrometer.v1_5.AbstractCounterTest.INSTRUMENTATION_NAME; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static java.util.Collections.singletonList; @@ -85,21 +85,18 @@ void testDistributionSummary() { // then testing() - .waitAndAssertMetrics( - INSTRUMENTATION_NAME, + .waitAndAssertHistogramPoints( metric -> metric + .satisfies(hasScopeName(INSTRUMENTATION_NAME)) .hasName("testPrometheusSummary.items") .hasDescription("This is a test summary") - .hasUnit("items") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(54) - .hasCount(2) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("tag"), "value"))))); + .hasUnit("items"), + point -> + point + .hasSum(54) + .hasCount(2) + .hasAttributesSatisfyingExactly(equalTo(stringKey("tag"), "value"))); } @Test @@ -315,21 +312,18 @@ void testTimer() { // then testing() - .waitAndAssertMetrics( - INSTRUMENTATION_NAME, + .waitAndAssertHistogramPoints( metric -> metric + .satisfies(hasScopeName(INSTRUMENTATION_NAME)) .hasName("testPrometheusTimer.seconds") .hasDescription("This is a test timer") - .hasUnit("s") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(16.789) - .hasCount(3) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("tag"), "value"))))); + .hasUnit("s"), + point -> + point + .hasSum(16.789) + .hasCount(3) + .hasAttributesSatisfyingExactly(equalTo(stringKey("tag"), "value"))); } @Test @@ -386,27 +380,23 @@ void testTimerCustomBucketBoundaryFormatting() { // then testing() - .waitAndAssertMetrics( - INSTRUMENTATION_NAME, + .waitAndAssertHistogramPoints( metric -> metric + .satisfies(hasScopeName(INSTRUMENTATION_NAME)) .hasName("testPrometheusTimerBoundary.seconds") .hasDescription("This is a test timer") - .hasUnit("s") + .hasUnit("s"), + point -> + point + .hasSum(0.1) + .hasCount(1) + .hasAttributesSatisfyingExactly(equalTo(stringKey("tag"), "value")) .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(0.1) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("tag"), "value")) - .satisfies( - pointData -> { - assertThat(pointData.getBoundaries()).hasSize(1); - assertThat( - Double.toString(pointData.getBoundaries().get(0))) - .isEqualTo("0.3"); - })))); + pointData -> { + assertThat(pointData.getBoundaries()).hasSize(1); + assertThat(Double.toString(pointData.getBoundaries().get(0))) + .isEqualTo("0.3"); + })); } } diff --git a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerHistogramGaugesTest.java b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerHistogramGaugesTest.java index fa3c140f5556..ebd7aef985eb 100644 --- a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerHistogramGaugesTest.java +++ b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerHistogramGaugesTest.java @@ -7,7 +7,7 @@ import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.instrumentation.micrometer.v1_5.AbstractCounterTest.INSTRUMENTATION_NAME; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static java.util.concurrent.TimeUnit.MILLISECONDS; import static java.util.concurrent.TimeUnit.SECONDS; @@ -46,21 +46,18 @@ void testMicrometerHistogram() { // then testing() - .waitAndAssertMetrics( - INSTRUMENTATION_NAME, + .waitAndAssertHistogramPoints( metric -> metric + .satisfies(hasScopeName(INSTRUMENTATION_NAME)) .hasName("testTimer") .hasDescription("This is a test timer") - .hasUnit("s") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(555.5) - .hasCount(4) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("tag"), "value"))))); + .hasUnit("s"), + point -> + point + .hasSum(555.5) + .hasCount(4) + .hasAttributesSatisfyingExactly(equalTo(stringKey("tag"), "value"))); testing() .waitAndAssertMetrics( INSTRUMENTATION_NAME, @@ -112,21 +109,18 @@ void testMicrometerPercentiles() { // then testing() - .waitAndAssertMetrics( - INSTRUMENTATION_NAME, + .waitAndAssertHistogramPoints( metric -> metric + .satisfies(hasScopeName(INSTRUMENTATION_NAME)) .hasName("testTimer") .hasDescription("This is a test timer") - .hasUnit("s") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(0.55) - .hasCount(2) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("tag"), "value"))))); + .hasUnit("s"), + point -> + point + .hasSum(0.55) + .hasCount(2) + .hasAttributesSatisfyingExactly(equalTo(stringKey("tag"), "value"))); testing() .waitAndAssertMetrics( INSTRUMENTATION_NAME, diff --git a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerMillisecondsTest.java b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerMillisecondsTest.java index 28c69aa332d0..7b04970297f9 100644 --- a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerMillisecondsTest.java +++ b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerMillisecondsTest.java @@ -7,7 +7,7 @@ import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.instrumentation.micrometer.v1_5.AbstractCounterTest.INSTRUMENTATION_NAME; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static java.util.concurrent.TimeUnit.MILLISECONDS; import static java.util.concurrent.TimeUnit.SECONDS; @@ -39,21 +39,18 @@ void testTimerWithBaseUnitMilliseconds() { // then testing() - .waitAndAssertMetrics( - INSTRUMENTATION_NAME, + .waitAndAssertHistogramPoints( metric -> metric + .satisfies(hasScopeName(INSTRUMENTATION_NAME)) .hasName("testTimerMilliseconds") .hasDescription("This is a test timer") - .hasUnit("ms") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(23_345) - .hasCount(3) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("tag"), "value"))))); + .hasUnit("ms"), + point -> + point + .hasSum(23_345) + .hasCount(3) + .hasAttributesSatisfyingExactly(equalTo(stringKey("tag"), "value"))); // when Metrics.globalRegistry.remove(timer); diff --git a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerTest.java b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerTest.java index 2fdd3af42c13..952e6a362724 100644 --- a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerTest.java +++ b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerTest.java @@ -7,7 +7,7 @@ import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.instrumentation.micrometer.v1_5.AbstractCounterTest.INSTRUMENTATION_NAME; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static java.util.concurrent.TimeUnit.MILLISECONDS; @@ -46,22 +46,19 @@ void testTimer() { // then testing() - .waitAndAssertMetrics( - INSTRUMENTATION_NAME, + .waitAndAssertHistogramPoints( metric -> metric + .satisfies(hasScopeName(INSTRUMENTATION_NAME)) .hasName("testTimer") .hasDescription("This is a test timer") - .hasUnit("s") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(42) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("tag"), "value")) - .hasBucketBoundaries(NO_BUCKETS)))); + .hasUnit("s"), + point -> + point + .hasSum(42) + .hasCount(1) + .hasAttributesSatisfyingExactly(equalTo(stringKey("tag"), "value")) + .hasBucketBoundaries(NO_BUCKETS)); // micrometer gauge histogram is not emitted testing() @@ -88,19 +85,13 @@ void testNanoPrecision() { // then testing() - .waitAndAssertMetrics( - INSTRUMENTATION_NAME, + .waitAndAssertHistogramPoints( metric -> metric + .satisfies(hasScopeName(INSTRUMENTATION_NAME)) .hasName("testNanoTimer") - .hasUnit("s") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(0.001234) - .hasCount(1) - .hasAttributes(Attributes.empty())))); + .hasUnit("s"), + point -> point.hasSum(0.001234).hasCount(1).hasAttributes(Attributes.empty())); } @Test @@ -126,23 +117,20 @@ void testMicrometerTimerWithCustomBuckets() { // then testing() - .waitAndAssertMetrics( - INSTRUMENTATION_NAME, + .waitAndAssertHistogramPoints( metric -> metric + .satisfies(hasScopeName(INSTRUMENTATION_NAME)) .hasName("testTimerWithCustomBuckets") .hasDescription("This is a test timer") - .hasUnit("s") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(555.5) - .hasCount(4) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("tag"), "value")) - .satisfies(hasBucketBoundaries(1, 10, 100, 1_000)) - .hasBucketCounts(1, 1, 1, 1, 0)))); + .hasUnit("s"), + point -> + point + .hasSum(555.5) + .hasCount(4) + .hasAttributesSatisfyingExactly(equalTo(stringKey("tag"), "value")) + .satisfies(hasBucketBoundaries(1, 10, 100, 1_000)) + .hasBucketCounts(1, 1, 1, 1, 0)); } private static ThrowingConsumer hasBucketBoundaries(double... buckets) { diff --git a/instrumentation/mongo/mongo-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/mongo/v4_0/MongoConfiguredTargetTest.java b/instrumentation/mongo/mongo-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/mongo/v4_0/MongoConfiguredTargetTest.java index 52dde08863f0..9791f35709ac 100644 --- a/instrumentation/mongo/mongo-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/mongo/v4_0/MongoConfiguredTargetTest.java +++ b/instrumentation/mongo/mongo-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/mongo/v4_0/MongoConfiguredTargetTest.java @@ -6,6 +6,7 @@ package io.opentelemetry.javaagent.instrumentation.mongo.v4_0; import static io.opentelemetry.instrumentation.testing.junit.db.DbClientMetricsTestUtil.assertDurationMetric; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.semconv.DbAttributes.DB_COLLECTION_NAME; import static io.opentelemetry.semconv.DbAttributes.DB_NAMESPACE; import static io.opentelemetry.semconv.DbAttributes.DB_OPERATION_NAME; @@ -92,9 +93,10 @@ void severalSeedsAreTheOperationDurationLogicalServer() { DB_COLLECTION_NAME, SERVER_ADDRESS); testing.waitAndAssertHistogramPoints( - "io.opentelemetry.mongo-4.0", - "db.client.operation.duration", - metric -> metric.hasUnit("s"), + metric -> + metric + .satisfies(hasScopeName("io.opentelemetry.mongo-4.0")) + .hasName("db.client.operation.duration"), point -> point.hasAttribute(SERVER_ADDRESS, "db1.example:27017,db2.example:27018")); } } diff --git a/instrumentation/nats/nats-2.17/testing/src/main/java/io/opentelemetry/instrumentation/nats/v2_17/AbstractNatsTest.java b/instrumentation/nats/nats-2.17/testing/src/main/java/io/opentelemetry/instrumentation/nats/v2_17/AbstractNatsTest.java index 22d0bd683039..efbc33c64d91 100644 --- a/instrumentation/nats/nats-2.17/testing/src/main/java/io/opentelemetry/instrumentation/nats/v2_17/AbstractNatsTest.java +++ b/instrumentation/nats/nats-2.17/testing/src/main/java/io/opentelemetry/instrumentation/nats/v2_17/AbstractNatsTest.java @@ -5,7 +5,7 @@ package io.opentelemetry.instrumentation.nats.v2_17; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.ErrorAttributes.ERROR_TYPE; @@ -45,28 +45,24 @@ abstract class AbstractNatsTest { void assertProducerMetrics(String operationName, String destination, String errorType) { testing() - .waitAndAssertMetrics( - INSTRUMENTATION_NAME, - "messaging.client.operation.duration", - metrics -> - metrics.satisfiesExactly( - metric -> - assertThat(metric) - .hasUnit("s") - .hasDescription( - "Duration of messaging operation initiated by a producer or consumer client.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, operationName), - equalTo(MESSAGING_SYSTEM, "nats"), - equalTo(ERROR_TYPE, errorType), - equalTo(MESSAGING_DESTINATION_NAME, destination), - equalTo(MESSAGING_OPERATION_TYPE, "send")) - .hasBucketBoundaries(DURATION_BUCKETS))))); + .waitAndAssertHistogramPoints( + metric -> + metric + .satisfies(hasScopeName(INSTRUMENTATION_NAME)) + .hasName("messaging.client.operation.duration") + .hasDescription( + "Duration of messaging operation initiated by a producer or consumer client.") + .hasUnit("s"), + point -> + point + .hasSumGreaterThan(0) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, operationName), + equalTo(MESSAGING_SYSTEM, "nats"), + equalTo(ERROR_TYPE, errorType), + equalTo(MESSAGING_DESTINATION_NAME, destination), + equalTo(MESSAGING_OPERATION_TYPE, "send")) + .hasBucketBoundaries(DURATION_BUCKETS)); testing() .waitAndAssertMetrics( INSTRUMENTATION_NAME, @@ -97,26 +93,22 @@ void assertProducerMetrics(String operationName, String destination, String erro void assertProcessMetrics(String destination, String errorType) { testing() - .waitAndAssertMetrics( - INSTRUMENTATION_NAME, - "messaging.process.duration", - metrics -> - metrics.satisfiesExactly( - metric -> - assertThat(metric) - .hasUnit("s") - .hasDescription("Duration of processing operation.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "process"), - equalTo(MESSAGING_SYSTEM, "nats"), - equalTo(ERROR_TYPE, errorType), - equalTo(MESSAGING_DESTINATION_NAME, destination)) - .hasBucketBoundaries(DURATION_BUCKETS))))); + .waitAndAssertHistogramPoints( + metric -> + metric + .satisfies(hasScopeName(INSTRUMENTATION_NAME)) + .hasName("messaging.process.duration") + .hasDescription("Duration of processing operation.") + .hasUnit("s"), + point -> + point + .hasSumGreaterThan(0) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "process"), + equalTo(MESSAGING_SYSTEM, "nats"), + equalTo(ERROR_TYPE, errorType), + equalTo(MESSAGING_DESTINATION_NAME, destination)) + .hasBucketBoundaries(DURATION_BUCKETS)); testing() .waitAndAssertMetrics( INSTRUMENTATION_NAME, diff --git a/instrumentation/openai/openai-java-1.1/library/src/test/java/io/opentelemetry/instrumentation/openai/v1_1/ChatTest.java b/instrumentation/openai/openai-java-1.1/library/src/test/java/io/opentelemetry/instrumentation/openai/v1_1/ChatTest.java index 306d5253fccc..3a4f23642e8d 100644 --- a/instrumentation/openai/openai-java-1.1/library/src/test/java/io/opentelemetry/instrumentation/openai/v1_1/ChatTest.java +++ b/instrumentation/openai/openai-java-1.1/library/src/test/java/io/opentelemetry/instrumentation/openai/v1_1/ChatTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.instrumentation.openai.v1_1; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; @@ -132,7 +133,6 @@ void basicNoCaptureContent() { metric -> metric .hasName("gen_ai.client.operation.duration") - .hasUnit("s") .satisfies( hasHistogramPointsSatisfyingExactly( point -> @@ -146,7 +146,6 @@ void basicNoCaptureContent() { metric -> metric .hasName("gen_ai.client.token.usage") - .hasUnit("{token}") .satisfies( hasHistogramPointsSatisfyingExactly( point -> @@ -232,7 +231,6 @@ void multipleChoicesNoCaptureContent() { metric -> metric .hasName("gen_ai.client.operation.duration") - .hasUnit("s") .satisfies( hasHistogramPointsSatisfyingExactly( point -> @@ -246,7 +244,6 @@ void multipleChoicesNoCaptureContent() { metric -> metric .hasName("gen_ai.client.token.usage") - .hasUnit("{token}") .satisfies( hasHistogramPointsSatisfyingExactly( point -> @@ -361,7 +358,6 @@ void toolCallsNoCaptureContent() { metric -> metric .hasName("gen_ai.client.operation.duration") - .hasUnit("s") .satisfies( hasHistogramPointsSatisfyingExactly( point -> @@ -375,7 +371,6 @@ void toolCallsNoCaptureContent() { metric -> metric .hasName("gen_ai.client.token.usage") - .hasUnit("{token}") .satisfies( hasHistogramPointsSatisfyingExactly( point -> @@ -483,7 +478,6 @@ void toolCallsNoCaptureContent() { metric -> metric .hasName("gen_ai.client.operation.duration") - .hasUnit("s") .satisfies( hasHistogramPointsSatisfyingExactly( point -> @@ -497,7 +491,6 @@ void toolCallsNoCaptureContent() { metric -> metric .hasName("gen_ai.client.token.usage") - .hasUnit("{token}") .satisfies( hasHistogramPointsSatisfyingExactly( point -> @@ -628,9 +621,10 @@ void streamNoCaptureContent() { getTesting() .waitAndAssertHistogramPoints( - INSTRUMENTATION_NAME, - "gen_ai.client.operation.duration", - metric -> metric.hasUnit("s"), + metric -> + metric + .satisfies(hasScopeName(INSTRUMENTATION_NAME)) + .hasName("gen_ai.client.operation.duration"), point -> point .hasSumGreaterThan(0.0) @@ -719,9 +713,10 @@ void streamMultipleChoicesNoCaptureContent() { getTesting() .waitAndAssertHistogramPoints( - INSTRUMENTATION_NAME, - "gen_ai.client.operation.duration", - metric -> metric.hasUnit("s"), + metric -> + metric + .satisfies(hasScopeName(INSTRUMENTATION_NAME)) + .hasName("gen_ai.client.operation.duration"), point -> point .hasSumGreaterThan(0.0) @@ -816,9 +811,10 @@ void streamToolCallsNoCaptureContent() { getTesting() .waitAndAssertHistogramPoints( - INSTRUMENTATION_NAME, - "gen_ai.client.operation.duration", - metric -> metric.hasUnit("s"), + metric -> + metric + .satisfies(hasScopeName(INSTRUMENTATION_NAME)) + .hasName("gen_ai.client.operation.duration"), point -> point .hasSumGreaterThan(0.0) @@ -913,9 +909,10 @@ void streamToolCallsNoCaptureContent() { getTesting() .waitAndAssertHistogramPoints( - INSTRUMENTATION_NAME, - "gen_ai.client.operation.duration", - metric -> metric.hasUnit("s"), + metric -> + metric + .satisfies(hasScopeName(INSTRUMENTATION_NAME)) + .hasName("gen_ai.client.operation.duration"), point -> point .hasSumGreaterThan(0.0) diff --git a/instrumentation/openai/openai-java-1.1/testing/src/main/java/io/opentelemetry/instrumentation/openai/v1_1/AbstractChatTest.java b/instrumentation/openai/openai-java-1.1/testing/src/main/java/io/opentelemetry/instrumentation/openai/v1_1/AbstractChatTest.java index f601b58a99ab..593315b6588d 100644 --- a/instrumentation/openai/openai-java-1.1/testing/src/main/java/io/opentelemetry/instrumentation/openai/v1_1/AbstractChatTest.java +++ b/instrumentation/openai/openai-java-1.1/testing/src/main/java/io/opentelemetry/instrumentation/openai/v1_1/AbstractChatTest.java @@ -6,6 +6,7 @@ package io.opentelemetry.instrumentation.openai.v1_1; import static io.opentelemetry.instrumentation.api.internal.SemconvExceptionSignal.emitExceptionAsSpanEvents; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; @@ -211,7 +212,6 @@ void basic() { metric -> metric .hasName("gen_ai.client.operation.duration") - .hasUnit("s") .satisfies( hasHistogramPointsSatisfyingExactly( point -> @@ -225,7 +225,6 @@ void basic() { metric -> metric .hasName("gen_ai.client.token.usage") - .hasUnit("{token}") .satisfies( hasHistogramPointsSatisfyingExactly( point -> @@ -376,7 +375,6 @@ void allTheClientOptions() { metric -> metric .hasName("gen_ai.client.operation.duration") - .hasUnit("s") .satisfies( hasHistogramPointsSatisfyingExactly( point -> @@ -390,7 +388,6 @@ void allTheClientOptions() { metric -> metric .hasName("gen_ai.client.token.usage") - .hasUnit("{token}") .satisfies( hasHistogramPointsSatisfyingExactly( point -> @@ -478,7 +475,6 @@ void multipleChoices() { metric -> metric .hasName("gen_ai.client.operation.duration") - .hasUnit("s") .satisfies( hasHistogramPointsSatisfyingExactly( point -> @@ -492,7 +488,6 @@ void multipleChoices() { metric -> metric .hasName("gen_ai.client.token.usage") - .hasUnit("{token}") .satisfies( hasHistogramPointsSatisfyingExactly( point -> @@ -610,7 +605,6 @@ void toolCalls() { metric -> metric .hasName("gen_ai.client.operation.duration") - .hasUnit("s") .satisfies( hasHistogramPointsSatisfyingExactly( point -> @@ -624,7 +618,6 @@ void toolCalls() { metric -> metric .hasName("gen_ai.client.token.usage") - .hasUnit("{token}") .satisfies( hasHistogramPointsSatisfyingExactly( point -> @@ -759,7 +752,6 @@ void toolCalls() { metric -> metric .hasName("gen_ai.client.operation.duration") - .hasUnit("s") .satisfies( hasHistogramPointsSatisfyingExactly( point -> @@ -773,7 +765,6 @@ void toolCalls() { metric -> metric .hasName("gen_ai.client.token.usage") - .hasUnit("{token}") .satisfies( hasHistogramPointsSatisfyingExactly( point -> @@ -925,22 +916,19 @@ void connectionError() { equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL))))); getTesting() - .waitAndAssertMetrics( - INSTRUMENTATION_NAME, + .waitAndAssertHistogramPoints( metric -> metric - .hasName("gen_ai.client.operation.duration") - .hasUnit("s") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(ERROR_TYPE, OpenAIIoException.class.getName()), - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL))))); + .satisfies(hasScopeName(INSTRUMENTATION_NAME)) + .hasName("gen_ai.client.operation.duration"), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(ERROR_TYPE, OpenAIIoException.class.getName()), + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -993,23 +981,19 @@ void stream() { val -> val.containsExactly("stop")))))); getTesting() - .waitAndAssertMetrics( - INSTRUMENTATION_NAME, + .waitAndAssertHistogramPoints( metric -> metric - .hasName("gen_ai.client.operation.duration") - .hasUnit("s") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL))))); + .satisfies(hasScopeName(INSTRUMENTATION_NAME)) + .hasName("gen_ai.client.operation.duration"), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -1124,7 +1108,6 @@ void streamIncludeUsage() { metric -> metric .hasName("gen_ai.client.operation.duration") - .hasUnit("s") .satisfies( hasHistogramPointsSatisfyingExactly( point -> @@ -1138,7 +1121,6 @@ void streamIncludeUsage() { metric -> metric .hasName("gen_ai.client.token.usage") - .hasUnit("{token}") .satisfies( hasHistogramPointsSatisfyingExactly( point -> @@ -1238,23 +1220,19 @@ void streamMultipleChoices() { val -> val.containsExactly("stop", "stop")))))); getTesting() - .waitAndAssertMetrics( - INSTRUMENTATION_NAME, + .waitAndAssertHistogramPoints( metric -> metric - .hasName("gen_ai.client.operation.duration") - .hasUnit("s") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL))))); + .satisfies(hasScopeName(INSTRUMENTATION_NAME)) + .hasName("gen_ai.client.operation.duration"), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -1392,23 +1370,19 @@ void streamToolCalls() { val -> val.containsExactly("tool_calls")))))); getTesting() - .waitAndAssertMetrics( - INSTRUMENTATION_NAME, + .waitAndAssertHistogramPoints( metric -> metric - .hasName("gen_ai.client.operation.duration") - .hasUnit("s") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL))))); + .satisfies(hasScopeName(INSTRUMENTATION_NAME)) + .hasName("gen_ai.client.operation.duration"), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -1524,23 +1498,19 @@ void streamToolCalls() { val -> val.containsExactly("stop")))))); getTesting() - .waitAndAssertMetrics( - INSTRUMENTATION_NAME, + .waitAndAssertHistogramPoints( metric -> metric - .hasName("gen_ai.client.operation.duration") - .hasUnit("s") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL))))); + .satisfies(hasScopeName(INSTRUMENTATION_NAME)) + .hasName("gen_ai.client.operation.duration"), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL))); SpanContext spanCtx1 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -1673,22 +1643,19 @@ void streamConnectionError() { equalTo(GEN_AI_REQUEST_STREAM, true))))); getTesting() - .waitAndAssertMetrics( - INSTRUMENTATION_NAME, + .waitAndAssertHistogramPoints( metric -> metric - .hasName("gen_ai.client.operation.duration") - .hasUnit("s") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(ERROR_TYPE, OpenAIIoException.class.getName()), - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL))))); + .satisfies(hasScopeName(INSTRUMENTATION_NAME)) + .hasName("gen_ai.client.operation.duration"), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(ERROR_TYPE, OpenAIIoException.class.getName()), + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); diff --git a/instrumentation/openai/openai-java-1.1/testing/src/main/java/io/opentelemetry/instrumentation/openai/v1_1/AbstractEmbeddingsTest.java b/instrumentation/openai/openai-java-1.1/testing/src/main/java/io/opentelemetry/instrumentation/openai/v1_1/AbstractEmbeddingsTest.java index bf64eb802dca..9a64c6db84c9 100644 --- a/instrumentation/openai/openai-java-1.1/testing/src/main/java/io/opentelemetry/instrumentation/openai/v1_1/AbstractEmbeddingsTest.java +++ b/instrumentation/openai/openai-java-1.1/testing/src/main/java/io/opentelemetry/instrumentation/openai/v1_1/AbstractEmbeddingsTest.java @@ -6,6 +6,7 @@ package io.opentelemetry.instrumentation.openai.v1_1; import static io.opentelemetry.instrumentation.api.internal.SemconvExceptionSignal.emitExceptionAsSpanEvents; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; @@ -118,7 +119,6 @@ void basic() { metric -> metric .hasName("gen_ai.client.operation.duration") - .hasUnit("s") .satisfies( hasHistogramPointsSatisfyingExactly( point -> @@ -132,7 +132,6 @@ void basic() { metric -> metric .hasName("gen_ai.client.token.usage") - .hasUnit("{token}") .satisfies( hasHistogramPointsSatisfyingExactly( point -> @@ -183,7 +182,6 @@ GEN_AI_REQUEST_ENCODING_FORMATS, singletonList("base64")), metric -> metric .hasName("gen_ai.client.operation.duration") - .hasUnit("s") .satisfies( hasHistogramPointsSatisfyingExactly( point -> @@ -197,7 +195,6 @@ GEN_AI_REQUEST_ENCODING_FORMATS, singletonList("base64")), metric -> metric .hasName("gen_ai.client.token.usage") - .hasUnit("{token}") .satisfies( hasHistogramPointsSatisfyingExactly( point -> @@ -263,9 +260,10 @@ void connectionError() { getTesting() .waitAndAssertHistogramPoints( - INSTRUMENTATION_NAME, - "gen_ai.client.operation.duration", - metric -> metric.hasUnit("s"), + metric -> + metric + .satisfies(hasScopeName(INSTRUMENTATION_NAME)) + .hasName("gen_ai.client.operation.duration"), point -> point .hasSumGreaterThan(0.0) diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/MeterTest.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/MeterTest.java index bf93ef69aef2..b399d1a4a74a 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/MeterTest.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/MeterTest.java @@ -6,6 +6,7 @@ package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics; import static io.opentelemetry.api.common.AttributeKey.stringKey; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import io.opentelemetry.api.common.Attributes; @@ -338,17 +339,17 @@ void longHistogram() { instrument.record(6, Attributes.of(stringKey("q"), "r")); testing.waitAndAssertHistogramPoints( - instrumentationName, - "test", metric -> metric + .satisfies(hasScopeName(instrumentationName)) + .hasName("test") .hasDescription("d") - .hasUnit("u") .hasInstrumentationScope( InstrumentationScopeInfo.builder(instrumentationName) .setVersion("1.2.3") .setSchemaUrl("http://schema.org") - .build()), + .build()) + .hasUnit("u"), point -> point.hasSum(11.0).hasAttributesSatisfyingExactly(equalTo(stringKey("q"), "r"))); } @@ -361,17 +362,17 @@ void doubleHistogram() { instrument.record(6.6, Attributes.of(stringKey("q"), "r")); testing.waitAndAssertHistogramPoints( - instrumentationName, - "test", metric -> metric + .satisfies(hasScopeName(instrumentationName)) + .hasName("test") .hasDescription("d") - .hasUnit("u") .hasInstrumentationScope( InstrumentationScopeInfo.builder(instrumentationName) .setVersion("1.2.3") .setSchemaUrl("http://schema.org") - .build()), + .build()) + .hasUnit("u"), point -> point.hasSum(12.1).hasAttributesSatisfyingExactly(equalTo(stringKey("q"), "r"))); } diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.31/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_31/metrics/MeterTest.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.31/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_31/metrics/MeterTest.java index 39a6f79d8c87..41a32cb97149 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.31/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_31/metrics/MeterTest.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.31/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_31/metrics/MeterTest.java @@ -6,7 +6,7 @@ package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_31.metrics; import static io.opentelemetry.api.common.AttributeKey.stringKey; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static java.util.Collections.singletonList; @@ -226,10 +226,10 @@ void longHistogram() { instrument.record(5, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); instrument.record(6, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); - testing.waitAndAssertMetrics( - instrumentationName, + testing.waitAndAssertHistogramPoints( metric -> metric + .satisfies(hasScopeName(instrumentationName)) .hasName("test") .hasDescription("d") .hasUnit("u") @@ -237,15 +237,12 @@ void longHistogram() { InstrumentationScopeInfo.builder(instrumentationName) .setVersion("1.2.3") .setSchemaUrl("http://schema.org") - .build()) - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(11.0) - .hasBucketBoundaries(10.0) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("test"), "test"))))); + .build()), + point -> + point + .hasSum(11.0) + .hasBucketBoundaries(10.0) + .hasAttributesSatisfyingExactly(equalTo(stringKey("test"), "test"))); } @Test @@ -262,10 +259,10 @@ void doubleHistogram() { instrument.record(5.5, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); instrument.record(6.6, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); - testing.waitAndAssertMetrics( - instrumentationName, + testing.waitAndAssertHistogramPoints( metric -> metric + .satisfies(hasScopeName(instrumentationName)) .hasName("test") .hasDescription("d") .hasUnit("u") @@ -273,15 +270,12 @@ void doubleHistogram() { InstrumentationScopeInfo.builder(instrumentationName) .setVersion("1.2.3") .setSchemaUrl("http://schema.org") - .build()) - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(12.1) - .hasBucketBoundaries(10.0) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("test"), "test"))))); + .build()), + point -> + point + .hasSum(12.1) + .hasBucketBoundaries(10.0) + .hasAttributesSatisfyingExactly(equalTo(stringKey("test"), "test"))); } @Test diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/incubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/incubator/metrics/MeterTest.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/incubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/incubator/metrics/MeterTest.java index 3f80bdc5e295..79c72f60a161 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/incubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/incubator/metrics/MeterTest.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/incubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/incubator/metrics/MeterTest.java @@ -6,7 +6,7 @@ package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_32.incubator.metrics; import static io.opentelemetry.api.common.AttributeKey.stringKey; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static java.util.Collections.singletonList; @@ -226,10 +226,10 @@ void longHistogram() { instrument.record(5, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); instrument.record(6, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); - testing.waitAndAssertMetrics( - instrumentationName, + testing.waitAndAssertHistogramPoints( metric -> metric + .satisfies(hasScopeName(instrumentationName)) .hasName("test") .hasDescription("d") .hasUnit("u") @@ -237,15 +237,12 @@ void longHistogram() { InstrumentationScopeInfo.builder(instrumentationName) .setVersion("1.2.3") .setSchemaUrl("http://schema.org") - .build()) - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(11.0) - .hasBucketBoundaries(10.0) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("test"), "test"))))); + .build()), + point -> + point + .hasSum(11.0) + .hasBucketBoundaries(10.0) + .hasAttributesSatisfyingExactly(equalTo(stringKey("test"), "test"))); } @Test @@ -262,10 +259,10 @@ void doubleHistogram() { instrument.record(5.5, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); instrument.record(6.6, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); - testing.waitAndAssertMetrics( - instrumentationName, + testing.waitAndAssertHistogramPoints( metric -> metric + .satisfies(hasScopeName(instrumentationName)) .hasName("test") .hasDescription("d") .hasUnit("u") @@ -273,15 +270,12 @@ void doubleHistogram() { InstrumentationScopeInfo.builder(instrumentationName) .setVersion("1.2.3") .setSchemaUrl("http://schema.org") - .build()) - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(12.1) - .hasBucketBoundaries(10.0) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("test"), "test"))))); + .build()), + point -> + point + .hasSum(12.1) + .hasBucketBoundaries(10.0) + .hasAttributesSatisfyingExactly(equalTo(stringKey("test"), "test"))); } @Test diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/metrics/MeterTest.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/metrics/MeterTest.java index 8bdeb251e218..f5e255b1c7b8 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/metrics/MeterTest.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/metrics/MeterTest.java @@ -6,7 +6,7 @@ package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_32.metrics; import static io.opentelemetry.api.common.AttributeKey.stringKey; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static java.util.Collections.singletonList; import static org.assertj.core.api.Assertions.assertThatThrownBy; @@ -65,10 +65,10 @@ void longHistogram() { instrument.record(5, Attributes.of(stringKey("test"), "test")); instrument.record(6, Attributes.of(stringKey("test"), "test")); - testing.waitAndAssertMetrics( - instrumentationName, + testing.waitAndAssertHistogramPoints( metric -> metric + .satisfies(hasScopeName(instrumentationName)) .hasName("test") .hasDescription("d") .hasUnit("u") @@ -76,15 +76,12 @@ void longHistogram() { InstrumentationScopeInfo.builder(instrumentationName) .setVersion("1.2.3") .setSchemaUrl("http://schema.org") - .build()) - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(11.0) - .hasBucketBoundaries(10.0) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("test"), "test"))))); + .build()), + point -> + point + .hasSum(11.0) + .hasBucketBoundaries(10.0) + .hasAttributesSatisfyingExactly(equalTo(stringKey("test"), "test"))); } @Test @@ -98,10 +95,10 @@ void doubleHistogram() { instrument.record(5.5, Attributes.of(stringKey("test"), "test")); instrument.record(6.6, Attributes.of(stringKey("test"), "test")); - testing.waitAndAssertMetrics( - instrumentationName, + testing.waitAndAssertHistogramPoints( metric -> metric + .satisfies(hasScopeName(instrumentationName)) .hasName("test") .hasDescription("d") .hasUnit("u") @@ -109,14 +106,11 @@ void doubleHistogram() { InstrumentationScopeInfo.builder(instrumentationName) .setVersion("1.2.3") .setSchemaUrl("http://schema.org") - .build()) - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(12.1) - .hasBucketBoundaries(10.0) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("test"), "test"))))); + .build()), + point -> + point + .hasSum(12.1) + .hasBucketBoundaries(10.0) + .hasAttributesSatisfyingExactly(equalTo(stringKey("test"), "test"))); } } diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/incubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/MeterTest.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/incubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/MeterTest.java index 93aa47fc7059..b096ebd8f06e 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/incubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/MeterTest.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/incubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/MeterTest.java @@ -6,7 +6,7 @@ package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_37.incubator.metrics; import static io.opentelemetry.api.common.AttributeKey.stringKey; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static java.util.Collections.singletonList; @@ -226,10 +226,10 @@ void longHistogram() { instrument.record(5, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); instrument.record(6, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); - testing.waitAndAssertMetrics( - instrumentationName, + testing.waitAndAssertHistogramPoints( metric -> metric + .satisfies(hasScopeName(instrumentationName)) .hasName("test") .hasDescription("d") .hasUnit("u") @@ -237,15 +237,12 @@ void longHistogram() { InstrumentationScopeInfo.builder(instrumentationName) .setVersion("1.2.3") .setSchemaUrl("http://schema.org") - .build()) - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(11.0) - .hasBucketBoundaries(10.0) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("test"), "test"))))); + .build()), + point -> + point + .hasSum(11.0) + .hasBucketBoundaries(10.0) + .hasAttributesSatisfyingExactly(equalTo(stringKey("test"), "test"))); } @Test @@ -262,10 +259,10 @@ void doubleHistogram() { instrument.record(5.5, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); instrument.record(6.6, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); - testing.waitAndAssertMetrics( - instrumentationName, + testing.waitAndAssertHistogramPoints( metric -> metric + .satisfies(hasScopeName(instrumentationName)) .hasName("test") .hasDescription("d") .hasUnit("u") @@ -273,15 +270,12 @@ void doubleHistogram() { InstrumentationScopeInfo.builder(instrumentationName) .setVersion("1.2.3") .setSchemaUrl("http://schema.org") - .build()) - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(12.1) - .hasBucketBoundaries(10.0) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("test"), "test"))))); + .build()), + point -> + point + .hasSum(12.1) + .hasBucketBoundaries(10.0) + .hasAttributesSatisfyingExactly(equalTo(stringKey("test"), "test"))); } @Test diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/oldAndNewIncubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/MeterTest.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/oldAndNewIncubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/MeterTest.java index 93aa47fc7059..b096ebd8f06e 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/oldAndNewIncubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/MeterTest.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/oldAndNewIncubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/MeterTest.java @@ -6,7 +6,7 @@ package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_37.incubator.metrics; import static io.opentelemetry.api.common.AttributeKey.stringKey; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static java.util.Collections.singletonList; @@ -226,10 +226,10 @@ void longHistogram() { instrument.record(5, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); instrument.record(6, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); - testing.waitAndAssertMetrics( - instrumentationName, + testing.waitAndAssertHistogramPoints( metric -> metric + .satisfies(hasScopeName(instrumentationName)) .hasName("test") .hasDescription("d") .hasUnit("u") @@ -237,15 +237,12 @@ void longHistogram() { InstrumentationScopeInfo.builder(instrumentationName) .setVersion("1.2.3") .setSchemaUrl("http://schema.org") - .build()) - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(11.0) - .hasBucketBoundaries(10.0) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("test"), "test"))))); + .build()), + point -> + point + .hasSum(11.0) + .hasBucketBoundaries(10.0) + .hasAttributesSatisfyingExactly(equalTo(stringKey("test"), "test"))); } @Test @@ -262,10 +259,10 @@ void doubleHistogram() { instrument.record(5.5, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); instrument.record(6.6, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); - testing.waitAndAssertMetrics( - instrumentationName, + testing.waitAndAssertHistogramPoints( metric -> metric + .satisfies(hasScopeName(instrumentationName)) .hasName("test") .hasDescription("d") .hasUnit("u") @@ -273,15 +270,12 @@ void doubleHistogram() { InstrumentationScopeInfo.builder(instrumentationName) .setVersion("1.2.3") .setSchemaUrl("http://schema.org") - .build()) - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(12.1) - .hasBucketBoundaries(10.0) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("test"), "test"))))); + .build()), + point -> + point + .hasSum(12.1) + .hasBucketBoundaries(10.0) + .hasAttributesSatisfyingExactly(equalTo(stringKey("test"), "test"))); } @Test diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/metrics/MeterTest.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/metrics/MeterTest.java index e1b066b9e521..bd4534b71f33 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/metrics/MeterTest.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/metrics/MeterTest.java @@ -6,7 +6,7 @@ package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_37.metrics; import static io.opentelemetry.api.common.AttributeKey.stringKey; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static java.util.Collections.singletonList; import static org.assertj.core.api.Assertions.assertThatThrownBy; @@ -63,10 +63,10 @@ void longHistogram() { instrument.record(5, Attributes.of(stringKey("test"), "test")); instrument.record(6, Attributes.of(stringKey("test"), "test")); - testing.waitAndAssertMetrics( - instrumentationName, + testing.waitAndAssertHistogramPoints( metric -> metric + .satisfies(hasScopeName(instrumentationName)) .hasName("test") .hasDescription("d") .hasUnit("u") @@ -74,15 +74,12 @@ void longHistogram() { InstrumentationScopeInfo.builder(instrumentationName) .setVersion("1.2.3") .setSchemaUrl("http://schema.org") - .build()) - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(11.0) - .hasBucketBoundaries(10.0) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("test"), "test"))))); + .build()), + point -> + point + .hasSum(11.0) + .hasBucketBoundaries(10.0) + .hasAttributesSatisfyingExactly(equalTo(stringKey("test"), "test"))); } @Test @@ -96,10 +93,10 @@ void doubleHistogram() { instrument.record(5.5, Attributes.of(stringKey("test"), "test")); instrument.record(6.6, Attributes.of(stringKey("test"), "test")); - testing.waitAndAssertMetrics( - instrumentationName, + testing.waitAndAssertHistogramPoints( metric -> metric + .satisfies(hasScopeName(instrumentationName)) .hasName("test") .hasDescription("d") .hasUnit("u") @@ -107,14 +104,11 @@ void doubleHistogram() { InstrumentationScopeInfo.builder(instrumentationName) .setVersion("1.2.3") .setSchemaUrl("http://schema.org") - .build()) - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(12.1) - .hasBucketBoundaries(10.0) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("test"), "test"))))); + .build()), + point -> + point + .hasSum(12.1) + .hasBucketBoundaries(10.0) + .hasAttributesSatisfyingExactly(equalTo(stringKey("test"), "test"))); } } diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.65/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_65/incubator/metrics/MeterTest.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.65/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_65/incubator/metrics/MeterTest.java index bd634ecdc26f..8b04ba238f2d 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.65/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_65/incubator/metrics/MeterTest.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.65/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_65/incubator/metrics/MeterTest.java @@ -6,6 +6,7 @@ package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_65.incubator.metrics; import static io.opentelemetry.api.common.AttributeKey.stringKey; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; @@ -167,9 +168,7 @@ void boundLongHistogram() { bound.record(11); testing.waitAndAssertHistogramPoints( - "test-bound-long-histogram", - "test", - metric -> metric.hasUnit(""), + metric -> metric.satisfies(hasScopeName("test-bound-long-histogram")).hasName("test"), point -> point.hasSum(11.0).hasAttributesSatisfyingExactly(equalTo(stringKey("q"), "r"))); } @@ -185,9 +184,7 @@ void boundDoubleHistogram() { bound.record(12.1); testing.waitAndAssertHistogramPoints( - "test-bound-double-histogram", - "test", - metric -> metric.hasUnit(""), + metric -> metric.satisfies(hasScopeName("test-bound-double-histogram")).hasName("test"), point -> point.hasSum(12.1).hasAttributesSatisfyingExactly(equalTo(stringKey("q"), "r"))); } diff --git a/instrumentation/pulsar/pulsar-2.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/pulsar/v2_8/PulsarClientTest.java b/instrumentation/pulsar/pulsar-2.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/pulsar/v2_8/PulsarClientTest.java index 59682944c2b5..56f31acb664c 100644 --- a/instrumentation/pulsar/pulsar-2.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/pulsar/v2_8/PulsarClientTest.java +++ b/instrumentation/pulsar/pulsar-2.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/pulsar/v2_8/PulsarClientTest.java @@ -5,7 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.pulsar.v2_8; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.instrumentation.testing.util.TelemetryDataUtil.asRemote; import static io.opentelemetry.instrumentation.testing.util.TelemetryDataUtil.orderByRootSpanKind; import static io.opentelemetry.instrumentation.testing.util.TelemetryDataUtil.orderByRootSpanName; @@ -68,28 +68,22 @@ void testConsumeNonPartitionedTopic() throws Exception { latch.await(1, MINUTES); - testing.waitAndAssertMetrics( - INSTRUMENTATION_NAME, - "messaging.process.duration", - metrics -> - metrics.satisfiesExactly( - metric -> - assertThat(metric) - .hasUnit("s") - .hasDescription("Duration of processing operation.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "process"), - equalTo(MESSAGING_SYSTEM, "pulsar"), - equalTo(MESSAGING_DESTINATION_NAME, topic), - equalTo( - MESSAGING_DESTINATION_SUBSCRIPTION_NAME, - "test_sub")) - .hasBucketBoundaries(DURATION_BUCKETS))))); + testing.waitAndAssertHistogramPoints( + metric -> + metric + .satisfies(hasScopeName(INSTRUMENTATION_NAME)) + .hasName("messaging.process.duration") + .hasDescription("Duration of processing operation.") + .hasUnit("s"), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "process"), + equalTo(MESSAGING_SYSTEM, "pulsar"), + equalTo(MESSAGING_DESTINATION_NAME, topic), + equalTo(MESSAGING_DESTINATION_SUBSCRIPTION_NAME, "test_sub")) + .hasBucketBoundaries(DURATION_BUCKETS)); testing.waitAndAssertMetrics( INSTRUMENTATION_NAME, "messaging.client.consumed.messages", @@ -137,41 +131,35 @@ void testConsumeNonPartitionedTopic() throws Exception { equalTo(MESSAGING_DESTINATION_NAME, topic), equalTo(SERVER_ADDRESS, brokerHost), equalTo(SERVER_PORT, brokerPort)))))); - testing.waitAndAssertMetrics( - INSTRUMENTATION_NAME, - "messaging.client.operation.duration", - metrics -> - metrics.satisfiesExactly( - metric -> - assertThat(metric) - .hasUnit("s") - .hasDescription( - "Duration of messaging operation initiated by a producer or consumer client.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "send"), - equalTo(MESSAGING_SYSTEM, "pulsar"), - equalTo(MESSAGING_DESTINATION_NAME, topic), - equalTo(MESSAGING_OPERATION_TYPE, "send"), - equalTo(SERVER_ADDRESS, brokerHost), - equalTo(SERVER_PORT, brokerPort)), - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "receive"), - equalTo(MESSAGING_SYSTEM, "pulsar"), - equalTo(MESSAGING_DESTINATION_NAME, topic), - equalTo( - MESSAGING_DESTINATION_SUBSCRIPTION_NAME, - "test_sub"), - equalTo(MESSAGING_OPERATION_TYPE, "receive"), - equalTo(SERVER_ADDRESS, brokerHost), - equalTo(SERVER_PORT, brokerPort)))))); + testing.waitAndAssertHistogramPoints( + metric -> + metric + .satisfies(hasScopeName(INSTRUMENTATION_NAME)) + .hasName("messaging.client.operation.duration") + .hasDescription( + "Duration of messaging operation initiated by a producer or consumer client.") + .hasUnit("s"), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "send"), + equalTo(MESSAGING_SYSTEM, "pulsar"), + equalTo(MESSAGING_DESTINATION_NAME, topic), + equalTo(MESSAGING_OPERATION_TYPE, "send"), + equalTo(SERVER_ADDRESS, brokerHost), + equalTo(SERVER_PORT, brokerPort)), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "receive"), + equalTo(MESSAGING_SYSTEM, "pulsar"), + equalTo(MESSAGING_DESTINATION_NAME, topic), + equalTo(MESSAGING_DESTINATION_SUBSCRIPTION_NAME, "test_sub"), + equalTo(MESSAGING_OPERATION_TYPE, "receive"), + equalTo(SERVER_ADDRESS, brokerHost), + equalTo(SERVER_PORT, brokerPort))); AtomicReference producerSpan = new AtomicReference<>(); testing.waitAndAssertSortedTraces( diff --git a/instrumentation/ratpack/ratpack-1.4/javaagent/src/version17Test/java/io/opentelemetry/javaagent/instrumentation/ratpack/v1_4/httpclient/client/RatpackHttpClientTest.java b/instrumentation/ratpack/ratpack-1.4/javaagent/src/version17Test/java/io/opentelemetry/javaagent/instrumentation/ratpack/v1_4/httpclient/client/RatpackHttpClientTest.java index 22e63a000f1a..e184e9fb83f3 100644 --- a/instrumentation/ratpack/ratpack-1.4/javaagent/src/version17Test/java/io/opentelemetry/javaagent/instrumentation/ratpack/v1_4/httpclient/client/RatpackHttpClientTest.java +++ b/instrumentation/ratpack/ratpack-1.4/javaagent/src/version17Test/java/io/opentelemetry/javaagent/instrumentation/ratpack/v1_4/httpclient/client/RatpackHttpClientTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.ratpack.v1_4.httpclient.client; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.HttpAttributes.HTTP_REQUEST_METHOD; import static io.opentelemetry.semconv.HttpAttributes.HTTP_RESPONSE_STATUS_CODE; @@ -65,9 +66,14 @@ void durationMetricHasProtocolVersion() throws Exception { span -> assertServerSpan(span).hasParent(trace.getSpan(0)))); testing.waitAndAssertHistogramPoints( - "io.opentelemetry.ratpack-1.4", - "http.client.request.duration", - metric -> metric.hasUnit("s"), + metric -> + metric + .satisfies(hasScopeName("io.opentelemetry.ratpack-1.4")) + .hasName("http.client.request.duration") + .satisfies( + metricData -> + assertThat(metricData.getInstrumentationScopeInfo().getVersion()) + .isNotEmpty()), point -> point.hasAttributesSatisfyingExactly( equalTo(HTTP_REQUEST_METHOD, "GET"), diff --git a/instrumentation/rocketmq/rocketmq-client-4.8/library/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v4_8/RocketMqMetricsTest.java b/instrumentation/rocketmq/rocketmq-client-4.8/library/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v4_8/RocketMqMetricsTest.java index c386d64d8885..e999b7c4d639 100644 --- a/instrumentation/rocketmq/rocketmq-client-4.8/library/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v4_8/RocketMqMetricsTest.java +++ b/instrumentation/rocketmq/rocketmq-client-4.8/library/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v4_8/RocketMqMetricsTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.instrumentation.rocketmqclient.v4_8; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.ErrorAttributes.ERROR_TYPE; @@ -216,9 +217,7 @@ private static void assertDuration( String operationType, String errorType) { testing.waitAndAssertHistogramPoints( - INSTRUMENTATION_NAME, - metricName, - metric -> metric.hasUnit("s"), + metric -> metric.satisfies(hasScopeName(INSTRUMENTATION_NAME)).hasName(metricName), point -> point .hasCount(1) diff --git a/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/AbstractRocketMqClientSuppressReceiveSpanTest.java b/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/AbstractRocketMqClientSuppressReceiveSpanTest.java index 8f241664b940..5b960f433de5 100644 --- a/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/AbstractRocketMqClientSuppressReceiveSpanTest.java +++ b/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/AbstractRocketMqClientSuppressReceiveSpanTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.instrumentation.rocketmqclient.v5_0; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.instrumentation.testing.util.TelemetryDataUtil.asRemote; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; @@ -171,9 +172,10 @@ private void assertMetrics(String topic, String consumerGroup) { equalTo(MESSAGING_DESTINATION_NAME, topic)))))); testing() .waitAndAssertHistogramPoints( - "io.opentelemetry.rocketmq-client-5.0", - "messaging.client.operation.duration", - metric -> metric.hasUnit("s"), + metric -> + metric + .satisfies(hasScopeName("io.opentelemetry.rocketmq-client-5.0")) + .hasName("messaging.client.operation.duration"), point -> point .hasCount(1) @@ -184,9 +186,10 @@ private void assertMetrics(String topic, String consumerGroup) { equalTo(MESSAGING_OPERATION_TYPE, "send"))); testing() .waitAndAssertHistogramPoints( - "io.opentelemetry.rocketmq-client-5.0", - "messaging.process.duration", - metric -> metric.hasUnit("s"), + metric -> + metric + .satisfies(hasScopeName("io.opentelemetry.rocketmq-client-5.0")) + .hasName("messaging.process.duration"), point -> point .hasCount(1) diff --git a/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/AbstractRocketMqClientTest.java b/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/AbstractRocketMqClientTest.java index 4b9bf84cfd23..d5c8a10f82f8 100644 --- a/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/AbstractRocketMqClientTest.java +++ b/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/AbstractRocketMqClientTest.java @@ -7,6 +7,7 @@ import static io.opentelemetry.api.trace.SpanKind.CLIENT; import static io.opentelemetry.instrumentation.testing.junit.message.MessageHeaderUtil.headerAttributeKey; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.instrumentation.testing.util.TelemetryDataUtil.asRemote; import static io.opentelemetry.instrumentation.testing.util.TelemetryDataUtil.orderByRootSpanKind; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; @@ -760,9 +761,10 @@ private static SpanDataAssert assertProcessSpanWithDelayMessage( private void assertFailureMetrics() { testing() .waitAndAssertHistogramPoints( - "io.opentelemetry.rocketmq-client-5.0", - "messaging.process.duration", - metric -> metric.hasUnit("s"), + metric -> + metric + .satisfies(hasScopeName("io.opentelemetry.rocketmq-client-5.0")) + .hasName("messaging.process.duration"), point -> point .hasCount(1) @@ -818,9 +820,10 @@ private void assertMetrics() { NORMAL_TOPIC)))))); testing() .waitAndAssertHistogramPoints( - "io.opentelemetry.rocketmq-client-5.0", - "messaging.client.operation.duration", - metric -> metric.hasUnit("s"), + metric -> + metric + .satisfies(hasScopeName("io.opentelemetry.rocketmq-client-5.0")) + .hasName("messaging.client.operation.duration"), point -> point .hasCount(1) @@ -839,9 +842,10 @@ private void assertMetrics() { equalTo(MESSAGING_OPERATION_TYPE, "receive"))); testing() .waitAndAssertHistogramPoints( - "io.opentelemetry.rocketmq-client-5.0", - "messaging.process.duration", - metric -> metric.hasUnit("s"), + metric -> + metric + .satisfies(hasScopeName("io.opentelemetry.rocketmq-client-5.0")) + .hasName("messaging.process.duration"), point -> point .hasCount(1) diff --git a/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/RocketMqSimpleConsumerTest.java b/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/RocketMqSimpleConsumerTest.java index c4a22005b03a..f9b205bce359 100644 --- a/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/RocketMqSimpleConsumerTest.java +++ b/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/RocketMqSimpleConsumerTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.instrumentation.rocketmqclient.v5_0; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.instrumentation.testing.util.TelemetryDataUtil.asRemote; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; @@ -195,9 +196,10 @@ void shouldInstrumentReceiveWhenReceiveTelemetryDisabled() throws ClientExceptio assertSuccessfulReceiveTrace("disabled receive parent", sendSpan); testing.waitAndAssertHistogramPoints( - INSTRUMENTATION_NAME, - "messaging.client.operation.duration", - metric -> metric.hasUnit("s"), + metric -> + metric + .satisfies(hasScopeName(INSTRUMENTATION_NAME)) + .hasName("messaging.client.operation.duration"), point -> point .hasCount(1) diff --git a/instrumentation/runtime-telemetry/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/runtimetelemetry/JmxRuntimeMetricsTest.java b/instrumentation/runtime-telemetry/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/runtimetelemetry/JmxRuntimeMetricsTest.java index 6906f9286af4..abf32b56d5c1 100644 --- a/instrumentation/runtime-telemetry/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/runtimetelemetry/JmxRuntimeMetricsTest.java +++ b/instrumentation/runtime-telemetry/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/runtimetelemetry/JmxRuntimeMetricsTest.java @@ -37,7 +37,6 @@ void runtimeMetricsAreEnabled() { metric -> metric .hasName("jvm.gc.duration") - .hasUnit("s") .satisfies( hasHistogramPointsSatisfyingExactly( point -> diff --git a/instrumentation/runtime-telemetry/library/src/test/java/io/opentelemetry/instrumentation/runtimetelemetry/RuntimeTelemetryDefaultsTest.java b/instrumentation/runtime-telemetry/library/src/test/java/io/opentelemetry/instrumentation/runtimetelemetry/RuntimeTelemetryDefaultsTest.java index 148e60e736ad..0066b0103c5d 100644 --- a/instrumentation/runtime-telemetry/library/src/test/java/io/opentelemetry/instrumentation/runtimetelemetry/RuntimeTelemetryDefaultsTest.java +++ b/instrumentation/runtime-telemetry/library/src/test/java/io/opentelemetry/instrumentation/runtimetelemetry/RuntimeTelemetryDefaultsTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.instrumentation.runtimetelemetry; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; import static io.opentelemetry.semconv.JvmAttributes.JVM_GC_ACTION; import static io.opentelemetry.semconv.JvmAttributes.JVM_GC_NAME; @@ -33,9 +34,10 @@ void capturesGcCause(boolean useBuilder) { System.gc(); testing.waitAndAssertHistogramPoints( - "io.opentelemetry.runtime-telemetry", - "jvm.gc.duration", - metric -> metric.hasUnit("s"), + metric -> + metric + .satisfies(hasScopeName("io.opentelemetry.runtime-telemetry")) + .hasName("jvm.gc.duration"), point -> point.hasAttributesSatisfyingExactly( satisfies(JVM_GC_NAME, val -> val.isNotBlank()), diff --git a/instrumentation/runtime-telemetry/library/src/test/java/io/opentelemetry/instrumentation/runtimetelemetry/internal/GarbageCollectorTest.java b/instrumentation/runtime-telemetry/library/src/test/java/io/opentelemetry/instrumentation/runtimetelemetry/internal/GarbageCollectorTest.java index 3b3369e9e10c..6ab2e39fca4a 100644 --- a/instrumentation/runtime-telemetry/library/src/test/java/io/opentelemetry/instrumentation/runtimetelemetry/internal/GarbageCollectorTest.java +++ b/instrumentation/runtime-telemetry/library/src/test/java/io/opentelemetry/instrumentation/runtimetelemetry/internal/GarbageCollectorTest.java @@ -5,7 +5,7 @@ package io.opentelemetry.instrumentation.runtimetelemetry.internal; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.JvmAttributes.JVM_GC_ACTION; import static io.opentelemetry.semconv.JvmAttributes.JVM_GC_NAME; @@ -70,33 +70,31 @@ void registerObservers() { listener.handleNotification( createTestNotification("G1 Old Generation", "end of major GC", "System.gc()", 11), null); - testing.waitAndAssertMetrics( - "test", + testing.waitAndAssertHistogramPoints( metric -> metric + .satisfies(hasScopeName("test")) .hasName("jvm.gc.duration") .hasDescription("Duration of JVM garbage collection actions.") - .hasUnit("s") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasCount(2) - .hasSum(0.022) - .hasAttributesSatisfyingExactly( - equalTo(JVM_GC_NAME, "G1 Young Generation"), - equalTo(JVM_GC_ACTION, "end of minor GC"), - equalTo(JVM_GC_CAUSE, "Allocation Failure")) - .hasBucketBoundaries(GC_DURATION_BUCKETS), - point -> - point - .hasCount(1) - .hasSum(0.011) - .hasAttributesSatisfyingExactly( - equalTo(JVM_GC_NAME, "G1 Old Generation"), - equalTo(JVM_GC_ACTION, "end of major GC"), - equalTo(JVM_GC_CAUSE, "System.gc()")) - .hasBucketBoundaries(GC_DURATION_BUCKETS)))); + .hasUnit("s"), + point -> + point + .hasCount(2) + .hasSum(0.022) + .hasAttributesSatisfyingExactly( + equalTo(JVM_GC_NAME, "G1 Young Generation"), + equalTo(JVM_GC_ACTION, "end of minor GC"), + equalTo(JVM_GC_CAUSE, "Allocation Failure")) + .hasBucketBoundaries(GC_DURATION_BUCKETS), + point -> + point + .hasCount(1) + .hasSum(0.011) + .hasAttributesSatisfyingExactly( + equalTo(JVM_GC_NAME, "G1 Old Generation"), + equalTo(JVM_GC_ACTION, "end of major GC"), + equalTo(JVM_GC_CAUSE, "System.gc()")) + .hasBucketBoundaries(GC_DURATION_BUCKETS)); } private static Notification createTestNotification( diff --git a/instrumentation/sofa-rpc-5.4/testing/src/main/java/io/opentelemetry/instrumentation/sofarpc/v5_4/AbstractSofaRpcTest.java b/instrumentation/sofa-rpc-5.4/testing/src/main/java/io/opentelemetry/instrumentation/sofarpc/v5_4/AbstractSofaRpcTest.java index d572f6067e40..46ebbddb7ccc 100644 --- a/instrumentation/sofa-rpc-5.4/testing/src/main/java/io/opentelemetry/instrumentation/sofarpc/v5_4/AbstractSofaRpcTest.java +++ b/instrumentation/sofa-rpc-5.4/testing/src/main/java/io/opentelemetry/instrumentation/sofarpc/v5_4/AbstractSofaRpcTest.java @@ -11,7 +11,7 @@ import static io.opentelemetry.instrumentation.testing.junit.rpc.SemconvRpcStabilityUtil.emitOldRpcSemconv; import static io.opentelemetry.instrumentation.testing.junit.rpc.SemconvRpcStabilityUtil.emitPreviewRpcSemconv; import static io.opentelemetry.instrumentation.testing.junit.service.SemconvServiceStabilityUtil.maybeStablePeerService; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; @@ -230,86 +230,65 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), if (emitOldRpcSemconv()) { testing() - .waitAndAssertMetrics( - "io.opentelemetry.sofa-rpc-5.4", - "rpc.server.duration", - metrics -> - metrics.anySatisfy( - metric -> - assertThat(metric) - .hasUnit("ms") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "sofarpc"), - equalTo( - RPC_SERVICE, - "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService"), - equalTo(RPC_METHOD, "hello")))))); + .waitAndAssertHistogramPoints( + metric -> + metric + .satisfies(hasScopeName("io.opentelemetry.sofa-rpc-5.4")) + .hasName("rpc.server.duration") + .hasUnit("ms"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "sofarpc"), + equalTo( + RPC_SERVICE, + "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService"), + equalTo(RPC_METHOD, "hello"))); testing() - .waitAndAssertMetrics( - "io.opentelemetry.sofa-rpc-5.4", - "rpc.client.duration", - metrics -> - metrics.anySatisfy( - metric -> - assertThat(metric) - .hasUnit("ms") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "sofarpc"), - equalTo(RPC_SERVICE, GenericService.class.getName()), - equalTo(RPC_METHOD, genericMethodName()), - equalTo(SERVER_ADDRESS, "127.0.0.1"), - satisfies( - SERVER_PORT, val -> val.isInstanceOf(Long.class)), - satisfies( - NETWORK_TYPE, - AbstractSofaRpcTest::assertNetworkType)))))); + .waitAndAssertHistogramPoints( + metric -> + metric + .satisfies(hasScopeName("io.opentelemetry.sofa-rpc-5.4")) + .hasName("rpc.client.duration") + .hasUnit("ms"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "sofarpc"), + equalTo(RPC_SERVICE, GenericService.class.getName()), + equalTo(RPC_METHOD, genericMethodName()), + equalTo(SERVER_ADDRESS, "127.0.0.1"), + satisfies(SERVER_PORT, val -> val.isInstanceOf(Long.class)), + satisfies(NETWORK_TYPE, AbstractSofaRpcTest::assertNetworkType))); } if (emitPreviewRpcSemconv()) { testing() - .waitAndAssertMetrics( - "io.opentelemetry.sofa-rpc-5.4", - "rpc.server.call.duration", - metrics -> - metrics.anySatisfy( - metric -> - assertThat(metric) - .hasUnit("s") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "sofarpc"), - equalTo( - RPC_METHOD, - "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService/hello")))))); + .waitAndAssertHistogramPoints( + metric -> + metric + .satisfies(hasScopeName("io.opentelemetry.sofa-rpc-5.4")) + .hasName("rpc.server.call.duration") + .hasUnit("s"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "sofarpc"), + equalTo( + RPC_METHOD, + "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService/hello"))); testing() - .waitAndAssertMetrics( - "io.opentelemetry.sofa-rpc-5.4", - "rpc.client.call.duration", - metrics -> - metrics.anySatisfy( - metric -> - assertThat(metric) - .hasUnit("s") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "sofarpc"), - equalTo(RPC_METHOD, genericServiceSpanName()), - equalTo(SERVER_ADDRESS, "127.0.0.1"), - satisfies( - SERVER_PORT, - val -> val.isInstanceOf(Long.class))))))); + .waitAndAssertHistogramPoints( + metric -> + metric + .satisfies(hasScopeName("io.opentelemetry.sofa-rpc-5.4")) + .hasName("rpc.client.call.duration") + .hasUnit("s"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "sofarpc"), + equalTo(RPC_METHOD, genericServiceSpanName()), + equalTo(SERVER_ADDRESS, "127.0.0.1"), + satisfies(SERVER_PORT, val -> val.isInstanceOf(Long.class)))); } } @@ -398,86 +377,65 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), if (emitOldRpcSemconv()) { testing() - .waitAndAssertMetrics( - "io.opentelemetry.sofa-rpc-5.4", - "rpc.server.duration", - metrics -> - metrics.anySatisfy( - metric -> - assertThat(metric) - .hasUnit("ms") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "sofarpc"), - equalTo( - RPC_SERVICE, - "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService"), - equalTo(RPC_METHOD, "hello")))))); + .waitAndAssertHistogramPoints( + metric -> + metric + .satisfies(hasScopeName("io.opentelemetry.sofa-rpc-5.4")) + .hasName("rpc.server.duration") + .hasUnit("ms"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "sofarpc"), + equalTo( + RPC_SERVICE, + "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService"), + equalTo(RPC_METHOD, "hello"))); testing() - .waitAndAssertMetrics( - "io.opentelemetry.sofa-rpc-5.4", - "rpc.client.duration", - metrics -> - metrics.anySatisfy( - metric -> - assertThat(metric) - .hasUnit("ms") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "sofarpc"), - equalTo(RPC_SERVICE, GenericService.class.getName()), - equalTo(RPC_METHOD, genericMethodName()), - equalTo(SERVER_ADDRESS, "127.0.0.1"), - satisfies( - SERVER_PORT, val -> val.isInstanceOf(Long.class)), - satisfies( - NETWORK_TYPE, - AbstractSofaRpcTest::assertNetworkType)))))); + .waitAndAssertHistogramPoints( + metric -> + metric + .satisfies(hasScopeName("io.opentelemetry.sofa-rpc-5.4")) + .hasName("rpc.client.duration") + .hasUnit("ms"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "sofarpc"), + equalTo(RPC_SERVICE, GenericService.class.getName()), + equalTo(RPC_METHOD, genericMethodName()), + equalTo(SERVER_ADDRESS, "127.0.0.1"), + satisfies(SERVER_PORT, val -> val.isInstanceOf(Long.class)), + satisfies(NETWORK_TYPE, AbstractSofaRpcTest::assertNetworkType))); } if (emitPreviewRpcSemconv()) { testing() - .waitAndAssertMetrics( - "io.opentelemetry.sofa-rpc-5.4", - "rpc.server.call.duration", - metrics -> - metrics.anySatisfy( - metric -> - assertThat(metric) - .hasUnit("s") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "sofarpc"), - equalTo( - RPC_METHOD, - "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService/hello")))))); + .waitAndAssertHistogramPoints( + metric -> + metric + .satisfies(hasScopeName("io.opentelemetry.sofa-rpc-5.4")) + .hasName("rpc.server.call.duration") + .hasUnit("s"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "sofarpc"), + equalTo( + RPC_METHOD, + "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService/hello"))); testing() - .waitAndAssertMetrics( - "io.opentelemetry.sofa-rpc-5.4", - "rpc.client.call.duration", - metrics -> - metrics.anySatisfy( - metric -> - assertThat(metric) - .hasUnit("s") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "sofarpc"), - equalTo(RPC_METHOD, genericServiceSpanName()), - equalTo(SERVER_ADDRESS, "127.0.0.1"), - satisfies( - SERVER_PORT, - val -> val.isInstanceOf(Long.class))))))); + .waitAndAssertHistogramPoints( + metric -> + metric + .satisfies(hasScopeName("io.opentelemetry.sofa-rpc-5.4")) + .hasName("rpc.client.call.duration") + .hasUnit("s"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "sofarpc"), + equalTo(RPC_METHOD, genericServiceSpanName()), + equalTo(SERVER_ADDRESS, "127.0.0.1"), + satisfies(SERVER_PORT, val -> val.isInstanceOf(Long.class)))); } } @@ -610,96 +568,71 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), if (emitOldRpcSemconv()) { testing() - .waitAndAssertMetrics( - "io.opentelemetry.sofa-rpc-5.4", - "rpc.server.duration", - metrics -> - metrics.anySatisfy( - metric -> - assertThat(metric) - .hasUnit("ms") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "sofarpc"), - equalTo( - RPC_SERVICE, - "io.opentelemetry.instrumentation.sofarpc.v5_4.api.ErrorService"), - equalTo(RPC_METHOD, "throwException")))))); + .waitAndAssertHistogramPoints( + metric -> + metric + .satisfies(hasScopeName("io.opentelemetry.sofa-rpc-5.4")) + .hasName("rpc.server.duration") + .hasUnit("ms"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "sofarpc"), + equalTo( + RPC_SERVICE, + "io.opentelemetry.instrumentation.sofarpc.v5_4.api.ErrorService"), + equalTo(RPC_METHOD, "throwException"))); testing() - .waitAndAssertMetrics( - "io.opentelemetry.sofa-rpc-5.4", - "rpc.client.duration", - metrics -> - metrics.anySatisfy( - metric -> - assertThat(metric) - .hasUnit("ms") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "sofarpc"), - equalTo( - RPC_SERVICE, - "io.opentelemetry.instrumentation.sofarpc.v5_4.api.ErrorService"), - equalTo(RPC_METHOD, "throwException"), - equalTo(SERVER_ADDRESS, "127.0.0.1"), - satisfies( - SERVER_PORT, val -> val.isInstanceOf(Long.class)), - satisfies( - NETWORK_TYPE, - AbstractSofaRpcTest::assertNetworkType)))))); + .waitAndAssertHistogramPoints( + metric -> + metric + .satisfies(hasScopeName("io.opentelemetry.sofa-rpc-5.4")) + .hasName("rpc.client.duration") + .hasUnit("ms"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "sofarpc"), + equalTo( + RPC_SERVICE, + "io.opentelemetry.instrumentation.sofarpc.v5_4.api.ErrorService"), + equalTo(RPC_METHOD, "throwException"), + equalTo(SERVER_ADDRESS, "127.0.0.1"), + satisfies(SERVER_PORT, val -> val.isInstanceOf(Long.class)), + satisfies(NETWORK_TYPE, AbstractSofaRpcTest::assertNetworkType))); } if (emitPreviewRpcSemconv()) { testing() - .waitAndAssertMetrics( - "io.opentelemetry.sofa-rpc-5.4", - "rpc.server.call.duration", - metrics -> - metrics.anySatisfy( - metric -> - assertThat(metric) - .hasUnit("s") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "sofarpc"), - equalTo( - RPC_METHOD, - "io.opentelemetry.instrumentation.sofarpc.v5_4.api.ErrorService/throwException"), - equalTo( - ERROR_TYPE, - SofaRpcRuntimeException.class.getName())))))); + .waitAndAssertHistogramPoints( + metric -> + metric + .satisfies(hasScopeName("io.opentelemetry.sofa-rpc-5.4")) + .hasName("rpc.server.call.duration") + .hasUnit("s"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "sofarpc"), + equalTo( + RPC_METHOD, + "io.opentelemetry.instrumentation.sofarpc.v5_4.api.ErrorService/throwException"), + equalTo(ERROR_TYPE, SofaRpcRuntimeException.class.getName()))); testing() - .waitAndAssertMetrics( - "io.opentelemetry.sofa-rpc-5.4", - "rpc.client.call.duration", - metrics -> - metrics.anySatisfy( - metric -> - assertThat(metric) - .hasUnit("s") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "sofarpc"), - equalTo( - RPC_METHOD, - "io.opentelemetry.instrumentation.sofarpc.v5_4.api.ErrorService/throwException"), - equalTo( - ERROR_TYPE, - SofaRpcRuntimeException.class.getName()), - equalTo(SERVER_ADDRESS, "127.0.0.1"), - satisfies( - SERVER_PORT, - val -> val.isInstanceOf(Long.class))))))); + .waitAndAssertHistogramPoints( + metric -> + metric + .satisfies(hasScopeName("io.opentelemetry.sofa-rpc-5.4")) + .hasName("rpc.client.call.duration") + .hasUnit("s"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "sofarpc"), + equalTo( + RPC_METHOD, + "io.opentelemetry.instrumentation.sofarpc.v5_4.api.ErrorService/throwException"), + equalTo(ERROR_TYPE, SofaRpcRuntimeException.class.getName()), + equalTo(SERVER_ADDRESS, "127.0.0.1"), + satisfies(SERVER_PORT, val -> val.isInstanceOf(Long.class)))); } } diff --git a/instrumentation/sofa-rpc-5.4/testing/src/main/java/io/opentelemetry/instrumentation/sofarpc/v5_4/AbstractSofaRpcTraceChainTest.java b/instrumentation/sofa-rpc-5.4/testing/src/main/java/io/opentelemetry/instrumentation/sofarpc/v5_4/AbstractSofaRpcTraceChainTest.java index 2bdafd0e549b..5b7f4e6c5dac 100644 --- a/instrumentation/sofa-rpc-5.4/testing/src/main/java/io/opentelemetry/instrumentation/sofarpc/v5_4/AbstractSofaRpcTraceChainTest.java +++ b/instrumentation/sofa-rpc-5.4/testing/src/main/java/io/opentelemetry/instrumentation/sofarpc/v5_4/AbstractSofaRpcTraceChainTest.java @@ -9,7 +9,7 @@ import static io.opentelemetry.instrumentation.testing.junit.rpc.SemconvRpcStabilityUtil.emitOldRpcSemconv; import static io.opentelemetry.instrumentation.testing.junit.rpc.SemconvRpcStabilityUtil.emitPreviewRpcSemconv; import static io.opentelemetry.instrumentation.testing.junit.service.SemconvServiceStabilityUtil.maybeStablePeerService; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; @@ -265,122 +265,96 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), if (emitOldRpcSemconv()) { testing() - .waitAndAssertMetrics( - "io.opentelemetry.sofa-rpc-5.4", - "rpc.server.duration", - metrics -> - metrics.anySatisfy( - metric -> - assertThat(metric) - .hasUnit("ms") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "sofarpc"), - equalTo( - RPC_SERVICE, - "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService"), - equalTo(RPC_METHOD, "hello")), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "sofarpc"), - equalTo( - RPC_SERVICE, - "io.opentelemetry.instrumentation.sofarpc.v5_4.api.MiddleService"), - equalTo(RPC_METHOD, "hello")))))); + .waitAndAssertHistogramPoints( + metric -> + metric + .satisfies(hasScopeName("io.opentelemetry.sofa-rpc-5.4")) + .hasName("rpc.server.duration") + .hasUnit("ms"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "sofarpc"), + equalTo( + RPC_SERVICE, + "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService"), + equalTo(RPC_METHOD, "hello")), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "sofarpc"), + equalTo( + RPC_SERVICE, + "io.opentelemetry.instrumentation.sofarpc.v5_4.api.MiddleService"), + equalTo(RPC_METHOD, "hello"))); testing() - .waitAndAssertMetrics( - "io.opentelemetry.sofa-rpc-5.4", - "rpc.client.duration", - metrics -> - metrics.anySatisfy( - metric -> - assertThat(metric) - .hasUnit("ms") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "sofarpc"), - equalTo(RPC_SERVICE, GenericService.class.getName()), - equalTo(RPC_METHOD, genericMethodName()), - equalTo(SERVER_ADDRESS, "127.0.0.1"), - satisfies( - SERVER_PORT, val -> val.isInstanceOf(Long.class)), - satisfies( - NETWORK_TYPE, - AbstractSofaRpcTest::assertNetworkType)), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "sofarpc"), - equalTo( - RPC_SERVICE, - "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService"), - equalTo(RPC_METHOD, "hello"), - equalTo(SERVER_ADDRESS, "127.0.0.1"), - satisfies( - SERVER_PORT, val -> val.isInstanceOf(Long.class)), - satisfies( - NETWORK_TYPE, - AbstractSofaRpcTest::assertNetworkType)))))); + .waitAndAssertHistogramPoints( + metric -> + metric + .satisfies(hasScopeName("io.opentelemetry.sofa-rpc-5.4")) + .hasName("rpc.client.duration") + .hasUnit("ms"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "sofarpc"), + equalTo(RPC_SERVICE, GenericService.class.getName()), + equalTo(RPC_METHOD, genericMethodName()), + equalTo(SERVER_ADDRESS, "127.0.0.1"), + satisfies(SERVER_PORT, val -> val.isInstanceOf(Long.class)), + satisfies(NETWORK_TYPE, AbstractSofaRpcTest::assertNetworkType)), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "sofarpc"), + equalTo( + RPC_SERVICE, + "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService"), + equalTo(RPC_METHOD, "hello"), + equalTo(SERVER_ADDRESS, "127.0.0.1"), + satisfies(SERVER_PORT, val -> val.isInstanceOf(Long.class)), + satisfies(NETWORK_TYPE, AbstractSofaRpcTest::assertNetworkType))); } if (emitPreviewRpcSemconv()) { testing() - .waitAndAssertMetrics( - "io.opentelemetry.sofa-rpc-5.4", - "rpc.server.call.duration", - metrics -> - metrics.anySatisfy( - metric -> - assertThat(metric) - .hasUnit("s") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "sofarpc"), - equalTo( - RPC_METHOD, - "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService/hello")), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "sofarpc"), - equalTo( - RPC_METHOD, - "io.opentelemetry.instrumentation.sofarpc.v5_4.api.MiddleService/hello")))))); + .waitAndAssertHistogramPoints( + metric -> + metric + .satisfies(hasScopeName("io.opentelemetry.sofa-rpc-5.4")) + .hasName("rpc.server.call.duration") + .hasUnit("s"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "sofarpc"), + equalTo( + RPC_METHOD, + "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService/hello")), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "sofarpc"), + equalTo( + RPC_METHOD, + "io.opentelemetry.instrumentation.sofarpc.v5_4.api.MiddleService/hello"))); testing() - .waitAndAssertMetrics( - "io.opentelemetry.sofa-rpc-5.4", - "rpc.client.call.duration", - metrics -> - metrics.anySatisfy( - metric -> - assertThat(metric) - .hasUnit("s") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "sofarpc"), - equalTo(RPC_METHOD, genericServiceSpanName()), - equalTo(SERVER_ADDRESS, "127.0.0.1"), - satisfies( - SERVER_PORT, - val -> val.isInstanceOf(Long.class))), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "sofarpc"), - equalTo( - RPC_METHOD, - "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService/hello"), - equalTo(SERVER_ADDRESS, "127.0.0.1"), - satisfies( - SERVER_PORT, - val -> val.isInstanceOf(Long.class))))))); + .waitAndAssertHistogramPoints( + metric -> + metric + .satisfies(hasScopeName("io.opentelemetry.sofa-rpc-5.4")) + .hasName("rpc.client.call.duration") + .hasUnit("s"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "sofarpc"), + equalTo(RPC_METHOD, genericServiceSpanName()), + equalTo(SERVER_ADDRESS, "127.0.0.1"), + satisfies(SERVER_PORT, val -> val.isInstanceOf(Long.class))), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "sofarpc"), + equalTo( + RPC_METHOD, + "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService/hello"), + equalTo(SERVER_ADDRESS, "127.0.0.1"), + satisfies(SERVER_PORT, val -> val.isInstanceOf(Long.class)))); } } @@ -511,101 +485,80 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), if (emitOldRpcSemconv()) { testing() - .waitAndAssertMetrics( - "io.opentelemetry.sofa-rpc-5.4", - "rpc.server.duration", - metrics -> - metrics.anySatisfy( - metric -> - assertThat(metric) - .hasUnit("ms") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "sofarpc"), - equalTo( - RPC_SERVICE, - "io.opentelemetry.instrumentation.sofarpc.v5_4.api.MiddleService"), - equalTo(RPC_METHOD, "hello")), - // HelloService SERVER metrics are also kept for local - // calls - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "sofarpc"), - equalTo( - RPC_SERVICE, - "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService"), - equalTo(RPC_METHOD, "hello")))))); + .waitAndAssertHistogramPoints( + metric -> + metric + .satisfies(hasScopeName("io.opentelemetry.sofa-rpc-5.4")) + .hasName("rpc.server.duration") + .hasUnit("ms"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "sofarpc"), + equalTo( + RPC_SERVICE, + "io.opentelemetry.instrumentation.sofarpc.v5_4.api.MiddleService"), + equalTo(RPC_METHOD, "hello")), + // HelloService SERVER metrics are also kept for local + // calls + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "sofarpc"), + equalTo( + RPC_SERVICE, + "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService"), + equalTo(RPC_METHOD, "hello"))); testing() - .waitAndAssertMetrics( - "io.opentelemetry.sofa-rpc-5.4", - "rpc.client.duration", - metrics -> - metrics.anySatisfy( - metric -> - assertThat(metric) - .hasUnit("ms") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "sofarpc"), - equalTo(RPC_SERVICE, GenericService.class.getName()), - equalTo(RPC_METHOD, genericMethodName()), - equalTo(SERVER_ADDRESS, "127.0.0.1"), - satisfies( - SERVER_PORT, val -> val.isInstanceOf(Long.class)), - satisfies( - NETWORK_TYPE, - AbstractSofaRpcTest::assertNetworkType)))))); + .waitAndAssertHistogramPoints( + metric -> + metric + .satisfies(hasScopeName("io.opentelemetry.sofa-rpc-5.4")) + .hasName("rpc.client.duration") + .hasUnit("ms"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "sofarpc"), + equalTo(RPC_SERVICE, GenericService.class.getName()), + equalTo(RPC_METHOD, genericMethodName()), + equalTo(SERVER_ADDRESS, "127.0.0.1"), + satisfies(SERVER_PORT, val -> val.isInstanceOf(Long.class)), + satisfies(NETWORK_TYPE, AbstractSofaRpcTest::assertNetworkType))); } if (emitPreviewRpcSemconv()) { testing() - .waitAndAssertMetrics( - "io.opentelemetry.sofa-rpc-5.4", - "rpc.server.call.duration", - metrics -> - metrics.anySatisfy( - metric -> - assertThat(metric) - .hasUnit("s") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "sofarpc"), - equalTo( - RPC_METHOD, - "io.opentelemetry.instrumentation.sofarpc.v5_4.api.MiddleService/hello")), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "sofarpc"), - equalTo( - RPC_METHOD, - "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService/hello")))))); + .waitAndAssertHistogramPoints( + metric -> + metric + .satisfies(hasScopeName("io.opentelemetry.sofa-rpc-5.4")) + .hasName("rpc.server.call.duration") + .hasUnit("s"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "sofarpc"), + equalTo( + RPC_METHOD, + "io.opentelemetry.instrumentation.sofarpc.v5_4.api.MiddleService/hello")), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "sofarpc"), + equalTo( + RPC_METHOD, + "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService/hello"))); testing() - .waitAndAssertMetrics( - "io.opentelemetry.sofa-rpc-5.4", - "rpc.client.call.duration", - metrics -> - metrics.anySatisfy( - metric -> - assertThat(metric) - .hasUnit("s") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "sofarpc"), - equalTo(RPC_METHOD, genericServiceSpanName()), - equalTo(SERVER_ADDRESS, "127.0.0.1"), - satisfies( - SERVER_PORT, - val -> val.isInstanceOf(Long.class))))))); + .waitAndAssertHistogramPoints( + metric -> + metric + .satisfies(hasScopeName("io.opentelemetry.sofa-rpc-5.4")) + .hasName("rpc.client.call.duration") + .hasUnit("s"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "sofarpc"), + equalTo(RPC_METHOD, genericServiceSpanName()), + equalTo(SERVER_ADDRESS, "127.0.0.1"), + satisfies(SERVER_PORT, val -> val.isInstanceOf(Long.class)))); } } } diff --git a/instrumentation/spring/spring-ai-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/ai/v1_0/AbstractOpenAiChatModelTest.java b/instrumentation/spring/spring-ai-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/ai/v1_0/AbstractOpenAiChatModelTest.java index 0373ef3704f4..f08cafee24e9 100644 --- a/instrumentation/spring/spring-ai-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/ai/v1_0/AbstractOpenAiChatModelTest.java +++ b/instrumentation/spring/spring-ai-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/ai/v1_0/AbstractOpenAiChatModelTest.java @@ -110,7 +110,6 @@ private static void assertMetrics() { metric -> metric .hasName("gen_ai.client.operation.duration") - .hasUnit("s") .satisfies( hasHistogramPointsSatisfyingExactly( point -> @@ -124,7 +123,6 @@ private static void assertMetrics() { metric -> metric .hasName("gen_ai.client.token.usage") - .hasUnit("{token}") .satisfies( hasHistogramPointsSatisfyingExactly( point -> diff --git a/instrumentation/spring/spring-ai-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/ai/v1_0/ChatModelTest.java b/instrumentation/spring/spring-ai-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/ai/v1_0/ChatModelTest.java index 427606c394fa..6db88db58eb6 100644 --- a/instrumentation/spring/spring-ai-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/ai/v1_0/ChatModelTest.java +++ b/instrumentation/spring/spring-ai-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/ai/v1_0/ChatModelTest.java @@ -8,6 +8,7 @@ import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.api.trace.SpanKind.CLIENT; import static io.opentelemetry.api.trace.SpanKind.INTERNAL; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; @@ -861,7 +862,6 @@ private static void assertMetrics() { metric -> metric .hasName("gen_ai.client.operation.duration") - .hasUnit("s") .satisfies( hasHistogramPointsSatisfyingExactly( point -> @@ -875,7 +875,6 @@ private static void assertMetrics() { metric -> metric .hasName("gen_ai.client.token.usage") - .hasUnit("{token}") .satisfies( hasHistogramPointsSatisfyingExactly( point -> @@ -900,9 +899,10 @@ private static void assertMetrics() { private static void assertMetricsWithoutTokenUsage() { testing.waitAndAssertHistogramPoints( - INSTRUMENTATION_NAME, - "gen_ai.client.operation.duration", - metric -> metric.hasUnit("s"), + metric -> + metric + .satisfies(hasScopeName(INSTRUMENTATION_NAME)) + .hasName("gen_ai.client.operation.duration"), point -> point .hasSumGreaterThan(0.0) diff --git a/instrumentation/spring/spring-integration-4.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/integration/v4_1/MessageProducerSupportInstrumentationTest.java b/instrumentation/spring/spring-integration-4.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/integration/v4_1/MessageProducerSupportInstrumentationTest.java index e420f9ec4c05..9abae941fc14 100644 --- a/instrumentation/spring/spring-integration-4.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/integration/v4_1/MessageProducerSupportInstrumentationTest.java +++ b/instrumentation/spring/spring-integration-4.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/integration/v4_1/MessageProducerSupportInstrumentationTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.spring.integration.v4_1; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.instrumentation.testing.util.TestLatestDeps.testLatestDeps; import static io.opentelemetry.javaagent.instrumentation.spring.integration.v4_1.SpringIntegrationTestHelper.assertNoMetrics; import static io.opentelemetry.javaagent.instrumentation.spring.integration.v4_1.SpringIntegrationTestHelper.assertProcessMetrics; @@ -336,9 +337,10 @@ private static void assertUnrelatedProcessMetrics() { private static void assertSpringRabbitProcessMetrics() { testing.waitAndAssertHistogramPoints( - SPRING_RABBIT_INSTRUMENTATION_NAME, - "messaging.process.duration", - metric -> metric.hasUnit("s"), + metric -> + metric + .satisfies(hasScopeName(SPRING_RABBIT_INSTRUMENTATION_NAME)) + .hasName("messaging.process.duration"), point -> point.hasCount(1)); } diff --git a/instrumentation/spring/spring-integration-4.1/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/integration/v4_1/SpringIntegrationTestHelper.java b/instrumentation/spring/spring-integration-4.1/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/integration/v4_1/SpringIntegrationTestHelper.java index 935009deb2e3..7ee76bb4c376 100644 --- a/instrumentation/spring/spring-integration-4.1/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/integration/v4_1/SpringIntegrationTestHelper.java +++ b/instrumentation/spring/spring-integration-4.1/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/integration/v4_1/SpringIntegrationTestHelper.java @@ -5,7 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.spring.integration.v4_1; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; @@ -59,25 +59,21 @@ static void assertProcessMetrics( ? satisfies(ERROR_TYPE, AbstractStringAssert::isNotEmpty) : equalTo(ERROR_TYPE, null); - testing.waitAndAssertMetrics( - INSTRUMENTATION_NAME, - "messaging.process.duration", - metrics -> - metrics.satisfiesExactly( - metric -> - assertThat(metric) - .hasUnit("s") - .hasDescription("Duration of processing operation.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasCount(expectedCount) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "process"), - equalTo(MESSAGING_SYSTEM, "spring_integration"), - equalTo(MESSAGING_DESTINATION_NAME, destinationName), - errorType))))); + testing.waitAndAssertHistogramPoints( + metric -> + metric + .satisfies(hasScopeName(INSTRUMENTATION_NAME)) + .hasName("messaging.process.duration") + .hasDescription("Duration of processing operation.") + .hasUnit("s"), + point -> + point + .hasCount(expectedCount) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "process"), + equalTo(MESSAGING_SYSTEM, "spring_integration"), + equalTo(MESSAGING_DESTINATION_NAME, destinationName), + errorType)); testing.waitAndAssertMetrics( INSTRUMENTATION_NAME, "messaging.client.consumed.messages", @@ -103,26 +99,22 @@ static void assertProcessMetrics( } static void assertSendMetrics(InstrumentationExtension testing, String destinationName) { - testing.waitAndAssertMetrics( - INSTRUMENTATION_NAME, - "messaging.client.operation.duration", - metrics -> - metrics.satisfiesExactly( - metric -> - assertThat(metric) - .hasUnit("s") - .hasDescription( - "Duration of messaging operation initiated by a producer or consumer client.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "send"), - equalTo(MESSAGING_SYSTEM, "spring_integration"), - equalTo(MESSAGING_DESTINATION_NAME, destinationName), - equalTo(MESSAGING_OPERATION_TYPE, "send")))))); + testing.waitAndAssertHistogramPoints( + metric -> + metric + .satisfies(hasScopeName(INSTRUMENTATION_NAME)) + .hasName("messaging.client.operation.duration") + .hasDescription( + "Duration of messaging operation initiated by a producer or consumer client.") + .hasUnit("s"), + point -> + point + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "send"), + equalTo(MESSAGING_SYSTEM, "spring_integration"), + equalTo(MESSAGING_DESTINATION_NAME, destinationName), + equalTo(MESSAGING_OPERATION_TYPE, "send"))); testing.waitAndAssertMetrics( INSTRUMENTATION_NAME, "messaging.client.sent.messages", diff --git a/instrumentation/spring/spring-pulsar-1.0/testing/src/main/java/io/opentelemetry/instrumentation/spring/pulsar/v1_0/AbstractSpringPulsarTest.java b/instrumentation/spring/spring-pulsar-1.0/testing/src/main/java/io/opentelemetry/instrumentation/spring/pulsar/v1_0/AbstractSpringPulsarTest.java index c79c3b62068a..49245840aca6 100644 --- a/instrumentation/spring/spring-pulsar-1.0/testing/src/main/java/io/opentelemetry/instrumentation/spring/pulsar/v1_0/AbstractSpringPulsarTest.java +++ b/instrumentation/spring/spring-pulsar-1.0/testing/src/main/java/io/opentelemetry/instrumentation/spring/pulsar/v1_0/AbstractSpringPulsarTest.java @@ -6,7 +6,7 @@ package io.opentelemetry.instrumentation.spring.pulsar.v1_0; import static io.opentelemetry.api.common.AttributeKey.stringKey; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; @@ -113,24 +113,20 @@ void testSpringPulsar() throws PulsarClientException, InterruptedException { protected void assertProcessMetrics() { - testing.waitAndAssertMetrics( - "io.opentelemetry.spring-pulsar-1.0", - "messaging.process.duration", - metrics -> - metrics.satisfiesExactly( - metric -> - assertThat(metric) - .hasUnit("s") - .hasDescription("Duration of processing operation.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "process"), - equalTo(MESSAGING_SYSTEM, "pulsar"), - equalTo(MESSAGING_DESTINATION_NAME, OTEL_TOPIC)))))); + testing.waitAndAssertHistogramPoints( + metric -> + metric + .satisfies(hasScopeName("io.opentelemetry.spring-pulsar-1.0")) + .hasName("messaging.process.duration") + .hasDescription("Duration of processing operation.") + .hasUnit("s"), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "process"), + equalTo(MESSAGING_SYSTEM, "pulsar"), + equalTo(MESSAGING_DESTINATION_NAME, OTEL_TOPIC))); testing.waitAndAssertMetrics( "io.opentelemetry.pulsar-2.8", diff --git a/instrumentation/spring/spring-rabbit-1.0/javaagent/src/version11Test/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbit11SimpleMessageListenerContainerTest.java b/instrumentation/spring/spring-rabbit-1.0/javaagent/src/version11Test/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbit11SimpleMessageListenerContainerTest.java index fbe3497dbd53..52828681ff4e 100644 --- a/instrumentation/spring/spring-rabbit-1.0/javaagent/src/version11Test/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbit11SimpleMessageListenerContainerTest.java +++ b/instrumentation/spring/spring-rabbit-1.0/javaagent/src/version11Test/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbit11SimpleMessageListenerContainerTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.spring.rabbit.v1_0; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static java.util.concurrent.TimeUnit.SECONDS; import static org.assertj.core.api.Assertions.assertThat; @@ -107,9 +108,10 @@ void shouldUseSpringProcessTelemetry() throws InterruptedException { }); testing.waitAndAssertHistogramPoints( - SPRING_INSTRUMENTATION_NAME, - "messaging.process.duration", - metric -> metric.hasUnit("s"), + metric -> + metric + .satisfies(hasScopeName(SPRING_INSTRUMENTATION_NAME)) + .hasName("messaging.process.duration"), point -> point.hasCount(1)); testing.waitAndAssertMetrics( SPRING_INSTRUMENTATION_NAME, diff --git a/instrumentation/spring/spring-rabbit-1.0/javaagent/src/version20Test/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbit20DirectMessageListenerContainerTest.java b/instrumentation/spring/spring-rabbit-1.0/javaagent/src/version20Test/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbit20DirectMessageListenerContainerTest.java index c16c0874d5c8..948314847069 100644 --- a/instrumentation/spring/spring-rabbit-1.0/javaagent/src/version20Test/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbit20DirectMessageListenerContainerTest.java +++ b/instrumentation/spring/spring-rabbit-1.0/javaagent/src/version20Test/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbit20DirectMessageListenerContainerTest.java @@ -102,9 +102,10 @@ void shouldUseSpringProcessTelemetry() throws InterruptedException { }); testing.waitAndAssertHistogramPoints( - SPRING_INSTRUMENTATION_NAME, - "messaging.process.duration", - metric -> metric.hasUnit("s"), + metric -> + metric + .satisfies(hasScopeName(SPRING_INSTRUMENTATION_NAME)) + .hasName("messaging.process.duration"), point -> point.hasCount(1)); testing.waitAndAssertMetrics( SPRING_INSTRUMENTATION_NAME, diff --git a/instrumentation/spring/spring-webflux/spring-webflux-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/webflux/v5_0/client/SpringWebfluxClientInstrumentationTest.java b/instrumentation/spring/spring-webflux/spring-webflux-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/webflux/v5_0/client/SpringWebfluxClientInstrumentationTest.java index 11987eabefa7..345ad9fe580a 100644 --- a/instrumentation/spring/spring-webflux/spring-webflux-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/webflux/v5_0/client/SpringWebfluxClientInstrumentationTest.java +++ b/instrumentation/spring/spring-webflux/spring-webflux-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/webflux/v5_0/client/SpringWebfluxClientInstrumentationTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.spring.webflux.v5_0.client; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.HttpAttributes.HTTP_REQUEST_METHOD; import static io.opentelemetry.semconv.HttpAttributes.HTTP_RESPONSE_STATUS_CODE; @@ -67,9 +68,10 @@ void shouldAddProtocolVersionToDurationMetric() { assertThat(responseCode).isEqualTo(200); testing.waitAndAssertHistogramPoints( - "io.opentelemetry.spring-webflux-5.0", - "http.client.request.duration", - metric -> metric.hasUnit("s"), + metric -> + metric + .satisfies(hasScopeName("io.opentelemetry.spring-webflux-5.0")) + .hasName("http.client.request.duration"), point -> point.hasAttributesSatisfyingExactly( equalTo(HTTP_REQUEST_METHOD, "GET"), diff --git a/instrumentation/thrift-0.13/testing/src/main/java/io/opentelemetry/instrumentation/thrift/v0_13/AbstractThriftTest.java b/instrumentation/thrift-0.13/testing/src/main/java/io/opentelemetry/instrumentation/thrift/v0_13/AbstractThriftTest.java index 172d69074ab4..f99dff51f15b 100644 --- a/instrumentation/thrift-0.13/testing/src/main/java/io/opentelemetry/instrumentation/thrift/v0_13/AbstractThriftTest.java +++ b/instrumentation/thrift-0.13/testing/src/main/java/io/opentelemetry/instrumentation/thrift/v0_13/AbstractThriftTest.java @@ -25,7 +25,7 @@ import static io.opentelemetry.instrumentation.testing.junit.rpc.SemconvRpcStabilityUtil.emitOldRpcSemconv; import static io.opentelemetry.instrumentation.testing.junit.rpc.SemconvRpcStabilityUtil.emitPreviewRpcSemconv; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.instrumentation.testing.util.TestLatestDeps.testLatestDeps; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; @@ -355,73 +355,63 @@ protected SpanDataAssert assertServerSpan(SpanDataAssert span, String method) { private void assertMetrics(int serverPort) { if (emitOldRpcSemconv()) { getTesting() - .waitAndAssertMetrics( - "io.opentelemetry.thrift-0.13", + .waitAndAssertHistogramPoints( metric -> metric + .satisfies(hasScopeName("io.opentelemetry.thrift-0.13")) .hasName("rpc.server.duration") - .hasUnit("ms") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(SERVER_ADDRESS, "127.0.0.1"), - equalTo(SERVER_PORT, serverPort), - equalTo(RPC_METHOD, "say"), - equalTo(RPC_SERVICE, CustomHandler.class.getName()), - equalTo(RPC_SYSTEM, "apache_thrift"), - equalTo(NETWORK_TYPE, "ipv4"))))); + .hasUnit("ms"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(SERVER_ADDRESS, "127.0.0.1"), + equalTo(SERVER_PORT, serverPort), + equalTo(RPC_METHOD, "say"), + equalTo(RPC_SERVICE, CustomHandler.class.getName()), + equalTo(RPC_SYSTEM, "apache_thrift"), + equalTo(NETWORK_TYPE, "ipv4"))); getTesting() - .waitAndAssertMetrics( - "io.opentelemetry.thrift-0.13", + .waitAndAssertHistogramPoints( metric -> metric + .satisfies(hasScopeName("io.opentelemetry.thrift-0.13")) .hasName("rpc.client.duration") - .hasUnit("ms") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, serverPort), - equalTo(RPC_METHOD, "say"), - equalTo(RPC_SERVICE, CustomService.class.getName()), - equalTo(RPC_SYSTEM, "apache_thrift"), - equalTo(NETWORK_TYPE, "ipv4"))))); + .hasUnit("ms"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, serverPort), + equalTo(RPC_METHOD, "say"), + equalTo(RPC_SERVICE, CustomService.class.getName()), + equalTo(RPC_SYSTEM, "apache_thrift"), + equalTo(NETWORK_TYPE, "ipv4"))); } if (emitPreviewRpcSemconv()) { getTesting() - .waitAndAssertMetrics( - "io.opentelemetry.thrift-0.13", + .waitAndAssertHistogramPoints( metric -> metric + .satisfies(hasScopeName("io.opentelemetry.thrift-0.13")) .hasName("rpc.server.call.duration") - .hasUnit("s") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "apache_thrift"), - equalTo(SERVER_ADDRESS, "127.0.0.1"), - equalTo(SERVER_PORT, serverPort), - equalTo( - RPC_METHOD, CustomHandler.class.getName() + "/say"))))); + .hasUnit("s"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "apache_thrift"), + equalTo(SERVER_ADDRESS, "127.0.0.1"), + equalTo(SERVER_PORT, serverPort), + equalTo(RPC_METHOD, CustomHandler.class.getName() + "/say"))); getTesting() - .waitAndAssertMetrics( - "io.opentelemetry.thrift-0.13", + .waitAndAssertHistogramPoints( metric -> metric + .satisfies(hasScopeName("io.opentelemetry.thrift-0.13")) .hasName("rpc.client.call.duration") - .hasUnit("s") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "apache_thrift"), - equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, serverPort), - equalTo( - RPC_METHOD, CustomService.class.getName() + "/say"))))); + .hasUnit("s"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "apache_thrift"), + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, serverPort), + equalTo(RPC_METHOD, CustomService.class.getName() + "/say"))); } } diff --git a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/InstrumentationTestRunner.java b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/InstrumentationTestRunner.java index 3b0727e35340..7e5a7867377c 100644 --- a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/InstrumentationTestRunner.java +++ b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/InstrumentationTestRunner.java @@ -246,29 +246,29 @@ public final void waitAndAssertMetrics( } } - /** - * Waits for exactly one histogram with the given instrumentation scope and metric name, then - * asserts its metadata and points. - */ + /** Waits for a histogram matching the metadata and exact unordered point assertions. */ @SafeVarargs public final void waitAndAssertHistogramPoints( - String instrumentationName, - String metricName, - Consumer metricAssertion, - Consumer... pointAssertions) { - waitAndAssertMetrics( - instrumentationName, - metricName, - metrics -> - metrics - .hasSize(1) - .singleElement() - .satisfies( - metric -> { - MetricAssert metricAssert = assertThat(metric); - metricAssertion.accept(metricAssert); - metricAssert.satisfies(hasHistogramPointsSatisfyingExactly(pointAssertions)); - })); + Consumer metricAssertion, Consumer... pointAssertions) { + String[] matchedInstrumentationName = {""}; + awaitUntilAsserted( + () -> { + matchedInstrumentationName[0] = ""; + assertThat(getExportedMetrics()) + .anySatisfy( + metric -> { + MetricAssert metricAssert = assertThat(metric); + metricAssertion.accept(metricAssert); + metricAssert.satisfies(hasHistogramPointsSatisfyingExactly(pointAssertions)); + matchedInstrumentationName[0] = metric.getInstrumentationScopeInfo().getName(); + }); + }); + + TelemetryDataUtil.assertMetricScopeVersion(metricsForScope(matchedInstrumentationName[0])); + + if (Boolean.getBoolean("collectMetadata")) { + collectEmittedMetrics(getExportedMetrics()); + } } private List metricsForScope(String instrumentationName) { diff --git a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/InstrumentationExtension.java b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/InstrumentationExtension.java index 3a15f39aa52c..6378cf533518 100644 --- a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/InstrumentationExtension.java +++ b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/InstrumentationExtension.java @@ -116,19 +116,12 @@ public final void waitAndAssertMetrics( testRunner.waitAndAssertMetrics(instrumentationName, assertions); } - /** - * Waits for exactly one histogram with the given instrumentation scope and metric name, then - * asserts its metadata and points. - */ + /** Waits for a histogram matching the metadata and exact unordered point assertions. */ @SafeVarargs @SuppressWarnings("varargs") public final void waitAndAssertHistogramPoints( - String instrumentationName, - String metricName, - Consumer metricAssertion, - Consumer... pointAssertions) { - testRunner.waitAndAssertHistogramPoints( - instrumentationName, metricName, metricAssertion, pointAssertions); + Consumer metricAssertion, Consumer... pointAssertions) { + testRunner.waitAndAssertHistogramPoints(metricAssertion, pointAssertions); } /** diff --git a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbClientMetricsTestUtil.java b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbClientMetricsTestUtil.java index 0d53d8f751d2..49ef45b536e5 100644 --- a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbClientMetricsTestUtil.java +++ b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbClientMetricsTestUtil.java @@ -5,6 +5,7 @@ package io.opentelemetry.instrumentation.testing.junit.db; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.semconv.DbAttributes.DB_SYSTEM_NAME; @@ -23,9 +24,12 @@ public static void assertDurationMetric( // https://opentelemetry.io/docs/specs/semconv/database/database-metrics/#metric-dbclientoperationduration assertThat(expectedKeys).extracting(AttributeKey::getKey).contains(DB_SYSTEM_NAME.getKey()); testing.waitAndAssertHistogramPoints( - instrumentationName, - "db.client.operation.duration", - metric -> metric.hasUnit("s").hasDescription("Duration of database client operations."), + metric -> + metric + .satisfies(hasScopeName(instrumentationName)) + .hasName("db.client.operation.duration") + .hasDescription("Duration of database client operations.") + .hasUnit("s"), point -> point.hasAttributesSatisfying( attributes -> assertThat(attributes.asMap()).containsOnlyKeys(expectedKeys))); diff --git a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbConnectionPoolMetricsAssertions.java b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbConnectionPoolMetricsAssertions.java index b9b0143ca830..7a18ed838966 100644 --- a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbConnectionPoolMetricsAssertions.java +++ b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbConnectionPoolMetricsAssertions.java @@ -5,7 +5,7 @@ package io.opentelemetry.instrumentation.testing.junit.db; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_CLIENT_CONNECTION_POOL_NAME; @@ -257,44 +257,36 @@ private void verifyTimeoutsMetric(MetricData metric) { } private void verifyCreateTime() { - testing.waitAndAssertMetrics( - instrumentationName, - "db.client.connection.create_time", - metrics -> metrics.anySatisfy(this::verifyCreateTimeMetric)); - } - - private void verifyCreateTimeMetric(MetricData metric) { - assertThat(metric) - .hasUnit("s") - .hasDescription("The time it took to create a new connection.") - .satisfies(hasHistogramPointsSatisfyingExactly(this::verifyPointAttributes)); + testing.waitAndAssertHistogramPoints( + metric -> + metric + .satisfies(hasScopeName(instrumentationName)) + .hasName("db.client.connection.create_time") + .hasUnit("s") + .hasDescription("The time it took to create a new connection."), + this::verifyPointAttributes); } private void verifyWaitTime() { - testing.waitAndAssertMetrics( - instrumentationName, - "db.client.connection.wait_time", - metrics -> metrics.anySatisfy(this::verifyWaitTimeMetric)); - } - - private void verifyWaitTimeMetric(MetricData metric) { - assertThat(metric) - .hasUnit("s") - .hasDescription("The time it took to obtain an open connection from the pool.") - .satisfies(hasHistogramPointsSatisfyingExactly(this::verifyPointAttributes)); + testing.waitAndAssertHistogramPoints( + metric -> + metric + .satisfies(hasScopeName(instrumentationName)) + .hasName("db.client.connection.wait_time") + .hasUnit("s") + .hasDescription("The time it took to obtain an open connection from the pool."), + this::verifyPointAttributes); } private void verifyUseTime() { - testing.waitAndAssertMetrics( - instrumentationName, - "db.client.connection.use_time", - metrics -> metrics.anySatisfy(this::verifyUseTimeMetric)); - } - - private void verifyUseTimeMetric(MetricData metric) { - assertThat(metric) - .hasUnit("s") - .hasDescription("The time between borrowing a connection and returning it to the pool.") - .satisfies(hasHistogramPointsSatisfyingExactly(this::verifyPointAttributes)); + testing.waitAndAssertHistogramPoints( + metric -> + metric + .satisfies(hasScopeName(instrumentationName)) + .hasName("db.client.connection.use_time") + .hasUnit("s") + .hasDescription( + "The time between borrowing a connection and returning it to the pool."), + this::verifyPointAttributes); } } diff --git a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpClientTest.java b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpClientTest.java index 8dbbe68ba1dd..dfc533ed7c4e 100644 --- a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpClientTest.java +++ b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpClientTest.java @@ -10,6 +10,7 @@ import static io.opentelemetry.instrumentation.api.internal.SemconvExceptionSignal.emitExceptionAsLogs; import static io.opentelemetry.instrumentation.api.internal.SemconvExceptionSignal.emitExceptionAsSpanEvents; import static io.opentelemetry.instrumentation.testing.junit.service.SemconvServiceStabilityUtil.maybeStablePeerService; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeSchemaUrl; import static io.opentelemetry.instrumentation.testing.util.TelemetryDataUtil.comparingRootSpanAttribute; import static io.opentelemetry.instrumentation.testing.util.TelemetryDataUtil.orderByRootSpanName; @@ -793,9 +794,12 @@ void httpClientMetrics() throws Exception { }); testing.waitAndAssertHistogramPoints( - instrumentationName.get(), - "http.client.request.duration", - metric -> metric.hasDescription("Duration of HTTP client requests.").hasUnit("s"), + metric -> + metric + .satisfies(hasScopeName(instrumentationName.get())) + .hasName("http.client.request.duration") + .hasDescription("Duration of HTTP client requests.") + .hasUnit("s"), point -> point.hasSumGreaterThan(0.0)); } diff --git a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpServerTest.java b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpServerTest.java index b53137bc579d..b91293c74fec 100644 --- a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpServerTest.java +++ b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpServerTest.java @@ -20,6 +20,7 @@ import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.PATH_PARAM; import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.REDIRECT; import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.SUCCESS; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeSchemaUrl; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; @@ -455,9 +456,12 @@ void httpServerMetrics() { }); testing.waitAndAssertHistogramPoints( - instrumentationName.get(), - "http.server.request.duration", - metric -> metric.hasDescription("Duration of HTTP server requests.").hasUnit("s"), + metric -> + metric + .satisfies(hasScopeName(instrumentationName.get())) + .hasName("http.server.request.duration") + .hasDescription("Duration of HTTP server requests.") + .hasUnit("s"), point -> point.hasSumGreaterThan(0.0)); } diff --git a/testing-common/src/test/java/io/opentelemetry/instrumentation/testing/junit/LibraryInstrumentationExtensionTest.java b/testing-common/src/test/java/io/opentelemetry/instrumentation/testing/junit/LibraryInstrumentationExtensionTest.java index 6b073a38e3e6..a933db46fa6c 100644 --- a/testing-common/src/test/java/io/opentelemetry/instrumentation/testing/junit/LibraryInstrumentationExtensionTest.java +++ b/testing-common/src/test/java/io/opentelemetry/instrumentation/testing/junit/LibraryInstrumentationExtensionTest.java @@ -6,6 +6,7 @@ package io.opentelemetry.instrumentation.testing.junit; import static io.opentelemetry.api.common.AttributeKey.stringKey; +import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static org.assertj.core.api.Assertions.assertThatThrownBy; import io.opentelemetry.api.common.Attributes; @@ -69,15 +70,24 @@ void shouldAssertHistogramPoints() { .setUnit("ms") .build() .record(3); + testing + .getOpenTelemetry() + .getMeter("other-scope") + .histogramBuilder("duration") + .build() + .record(5); testing.waitAndAssertHistogramPoints( - "test", - "duration", - metric -> metric.hasUnit("s").hasDescription("Test duration."), + metric -> + metric + .satisfies(hasScopeName("test")) + .hasName("duration") + .hasDescription("Test duration."), point -> point.hasCount(1).hasSum(4).hasAttributes(secondAttributes), point -> point.hasCount(1).hasSum(2).hasAttributes(firstAttributes)); testing.waitAndAssertHistogramPoints( - "test", "other", metric -> metric.hasUnit("ms"), point -> point.hasCount(1).hasSum(3)); + metric -> metric.satisfies(hasScopeName("test")).hasName("other"), + point -> point.hasCount(1).hasSum(3)); } @Test @@ -93,8 +103,6 @@ void shouldPropagateMetricAssertionFailure() { assertThatThrownBy( () -> testing.waitAndAssertHistogramPoints( - "test", - "failed-duration", metric -> { throw new IllegalStateException("metric assertion failed"); })) From 236c1ad44078187f1f63bba651e397827120375a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 20 Oct 2026 03:24:12 +0000 Subject: [PATCH 05/14] Require exact histogram metric selection Co-authored-by: trask <218610+trask@users.noreply.github.com> --- .../apachedubbo/v2_7/AbstractDubboTest.java | 65 +++----- .../v2_7/AbstractDubboTraceChainTest.java | 65 +++----- .../avaje/jex/v3_0/JexTest.java | 12 +- .../awssdk/v1_11/SqsMetricsAssertions.java | 14 +- .../awssdk/v2_2/SqsMetricsAssertions.java | 14 +- .../CamelMessagingMetricsAssertions.java | 10 +- .../cassandra/v4_0/CassandraTest.java | 30 ++-- .../cassandra/v4_4/CassandraTest.java | 30 ++-- .../clientv1/v0_5/ClickHouseClientV1Test.java | 12 +- .../clientv2/v0_8/ClickHouseClientV2Test.java | 12 +- .../v4_0/DropwizardMetricsTest.java | 17 +- .../grpc/v1_6/AbstractGrpcStreamingTest.java | 33 ++-- .../grpc/v1_6/AbstractGrpcTest.java | 65 +++----- .../iceberg/v1_8/AbstractIcebergTest.java | 9 +- .../javalin/AbstractJavalinTest.java | 12 +- .../jdbc/datasource/JdbcTelemetryTest.java | 12 +- .../jedis/v2_0/ShardedJedisClientTest.java | 12 +- .../jedis/v3_0/ShardedJedis30ClientTest.java | 22 +-- .../jedis/v4_0/Jedis40ClientTest.java | 20 +-- .../v7_0/KubernetesClientTest.java | 10 +- .../v7_0/KubernetesClientVer20Test.java | 10 +- .../v5_0/LettuceReactiveClientTest.java | 10 +- .../v5_1/AbstractLettuceClientTest.java | 13 +- ...istributionSummaryHistogramGaugesTest.java | 17 +- .../v1_5/AbstractDistributionSummaryTest.java | 37 +++-- .../v1_5/AbstractNamingConventionTest.java | 28 ++-- .../v1_5/AbstractPrometheusModeTest.java | 28 ++-- .../AbstractTimerHistogramGaugesTest.java | 19 +-- .../v1_5/AbstractTimerMillisecondsTest.java | 10 +- .../micrometer/v1_5/AbstractTimerTest.java | 27 ++-- .../mongo/v4_0/MongoConfiguredTargetTest.java | 14 +- .../nats/v2_17/AbstractNatsTest.java | 14 +- .../instrumentation/openai/v1_1/ChatTest.java | 101 ++++++------ .../openai/v1_1/AbstractChatTest.java | 149 ++++++++++-------- .../openai/v1_1/AbstractEmbeddingsTest.java | 25 +-- .../v1_10/metrics/MeterTest.java | 9 +- .../v1_31/metrics/MeterTest.java | 9 +- .../v1_32/incubator/metrics/MeterTest.java | 9 +- .../v1_32/metrics/MeterTest.java | 9 +- .../v1_37/incubator/metrics/MeterTest.java | 9 +- .../v1_37/incubator/metrics/MeterTest.java | 9 +- .../v1_37/metrics/MeterTest.java | 9 +- .../v1_65/incubator/metrics/MeterTest.java | 30 +++- .../pulsar/v2_8/PulsarClientTest.java | 14 +- .../client/RatpackHttpClientTest.java | 13 +- .../v4_8/RocketMqMetricsTest.java | 31 ++-- ...RocketMqClientSuppressReceiveSpanTest.java | 50 +++--- .../v5_0/AbstractRocketMqClientTest.java | 94 ++++++----- .../v5_0/RocketMqSimpleConsumerTest.java | 28 ++-- .../RuntimeTelemetryDefaultsTest.java | 20 +-- .../internal/GarbageCollectorTest.java | 10 +- .../sofarpc/v5_4/AbstractSofaRpcTest.java | 97 +++++------- .../v5_4/AbstractSofaRpcTraceChainTest.java | 65 +++----- .../spring/ai/v1_0/ChatModelTest.java | 25 +-- ...ageProducerSupportInstrumentationTest.java | 10 +- .../v4_1/SpringIntegrationTestHelper.java | 14 +- .../pulsar/v1_0/AbstractSpringPulsarTest.java | 10 +- ...t11SimpleMessageListenerContainerTest.java | 10 +- ...t20DirectMessageListenerContainerTest.java | 9 +- ...pringWebfluxClientInstrumentationTest.java | 24 +-- .../thrift/v0_13/AbstractThriftTest.java | 33 ++-- .../testing/InstrumentationTestRunner.java | 35 ++-- .../junit/InstrumentationExtension.java | 10 +- .../junit/db/DbClientMetricsTestUtil.java | 10 +- .../db/DbConnectionPoolMetricsAssertions.java | 17 +- .../junit/http/AbstractHttpClientTest.java | 10 +- .../junit/http/AbstractHttpServerTest.java | 10 +- .../InstrumentationTestRunnerTest.java | 110 +++++++++++++ .../LibraryInstrumentationExtensionTest.java | 14 +- 69 files changed, 931 insertions(+), 913 deletions(-) create mode 100644 testing-common/src/test/java/io/opentelemetry/instrumentation/testing/InstrumentationTestRunnerTest.java diff --git a/instrumentation/apache-dubbo-2.7/testing/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/AbstractDubboTest.java b/instrumentation/apache-dubbo-2.7/testing/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/AbstractDubboTest.java index 88f720eb151f..0cb0cee54d3b 100644 --- a/instrumentation/apache-dubbo-2.7/testing/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/AbstractDubboTest.java +++ b/instrumentation/apache-dubbo-2.7/testing/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/AbstractDubboTest.java @@ -9,7 +9,6 @@ import static io.opentelemetry.instrumentation.testing.junit.rpc.SemconvRpcStabilityUtil.emitOldRpcSemconv; import static io.opentelemetry.instrumentation.testing.junit.rpc.SemconvRpcStabilityUtil.emitPreviewRpcSemconv; import static io.opentelemetry.instrumentation.testing.junit.service.SemconvServiceStabilityUtil.maybeStablePeerService; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.instrumentation.testing.util.TestLatestDeps.testLatestDeps; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; @@ -203,11 +202,9 @@ void testApacheDubboBase() throws ReflectiveOperationException { if (emitOldRpcSemconv()) { testing() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName("io.opentelemetry.apache-dubbo-2.7")) - .hasName("rpc.server.duration") - .hasUnit("ms"), + "io.opentelemetry.apache-dubbo-2.7", + "rpc.server.duration", + metric -> metric.hasUnit("ms"), point -> point.hasAttributesSatisfyingExactly( equalTo(RPC_SYSTEM, "apache_dubbo"), @@ -218,11 +215,9 @@ void testApacheDubboBase() throws ReflectiveOperationException { testing() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName("io.opentelemetry.apache-dubbo-2.7")) - .hasName("rpc.client.duration") - .hasUnit("ms"), + "io.opentelemetry.apache-dubbo-2.7", + "rpc.client.duration", + metric -> metric.hasUnit("ms"), point -> point.hasAttributesSatisfyingExactly( equalTo(RPC_SYSTEM, "apache_dubbo"), @@ -236,11 +231,9 @@ void testApacheDubboBase() throws ReflectiveOperationException { if (emitPreviewRpcSemconv()) { testing() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName("io.opentelemetry.apache-dubbo-2.7")) - .hasName("rpc.server.call.duration") - .hasUnit("s"), + "io.opentelemetry.apache-dubbo-2.7", + "rpc.server.call.duration", + metric -> metric.hasUnit("s"), point -> point.hasAttributesSatisfyingExactly( equalTo(RPC_SYSTEM_NAME, "dubbo"), @@ -250,11 +243,9 @@ void testApacheDubboBase() throws ReflectiveOperationException { testing() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName("io.opentelemetry.apache-dubbo-2.7")) - .hasName("rpc.client.call.duration") - .hasUnit("s"), + "io.opentelemetry.apache-dubbo-2.7", + "rpc.client.call.duration", + metric -> metric.hasUnit("s"), point -> point.hasAttributesSatisfyingExactly( equalTo(RPC_SYSTEM_NAME, "dubbo"), @@ -374,11 +365,9 @@ void testApacheDubboTest() throws ReflectiveOperationException { if (emitOldRpcSemconv()) { testing() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName("io.opentelemetry.apache-dubbo-2.7")) - .hasName("rpc.server.duration") - .hasUnit("ms"), + "io.opentelemetry.apache-dubbo-2.7", + "rpc.server.duration", + metric -> metric.hasUnit("ms"), point -> point.hasAttributesSatisfyingExactly( equalTo(RPC_SYSTEM, "apache_dubbo"), @@ -389,11 +378,9 @@ void testApacheDubboTest() throws ReflectiveOperationException { testing() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName("io.opentelemetry.apache-dubbo-2.7")) - .hasName("rpc.client.duration") - .hasUnit("ms"), + "io.opentelemetry.apache-dubbo-2.7", + "rpc.client.duration", + metric -> metric.hasUnit("ms"), point -> point.hasAttributesSatisfyingExactly( equalTo(RPC_SYSTEM, "apache_dubbo"), @@ -407,11 +394,9 @@ void testApacheDubboTest() throws ReflectiveOperationException { if (emitPreviewRpcSemconv()) { testing() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName("io.opentelemetry.apache-dubbo-2.7")) - .hasName("rpc.server.call.duration") - .hasUnit("s"), + "io.opentelemetry.apache-dubbo-2.7", + "rpc.server.call.duration", + metric -> metric.hasUnit("s"), point -> point.hasAttributesSatisfyingExactly( equalTo(RPC_SYSTEM_NAME, "dubbo"), @@ -421,11 +406,9 @@ void testApacheDubboTest() throws ReflectiveOperationException { testing() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName("io.opentelemetry.apache-dubbo-2.7")) - .hasName("rpc.client.call.duration") - .hasUnit("s"), + "io.opentelemetry.apache-dubbo-2.7", + "rpc.client.call.duration", + metric -> metric.hasUnit("s"), point -> point.hasAttributesSatisfyingExactly( equalTo(RPC_SYSTEM_NAME, "dubbo"), diff --git a/instrumentation/apache-dubbo-2.7/testing/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/AbstractDubboTraceChainTest.java b/instrumentation/apache-dubbo-2.7/testing/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/AbstractDubboTraceChainTest.java index 2ee27fcd24b5..e39da1af72f9 100644 --- a/instrumentation/apache-dubbo-2.7/testing/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/AbstractDubboTraceChainTest.java +++ b/instrumentation/apache-dubbo-2.7/testing/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/AbstractDubboTraceChainTest.java @@ -10,7 +10,6 @@ import static io.opentelemetry.instrumentation.testing.junit.rpc.SemconvRpcStabilityUtil.emitOldRpcSemconv; import static io.opentelemetry.instrumentation.testing.junit.rpc.SemconvRpcStabilityUtil.emitPreviewRpcSemconv; import static io.opentelemetry.instrumentation.testing.junit.service.SemconvServiceStabilityUtil.maybeStablePeerService; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.instrumentation.testing.util.TestLatestDeps.testLatestDeps; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; @@ -288,11 +287,9 @@ void testDubboChain() throws ReflectiveOperationException { if (emitOldRpcSemconv()) { testing() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName("io.opentelemetry.apache-dubbo-2.7")) - .hasName("rpc.server.duration") - .hasUnit("ms"), + "io.opentelemetry.apache-dubbo-2.7", + "rpc.server.duration", + metric -> metric.hasUnit("ms"), point -> point.hasAttributesSatisfyingExactly( equalTo(RPC_SYSTEM, "apache_dubbo"), @@ -310,11 +307,9 @@ void testDubboChain() throws ReflectiveOperationException { testing() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName("io.opentelemetry.apache-dubbo-2.7")) - .hasName("rpc.client.duration") - .hasUnit("ms"), + "io.opentelemetry.apache-dubbo-2.7", + "rpc.client.duration", + metric -> metric.hasUnit("ms"), point -> point.hasAttributesSatisfyingExactly( equalTo(RPC_SYSTEM, "apache_dubbo"), @@ -336,11 +331,9 @@ void testDubboChain() throws ReflectiveOperationException { if (emitPreviewRpcSemconv()) { testing() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName("io.opentelemetry.apache-dubbo-2.7")) - .hasName("rpc.server.call.duration") - .hasUnit("s"), + "io.opentelemetry.apache-dubbo-2.7", + "rpc.server.call.duration", + metric -> metric.hasUnit("s"), point -> point.hasAttributesSatisfyingExactly( equalTo(RPC_SYSTEM_NAME, "dubbo"), @@ -356,11 +349,9 @@ void testDubboChain() throws ReflectiveOperationException { testing() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName("io.opentelemetry.apache-dubbo-2.7")) - .hasName("rpc.client.call.duration") - .hasUnit("s"), + "io.opentelemetry.apache-dubbo-2.7", + "rpc.client.call.duration", + metric -> metric.hasUnit("s"), point -> point.hasAttributesSatisfyingExactly( equalTo(RPC_SYSTEM_NAME, "dubbo"), @@ -482,11 +473,9 @@ void testDubboChainInJvm() throws ReflectiveOperationException { if (emitOldRpcSemconv()) { testing() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName("io.opentelemetry.apache-dubbo-2.7")) - .hasName("rpc.server.duration") - .hasUnit("ms"), + "io.opentelemetry.apache-dubbo-2.7", + "rpc.server.duration", + metric -> metric.hasUnit("ms"), point -> point.hasAttributesSatisfyingExactly( equalTo(RPC_SYSTEM, "apache_dubbo"), @@ -497,11 +486,9 @@ void testDubboChainInJvm() throws ReflectiveOperationException { testing() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName("io.opentelemetry.apache-dubbo-2.7")) - .hasName("rpc.client.duration") - .hasUnit("ms"), + "io.opentelemetry.apache-dubbo-2.7", + "rpc.client.duration", + metric -> metric.hasUnit("ms"), point -> point.hasAttributesSatisfyingExactly( equalTo(RPC_SYSTEM, "apache_dubbo"), @@ -515,11 +502,9 @@ void testDubboChainInJvm() throws ReflectiveOperationException { if (emitPreviewRpcSemconv()) { testing() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName("io.opentelemetry.apache-dubbo-2.7")) - .hasName("rpc.server.call.duration") - .hasUnit("s"), + "io.opentelemetry.apache-dubbo-2.7", + "rpc.server.call.duration", + metric -> metric.hasUnit("s"), point -> point.hasAttributesSatisfyingExactly( equalTo(RPC_SYSTEM_NAME, "dubbo"), @@ -529,11 +514,9 @@ void testDubboChainInJvm() throws ReflectiveOperationException { testing() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName("io.opentelemetry.apache-dubbo-2.7")) - .hasName("rpc.client.call.duration") - .hasUnit("s"), + "io.opentelemetry.apache-dubbo-2.7", + "rpc.client.call.duration", + metric -> metric.hasUnit("s"), point -> point.hasAttributesSatisfyingExactly( equalTo(RPC_SYSTEM_NAME, "dubbo"), diff --git a/instrumentation/avaje-jex-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/avaje/jex/v3_0/JexTest.java b/instrumentation/avaje-jex-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/avaje/jex/v3_0/JexTest.java index 3314c385b8eb..b4a2b12e05c1 100644 --- a/instrumentation/avaje-jex-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/avaje/jex/v3_0/JexTest.java +++ b/instrumentation/avaje-jex-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/avaje/jex/v3_0/JexTest.java @@ -5,7 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.avaje.jex.v3_0; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; @@ -121,9 +121,13 @@ void testHttpRouteMetricWithPathParamResponseSuccessful() { assertThat(content).isEqualTo(id); assertThat(response.status().code()).isEqualTo(200); - testing.waitAndAssertHistogramPoints( + testing.waitAndAssertMetrics( + instrumentation, metric -> - metric.satisfies(hasScopeName(instrumentation)).hasName("http.server.request.duration"), - point -> point.hasAttribute(HTTP_ROUTE, "/test/param/{id}")); + metric + .hasName("http.server.request.duration") + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> point.hasAttribute(HTTP_ROUTE, "/test/param/{id}")))); } } diff --git a/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/SqsMetricsAssertions.java b/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/SqsMetricsAssertions.java index a3edc12fe7e5..24f7191bc8ff 100644 --- a/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/SqsMetricsAssertions.java +++ b/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/SqsMetricsAssertions.java @@ -5,7 +5,6 @@ package io.opentelemetry.instrumentation.awssdk.v1_11; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.ErrorAttributes.ERROR_TYPE; @@ -74,10 +73,10 @@ private static void assertClientOperationDuration( String operationName, String operationType) { testing.waitAndAssertHistogramPoints( + INSTRUMENTATION_NAME, + "messaging.client.operation.duration", metric -> metric - .satisfies(hasScopeName(INSTRUMENTATION_NAME)) - .hasName("messaging.client.operation.duration") .hasUnit("s") .hasDescription( "Duration of messaging operation initiated by a producer or consumer client."), @@ -99,12 +98,9 @@ private static void assertClientOperationDuration( private static void assertProcessDuration( InstrumentationExtension testing, int serverPort, long operationCount) { testing.waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName(INSTRUMENTATION_NAME)) - .hasName("messaging.process.duration") - .hasUnit("s") - .hasDescription("Duration of processing operation."), + INSTRUMENTATION_NAME, + "messaging.process.duration", + metric -> metric.hasUnit("s").hasDescription("Duration of processing operation."), point -> point .satisfies(data -> assertThat(data.getCount()).isEqualTo(operationCount)) diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/SqsMetricsAssertions.java b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/SqsMetricsAssertions.java index abe36d5e2e0a..0dd68edf7338 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/SqsMetricsAssertions.java +++ b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/SqsMetricsAssertions.java @@ -5,7 +5,6 @@ package io.opentelemetry.instrumentation.awssdk.v2_2; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.ErrorAttributes.ERROR_TYPE; @@ -74,10 +73,10 @@ private static void assertClientOperationDuration( String operationName, String operationType) { testing.waitAndAssertHistogramPoints( + INSTRUMENTATION_NAME, + "messaging.client.operation.duration", metric -> metric - .satisfies(hasScopeName(INSTRUMENTATION_NAME)) - .hasName("messaging.client.operation.duration") .hasUnit("s") .hasDescription( "Duration of messaging operation initiated by a producer or consumer client."), @@ -99,12 +98,9 @@ private static void assertClientOperationDuration( private static void assertProcessDuration( InstrumentationExtension testing, int serverPort, long operationCount) { testing.waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName(INSTRUMENTATION_NAME)) - .hasName("messaging.process.duration") - .hasUnit("s") - .hasDescription("Duration of processing operation."), + INSTRUMENTATION_NAME, + "messaging.process.duration", + metric -> metric.hasUnit("s").hasDescription("Duration of processing operation."), point -> point .satisfies(data -> assertThat(data.getCount()).isEqualTo(operationCount)) diff --git a/instrumentation/camel-2.20/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/camel/v2_20/CamelMessagingMetricsAssertions.java b/instrumentation/camel-2.20/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/camel/v2_20/CamelMessagingMetricsAssertions.java index f645582ee9e6..f79e8d5169a6 100644 --- a/instrumentation/camel-2.20/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/camel/v2_20/CamelMessagingMetricsAssertions.java +++ b/instrumentation/camel-2.20/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/camel/v2_20/CamelMessagingMetricsAssertions.java @@ -5,7 +5,6 @@ package io.opentelemetry.javaagent.instrumentation.camel.v2_20; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.ErrorAttributes.ERROR_TYPE; @@ -175,12 +174,9 @@ private static void assertDuration( String errorType, String destinationPartitionId) { testing.waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName(INSTRUMENTATION_NAME)) - .hasName(metricName) - .hasDescription(description) - .hasUnit("s"), + INSTRUMENTATION_NAME, + metricName, + metric -> metric.hasDescription(description).hasUnit("s"), point -> { point.hasCount(1); if (operationType != null) { diff --git a/instrumentation/cassandra/cassandra-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraTest.java b/instrumentation/cassandra/cassandra-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraTest.java index 0b4d913024b7..96d7fcfd81c3 100644 --- a/instrumentation/cassandra/cassandra-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraTest.java +++ b/instrumentation/cassandra/cassandra-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraTest.java @@ -5,7 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.cassandra.v4_0; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.DbAttributes.DB_COLLECTION_NAME; import static io.opentelemetry.semconv.DbAttributes.DB_OPERATION_NAME; @@ -106,20 +106,22 @@ void responsePeerComesFromTheChannel() { assertThat(span.getAttributes().get(NETWORK_PEER_PORT)).isEqualTo(cassandraPort); assertThat(span.getAttributes().get(NETWORK_TYPE)).isEqualTo(null); }); - testing.waitAndAssertHistogramPoints( + testing.waitAndAssertMetrics( + getInstrumentationName(), metric -> metric - .satisfies(hasScopeName(getInstrumentationName())) - .hasName("db.client.operation.duration"), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(DB_COLLECTION_NAME, "system.local"), - equalTo(DB_OPERATION_NAME, "SELECT"), - equalTo(DB_QUERY_SUMMARY, "SELECT system.local"), - equalTo(DB_SYSTEM_NAME, "cassandra"), - equalTo(NETWORK_PEER_ADDRESS, cassandraIp), - equalTo(NETWORK_PEER_PORT, cassandraPort), - equalTo(SERVER_ADDRESS, cassandraHost), - equalTo(SERVER_PORT, cassandraPort))); + .hasName("db.client.operation.duration") + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(DB_COLLECTION_NAME, "system.local"), + equalTo(DB_OPERATION_NAME, "SELECT"), + equalTo(DB_QUERY_SUMMARY, "SELECT system.local"), + equalTo(DB_SYSTEM_NAME, "cassandra"), + equalTo(NETWORK_PEER_ADDRESS, cassandraIp), + equalTo(NETWORK_PEER_PORT, cassandraPort), + equalTo(SERVER_ADDRESS, cassandraHost), + equalTo(SERVER_PORT, cassandraPort))))); } } diff --git a/instrumentation/cassandra/cassandra-4.4/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_4/CassandraTest.java b/instrumentation/cassandra/cassandra-4.4/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_4/CassandraTest.java index 0d839c2d82f8..ac373b9c689a 100644 --- a/instrumentation/cassandra/cassandra-4.4/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_4/CassandraTest.java +++ b/instrumentation/cassandra/cassandra-4.4/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_4/CassandraTest.java @@ -5,7 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.cassandra.v4_4; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.DbAttributes.DB_COLLECTION_NAME; import static io.opentelemetry.semconv.DbAttributes.DB_OPERATION_NAME; @@ -101,21 +101,23 @@ void responsePeerComesFromTheChannel() throws ReflectiveOperationException { assertThat(span.getAttributes().get(NETWORK_PEER_PORT)).isEqualTo(cassandraPort); assertThat(span.getAttributes().get(NETWORK_TYPE)).isEqualTo(null); }); - testing.waitAndAssertHistogramPoints( + testing.waitAndAssertMetrics( + getInstrumentationName(), metric -> metric - .satisfies(hasScopeName(getInstrumentationName())) - .hasName("db.client.operation.duration"), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(DB_COLLECTION_NAME, "system.local"), - equalTo(DB_OPERATION_NAME, "SELECT"), - equalTo(DB_QUERY_SUMMARY, "SELECT system.local"), - equalTo(DB_SYSTEM_NAME, "cassandra"), - equalTo(NETWORK_PEER_ADDRESS, cassandraIp), - equalTo(NETWORK_PEER_PORT, cassandraPort), - equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, cassandraPort))); + .hasName("db.client.operation.duration") + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(DB_COLLECTION_NAME, "system.local"), + equalTo(DB_OPERATION_NAME, "SELECT"), + equalTo(DB_QUERY_SUMMARY, "SELECT system.local"), + equalTo(DB_SYSTEM_NAME, "cassandra"), + equalTo(NETWORK_PEER_ADDRESS, cassandraIp), + equalTo(NETWORK_PEER_PORT, cassandraPort), + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, cassandraPort))))); } private static CqlSession getDelegate(CqlSession session) throws IllegalAccessException { diff --git a/instrumentation/clickhouse/clickhouse-client-v1-0.5/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/clickhouse/clientv1/v0_5/ClickHouseClientV1Test.java b/instrumentation/clickhouse/clickhouse-client-v1-0.5/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/clickhouse/clientv1/v0_5/ClickHouseClientV1Test.java index 6ddfc241262f..c6216d2593f4 100644 --- a/instrumentation/clickhouse/clickhouse-client-v1-0.5/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/clickhouse/clientv1/v0_5/ClickHouseClientV1Test.java +++ b/instrumentation/clickhouse/clickhouse-client-v1-0.5/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/clickhouse/clientv1/v0_5/ClickHouseClientV1Test.java @@ -6,7 +6,7 @@ package io.opentelemetry.javaagent.instrumentation.clickhouse.clientv1.v0_5; import static io.opentelemetry.instrumentation.testing.junit.db.DbClientMetricsTestUtil.assertDurationMetric; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.DbAttributes.DB_NAMESPACE; import static io.opentelemetry.semconv.DbAttributes.DB_QUERY_SUMMARY; @@ -377,12 +377,14 @@ void testExecuteAndWaitThrowsException() { NETWORK_PEER_PORT, SERVER_ADDRESS, SERVER_PORT); - testing.waitAndAssertHistogramPoints( + testing.waitAndAssertMetrics( + "io.opentelemetry.clickhouse-client-v1-0.5", metric -> metric - .satisfies(hasScopeName("io.opentelemetry.clickhouse-client-v1-0.5")) - .hasName("db.client.operation.duration"), - point -> point.hasAttribute(ERROR_TYPE, "60")); + .hasName("db.client.operation.duration") + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> point.hasAttribute(ERROR_TYPE, "60")))); } @Test diff --git a/instrumentation/clickhouse/clickhouse-client-v2-0.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/clickhouse/clientv2/v0_8/ClickHouseClientV2Test.java b/instrumentation/clickhouse/clickhouse-client-v2-0.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/clickhouse/clientv2/v0_8/ClickHouseClientV2Test.java index 09cd57eaf32d..ce91b96cecbd 100644 --- a/instrumentation/clickhouse/clickhouse-client-v2-0.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/clickhouse/clientv2/v0_8/ClickHouseClientV2Test.java +++ b/instrumentation/clickhouse/clickhouse-client-v2-0.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/clickhouse/clientv2/v0_8/ClickHouseClientV2Test.java @@ -6,7 +6,7 @@ package io.opentelemetry.javaagent.instrumentation.clickhouse.clientv2.v0_8; import static io.opentelemetry.instrumentation.testing.junit.db.DbClientMetricsTestUtil.assertDurationMetric; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.DbAttributes.DB_NAMESPACE; import static io.opentelemetry.semconv.DbAttributes.DB_QUERY_SUMMARY; @@ -343,12 +343,14 @@ void testQueryThrowsServerException() { NETWORK_PEER_PORT, SERVER_ADDRESS, SERVER_PORT); - testing.waitAndAssertHistogramPoints( + testing.waitAndAssertMetrics( + "io.opentelemetry.clickhouse-client-v2-0.8", metric -> metric - .satisfies(hasScopeName("io.opentelemetry.clickhouse-client-v2-0.8")) - .hasName("db.client.operation.duration"), - point -> point.hasAttribute(ERROR_TYPE, "60")); + .hasName("db.client.operation.duration") + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> point.hasAttribute(ERROR_TYPE, "60")))); } @Test diff --git a/instrumentation/dropwizard/dropwizard-metrics-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/dropwizardmetrics/v4_0/DropwizardMetricsTest.java b/instrumentation/dropwizard/dropwizard-metrics-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/dropwizardmetrics/v4_0/DropwizardMetricsTest.java index 88faf770e28b..6e71c01dcde2 100644 --- a/instrumentation/dropwizard/dropwizard-metrics-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/dropwizardmetrics/v4_0/DropwizardMetricsTest.java +++ b/instrumentation/dropwizard/dropwizard-metrics-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/dropwizardmetrics/v4_0/DropwizardMetricsTest.java @@ -5,7 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.dropwizardmetrics.v4_0; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static java.util.concurrent.TimeUnit.MILLISECONDS; import static java.util.concurrent.TimeUnit.NANOSECONDS; import static java.util.concurrent.TimeUnit.SECONDS; @@ -97,9 +97,13 @@ void histogram() { histogram.update(30); // then - testing.waitAndAssertHistogramPoints( - metric -> metric.satisfies(hasScopeName(INSTRUMENTATION_NAME)).hasName("testhistogram"), - point -> point.hasSum(42).hasCount(2)); + testing.waitAndAssertMetrics( + INSTRUMENTATION_NAME, + metric -> + metric + .hasName("testhistogram") + .satisfies( + hasHistogramPointsSatisfyingExactly(point -> point.hasSum(42).hasCount(2)))); testing.clearData(); // when @@ -153,8 +157,9 @@ void timer() { // then testing.waitAndAssertHistogramPoints( - metric -> - metric.satisfies(hasScopeName(INSTRUMENTATION_NAME)).hasName("testtimer").hasUnit("ms"), + INSTRUMENTATION_NAME, + "testtimer", + metric -> metric.hasUnit("ms"), point -> point.hasSum(1.234).hasCount(2)); testing.clearData(); diff --git a/instrumentation/grpc-1.6/testing/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/AbstractGrpcStreamingTest.java b/instrumentation/grpc-1.6/testing/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/AbstractGrpcStreamingTest.java index e2c22b4c45bc..581eeade82fc 100644 --- a/instrumentation/grpc-1.6/testing/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/AbstractGrpcStreamingTest.java +++ b/instrumentation/grpc-1.6/testing/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/AbstractGrpcStreamingTest.java @@ -11,7 +11,6 @@ import static io.opentelemetry.instrumentation.grpc.v1_6.ExperimentalTestHelper.experimentalSatisfies; import static io.opentelemetry.instrumentation.testing.junit.rpc.SemconvRpcStabilityUtil.emitOldRpcSemconv; import static io.opentelemetry.instrumentation.testing.junit.rpc.SemconvRpcStabilityUtil.emitPreviewRpcSemconv; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.instrumentation.testing.util.TestLatestDeps.testLatestDeps; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; @@ -297,11 +296,9 @@ RPC_SERVICE, emitOldRpcSemconv() ? "example.Greeter" : null), if (emitOldRpcSemconv()) { testing() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName("io.opentelemetry.grpc-1.6")) - .hasName("rpc.server.duration") - .hasUnit("ms"), + "io.opentelemetry.grpc-1.6", + "rpc.server.duration", + metric -> metric.hasUnit("ms"), point -> point.hasAttributesSatisfyingExactly( equalTo(SERVER_ADDRESS, "localhost"), @@ -315,11 +312,9 @@ RPC_SERVICE, emitOldRpcSemconv() ? "example.Greeter" : null), if (emitPreviewRpcSemconv()) { testing() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName("io.opentelemetry.grpc-1.6")) - .hasName("rpc.server.call.duration") - .hasUnit("s"), + "io.opentelemetry.grpc-1.6", + "rpc.server.call.duration", + metric -> metric.hasUnit("s"), point -> point.hasAttributesSatisfyingExactly( equalTo(RPC_SYSTEM_NAME, "grpc"), @@ -331,11 +326,9 @@ RPC_SERVICE, emitOldRpcSemconv() ? "example.Greeter" : null), if (emitOldRpcSemconv()) { testing() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName("io.opentelemetry.grpc-1.6")) - .hasName("rpc.client.duration") - .hasUnit("ms"), + "io.opentelemetry.grpc-1.6", + "rpc.client.duration", + metric -> metric.hasUnit("ms"), point -> point.hasAttributesSatisfyingExactly( equalTo(SERVER_ADDRESS, "localhost"), @@ -349,11 +342,9 @@ RPC_SERVICE, emitOldRpcSemconv() ? "example.Greeter" : null), if (emitPreviewRpcSemconv()) { testing() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName("io.opentelemetry.grpc-1.6")) - .hasName("rpc.client.call.duration") - .hasUnit("s"), + "io.opentelemetry.grpc-1.6", + "rpc.client.call.duration", + metric -> metric.hasUnit("s"), point -> point.hasAttributesSatisfyingExactly( equalTo(RPC_SYSTEM_NAME, "grpc"), diff --git a/instrumentation/grpc-1.6/testing/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/AbstractGrpcTest.java b/instrumentation/grpc-1.6/testing/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/AbstractGrpcTest.java index 0cdc54823f36..5fda45161135 100644 --- a/instrumentation/grpc-1.6/testing/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/AbstractGrpcTest.java +++ b/instrumentation/grpc-1.6/testing/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/AbstractGrpcTest.java @@ -12,7 +12,6 @@ import static io.opentelemetry.instrumentation.grpc.v1_6.ExperimentalTestHelper.experimentalSatisfies; import static io.opentelemetry.instrumentation.testing.junit.rpc.SemconvRpcStabilityUtil.emitOldRpcSemconv; import static io.opentelemetry.instrumentation.testing.junit.rpc.SemconvRpcStabilityUtil.emitPreviewRpcSemconv; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.instrumentation.testing.util.TestLatestDeps.testLatestDeps; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; @@ -1811,11 +1810,9 @@ private void assertMetrics(Server server, Status status) { if (emitOldRpcSemconv()) { testing() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName("io.opentelemetry.grpc-1.6")) - .hasName("rpc.server.duration") - .hasUnit("ms"), + "io.opentelemetry.grpc-1.6", + "rpc.server.duration", + metric -> metric.hasUnit("ms"), point -> point.hasAttributesSatisfyingExactly( equalTo(SERVER_ADDRESS, "localhost"), @@ -1829,11 +1826,9 @@ private void assertMetrics(Server server, Status status) { if (hasSizeMetric) { testing() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName("io.opentelemetry.grpc-1.6")) - .hasName("rpc.server.request.size") - .hasUnit("By"), + "io.opentelemetry.grpc-1.6", + "rpc.server.request.size", + metric -> metric.hasUnit("By"), point -> point.hasAttributesSatisfyingExactly( equalTo(SERVER_ADDRESS, "localhost"), @@ -1845,11 +1840,9 @@ private void assertMetrics(Server server, Status status) { equalTo(NETWORK_TYPE, "ipv4"))); testing() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName("io.opentelemetry.grpc-1.6")) - .hasName("rpc.server.response.size") - .hasUnit("By"), + "io.opentelemetry.grpc-1.6", + "rpc.server.response.size", + metric -> metric.hasUnit("By"), point -> point.hasAttributesSatisfyingExactly( equalTo(SERVER_ADDRESS, "localhost"), @@ -1863,11 +1856,9 @@ private void assertMetrics(Server server, Status status) { testing() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName("io.opentelemetry.grpc-1.6")) - .hasName("rpc.client.duration") - .hasUnit("ms"), + "io.opentelemetry.grpc-1.6", + "rpc.client.duration", + metric -> metric.hasUnit("ms"), point -> point.hasAttributesSatisfyingExactly( equalTo(SERVER_ADDRESS, "localhost"), @@ -1880,11 +1871,9 @@ private void assertMetrics(Server server, Status status) { testing() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName("io.opentelemetry.grpc-1.6")) - .hasName("rpc.client.request.size") - .hasUnit("By"), + "io.opentelemetry.grpc-1.6", + "rpc.client.request.size", + metric -> metric.hasUnit("By"), point -> point.hasAttributesSatisfyingExactly( equalTo(SERVER_ADDRESS, "localhost"), @@ -1897,11 +1886,9 @@ private void assertMetrics(Server server, Status status) { if (hasSizeMetric) { testing() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName("io.opentelemetry.grpc-1.6")) - .hasName("rpc.client.response.size") - .hasUnit("By"), + "io.opentelemetry.grpc-1.6", + "rpc.client.response.size", + metric -> metric.hasUnit("By"), point -> point.hasAttributesSatisfyingExactly( equalTo(SERVER_ADDRESS, "localhost"), @@ -1916,11 +1903,9 @@ private void assertMetrics(Server server, Status status) { if (emitPreviewRpcSemconv()) { testing() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName("io.opentelemetry.grpc-1.6")) - .hasName("rpc.server.call.duration") - .hasUnit("s"), + "io.opentelemetry.grpc-1.6", + "rpc.server.call.duration", + metric -> metric.hasUnit("s"), point -> point.hasAttributesSatisfyingExactly( equalTo(RPC_SYSTEM_NAME, "grpc"), @@ -1931,11 +1916,9 @@ private void assertMetrics(Server server, Status status) { equalTo(ERROR_TYPE, serverErrorType))); testing() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName("io.opentelemetry.grpc-1.6")) - .hasName("rpc.client.call.duration") - .hasUnit("s"), + "io.opentelemetry.grpc-1.6", + "rpc.client.call.duration", + metric -> metric.hasUnit("s"), point -> point.hasAttributesSatisfyingExactly( equalTo(RPC_SYSTEM_NAME, "grpc"), diff --git a/instrumentation/iceberg-1.8/testing/src/main/java/io/opentelemetry/instrumentation/iceberg/v1_8/AbstractIcebergTest.java b/instrumentation/iceberg-1.8/testing/src/main/java/io/opentelemetry/instrumentation/iceberg/v1_8/AbstractIcebergTest.java index ca56dff6ce62..5b5205a926f1 100644 --- a/instrumentation/iceberg-1.8/testing/src/main/java/io/opentelemetry/instrumentation/iceberg/v1_8/AbstractIcebergTest.java +++ b/instrumentation/iceberg-1.8/testing/src/main/java/io/opentelemetry/instrumentation/iceberg/v1_8/AbstractIcebergTest.java @@ -7,7 +7,6 @@ import static io.opentelemetry.api.common.AttributeKey.longKey; import static io.opentelemetry.api.common.AttributeKey.stringKey; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static java.util.Arrays.asList; import static org.assertj.core.api.Assertions.assertThat; @@ -112,11 +111,9 @@ void testCreateTelemetry() throws IOException { private void assertScanDurationMetric(ScanReport expectedReport) { testing() .waitAndAssertHistogramPoints( - metricAssert -> - metricAssert - .satisfies(hasScopeName(INSTRUMENTATION_NAME)) - .hasName("iceberg.scan.planning.duration") - .hasUnit("s"), + INSTRUMENTATION_NAME, + "iceberg.scan.planning.duration", + metricAssert -> metricAssert.hasUnit("s"), point -> point .hasSumGreaterThan(0.0) diff --git a/instrumentation/javalin/testing/src/main/java/io/opentelemetry/instrumentation/javalin/AbstractJavalinTest.java b/instrumentation/javalin/testing/src/main/java/io/opentelemetry/instrumentation/javalin/AbstractJavalinTest.java index 6d221fada83c..f5dd553d3d63 100644 --- a/instrumentation/javalin/testing/src/main/java/io/opentelemetry/instrumentation/javalin/AbstractJavalinTest.java +++ b/instrumentation/javalin/testing/src/main/java/io/opentelemetry/instrumentation/javalin/AbstractJavalinTest.java @@ -5,7 +5,7 @@ package io.opentelemetry.instrumentation.javalin; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; @@ -162,11 +162,13 @@ void testHttpRouteMetricWithPathParamResponseSuccessful() { assertThat(content).isEqualTo(id); assertThat(response.status().code()).isEqualTo(200); testing() - .waitAndAssertHistogramPoints( + .waitAndAssertMetrics( + getJettyInstrumentation(), metric -> metric - .satisfies(hasScopeName(getJettyInstrumentation())) - .hasName("http.server.request.duration"), - point -> point.hasAttribute(HTTP_ROUTE, "/param/{id}")); + .hasName("http.server.request.duration") + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> point.hasAttribute(HTTP_ROUTE, "/param/{id}")))); } } diff --git a/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/datasource/JdbcTelemetryTest.java b/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/datasource/JdbcTelemetryTest.java index de3c7678572b..86c49ec1aa40 100644 --- a/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/datasource/JdbcTelemetryTest.java +++ b/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/datasource/JdbcTelemetryTest.java @@ -6,7 +6,7 @@ package io.opentelemetry.instrumentation.jdbc.datasource; import static io.opentelemetry.instrumentation.testing.junit.db.DbClientMetricsTestUtil.assertDurationMetric; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.DbAttributes.DB_NAMESPACE; import static io.opentelemetry.semconv.DbAttributes.DB_OPERATION_BATCH_SIZE; @@ -170,12 +170,14 @@ void error(int errorCode, String sqlState, String expectedErrorType) throws SQLE DB_SYSTEM_NAME, ERROR_TYPE, SERVER_ADDRESS); - testing.waitAndAssertHistogramPoints( + testing.waitAndAssertMetrics( + "io.opentelemetry.jdbc", metric -> metric - .satisfies(hasScopeName("io.opentelemetry.jdbc")) - .hasName("db.client.operation.duration"), - point -> point.hasAttribute(ERROR_TYPE, expectedErrorType)); + .hasName("db.client.operation.duration") + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> point.hasAttribute(ERROR_TYPE, expectedErrorType)))); } private static Stream errorCodes() { diff --git a/instrumentation/jedis/jedis-2.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v2_0/ShardedJedisClientTest.java b/instrumentation/jedis/jedis-2.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v2_0/ShardedJedisClientTest.java index 60e26a532ed2..34a3034e98e7 100644 --- a/instrumentation/jedis/jedis-2.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v2_0/ShardedJedisClientTest.java +++ b/instrumentation/jedis/jedis-2.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v2_0/ShardedJedisClientTest.java @@ -5,7 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.jedis.v2_0; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.DbAttributes.DB_NAMESPACE; import static io.opentelemetry.semconv.DbAttributes.DB_OPERATION_NAME; @@ -145,12 +145,14 @@ void commandFromAllShardsUsesConfiguredTarget() { NETWORK_PEER_ADDRESS, peerAddress.getAddress().getHostAddress()), equalTo(NETWORK_PEER_PORT, (long) peerAddress.getPort())))); - testing.waitAndAssertHistogramPoints( + testing.waitAndAssertMetrics( + "io.opentelemetry.jedis-2.0", metric -> metric - .satisfies(hasScopeName("io.opentelemetry.jedis-2.0")) - .hasName("db.client.operation.duration"), - point -> point.hasAttribute(SERVER_ADDRESS, configuredTarget)); + .hasName("db.client.operation.duration") + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> point.hasAttribute(SERVER_ADDRESS, configuredTarget)))); } @Test diff --git a/instrumentation/jedis/jedis-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v3_0/ShardedJedis30ClientTest.java b/instrumentation/jedis/jedis-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v3_0/ShardedJedis30ClientTest.java index c4c2a45f87e6..f9d3b81db2b3 100644 --- a/instrumentation/jedis/jedis-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v3_0/ShardedJedis30ClientTest.java +++ b/instrumentation/jedis/jedis-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v3_0/ShardedJedis30ClientTest.java @@ -6,7 +6,7 @@ package io.opentelemetry.javaagent.instrumentation.jedis.v3_0; import static io.opentelemetry.instrumentation.testing.junit.db.DbClientMetricsTestUtil.assertDurationMetric; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; import static io.opentelemetry.semconv.DbAttributes.DB_NAMESPACE; @@ -154,15 +154,19 @@ void commandFromAllShardsUsesConfiguredTarget() { SERVER_ADDRESS, NETWORK_PEER_ADDRESS, NETWORK_PEER_PORT); - testing.waitAndAssertHistogramPoints( + testing.waitAndAssertMetrics( + "io.opentelemetry.jedis-3.0", metric -> metric - .satisfies(hasScopeName("io.opentelemetry.jedis-3.0")) - .hasName("db.client.operation.duration"), - point -> - point - .hasAttribute(SERVER_ADDRESS, configuredTarget) - .hasAttributesSatisfying( - attributes -> assertThat(attributes.asMap()).doesNotContainKey(SERVER_PORT))); + .hasName("db.client.operation.duration") + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasAttribute(SERVER_ADDRESS, configuredTarget) + .hasAttributesSatisfying( + attributes -> + assertThat(attributes.asMap()) + .doesNotContainKey(SERVER_PORT))))); } } diff --git a/instrumentation/jedis/jedis-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v4_0/Jedis40ClientTest.java b/instrumentation/jedis/jedis-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v4_0/Jedis40ClientTest.java index 5a76f17a9297..ca2177b9d6c9 100644 --- a/instrumentation/jedis/jedis-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v4_0/Jedis40ClientTest.java +++ b/instrumentation/jedis/jedis-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v4_0/Jedis40ClientTest.java @@ -6,7 +6,7 @@ package io.opentelemetry.javaagent.instrumentation.jedis.v4_0; import static io.opentelemetry.instrumentation.testing.junit.db.DbClientMetricsTestUtil.assertDurationMetric; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.DbAttributes.DB_NAMESPACE; import static io.opentelemetry.semconv.DbAttributes.DB_OPERATION_BATCH_SIZE; @@ -155,16 +155,18 @@ void mappedCommandUsesConfiguredTarget() { equalTo(NETWORK_PEER_PORT, port), equalTo(NETWORK_PEER_ADDRESS, ip)))); - testing.waitAndAssertHistogramPoints( + testing.waitAndAssertMetrics( + "io.opentelemetry.jedis-4.0", metric -> metric - .satisfies(hasScopeName("io.opentelemetry.jedis-4.0")) - .hasName("db.client.operation.duration"), - point -> - point - .hasAttribute(DB_OPERATION_NAME, "SET") - .hasAttribute(SERVER_ADDRESS, configuredHost) - .hasAttribute(SERVER_PORT, (long) configuredPort)); + .hasName("db.client.operation.duration") + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasAttribute(DB_OPERATION_NAME, "SET") + .hasAttribute(SERVER_ADDRESS, configuredHost) + .hasAttribute(SERVER_PORT, (long) configuredPort)))); } @Test diff --git a/instrumentation/kubernetes-client-7.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/v7_0/KubernetesClientTest.java b/instrumentation/kubernetes-client-7.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/v7_0/KubernetesClientTest.java index 099da31bc045..70ba8c16d57d 100644 --- a/instrumentation/kubernetes-client-7.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/v7_0/KubernetesClientTest.java +++ b/instrumentation/kubernetes-client-7.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/v7_0/KubernetesClientTest.java @@ -7,7 +7,6 @@ import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.instrumentation.testing.junit.service.SemconvServiceStabilityUtil.maybeStablePeerService; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.instrumentation.testing.util.TelemetryDataUtil.orderByRootSpanName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; @@ -106,12 +105,9 @@ void synchronousCall() throws ApiException { equalTo(stringKey("kubernetes-client.name"), experimental("name"))))); testing.waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName("io.opentelemetry.kubernetes-client-7.0")) - .hasName("http.client.request.duration") - .hasDescription("Duration of HTTP client requests.") - .hasUnit("s"), + "io.opentelemetry.kubernetes-client-7.0", + "http.client.request.duration", + metric -> metric.hasDescription("Duration of HTTP client requests.").hasUnit("s"), point -> point.hasSumGreaterThan(0.0)); } diff --git a/instrumentation/kubernetes-client-7.0/javaagent/src/version20Test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/v7_0/KubernetesClientVer20Test.java b/instrumentation/kubernetes-client-7.0/javaagent/src/version20Test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/v7_0/KubernetesClientVer20Test.java index 6b3c6217732d..05952c5b7185 100644 --- a/instrumentation/kubernetes-client-7.0/javaagent/src/version20Test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/v7_0/KubernetesClientVer20Test.java +++ b/instrumentation/kubernetes-client-7.0/javaagent/src/version20Test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/v7_0/KubernetesClientVer20Test.java @@ -7,7 +7,6 @@ import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.instrumentation.testing.junit.service.SemconvServiceStabilityUtil.maybeStablePeerService; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.instrumentation.testing.util.TelemetryDataUtil.orderByRootSpanName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; @@ -110,12 +109,9 @@ void synchronousCall() throws ApiException { equalTo(stringKey("kubernetes-client.name"), experimental("name"))))); testing.waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName("io.opentelemetry.kubernetes-client-7.0")) - .hasName("http.client.request.duration") - .hasDescription("Duration of HTTP client requests.") - .hasUnit("s"), + "io.opentelemetry.kubernetes-client-7.0", + "http.client.request.duration", + metric -> metric.hasDescription("Duration of HTTP client requests.").hasUnit("s"), point -> point.hasSumGreaterThan(0.0)); } diff --git a/instrumentation/lettuce/lettuce-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceReactiveClientTest.java b/instrumentation/lettuce/lettuce-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceReactiveClientTest.java index e39f39dbe215..821a0ab079bf 100644 --- a/instrumentation/lettuce/lettuce-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceReactiveClientTest.java +++ b/instrumentation/lettuce/lettuce-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceReactiveClientTest.java @@ -7,7 +7,7 @@ import static io.opentelemetry.api.common.AttributeKey.booleanKey; import static io.opentelemetry.api.common.AttributeKey.longKey; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.javaagent.instrumentation.lettuce.v5_0.ExperimentalHelper.EXPERIMENTAL_ATTRIBUTES_ENABLED; import static io.opentelemetry.javaagent.instrumentation.lettuce.v5_0.ExperimentalHelper.experimental; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; @@ -436,12 +436,12 @@ void testNoResponseCommandFluxCancellationEndsSpanOnce() { trace -> trace.hasSpansSatisfyingExactly( span -> span.hasName("DEBUG " + host + ":" + port).hasKind(SpanKind.CLIENT))); - testing.waitAndAssertHistogramPoints( + testing.waitAndAssertMetrics( + "io.opentelemetry.lettuce-5.0", metric -> metric - .satisfies(hasScopeName("io.opentelemetry.lettuce-5.0")) - .hasName("db.client.operation.duration"), - point -> point.hasCount(1)); + .hasName("db.client.operation.duration") + .satisfies(hasHistogramPointsSatisfyingExactly(point -> point.hasCount(1)))); }); } diff --git a/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceClientTest.java b/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceClientTest.java index 572713971e99..a2d0e0a33251 100644 --- a/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceClientTest.java +++ b/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceClientTest.java @@ -5,7 +5,7 @@ package io.opentelemetry.instrumentation.lettuce.v5_1; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.instrumentation.testing.util.TestLatestDeps.testLatestDeps; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; @@ -102,12 +102,15 @@ protected static void assertCommandErrorEvents(SpanData span) { protected void assertCommandErrorMetric(String errorType) { testing() - .waitAndAssertHistogramPoints( + .waitAndAssertMetrics( + "io.opentelemetry.lettuce-5.1", metric -> metric - .satisfies(hasScopeName("io.opentelemetry.lettuce-5.1")) - .hasName("db.client.operation.duration"), - point -> point.hasAttributesSatisfying(equalTo(ERROR_TYPE, errorType))); + .hasName("db.client.operation.duration") + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfying(equalTo(ERROR_TYPE, errorType))))); } protected String spanName(String operation) { diff --git a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractDistributionSummaryHistogramGaugesTest.java b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractDistributionSummaryHistogramGaugesTest.java index 77c6c34f7579..1907fdbda4d2 100644 --- a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractDistributionSummaryHistogramGaugesTest.java +++ b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractDistributionSummaryHistogramGaugesTest.java @@ -7,7 +7,6 @@ import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.instrumentation.micrometer.v1_5.AbstractCounterTest.INSTRUMENTATION_NAME; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import io.micrometer.core.instrument.DistributionSummary; @@ -46,12 +45,10 @@ void testMicrometerHistogram() { // then testing() .waitAndAssertHistogramPoints( + INSTRUMENTATION_NAME, + "testSummary", metric -> - metric - .satisfies(hasScopeName(INSTRUMENTATION_NAME)) - .hasName("testSummary") - .hasDescription("This is a test distribution summary") - .hasUnit("things"), + metric.hasDescription("This is a test distribution summary").hasUnit("things"), points -> points .hasSum(555.5) @@ -110,12 +107,10 @@ void testMicrometerPercentiles() { // then testing() .waitAndAssertHistogramPoints( + INSTRUMENTATION_NAME, + "testSummary", metric -> - metric - .satisfies(hasScopeName(INSTRUMENTATION_NAME)) - .hasName("testSummary") - .hasDescription("This is a test distribution summary") - .hasUnit("things"), + metric.hasDescription("This is a test distribution summary").hasUnit("things"), point -> point .hasSum(150) diff --git a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractDistributionSummaryTest.java b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractDistributionSummaryTest.java index 53cb56167ae2..76eddc771de5 100644 --- a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractDistributionSummaryTest.java +++ b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractDistributionSummaryTest.java @@ -7,7 +7,7 @@ import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.instrumentation.micrometer.v1_5.AbstractCounterTest.INSTRUMENTATION_NAME; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import io.micrometer.core.instrument.DistributionSummary; @@ -46,12 +46,10 @@ void testMicrometerDistributionSummary() { // then testing() .waitAndAssertHistogramPoints( + INSTRUMENTATION_NAME, + "testSummary", metric -> - metric - .satisfies(hasScopeName(INSTRUMENTATION_NAME)) - .hasName("testSummary") - .hasDescription("This is a test distribution summary") - .hasUnit("things"), + metric.hasDescription("This is a test distribution summary").hasUnit("things"), point -> point .hasSum(7) @@ -70,16 +68,19 @@ void testMicrometerDistributionSummary() { // then // The synchronous histogram returns its previous value after removal. testing() - .waitAndAssertHistogramPoints( + .waitAndAssertMetrics( + INSTRUMENTATION_NAME, metric -> metric - .satisfies(hasScopeName(INSTRUMENTATION_NAME)) - .hasName("testSummary"), - point -> - point - .hasSum(7) - .hasCount(3) - .hasAttributesSatisfyingExactly(equalTo(stringKey("tag"), "value"))); + .hasName("testSummary") + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(7) + .hasCount(3) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("tag"), "value"))))); } @Test @@ -103,12 +104,10 @@ void testMicrometerDistributionSummaryWithCustomBuckets() { // then testing() .waitAndAssertHistogramPoints( + INSTRUMENTATION_NAME, + "testSummaryWithCustomBuckets", metric -> - metric - .satisfies(hasScopeName(INSTRUMENTATION_NAME)) - .hasName("testSummaryWithCustomBuckets") - .hasDescription("This is a test distribution summary") - .hasUnit("things"), + metric.hasDescription("This is a test distribution summary").hasUnit("things"), points -> points .hasSum(555.5) diff --git a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractNamingConventionTest.java b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractNamingConventionTest.java index 91605cf56ed2..672acefed9a3 100644 --- a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractNamingConventionTest.java +++ b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractNamingConventionTest.java @@ -7,7 +7,7 @@ import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.instrumentation.micrometer.v1_5.AbstractCounterTest.INSTRUMENTATION_NAME; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static java.util.Collections.singletonList; import static java.util.concurrent.TimeUnit.SECONDS; @@ -86,11 +86,16 @@ void renameDistributionSummary() { // then testing() - .waitAndAssertHistogramPoints( + .waitAndAssertMetrics( + INSTRUMENTATION_NAME, metric -> - metric.satisfies(hasScopeName(INSTRUMENTATION_NAME)).hasName("test.renamedSummary"), - point -> - point.hasAttributesSatisfyingExactly(equalTo(stringKey("test.tag"), "test.value"))); + metric + .hasName("test.renamedSummary") + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(stringKey("test.tag"), "test.value"))))); } @Test @@ -237,10 +242,15 @@ void renameTimer() { // then testing() - .waitAndAssertHistogramPoints( + .waitAndAssertMetrics( + INSTRUMENTATION_NAME, metric -> - metric.satisfies(hasScopeName(INSTRUMENTATION_NAME)).hasName("test.renamedTimer"), - point -> - point.hasAttributesSatisfyingExactly(equalTo(stringKey("test.tag"), "test.value"))); + metric + .hasName("test.renamedTimer") + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(stringKey("test.tag"), "test.value"))))); } } diff --git a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractPrometheusModeTest.java b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractPrometheusModeTest.java index 2e09f7d51b21..b020c8e521db 100644 --- a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractPrometheusModeTest.java +++ b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractPrometheusModeTest.java @@ -7,7 +7,6 @@ import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.instrumentation.micrometer.v1_5.AbstractCounterTest.INSTRUMENTATION_NAME; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static java.util.Collections.singletonList; @@ -86,12 +85,9 @@ void testDistributionSummary() { // then testing() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName(INSTRUMENTATION_NAME)) - .hasName("testPrometheusSummary.items") - .hasDescription("This is a test summary") - .hasUnit("items"), + INSTRUMENTATION_NAME, + "testPrometheusSummary.items", + metric -> metric.hasDescription("This is a test summary").hasUnit("items"), point -> point .hasSum(54) @@ -313,12 +309,9 @@ void testTimer() { // then testing() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName(INSTRUMENTATION_NAME)) - .hasName("testPrometheusTimer.seconds") - .hasDescription("This is a test timer") - .hasUnit("s"), + INSTRUMENTATION_NAME, + "testPrometheusTimer.seconds", + metric -> metric.hasDescription("This is a test timer").hasUnit("s"), point -> point .hasSum(16.789) @@ -381,12 +374,9 @@ void testTimerCustomBucketBoundaryFormatting() { // then testing() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName(INSTRUMENTATION_NAME)) - .hasName("testPrometheusTimerBoundary.seconds") - .hasDescription("This is a test timer") - .hasUnit("s"), + INSTRUMENTATION_NAME, + "testPrometheusTimerBoundary.seconds", + metric -> metric.hasDescription("This is a test timer").hasUnit("s"), point -> point .hasSum(0.1) diff --git a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerHistogramGaugesTest.java b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerHistogramGaugesTest.java index ebd7aef985eb..c1bac09cc164 100644 --- a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerHistogramGaugesTest.java +++ b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerHistogramGaugesTest.java @@ -7,7 +7,6 @@ import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.instrumentation.micrometer.v1_5.AbstractCounterTest.INSTRUMENTATION_NAME; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static java.util.concurrent.TimeUnit.MILLISECONDS; import static java.util.concurrent.TimeUnit.SECONDS; @@ -47,12 +46,9 @@ void testMicrometerHistogram() { // then testing() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName(INSTRUMENTATION_NAME)) - .hasName("testTimer") - .hasDescription("This is a test timer") - .hasUnit("s"), + INSTRUMENTATION_NAME, + "testTimer", + metric -> metric.hasDescription("This is a test timer").hasUnit("s"), point -> point .hasSum(555.5) @@ -110,12 +106,9 @@ void testMicrometerPercentiles() { // then testing() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName(INSTRUMENTATION_NAME)) - .hasName("testTimer") - .hasDescription("This is a test timer") - .hasUnit("s"), + INSTRUMENTATION_NAME, + "testTimer", + metric -> metric.hasDescription("This is a test timer").hasUnit("s"), point -> point .hasSum(0.55) diff --git a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerMillisecondsTest.java b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerMillisecondsTest.java index 7b04970297f9..faa9285429a2 100644 --- a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerMillisecondsTest.java +++ b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerMillisecondsTest.java @@ -7,7 +7,6 @@ import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.instrumentation.micrometer.v1_5.AbstractCounterTest.INSTRUMENTATION_NAME; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static java.util.concurrent.TimeUnit.MILLISECONDS; import static java.util.concurrent.TimeUnit.SECONDS; @@ -40,12 +39,9 @@ void testTimerWithBaseUnitMilliseconds() { // then testing() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName(INSTRUMENTATION_NAME)) - .hasName("testTimerMilliseconds") - .hasDescription("This is a test timer") - .hasUnit("ms"), + INSTRUMENTATION_NAME, + "testTimerMilliseconds", + metric -> metric.hasDescription("This is a test timer").hasUnit("ms"), point -> point .hasSum(23_345) diff --git a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerTest.java b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerTest.java index 952e6a362724..787808304a17 100644 --- a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerTest.java +++ b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerTest.java @@ -7,7 +7,6 @@ import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.instrumentation.micrometer.v1_5.AbstractCounterTest.INSTRUMENTATION_NAME; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static java.util.concurrent.TimeUnit.MILLISECONDS; @@ -47,12 +46,9 @@ void testTimer() { // then testing() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName(INSTRUMENTATION_NAME)) - .hasName("testTimer") - .hasDescription("This is a test timer") - .hasUnit("s"), + INSTRUMENTATION_NAME, + "testTimer", + metric -> metric.hasDescription("This is a test timer").hasUnit("s"), point -> point .hasSum(42) @@ -86,11 +82,9 @@ void testNanoPrecision() { // then testing() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName(INSTRUMENTATION_NAME)) - .hasName("testNanoTimer") - .hasUnit("s"), + INSTRUMENTATION_NAME, + "testNanoTimer", + metric -> metric.hasUnit("s"), point -> point.hasSum(0.001234).hasCount(1).hasAttributes(Attributes.empty())); } @@ -118,12 +112,9 @@ void testMicrometerTimerWithCustomBuckets() { // then testing() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName(INSTRUMENTATION_NAME)) - .hasName("testTimerWithCustomBuckets") - .hasDescription("This is a test timer") - .hasUnit("s"), + INSTRUMENTATION_NAME, + "testTimerWithCustomBuckets", + metric -> metric.hasDescription("This is a test timer").hasUnit("s"), point -> point .hasSum(555.5) diff --git a/instrumentation/mongo/mongo-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/mongo/v4_0/MongoConfiguredTargetTest.java b/instrumentation/mongo/mongo-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/mongo/v4_0/MongoConfiguredTargetTest.java index 9791f35709ac..13a70c1e9a0c 100644 --- a/instrumentation/mongo/mongo-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/mongo/v4_0/MongoConfiguredTargetTest.java +++ b/instrumentation/mongo/mongo-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/mongo/v4_0/MongoConfiguredTargetTest.java @@ -6,7 +6,7 @@ package io.opentelemetry.javaagent.instrumentation.mongo.v4_0; import static io.opentelemetry.instrumentation.testing.junit.db.DbClientMetricsTestUtil.assertDurationMetric; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.semconv.DbAttributes.DB_COLLECTION_NAME; import static io.opentelemetry.semconv.DbAttributes.DB_NAMESPACE; import static io.opentelemetry.semconv.DbAttributes.DB_OPERATION_NAME; @@ -92,11 +92,15 @@ void severalSeedsAreTheOperationDurationLogicalServer() { DB_OPERATION_NAME, DB_COLLECTION_NAME, SERVER_ADDRESS); - testing.waitAndAssertHistogramPoints( + testing.waitAndAssertMetrics( + "io.opentelemetry.mongo-4.0", metric -> metric - .satisfies(hasScopeName("io.opentelemetry.mongo-4.0")) - .hasName("db.client.operation.duration"), - point -> point.hasAttribute(SERVER_ADDRESS, "db1.example:27017,db2.example:27018")); + .hasName("db.client.operation.duration") + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttribute( + SERVER_ADDRESS, "db1.example:27017,db2.example:27018")))); } } diff --git a/instrumentation/nats/nats-2.17/testing/src/main/java/io/opentelemetry/instrumentation/nats/v2_17/AbstractNatsTest.java b/instrumentation/nats/nats-2.17/testing/src/main/java/io/opentelemetry/instrumentation/nats/v2_17/AbstractNatsTest.java index efbc33c64d91..b4ef59eb5d58 100644 --- a/instrumentation/nats/nats-2.17/testing/src/main/java/io/opentelemetry/instrumentation/nats/v2_17/AbstractNatsTest.java +++ b/instrumentation/nats/nats-2.17/testing/src/main/java/io/opentelemetry/instrumentation/nats/v2_17/AbstractNatsTest.java @@ -5,7 +5,6 @@ package io.opentelemetry.instrumentation.nats.v2_17; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.ErrorAttributes.ERROR_TYPE; @@ -46,10 +45,10 @@ void assertProducerMetrics(String operationName, String destination, String erro testing() .waitAndAssertHistogramPoints( + INSTRUMENTATION_NAME, + "messaging.client.operation.duration", metric -> metric - .satisfies(hasScopeName(INSTRUMENTATION_NAME)) - .hasName("messaging.client.operation.duration") .hasDescription( "Duration of messaging operation initiated by a producer or consumer client.") .hasUnit("s"), @@ -94,12 +93,9 @@ void assertProcessMetrics(String destination, String errorType) { testing() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName(INSTRUMENTATION_NAME)) - .hasName("messaging.process.duration") - .hasDescription("Duration of processing operation.") - .hasUnit("s"), + INSTRUMENTATION_NAME, + "messaging.process.duration", + metric -> metric.hasDescription("Duration of processing operation.").hasUnit("s"), point -> point .hasSumGreaterThan(0) diff --git a/instrumentation/openai/openai-java-1.1/library/src/test/java/io/opentelemetry/instrumentation/openai/v1_1/ChatTest.java b/instrumentation/openai/openai-java-1.1/library/src/test/java/io/opentelemetry/instrumentation/openai/v1_1/ChatTest.java index 3a4f23642e8d..5263347f92ef 100644 --- a/instrumentation/openai/openai-java-1.1/library/src/test/java/io/opentelemetry/instrumentation/openai/v1_1/ChatTest.java +++ b/instrumentation/openai/openai-java-1.1/library/src/test/java/io/opentelemetry/instrumentation/openai/v1_1/ChatTest.java @@ -5,7 +5,6 @@ package io.opentelemetry.instrumentation.openai.v1_1; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; @@ -620,19 +619,22 @@ void streamNoCaptureContent() { val -> val.containsExactly("stop")))))); getTesting() - .waitAndAssertHistogramPoints( + .waitAndAssertMetrics( + INSTRUMENTATION_NAME, metric -> metric - .satisfies(hasScopeName(INSTRUMENTATION_NAME)) - .hasName("gen_ai.client.operation.duration"), - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL))); + .hasName("gen_ai.client.operation.duration") + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo( + GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL))))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -712,19 +714,22 @@ void streamMultipleChoicesNoCaptureContent() { val -> val.containsExactly("stop", "stop")))))); getTesting() - .waitAndAssertHistogramPoints( + .waitAndAssertMetrics( + INSTRUMENTATION_NAME, metric -> metric - .satisfies(hasScopeName(INSTRUMENTATION_NAME)) - .hasName("gen_ai.client.operation.duration"), - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL))); + .hasName("gen_ai.client.operation.duration") + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo( + GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL))))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -810,19 +815,22 @@ void streamToolCallsNoCaptureContent() { val -> val.containsExactly("tool_calls")))))); getTesting() - .waitAndAssertHistogramPoints( + .waitAndAssertMetrics( + INSTRUMENTATION_NAME, metric -> metric - .satisfies(hasScopeName(INSTRUMENTATION_NAME)) - .hasName("gen_ai.client.operation.duration"), - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL))); + .hasName("gen_ai.client.operation.duration") + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo( + GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL))))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -908,19 +916,22 @@ void streamToolCallsNoCaptureContent() { val -> val.containsExactly("stop")))))); getTesting() - .waitAndAssertHistogramPoints( + .waitAndAssertMetrics( + INSTRUMENTATION_NAME, metric -> metric - .satisfies(hasScopeName(INSTRUMENTATION_NAME)) - .hasName("gen_ai.client.operation.duration"), - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL))); + .hasName("gen_ai.client.operation.duration") + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo( + GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL))))); SpanContext spanCtx1 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); diff --git a/instrumentation/openai/openai-java-1.1/testing/src/main/java/io/opentelemetry/instrumentation/openai/v1_1/AbstractChatTest.java b/instrumentation/openai/openai-java-1.1/testing/src/main/java/io/opentelemetry/instrumentation/openai/v1_1/AbstractChatTest.java index 593315b6588d..8d29404c8bbf 100644 --- a/instrumentation/openai/openai-java-1.1/testing/src/main/java/io/opentelemetry/instrumentation/openai/v1_1/AbstractChatTest.java +++ b/instrumentation/openai/openai-java-1.1/testing/src/main/java/io/opentelemetry/instrumentation/openai/v1_1/AbstractChatTest.java @@ -6,7 +6,6 @@ package io.opentelemetry.instrumentation.openai.v1_1; import static io.opentelemetry.instrumentation.api.internal.SemconvExceptionSignal.emitExceptionAsSpanEvents; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; @@ -916,19 +915,21 @@ void connectionError() { equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL))))); getTesting() - .waitAndAssertHistogramPoints( + .waitAndAssertMetrics( + INSTRUMENTATION_NAME, metric -> metric - .satisfies(hasScopeName(INSTRUMENTATION_NAME)) - .hasName("gen_ai.client.operation.duration"), - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(ERROR_TYPE, OpenAIIoException.class.getName()), - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL))); + .hasName("gen_ai.client.operation.duration") + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(ERROR_TYPE, OpenAIIoException.class.getName()), + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL))))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -981,19 +982,22 @@ void stream() { val -> val.containsExactly("stop")))))); getTesting() - .waitAndAssertHistogramPoints( + .waitAndAssertMetrics( + INSTRUMENTATION_NAME, metric -> metric - .satisfies(hasScopeName(INSTRUMENTATION_NAME)) - .hasName("gen_ai.client.operation.duration"), - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL))); + .hasName("gen_ai.client.operation.duration") + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo( + GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL))))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -1220,19 +1224,22 @@ void streamMultipleChoices() { val -> val.containsExactly("stop", "stop")))))); getTesting() - .waitAndAssertHistogramPoints( + .waitAndAssertMetrics( + INSTRUMENTATION_NAME, metric -> metric - .satisfies(hasScopeName(INSTRUMENTATION_NAME)) - .hasName("gen_ai.client.operation.duration"), - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL))); + .hasName("gen_ai.client.operation.duration") + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo( + GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL))))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -1370,19 +1377,22 @@ void streamToolCalls() { val -> val.containsExactly("tool_calls")))))); getTesting() - .waitAndAssertHistogramPoints( + .waitAndAssertMetrics( + INSTRUMENTATION_NAME, metric -> metric - .satisfies(hasScopeName(INSTRUMENTATION_NAME)) - .hasName("gen_ai.client.operation.duration"), - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL))); + .hasName("gen_ai.client.operation.duration") + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo( + GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL))))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -1498,19 +1508,22 @@ void streamToolCalls() { val -> val.containsExactly("stop")))))); getTesting() - .waitAndAssertHistogramPoints( + .waitAndAssertMetrics( + INSTRUMENTATION_NAME, metric -> metric - .satisfies(hasScopeName(INSTRUMENTATION_NAME)) - .hasName("gen_ai.client.operation.duration"), - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL))); + .hasName("gen_ai.client.operation.duration") + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo( + GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL))))); SpanContext spanCtx1 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -1643,19 +1656,21 @@ void streamConnectionError() { equalTo(GEN_AI_REQUEST_STREAM, true))))); getTesting() - .waitAndAssertHistogramPoints( + .waitAndAssertMetrics( + INSTRUMENTATION_NAME, metric -> metric - .satisfies(hasScopeName(INSTRUMENTATION_NAME)) - .hasName("gen_ai.client.operation.duration"), - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(ERROR_TYPE, OpenAIIoException.class.getName()), - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL))); + .hasName("gen_ai.client.operation.duration") + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(ERROR_TYPE, OpenAIIoException.class.getName()), + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL))))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); diff --git a/instrumentation/openai/openai-java-1.1/testing/src/main/java/io/opentelemetry/instrumentation/openai/v1_1/AbstractEmbeddingsTest.java b/instrumentation/openai/openai-java-1.1/testing/src/main/java/io/opentelemetry/instrumentation/openai/v1_1/AbstractEmbeddingsTest.java index 9a64c6db84c9..713e43a7f8d6 100644 --- a/instrumentation/openai/openai-java-1.1/testing/src/main/java/io/opentelemetry/instrumentation/openai/v1_1/AbstractEmbeddingsTest.java +++ b/instrumentation/openai/openai-java-1.1/testing/src/main/java/io/opentelemetry/instrumentation/openai/v1_1/AbstractEmbeddingsTest.java @@ -6,7 +6,6 @@ package io.opentelemetry.instrumentation.openai.v1_1; import static io.opentelemetry.instrumentation.api.internal.SemconvExceptionSignal.emitExceptionAsSpanEvents; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; @@ -259,18 +258,20 @@ void connectionError() { getTesting().waitAndAssertLogRecords(genAiClientExceptionLogs(thrown)); getTesting() - .waitAndAssertHistogramPoints( + .waitAndAssertMetrics( + INSTRUMENTATION_NAME, metric -> metric - .satisfies(hasScopeName(INSTRUMENTATION_NAME)) - .hasName("gen_ai.client.operation.duration"), - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(ERROR_TYPE, OpenAIIoException.class.getName()), - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, EMBEDDINGS), - equalTo(GEN_AI_REQUEST_MODEL, MODEL))); + .hasName("gen_ai.client.operation.duration") + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(ERROR_TYPE, OpenAIIoException.class.getName()), + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, EMBEDDINGS), + equalTo(GEN_AI_REQUEST_MODEL, MODEL))))); } } diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/MeterTest.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/MeterTest.java index b399d1a4a74a..f866f2ab56fe 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/MeterTest.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/MeterTest.java @@ -6,7 +6,6 @@ package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics; import static io.opentelemetry.api.common.AttributeKey.stringKey; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import io.opentelemetry.api.common.Attributes; @@ -339,10 +338,10 @@ void longHistogram() { instrument.record(6, Attributes.of(stringKey("q"), "r")); testing.waitAndAssertHistogramPoints( + instrumentationName, + "test", metric -> metric - .satisfies(hasScopeName(instrumentationName)) - .hasName("test") .hasDescription("d") .hasInstrumentationScope( InstrumentationScopeInfo.builder(instrumentationName) @@ -362,10 +361,10 @@ void doubleHistogram() { instrument.record(6.6, Attributes.of(stringKey("q"), "r")); testing.waitAndAssertHistogramPoints( + instrumentationName, + "test", metric -> metric - .satisfies(hasScopeName(instrumentationName)) - .hasName("test") .hasDescription("d") .hasInstrumentationScope( InstrumentationScopeInfo.builder(instrumentationName) diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.31/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_31/metrics/MeterTest.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.31/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_31/metrics/MeterTest.java index 41a32cb97149..00c4c9c37a3b 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.31/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_31/metrics/MeterTest.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.31/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_31/metrics/MeterTest.java @@ -6,7 +6,6 @@ package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_31.metrics; import static io.opentelemetry.api.common.AttributeKey.stringKey; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static java.util.Collections.singletonList; @@ -227,10 +226,10 @@ void longHistogram() { instrument.record(6, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); testing.waitAndAssertHistogramPoints( + instrumentationName, + "test", metric -> metric - .satisfies(hasScopeName(instrumentationName)) - .hasName("test") .hasDescription("d") .hasUnit("u") .hasInstrumentationScope( @@ -260,10 +259,10 @@ void doubleHistogram() { instrument.record(6.6, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); testing.waitAndAssertHistogramPoints( + instrumentationName, + "test", metric -> metric - .satisfies(hasScopeName(instrumentationName)) - .hasName("test") .hasDescription("d") .hasUnit("u") .hasInstrumentationScope( diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/incubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/incubator/metrics/MeterTest.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/incubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/incubator/metrics/MeterTest.java index 79c72f60a161..30dc0ca3525a 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/incubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/incubator/metrics/MeterTest.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/incubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/incubator/metrics/MeterTest.java @@ -6,7 +6,6 @@ package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_32.incubator.metrics; import static io.opentelemetry.api.common.AttributeKey.stringKey; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static java.util.Collections.singletonList; @@ -227,10 +226,10 @@ void longHistogram() { instrument.record(6, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); testing.waitAndAssertHistogramPoints( + instrumentationName, + "test", metric -> metric - .satisfies(hasScopeName(instrumentationName)) - .hasName("test") .hasDescription("d") .hasUnit("u") .hasInstrumentationScope( @@ -260,10 +259,10 @@ void doubleHistogram() { instrument.record(6.6, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); testing.waitAndAssertHistogramPoints( + instrumentationName, + "test", metric -> metric - .satisfies(hasScopeName(instrumentationName)) - .hasName("test") .hasDescription("d") .hasUnit("u") .hasInstrumentationScope( diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/metrics/MeterTest.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/metrics/MeterTest.java index f5e255b1c7b8..81a05a0b5132 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/metrics/MeterTest.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/metrics/MeterTest.java @@ -6,7 +6,6 @@ package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_32.metrics; import static io.opentelemetry.api.common.AttributeKey.stringKey; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static java.util.Collections.singletonList; import static org.assertj.core.api.Assertions.assertThatThrownBy; @@ -66,10 +65,10 @@ void longHistogram() { instrument.record(6, Attributes.of(stringKey("test"), "test")); testing.waitAndAssertHistogramPoints( + instrumentationName, + "test", metric -> metric - .satisfies(hasScopeName(instrumentationName)) - .hasName("test") .hasDescription("d") .hasUnit("u") .hasInstrumentationScope( @@ -96,10 +95,10 @@ void doubleHistogram() { instrument.record(6.6, Attributes.of(stringKey("test"), "test")); testing.waitAndAssertHistogramPoints( + instrumentationName, + "test", metric -> metric - .satisfies(hasScopeName(instrumentationName)) - .hasName("test") .hasDescription("d") .hasUnit("u") .hasInstrumentationScope( diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/incubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/MeterTest.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/incubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/MeterTest.java index b096ebd8f06e..74824bb54148 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/incubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/MeterTest.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/incubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/MeterTest.java @@ -6,7 +6,6 @@ package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_37.incubator.metrics; import static io.opentelemetry.api.common.AttributeKey.stringKey; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static java.util.Collections.singletonList; @@ -227,10 +226,10 @@ void longHistogram() { instrument.record(6, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); testing.waitAndAssertHistogramPoints( + instrumentationName, + "test", metric -> metric - .satisfies(hasScopeName(instrumentationName)) - .hasName("test") .hasDescription("d") .hasUnit("u") .hasInstrumentationScope( @@ -260,10 +259,10 @@ void doubleHistogram() { instrument.record(6.6, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); testing.waitAndAssertHistogramPoints( + instrumentationName, + "test", metric -> metric - .satisfies(hasScopeName(instrumentationName)) - .hasName("test") .hasDescription("d") .hasUnit("u") .hasInstrumentationScope( diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/oldAndNewIncubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/MeterTest.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/oldAndNewIncubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/MeterTest.java index b096ebd8f06e..74824bb54148 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/oldAndNewIncubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/MeterTest.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/oldAndNewIncubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/MeterTest.java @@ -6,7 +6,6 @@ package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_37.incubator.metrics; import static io.opentelemetry.api.common.AttributeKey.stringKey; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static java.util.Collections.singletonList; @@ -227,10 +226,10 @@ void longHistogram() { instrument.record(6, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); testing.waitAndAssertHistogramPoints( + instrumentationName, + "test", metric -> metric - .satisfies(hasScopeName(instrumentationName)) - .hasName("test") .hasDescription("d") .hasUnit("u") .hasInstrumentationScope( @@ -260,10 +259,10 @@ void doubleHistogram() { instrument.record(6.6, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); testing.waitAndAssertHistogramPoints( + instrumentationName, + "test", metric -> metric - .satisfies(hasScopeName(instrumentationName)) - .hasName("test") .hasDescription("d") .hasUnit("u") .hasInstrumentationScope( diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/metrics/MeterTest.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/metrics/MeterTest.java index bd4534b71f33..08b98e37729c 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/metrics/MeterTest.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/metrics/MeterTest.java @@ -6,7 +6,6 @@ package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_37.metrics; import static io.opentelemetry.api.common.AttributeKey.stringKey; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static java.util.Collections.singletonList; import static org.assertj.core.api.Assertions.assertThatThrownBy; @@ -64,10 +63,10 @@ void longHistogram() { instrument.record(6, Attributes.of(stringKey("test"), "test")); testing.waitAndAssertHistogramPoints( + instrumentationName, + "test", metric -> metric - .satisfies(hasScopeName(instrumentationName)) - .hasName("test") .hasDescription("d") .hasUnit("u") .hasInstrumentationScope( @@ -94,10 +93,10 @@ void doubleHistogram() { instrument.record(6.6, Attributes.of(stringKey("test"), "test")); testing.waitAndAssertHistogramPoints( + instrumentationName, + "test", metric -> metric - .satisfies(hasScopeName(instrumentationName)) - .hasName("test") .hasDescription("d") .hasUnit("u") .hasInstrumentationScope( diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.65/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_65/incubator/metrics/MeterTest.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.65/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_65/incubator/metrics/MeterTest.java index 8b04ba238f2d..f9ee405c6ce4 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.65/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_65/incubator/metrics/MeterTest.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.65/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_65/incubator/metrics/MeterTest.java @@ -6,7 +6,7 @@ package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_65.incubator.metrics; import static io.opentelemetry.api.common.AttributeKey.stringKey; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; @@ -167,9 +167,17 @@ void boundLongHistogram() { ((ExtendedLongHistogram) longHistogram).bind(Attributes.of(stringKey("q"), "r")); bound.record(11); - testing.waitAndAssertHistogramPoints( - metric -> metric.satisfies(hasScopeName("test-bound-long-histogram")).hasName("test"), - point -> point.hasSum(11.0).hasAttributesSatisfyingExactly(equalTo(stringKey("q"), "r"))); + testing.waitAndAssertMetrics( + "test-bound-long-histogram", + metric -> + metric + .hasName("test") + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(11.0) + .hasAttributesSatisfyingExactly(equalTo(stringKey("q"), "r"))))); } @Test @@ -183,9 +191,17 @@ void boundDoubleHistogram() { ((ExtendedDoubleHistogram) doubleHistogram).bind(Attributes.of(stringKey("q"), "r")); bound.record(12.1); - testing.waitAndAssertHistogramPoints( - metric -> metric.satisfies(hasScopeName("test-bound-double-histogram")).hasName("test"), - point -> point.hasSum(12.1).hasAttributesSatisfyingExactly(equalTo(stringKey("q"), "r"))); + testing.waitAndAssertMetrics( + "test-bound-double-histogram", + metric -> + metric + .hasName("test") + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSum(12.1) + .hasAttributesSatisfyingExactly(equalTo(stringKey("q"), "r"))))); } @Test diff --git a/instrumentation/pulsar/pulsar-2.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/pulsar/v2_8/PulsarClientTest.java b/instrumentation/pulsar/pulsar-2.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/pulsar/v2_8/PulsarClientTest.java index 56f31acb664c..0eec7bfb50ff 100644 --- a/instrumentation/pulsar/pulsar-2.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/pulsar/v2_8/PulsarClientTest.java +++ b/instrumentation/pulsar/pulsar-2.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/pulsar/v2_8/PulsarClientTest.java @@ -5,7 +5,6 @@ package io.opentelemetry.javaagent.instrumentation.pulsar.v2_8; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.instrumentation.testing.util.TelemetryDataUtil.asRemote; import static io.opentelemetry.instrumentation.testing.util.TelemetryDataUtil.orderByRootSpanKind; import static io.opentelemetry.instrumentation.testing.util.TelemetryDataUtil.orderByRootSpanName; @@ -69,12 +68,9 @@ void testConsumeNonPartitionedTopic() throws Exception { latch.await(1, MINUTES); testing.waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName(INSTRUMENTATION_NAME)) - .hasName("messaging.process.duration") - .hasDescription("Duration of processing operation.") - .hasUnit("s"), + INSTRUMENTATION_NAME, + "messaging.process.duration", + metric -> metric.hasDescription("Duration of processing operation.").hasUnit("s"), point -> point .hasSumGreaterThan(0.0) @@ -132,10 +128,10 @@ void testConsumeNonPartitionedTopic() throws Exception { equalTo(SERVER_ADDRESS, brokerHost), equalTo(SERVER_PORT, brokerPort)))))); testing.waitAndAssertHistogramPoints( + INSTRUMENTATION_NAME, + "messaging.client.operation.duration", metric -> metric - .satisfies(hasScopeName(INSTRUMENTATION_NAME)) - .hasName("messaging.client.operation.duration") .hasDescription( "Duration of messaging operation initiated by a producer or consumer client.") .hasUnit("s"), diff --git a/instrumentation/ratpack/ratpack-1.4/javaagent/src/version17Test/java/io/opentelemetry/javaagent/instrumentation/ratpack/v1_4/httpclient/client/RatpackHttpClientTest.java b/instrumentation/ratpack/ratpack-1.4/javaagent/src/version17Test/java/io/opentelemetry/javaagent/instrumentation/ratpack/v1_4/httpclient/client/RatpackHttpClientTest.java index e184e9fb83f3..984857eaca16 100644 --- a/instrumentation/ratpack/ratpack-1.4/javaagent/src/version17Test/java/io/opentelemetry/javaagent/instrumentation/ratpack/v1_4/httpclient/client/RatpackHttpClientTest.java +++ b/instrumentation/ratpack/ratpack-1.4/javaagent/src/version17Test/java/io/opentelemetry/javaagent/instrumentation/ratpack/v1_4/httpclient/client/RatpackHttpClientTest.java @@ -5,7 +5,6 @@ package io.opentelemetry.javaagent.instrumentation.ratpack.v1_4.httpclient.client; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.HttpAttributes.HTTP_REQUEST_METHOD; import static io.opentelemetry.semconv.HttpAttributes.HTTP_RESPONSE_STATUS_CODE; @@ -66,14 +65,12 @@ void durationMetricHasProtocolVersion() throws Exception { span -> assertServerSpan(span).hasParent(trace.getSpan(0)))); testing.waitAndAssertHistogramPoints( + "io.opentelemetry.ratpack-1.4", + "http.client.request.duration", metric -> - metric - .satisfies(hasScopeName("io.opentelemetry.ratpack-1.4")) - .hasName("http.client.request.duration") - .satisfies( - metricData -> - assertThat(metricData.getInstrumentationScopeInfo().getVersion()) - .isNotEmpty()), + metric.satisfies( + metricData -> + assertThat(metricData.getInstrumentationScopeInfo().getVersion()).isNotEmpty()), point -> point.hasAttributesSatisfyingExactly( equalTo(HTTP_REQUEST_METHOD, "GET"), diff --git a/instrumentation/rocketmq/rocketmq-client-4.8/library/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v4_8/RocketMqMetricsTest.java b/instrumentation/rocketmq/rocketmq-client-4.8/library/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v4_8/RocketMqMetricsTest.java index e999b7c4d639..2920ec994c23 100644 --- a/instrumentation/rocketmq/rocketmq-client-4.8/library/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v4_8/RocketMqMetricsTest.java +++ b/instrumentation/rocketmq/rocketmq-client-4.8/library/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v4_8/RocketMqMetricsTest.java @@ -5,7 +5,7 @@ package io.opentelemetry.instrumentation.rocketmqclient.v4_8; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.ErrorAttributes.ERROR_TYPE; @@ -216,17 +216,22 @@ private static void assertDuration( String consumerGroup, String operationType, String errorType) { - testing.waitAndAssertHistogramPoints( - metric -> metric.satisfies(hasScopeName(INSTRUMENTATION_NAME)).hasName(metricName), - point -> - point - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, operationName), - equalTo(MESSAGING_SYSTEM, "rocketmq"), - equalTo(ERROR_TYPE, errorType), - equalTo(MESSAGING_CONSUMER_GROUP_NAME, consumerGroup), - equalTo(MESSAGING_DESTINATION_NAME, destination), - equalTo(MESSAGING_OPERATION_TYPE, operationType))); + testing.waitAndAssertMetrics( + INSTRUMENTATION_NAME, + metric -> + metric + .hasName(metricName) + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, operationName), + equalTo(MESSAGING_SYSTEM, "rocketmq"), + equalTo(ERROR_TYPE, errorType), + equalTo(MESSAGING_CONSUMER_GROUP_NAME, consumerGroup), + equalTo(MESSAGING_DESTINATION_NAME, destination), + equalTo(MESSAGING_OPERATION_TYPE, operationType))))); } } diff --git a/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/AbstractRocketMqClientSuppressReceiveSpanTest.java b/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/AbstractRocketMqClientSuppressReceiveSpanTest.java index 5b960f433de5..1bc2eca908dd 100644 --- a/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/AbstractRocketMqClientSuppressReceiveSpanTest.java +++ b/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/AbstractRocketMqClientSuppressReceiveSpanTest.java @@ -5,7 +5,7 @@ package io.opentelemetry.instrumentation.rocketmqclient.v5_0; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.instrumentation.testing.util.TelemetryDataUtil.asRemote; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; @@ -171,33 +171,37 @@ private void assertMetrics(String topic, String consumerGroup) { equalTo(MESSAGING_SYSTEM, "rocketmq"), equalTo(MESSAGING_DESTINATION_NAME, topic)))))); testing() - .waitAndAssertHistogramPoints( + .waitAndAssertMetrics( + "io.opentelemetry.rocketmq-client-5.0", metric -> metric - .satisfies(hasScopeName("io.opentelemetry.rocketmq-client-5.0")) - .hasName("messaging.client.operation.duration"), - point -> - point - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "send"), - equalTo(MESSAGING_SYSTEM, "rocketmq"), - equalTo(MESSAGING_DESTINATION_NAME, topic), - equalTo(MESSAGING_OPERATION_TYPE, "send"))); + .hasName("messaging.client.operation.duration") + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "send"), + equalTo(MESSAGING_SYSTEM, "rocketmq"), + equalTo(MESSAGING_DESTINATION_NAME, topic), + equalTo(MESSAGING_OPERATION_TYPE, "send"))))); testing() - .waitAndAssertHistogramPoints( + .waitAndAssertMetrics( + "io.opentelemetry.rocketmq-client-5.0", metric -> metric - .satisfies(hasScopeName("io.opentelemetry.rocketmq-client-5.0")) - .hasName("messaging.process.duration"), - point -> - point - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "process"), - equalTo(MESSAGING_SYSTEM, "rocketmq"), - equalTo(MESSAGING_CONSUMER_GROUP_NAME, consumerGroup), - equalTo(MESSAGING_DESTINATION_NAME, topic))); + .hasName("messaging.process.duration") + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "process"), + equalTo(MESSAGING_SYSTEM, "rocketmq"), + equalTo(MESSAGING_CONSUMER_GROUP_NAME, consumerGroup), + equalTo(MESSAGING_DESTINATION_NAME, topic))))); testing() .waitAndAssertMetrics( "io.opentelemetry.rocketmq-client-5.0", diff --git a/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/AbstractRocketMqClientTest.java b/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/AbstractRocketMqClientTest.java index d5c8a10f82f8..47e3e6253254 100644 --- a/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/AbstractRocketMqClientTest.java +++ b/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/AbstractRocketMqClientTest.java @@ -7,7 +7,7 @@ import static io.opentelemetry.api.trace.SpanKind.CLIENT; import static io.opentelemetry.instrumentation.testing.junit.message.MessageHeaderUtil.headerAttributeKey; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.instrumentation.testing.util.TelemetryDataUtil.asRemote; import static io.opentelemetry.instrumentation.testing.util.TelemetryDataUtil.orderByRootSpanKind; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; @@ -760,20 +760,22 @@ private static SpanDataAssert assertProcessSpanWithDelayMessage( private void assertFailureMetrics() { testing() - .waitAndAssertHistogramPoints( + .waitAndAssertMetrics( + "io.opentelemetry.rocketmq-client-5.0", metric -> metric - .satisfies(hasScopeName("io.opentelemetry.rocketmq-client-5.0")) - .hasName("messaging.process.duration"), - point -> - point - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "process"), - equalTo(MESSAGING_SYSTEM, "rocketmq"), - equalTo(ERROR_TYPE, ConsumeResult.FAILURE.name()), - equalTo(MESSAGING_CONSUMER_GROUP_NAME, CONSUMER_GROUP), - equalTo(MESSAGING_DESTINATION_NAME, NORMAL_TOPIC))); + .hasName("messaging.process.duration") + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "process"), + equalTo(MESSAGING_SYSTEM, "rocketmq"), + equalTo(ERROR_TYPE, ConsumeResult.FAILURE.name()), + equalTo(MESSAGING_CONSUMER_GROUP_NAME, CONSUMER_GROUP), + equalTo(MESSAGING_DESTINATION_NAME, NORMAL_TOPIC))))); // messaging.client.consumed.messages is owned by the receive operation here, which the retry // gate cannot hold back, so the redelivery would race this assertion; the counter is asserted // in testSendAndConsumeNormalMessage instead @@ -819,41 +821,47 @@ private void assertMetrics() { MESSAGING_DESTINATION_NAME, NORMAL_TOPIC)))))); testing() - .waitAndAssertHistogramPoints( + .waitAndAssertMetrics( + "io.opentelemetry.rocketmq-client-5.0", metric -> metric - .satisfies(hasScopeName("io.opentelemetry.rocketmq-client-5.0")) - .hasName("messaging.client.operation.duration"), - point -> - point - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "send"), - equalTo(MESSAGING_SYSTEM, "rocketmq"), - equalTo(MESSAGING_DESTINATION_NAME, NORMAL_TOPIC), - equalTo(MESSAGING_OPERATION_TYPE, "send")), - // The consumer keeps polling, so the number of recorded receives is not deterministic. - point -> - point.hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "receive"), - equalTo(MESSAGING_SYSTEM, "rocketmq"), - equalTo(MESSAGING_CONSUMER_GROUP_NAME, CONSUMER_GROUP), - equalTo(MESSAGING_DESTINATION_NAME, NORMAL_TOPIC), - equalTo(MESSAGING_OPERATION_TYPE, "receive"))); + .hasName("messaging.client.operation.duration") + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "send"), + equalTo(MESSAGING_SYSTEM, "rocketmq"), + equalTo(MESSAGING_DESTINATION_NAME, NORMAL_TOPIC), + equalTo( + MESSAGING_OPERATION_TYPE, + "send")), // The consumer keeps polling, so the number + // of recorded receives is not deterministic. + point -> + point.hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "receive"), + equalTo(MESSAGING_SYSTEM, "rocketmq"), + equalTo(MESSAGING_CONSUMER_GROUP_NAME, CONSUMER_GROUP), + equalTo(MESSAGING_DESTINATION_NAME, NORMAL_TOPIC), + equalTo(MESSAGING_OPERATION_TYPE, "receive"))))); testing() - .waitAndAssertHistogramPoints( + .waitAndAssertMetrics( + "io.opentelemetry.rocketmq-client-5.0", metric -> metric - .satisfies(hasScopeName("io.opentelemetry.rocketmq-client-5.0")) - .hasName("messaging.process.duration"), - point -> - point - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "process"), - equalTo(MESSAGING_SYSTEM, "rocketmq"), - equalTo(MESSAGING_CONSUMER_GROUP_NAME, CONSUMER_GROUP), - equalTo(MESSAGING_DESTINATION_NAME, NORMAL_TOPIC))); + .hasName("messaging.process.duration") + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "process"), + equalTo(MESSAGING_SYSTEM, "rocketmq"), + equalTo(MESSAGING_CONSUMER_GROUP_NAME, CONSUMER_GROUP), + equalTo(MESSAGING_DESTINATION_NAME, NORMAL_TOPIC))))); testing() .waitAndAssertMetrics( "io.opentelemetry.rocketmq-client-5.0", diff --git a/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/RocketMqSimpleConsumerTest.java b/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/RocketMqSimpleConsumerTest.java index f9b205bce359..61ef38adbf18 100644 --- a/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/RocketMqSimpleConsumerTest.java +++ b/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/RocketMqSimpleConsumerTest.java @@ -5,7 +5,7 @@ package io.opentelemetry.instrumentation.rocketmqclient.v5_0; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.instrumentation.testing.util.TelemetryDataUtil.asRemote; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; @@ -195,20 +195,22 @@ void shouldInstrumentReceiveWhenReceiveTelemetryDisabled() throws ClientExceptio }); assertSuccessfulReceiveTrace("disabled receive parent", sendSpan); - testing.waitAndAssertHistogramPoints( + testing.waitAndAssertMetrics( + INSTRUMENTATION_NAME, metric -> metric - .satisfies(hasScopeName(INSTRUMENTATION_NAME)) - .hasName("messaging.client.operation.duration"), - point -> - point - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_CONSUMER_GROUP_NAME, CONSUMER_GROUP), - equalTo(MESSAGING_SYSTEM, "rocketmq"), - equalTo(MESSAGING_DESTINATION_NAME, TOPIC), - equalTo(MESSAGING_OPERATION_NAME, "receive"), - equalTo(MESSAGING_OPERATION_TYPE, "receive"))); + .hasName("messaging.client.operation.duration") + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_CONSUMER_GROUP_NAME, CONSUMER_GROUP), + equalTo(MESSAGING_SYSTEM, "rocketmq"), + equalTo(MESSAGING_DESTINATION_NAME, TOPIC), + equalTo(MESSAGING_OPERATION_NAME, "receive"), + equalTo(MESSAGING_OPERATION_TYPE, "receive"))))); testing.waitAndAssertMetrics( INSTRUMENTATION_NAME, "messaging.client.consumed.messages", diff --git a/instrumentation/runtime-telemetry/library/src/test/java/io/opentelemetry/instrumentation/runtimetelemetry/RuntimeTelemetryDefaultsTest.java b/instrumentation/runtime-telemetry/library/src/test/java/io/opentelemetry/instrumentation/runtimetelemetry/RuntimeTelemetryDefaultsTest.java index 0066b0103c5d..3a5f64a6b473 100644 --- a/instrumentation/runtime-telemetry/library/src/test/java/io/opentelemetry/instrumentation/runtimetelemetry/RuntimeTelemetryDefaultsTest.java +++ b/instrumentation/runtime-telemetry/library/src/test/java/io/opentelemetry/instrumentation/runtimetelemetry/RuntimeTelemetryDefaultsTest.java @@ -5,7 +5,7 @@ package io.opentelemetry.instrumentation.runtimetelemetry; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; import static io.opentelemetry.semconv.JvmAttributes.JVM_GC_ACTION; import static io.opentelemetry.semconv.JvmAttributes.JVM_GC_NAME; @@ -33,16 +33,18 @@ void capturesGcCause(boolean useBuilder) { assertThat(telemetry.getJfrTelemetry()).isNull(); System.gc(); - testing.waitAndAssertHistogramPoints( + testing.waitAndAssertMetrics( + "io.opentelemetry.runtime-telemetry", metric -> metric - .satisfies(hasScopeName("io.opentelemetry.runtime-telemetry")) - .hasName("jvm.gc.duration"), - point -> - point.hasAttributesSatisfyingExactly( - satisfies(JVM_GC_NAME, val -> val.isNotBlank()), - satisfies(JVM_GC_ACTION, val -> val.isNotBlank()), - satisfies(JVM_GC_CAUSE, val -> val.isNotBlank()))); + .hasName("jvm.gc.duration") + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + satisfies(JVM_GC_NAME, val -> val.isNotBlank()), + satisfies(JVM_GC_ACTION, val -> val.isNotBlank()), + satisfies(JVM_GC_CAUSE, val -> val.isNotBlank()))))); } } } diff --git a/instrumentation/runtime-telemetry/library/src/test/java/io/opentelemetry/instrumentation/runtimetelemetry/internal/GarbageCollectorTest.java b/instrumentation/runtime-telemetry/library/src/test/java/io/opentelemetry/instrumentation/runtimetelemetry/internal/GarbageCollectorTest.java index 6ab2e39fca4a..05389a014a6e 100644 --- a/instrumentation/runtime-telemetry/library/src/test/java/io/opentelemetry/instrumentation/runtimetelemetry/internal/GarbageCollectorTest.java +++ b/instrumentation/runtime-telemetry/library/src/test/java/io/opentelemetry/instrumentation/runtimetelemetry/internal/GarbageCollectorTest.java @@ -5,7 +5,6 @@ package io.opentelemetry.instrumentation.runtimetelemetry.internal; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.JvmAttributes.JVM_GC_ACTION; import static io.opentelemetry.semconv.JvmAttributes.JVM_GC_NAME; @@ -71,12 +70,9 @@ void registerObservers() { createTestNotification("G1 Old Generation", "end of major GC", "System.gc()", 11), null); testing.waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName("test")) - .hasName("jvm.gc.duration") - .hasDescription("Duration of JVM garbage collection actions.") - .hasUnit("s"), + "test", + "jvm.gc.duration", + metric -> metric.hasDescription("Duration of JVM garbage collection actions.").hasUnit("s"), point -> point .hasCount(2) diff --git a/instrumentation/sofa-rpc-5.4/testing/src/main/java/io/opentelemetry/instrumentation/sofarpc/v5_4/AbstractSofaRpcTest.java b/instrumentation/sofa-rpc-5.4/testing/src/main/java/io/opentelemetry/instrumentation/sofarpc/v5_4/AbstractSofaRpcTest.java index 46ebbddb7ccc..b597862e5681 100644 --- a/instrumentation/sofa-rpc-5.4/testing/src/main/java/io/opentelemetry/instrumentation/sofarpc/v5_4/AbstractSofaRpcTest.java +++ b/instrumentation/sofa-rpc-5.4/testing/src/main/java/io/opentelemetry/instrumentation/sofarpc/v5_4/AbstractSofaRpcTest.java @@ -11,7 +11,6 @@ import static io.opentelemetry.instrumentation.testing.junit.rpc.SemconvRpcStabilityUtil.emitOldRpcSemconv; import static io.opentelemetry.instrumentation.testing.junit.rpc.SemconvRpcStabilityUtil.emitPreviewRpcSemconv; import static io.opentelemetry.instrumentation.testing.junit.service.SemconvServiceStabilityUtil.maybeStablePeerService; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; @@ -231,11 +230,9 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), if (emitOldRpcSemconv()) { testing() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName("io.opentelemetry.sofa-rpc-5.4")) - .hasName("rpc.server.duration") - .hasUnit("ms"), + "io.opentelemetry.sofa-rpc-5.4", + "rpc.server.duration", + metric -> metric.hasUnit("ms"), point -> point.hasAttributesSatisfyingExactly( equalTo(RPC_SYSTEM, "sofarpc"), @@ -246,11 +243,9 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), testing() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName("io.opentelemetry.sofa-rpc-5.4")) - .hasName("rpc.client.duration") - .hasUnit("ms"), + "io.opentelemetry.sofa-rpc-5.4", + "rpc.client.duration", + metric -> metric.hasUnit("ms"), point -> point.hasAttributesSatisfyingExactly( equalTo(RPC_SYSTEM, "sofarpc"), @@ -264,11 +259,9 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), if (emitPreviewRpcSemconv()) { testing() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName("io.opentelemetry.sofa-rpc-5.4")) - .hasName("rpc.server.call.duration") - .hasUnit("s"), + "io.opentelemetry.sofa-rpc-5.4", + "rpc.server.call.duration", + metric -> metric.hasUnit("s"), point -> point.hasAttributesSatisfyingExactly( equalTo(RPC_SYSTEM_NAME, "sofarpc"), @@ -278,11 +271,9 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), testing() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName("io.opentelemetry.sofa-rpc-5.4")) - .hasName("rpc.client.call.duration") - .hasUnit("s"), + "io.opentelemetry.sofa-rpc-5.4", + "rpc.client.call.duration", + metric -> metric.hasUnit("s"), point -> point.hasAttributesSatisfyingExactly( equalTo(RPC_SYSTEM_NAME, "sofarpc"), @@ -378,11 +369,9 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), if (emitOldRpcSemconv()) { testing() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName("io.opentelemetry.sofa-rpc-5.4")) - .hasName("rpc.server.duration") - .hasUnit("ms"), + "io.opentelemetry.sofa-rpc-5.4", + "rpc.server.duration", + metric -> metric.hasUnit("ms"), point -> point.hasAttributesSatisfyingExactly( equalTo(RPC_SYSTEM, "sofarpc"), @@ -393,11 +382,9 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), testing() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName("io.opentelemetry.sofa-rpc-5.4")) - .hasName("rpc.client.duration") - .hasUnit("ms"), + "io.opentelemetry.sofa-rpc-5.4", + "rpc.client.duration", + metric -> metric.hasUnit("ms"), point -> point.hasAttributesSatisfyingExactly( equalTo(RPC_SYSTEM, "sofarpc"), @@ -411,11 +398,9 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), if (emitPreviewRpcSemconv()) { testing() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName("io.opentelemetry.sofa-rpc-5.4")) - .hasName("rpc.server.call.duration") - .hasUnit("s"), + "io.opentelemetry.sofa-rpc-5.4", + "rpc.server.call.duration", + metric -> metric.hasUnit("s"), point -> point.hasAttributesSatisfyingExactly( equalTo(RPC_SYSTEM_NAME, "sofarpc"), @@ -425,11 +410,9 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), testing() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName("io.opentelemetry.sofa-rpc-5.4")) - .hasName("rpc.client.call.duration") - .hasUnit("s"), + "io.opentelemetry.sofa-rpc-5.4", + "rpc.client.call.duration", + metric -> metric.hasUnit("s"), point -> point.hasAttributesSatisfyingExactly( equalTo(RPC_SYSTEM_NAME, "sofarpc"), @@ -569,11 +552,9 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), if (emitOldRpcSemconv()) { testing() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName("io.opentelemetry.sofa-rpc-5.4")) - .hasName("rpc.server.duration") - .hasUnit("ms"), + "io.opentelemetry.sofa-rpc-5.4", + "rpc.server.duration", + metric -> metric.hasUnit("ms"), point -> point.hasAttributesSatisfyingExactly( equalTo(RPC_SYSTEM, "sofarpc"), @@ -584,11 +565,9 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), testing() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName("io.opentelemetry.sofa-rpc-5.4")) - .hasName("rpc.client.duration") - .hasUnit("ms"), + "io.opentelemetry.sofa-rpc-5.4", + "rpc.client.duration", + metric -> metric.hasUnit("ms"), point -> point.hasAttributesSatisfyingExactly( equalTo(RPC_SYSTEM, "sofarpc"), @@ -604,11 +583,9 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), if (emitPreviewRpcSemconv()) { testing() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName("io.opentelemetry.sofa-rpc-5.4")) - .hasName("rpc.server.call.duration") - .hasUnit("s"), + "io.opentelemetry.sofa-rpc-5.4", + "rpc.server.call.duration", + metric -> metric.hasUnit("s"), point -> point.hasAttributesSatisfyingExactly( equalTo(RPC_SYSTEM_NAME, "sofarpc"), @@ -619,11 +596,9 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), testing() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName("io.opentelemetry.sofa-rpc-5.4")) - .hasName("rpc.client.call.duration") - .hasUnit("s"), + "io.opentelemetry.sofa-rpc-5.4", + "rpc.client.call.duration", + metric -> metric.hasUnit("s"), point -> point.hasAttributesSatisfyingExactly( equalTo(RPC_SYSTEM_NAME, "sofarpc"), diff --git a/instrumentation/sofa-rpc-5.4/testing/src/main/java/io/opentelemetry/instrumentation/sofarpc/v5_4/AbstractSofaRpcTraceChainTest.java b/instrumentation/sofa-rpc-5.4/testing/src/main/java/io/opentelemetry/instrumentation/sofarpc/v5_4/AbstractSofaRpcTraceChainTest.java index 5b7f4e6c5dac..d1c39b5b2d9f 100644 --- a/instrumentation/sofa-rpc-5.4/testing/src/main/java/io/opentelemetry/instrumentation/sofarpc/v5_4/AbstractSofaRpcTraceChainTest.java +++ b/instrumentation/sofa-rpc-5.4/testing/src/main/java/io/opentelemetry/instrumentation/sofarpc/v5_4/AbstractSofaRpcTraceChainTest.java @@ -9,7 +9,6 @@ import static io.opentelemetry.instrumentation.testing.junit.rpc.SemconvRpcStabilityUtil.emitOldRpcSemconv; import static io.opentelemetry.instrumentation.testing.junit.rpc.SemconvRpcStabilityUtil.emitPreviewRpcSemconv; import static io.opentelemetry.instrumentation.testing.junit.service.SemconvServiceStabilityUtil.maybeStablePeerService; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; @@ -266,11 +265,9 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), if (emitOldRpcSemconv()) { testing() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName("io.opentelemetry.sofa-rpc-5.4")) - .hasName("rpc.server.duration") - .hasUnit("ms"), + "io.opentelemetry.sofa-rpc-5.4", + "rpc.server.duration", + metric -> metric.hasUnit("ms"), point -> point.hasAttributesSatisfyingExactly( equalTo(RPC_SYSTEM, "sofarpc"), @@ -288,11 +285,9 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), testing() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName("io.opentelemetry.sofa-rpc-5.4")) - .hasName("rpc.client.duration") - .hasUnit("ms"), + "io.opentelemetry.sofa-rpc-5.4", + "rpc.client.duration", + metric -> metric.hasUnit("ms"), point -> point.hasAttributesSatisfyingExactly( equalTo(RPC_SYSTEM, "sofarpc"), @@ -316,11 +311,9 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), if (emitPreviewRpcSemconv()) { testing() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName("io.opentelemetry.sofa-rpc-5.4")) - .hasName("rpc.server.call.duration") - .hasUnit("s"), + "io.opentelemetry.sofa-rpc-5.4", + "rpc.server.call.duration", + metric -> metric.hasUnit("s"), point -> point.hasAttributesSatisfyingExactly( equalTo(RPC_SYSTEM_NAME, "sofarpc"), @@ -336,11 +329,9 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), testing() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName("io.opentelemetry.sofa-rpc-5.4")) - .hasName("rpc.client.call.duration") - .hasUnit("s"), + "io.opentelemetry.sofa-rpc-5.4", + "rpc.client.call.duration", + metric -> metric.hasUnit("s"), point -> point.hasAttributesSatisfyingExactly( equalTo(RPC_SYSTEM_NAME, "sofarpc"), @@ -486,11 +477,9 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), if (emitOldRpcSemconv()) { testing() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName("io.opentelemetry.sofa-rpc-5.4")) - .hasName("rpc.server.duration") - .hasUnit("ms"), + "io.opentelemetry.sofa-rpc-5.4", + "rpc.server.duration", + metric -> metric.hasUnit("ms"), point -> point.hasAttributesSatisfyingExactly( equalTo(RPC_SYSTEM, "sofarpc"), @@ -510,11 +499,9 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), testing() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName("io.opentelemetry.sofa-rpc-5.4")) - .hasName("rpc.client.duration") - .hasUnit("ms"), + "io.opentelemetry.sofa-rpc-5.4", + "rpc.client.duration", + metric -> metric.hasUnit("ms"), point -> point.hasAttributesSatisfyingExactly( equalTo(RPC_SYSTEM, "sofarpc"), @@ -528,11 +515,9 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), if (emitPreviewRpcSemconv()) { testing() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName("io.opentelemetry.sofa-rpc-5.4")) - .hasName("rpc.server.call.duration") - .hasUnit("s"), + "io.opentelemetry.sofa-rpc-5.4", + "rpc.server.call.duration", + metric -> metric.hasUnit("s"), point -> point.hasAttributesSatisfyingExactly( equalTo(RPC_SYSTEM_NAME, "sofarpc"), @@ -548,11 +533,9 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), testing() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName("io.opentelemetry.sofa-rpc-5.4")) - .hasName("rpc.client.call.duration") - .hasUnit("s"), + "io.opentelemetry.sofa-rpc-5.4", + "rpc.client.call.duration", + metric -> metric.hasUnit("s"), point -> point.hasAttributesSatisfyingExactly( equalTo(RPC_SYSTEM_NAME, "sofarpc"), diff --git a/instrumentation/spring/spring-ai-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/ai/v1_0/ChatModelTest.java b/instrumentation/spring/spring-ai-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/ai/v1_0/ChatModelTest.java index 6db88db58eb6..ba78f488b997 100644 --- a/instrumentation/spring/spring-ai-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/ai/v1_0/ChatModelTest.java +++ b/instrumentation/spring/spring-ai-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/ai/v1_0/ChatModelTest.java @@ -8,7 +8,6 @@ import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.api.trace.SpanKind.CLIENT; import static io.opentelemetry.api.trace.SpanKind.INTERNAL; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; @@ -898,19 +897,21 @@ private static void assertMetrics() { } private static void assertMetricsWithoutTokenUsage() { - testing.waitAndAssertHistogramPoints( + testing.waitAndAssertMetrics( + INSTRUMENTATION_NAME, metric -> metric - .satisfies(hasScopeName(INSTRUMENTATION_NAME)) - .hasName("gen_ai.client.operation.duration"), - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, "test"), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, MODEL))); + .hasName("gen_ai.client.operation.duration") + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, "test"), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, MODEL))))); testing.waitAndAssertMetrics( INSTRUMENTATION_NAME, "gen_ai.client.token.usage", metrics -> metrics.isEmpty()); } diff --git a/instrumentation/spring/spring-integration-4.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/integration/v4_1/MessageProducerSupportInstrumentationTest.java b/instrumentation/spring/spring-integration-4.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/integration/v4_1/MessageProducerSupportInstrumentationTest.java index 9abae941fc14..f5579ac5e077 100644 --- a/instrumentation/spring/spring-integration-4.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/integration/v4_1/MessageProducerSupportInstrumentationTest.java +++ b/instrumentation/spring/spring-integration-4.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/integration/v4_1/MessageProducerSupportInstrumentationTest.java @@ -5,7 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.spring.integration.v4_1; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.instrumentation.testing.util.TestLatestDeps.testLatestDeps; import static io.opentelemetry.javaagent.instrumentation.spring.integration.v4_1.SpringIntegrationTestHelper.assertNoMetrics; import static io.opentelemetry.javaagent.instrumentation.spring.integration.v4_1.SpringIntegrationTestHelper.assertProcessMetrics; @@ -336,12 +336,12 @@ private static void assertUnrelatedProcessMetrics() { private static void assertSpringRabbitProcessMetrics() { - testing.waitAndAssertHistogramPoints( + testing.waitAndAssertMetrics( + SPRING_RABBIT_INSTRUMENTATION_NAME, metric -> metric - .satisfies(hasScopeName(SPRING_RABBIT_INSTRUMENTATION_NAME)) - .hasName("messaging.process.duration"), - point -> point.hasCount(1)); + .hasName("messaging.process.duration") + .satisfies(hasHistogramPointsSatisfyingExactly(point -> point.hasCount(1)))); } private static Message newRawMessage() { diff --git a/instrumentation/spring/spring-integration-4.1/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/integration/v4_1/SpringIntegrationTestHelper.java b/instrumentation/spring/spring-integration-4.1/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/integration/v4_1/SpringIntegrationTestHelper.java index 7ee76bb4c376..222efb743c5a 100644 --- a/instrumentation/spring/spring-integration-4.1/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/integration/v4_1/SpringIntegrationTestHelper.java +++ b/instrumentation/spring/spring-integration-4.1/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/integration/v4_1/SpringIntegrationTestHelper.java @@ -5,7 +5,6 @@ package io.opentelemetry.javaagent.instrumentation.spring.integration.v4_1; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; @@ -60,12 +59,9 @@ static void assertProcessMetrics( : equalTo(ERROR_TYPE, null); testing.waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName(INSTRUMENTATION_NAME)) - .hasName("messaging.process.duration") - .hasDescription("Duration of processing operation.") - .hasUnit("s"), + INSTRUMENTATION_NAME, + "messaging.process.duration", + metric -> metric.hasDescription("Duration of processing operation.").hasUnit("s"), point -> point .hasCount(expectedCount) @@ -100,10 +96,10 @@ static void assertProcessMetrics( static void assertSendMetrics(InstrumentationExtension testing, String destinationName) { testing.waitAndAssertHistogramPoints( + INSTRUMENTATION_NAME, + "messaging.client.operation.duration", metric -> metric - .satisfies(hasScopeName(INSTRUMENTATION_NAME)) - .hasName("messaging.client.operation.duration") .hasDescription( "Duration of messaging operation initiated by a producer or consumer client.") .hasUnit("s"), diff --git a/instrumentation/spring/spring-pulsar-1.0/testing/src/main/java/io/opentelemetry/instrumentation/spring/pulsar/v1_0/AbstractSpringPulsarTest.java b/instrumentation/spring/spring-pulsar-1.0/testing/src/main/java/io/opentelemetry/instrumentation/spring/pulsar/v1_0/AbstractSpringPulsarTest.java index 49245840aca6..5ed53f4e534e 100644 --- a/instrumentation/spring/spring-pulsar-1.0/testing/src/main/java/io/opentelemetry/instrumentation/spring/pulsar/v1_0/AbstractSpringPulsarTest.java +++ b/instrumentation/spring/spring-pulsar-1.0/testing/src/main/java/io/opentelemetry/instrumentation/spring/pulsar/v1_0/AbstractSpringPulsarTest.java @@ -6,7 +6,6 @@ package io.opentelemetry.instrumentation.spring.pulsar.v1_0; import static io.opentelemetry.api.common.AttributeKey.stringKey; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; @@ -114,12 +113,9 @@ void testSpringPulsar() throws PulsarClientException, InterruptedException { protected void assertProcessMetrics() { testing.waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName("io.opentelemetry.spring-pulsar-1.0")) - .hasName("messaging.process.duration") - .hasDescription("Duration of processing operation.") - .hasUnit("s"), + "io.opentelemetry.spring-pulsar-1.0", + "messaging.process.duration", + metric -> metric.hasDescription("Duration of processing operation.").hasUnit("s"), point -> point .hasSumGreaterThan(0.0) diff --git a/instrumentation/spring/spring-rabbit-1.0/javaagent/src/version11Test/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbit11SimpleMessageListenerContainerTest.java b/instrumentation/spring/spring-rabbit-1.0/javaagent/src/version11Test/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbit11SimpleMessageListenerContainerTest.java index 52828681ff4e..a01a3d39f086 100644 --- a/instrumentation/spring/spring-rabbit-1.0/javaagent/src/version11Test/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbit11SimpleMessageListenerContainerTest.java +++ b/instrumentation/spring/spring-rabbit-1.0/javaagent/src/version11Test/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbit11SimpleMessageListenerContainerTest.java @@ -5,7 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.spring.rabbit.v1_0; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static java.util.concurrent.TimeUnit.SECONDS; import static org.assertj.core.api.Assertions.assertThat; @@ -107,12 +107,12 @@ void shouldUseSpringProcessTelemetry() throws InterruptedException { span -> span.hasName("consumer").hasParent(processSpan)); }); - testing.waitAndAssertHistogramPoints( + testing.waitAndAssertMetrics( + SPRING_INSTRUMENTATION_NAME, metric -> metric - .satisfies(hasScopeName(SPRING_INSTRUMENTATION_NAME)) - .hasName("messaging.process.duration"), - point -> point.hasCount(1)); + .hasName("messaging.process.duration") + .satisfies(hasHistogramPointsSatisfyingExactly(point -> point.hasCount(1)))); testing.waitAndAssertMetrics( SPRING_INSTRUMENTATION_NAME, "messaging.client.consumed.messages", diff --git a/instrumentation/spring/spring-rabbit-1.0/javaagent/src/version20Test/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbit20DirectMessageListenerContainerTest.java b/instrumentation/spring/spring-rabbit-1.0/javaagent/src/version20Test/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbit20DirectMessageListenerContainerTest.java index 948314847069..7c3e8f240542 100644 --- a/instrumentation/spring/spring-rabbit-1.0/javaagent/src/version20Test/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbit20DirectMessageListenerContainerTest.java +++ b/instrumentation/spring/spring-rabbit-1.0/javaagent/src/version20Test/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbit20DirectMessageListenerContainerTest.java @@ -6,6 +6,7 @@ package io.opentelemetry.javaagent.instrumentation.spring.rabbit.v1_0; import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static java.util.concurrent.TimeUnit.SECONDS; import static org.assertj.core.api.Assertions.assertThat; @@ -101,12 +102,12 @@ void shouldUseSpringProcessTelemetry() throws InterruptedException { span -> span.hasName("consumer").hasParent(processSpan)); }); - testing.waitAndAssertHistogramPoints( + testing.waitAndAssertMetrics( + SPRING_INSTRUMENTATION_NAME, metric -> metric - .satisfies(hasScopeName(SPRING_INSTRUMENTATION_NAME)) - .hasName("messaging.process.duration"), - point -> point.hasCount(1)); + .hasName("messaging.process.duration") + .satisfies(hasHistogramPointsSatisfyingExactly(point -> point.hasCount(1)))); testing.waitAndAssertMetrics( SPRING_INSTRUMENTATION_NAME, "messaging.client.consumed.messages", diff --git a/instrumentation/spring/spring-webflux/spring-webflux-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/webflux/v5_0/client/SpringWebfluxClientInstrumentationTest.java b/instrumentation/spring/spring-webflux/spring-webflux-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/webflux/v5_0/client/SpringWebfluxClientInstrumentationTest.java index 345ad9fe580a..1cfcc04ec219 100644 --- a/instrumentation/spring/spring-webflux/spring-webflux-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/webflux/v5_0/client/SpringWebfluxClientInstrumentationTest.java +++ b/instrumentation/spring/spring-webflux/spring-webflux-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/webflux/v5_0/client/SpringWebfluxClientInstrumentationTest.java @@ -5,7 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.spring.webflux.v5_0.client; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.HttpAttributes.HTTP_REQUEST_METHOD; import static io.opentelemetry.semconv.HttpAttributes.HTTP_RESPONSE_STATUS_CODE; @@ -67,17 +67,19 @@ void shouldAddProtocolVersionToDurationMetric() { assertThat(responseCode).isEqualTo(200); - testing.waitAndAssertHistogramPoints( + testing.waitAndAssertMetrics( + "io.opentelemetry.spring-webflux-5.0", metric -> metric - .satisfies(hasScopeName("io.opentelemetry.spring-webflux-5.0")) - .hasName("http.client.request.duration"), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(HTTP_REQUEST_METHOD, "GET"), - equalTo(HTTP_RESPONSE_STATUS_CODE, 200), - equalTo(NETWORK_PROTOCOL_VERSION, "1.1"), - equalTo(SERVER_ADDRESS, uri.getHost()), - equalTo(SERVER_PORT, uri.getPort()))); + .hasName("http.client.request.duration") + .satisfies( + hasHistogramPointsSatisfyingExactly( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(HTTP_REQUEST_METHOD, "GET"), + equalTo(HTTP_RESPONSE_STATUS_CODE, 200), + equalTo(NETWORK_PROTOCOL_VERSION, "1.1"), + equalTo(SERVER_ADDRESS, uri.getHost()), + equalTo(SERVER_PORT, uri.getPort()))))); } } diff --git a/instrumentation/thrift-0.13/testing/src/main/java/io/opentelemetry/instrumentation/thrift/v0_13/AbstractThriftTest.java b/instrumentation/thrift-0.13/testing/src/main/java/io/opentelemetry/instrumentation/thrift/v0_13/AbstractThriftTest.java index f99dff51f15b..d892d3bf5504 100644 --- a/instrumentation/thrift-0.13/testing/src/main/java/io/opentelemetry/instrumentation/thrift/v0_13/AbstractThriftTest.java +++ b/instrumentation/thrift-0.13/testing/src/main/java/io/opentelemetry/instrumentation/thrift/v0_13/AbstractThriftTest.java @@ -25,7 +25,6 @@ import static io.opentelemetry.instrumentation.testing.junit.rpc.SemconvRpcStabilityUtil.emitOldRpcSemconv; import static io.opentelemetry.instrumentation.testing.junit.rpc.SemconvRpcStabilityUtil.emitPreviewRpcSemconv; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.instrumentation.testing.util.TestLatestDeps.testLatestDeps; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; @@ -356,11 +355,9 @@ private void assertMetrics(int serverPort) { if (emitOldRpcSemconv()) { getTesting() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName("io.opentelemetry.thrift-0.13")) - .hasName("rpc.server.duration") - .hasUnit("ms"), + "io.opentelemetry.thrift-0.13", + "rpc.server.duration", + metric -> metric.hasUnit("ms"), point -> point.hasAttributesSatisfyingExactly( equalTo(SERVER_ADDRESS, "127.0.0.1"), @@ -371,11 +368,9 @@ private void assertMetrics(int serverPort) { equalTo(NETWORK_TYPE, "ipv4"))); getTesting() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName("io.opentelemetry.thrift-0.13")) - .hasName("rpc.client.duration") - .hasUnit("ms"), + "io.opentelemetry.thrift-0.13", + "rpc.client.duration", + metric -> metric.hasUnit("ms"), point -> point.hasAttributesSatisfyingExactly( equalTo(SERVER_ADDRESS, "localhost"), @@ -388,11 +383,9 @@ private void assertMetrics(int serverPort) { if (emitPreviewRpcSemconv()) { getTesting() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName("io.opentelemetry.thrift-0.13")) - .hasName("rpc.server.call.duration") - .hasUnit("s"), + "io.opentelemetry.thrift-0.13", + "rpc.server.call.duration", + metric -> metric.hasUnit("s"), point -> point.hasAttributesSatisfyingExactly( equalTo(RPC_SYSTEM_NAME, "apache_thrift"), @@ -401,11 +394,9 @@ private void assertMetrics(int serverPort) { equalTo(RPC_METHOD, CustomHandler.class.getName() + "/say"))); getTesting() .waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName("io.opentelemetry.thrift-0.13")) - .hasName("rpc.client.call.duration") - .hasUnit("s"), + "io.opentelemetry.thrift-0.13", + "rpc.client.call.duration", + metric -> metric.hasUnit("s"), point -> point.hasAttributesSatisfyingExactly( equalTo(RPC_SYSTEM_NAME, "apache_thrift"), diff --git a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/InstrumentationTestRunner.java b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/InstrumentationTestRunner.java index 7e5a7867377c..53a9e584b834 100644 --- a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/InstrumentationTestRunner.java +++ b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/InstrumentationTestRunner.java @@ -246,25 +246,34 @@ public final void waitAndAssertMetrics( } } - /** Waits for a histogram matching the metadata and exact unordered point assertions. */ + /** Waits for the named histogram to match the metadata and exact unordered point assertions. */ @SafeVarargs public final void waitAndAssertHistogramPoints( - Consumer metricAssertion, Consumer... pointAssertions) { - String[] matchedInstrumentationName = {""}; + String instrumentationName, + String metricName, + Consumer metricAssertion, + Consumer... pointAssertions) { awaitUntilAsserted( () -> { - matchedInstrumentationName[0] = ""; - assertThat(getExportedMetrics()) - .anySatisfy( - metric -> { - MetricAssert metricAssert = assertThat(metric); - metricAssertion.accept(metricAssert); - metricAssert.satisfies(hasHistogramPointsSatisfyingExactly(pointAssertions)); - matchedInstrumentationName[0] = metric.getInstrumentationScopeInfo().getName(); - }); + List matchingMetrics = + getExportedMetrics().stream() + .filter( + metric -> + metric.getInstrumentationScopeInfo().getName().equals(instrumentationName) + && metric.getName().equals(metricName)) + .collect(toList()); + assertThat(matchingMetrics) + .describedAs( + "Metrics for instrumentation %s and metric name %s", + instrumentationName, metricName) + .hasSize(1); + + MetricAssert metricAssert = assertThat(matchingMetrics.get(0)); + metricAssertion.accept(metricAssert); + metricAssert.satisfies(hasHistogramPointsSatisfyingExactly(pointAssertions)); }); - TelemetryDataUtil.assertMetricScopeVersion(metricsForScope(matchedInstrumentationName[0])); + TelemetryDataUtil.assertMetricScopeVersion(metricsForScope(instrumentationName)); if (Boolean.getBoolean("collectMetadata")) { collectEmittedMetrics(getExportedMetrics()); diff --git a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/InstrumentationExtension.java b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/InstrumentationExtension.java index 6378cf533518..e0d6a889ac26 100644 --- a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/InstrumentationExtension.java +++ b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/InstrumentationExtension.java @@ -116,12 +116,16 @@ public final void waitAndAssertMetrics( testRunner.waitAndAssertMetrics(instrumentationName, assertions); } - /** Waits for a histogram matching the metadata and exact unordered point assertions. */ + /** Waits for the named histogram to match the metadata and exact unordered point assertions. */ @SafeVarargs @SuppressWarnings("varargs") public final void waitAndAssertHistogramPoints( - Consumer metricAssertion, Consumer... pointAssertions) { - testRunner.waitAndAssertHistogramPoints(metricAssertion, pointAssertions); + String instrumentationName, + String metricName, + Consumer metricAssertion, + Consumer... pointAssertions) { + testRunner.waitAndAssertHistogramPoints( + instrumentationName, metricName, metricAssertion, pointAssertions); } /** diff --git a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbClientMetricsTestUtil.java b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbClientMetricsTestUtil.java index 49ef45b536e5..21369f6f6791 100644 --- a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbClientMetricsTestUtil.java +++ b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbClientMetricsTestUtil.java @@ -5,7 +5,6 @@ package io.opentelemetry.instrumentation.testing.junit.db; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.semconv.DbAttributes.DB_SYSTEM_NAME; @@ -24,12 +23,9 @@ public static void assertDurationMetric( // https://opentelemetry.io/docs/specs/semconv/database/database-metrics/#metric-dbclientoperationduration assertThat(expectedKeys).extracting(AttributeKey::getKey).contains(DB_SYSTEM_NAME.getKey()); testing.waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName(instrumentationName)) - .hasName("db.client.operation.duration") - .hasDescription("Duration of database client operations.") - .hasUnit("s"), + instrumentationName, + "db.client.operation.duration", + metric -> metric.hasDescription("Duration of database client operations.").hasUnit("s"), point -> point.hasAttributesSatisfying( attributes -> assertThat(attributes.asMap()).containsOnlyKeys(expectedKeys))); diff --git a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbConnectionPoolMetricsAssertions.java b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbConnectionPoolMetricsAssertions.java index 7a18ed838966..16ea9f2cde8f 100644 --- a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbConnectionPoolMetricsAssertions.java +++ b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbConnectionPoolMetricsAssertions.java @@ -5,7 +5,6 @@ package io.opentelemetry.instrumentation.testing.junit.db; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.incubating.DbIncubatingAttributes.DB_CLIENT_CONNECTION_POOL_NAME; @@ -258,21 +257,19 @@ private void verifyTimeoutsMetric(MetricData metric) { private void verifyCreateTime() { testing.waitAndAssertHistogramPoints( + instrumentationName, + "db.client.connection.create_time", metric -> - metric - .satisfies(hasScopeName(instrumentationName)) - .hasName("db.client.connection.create_time") - .hasUnit("s") - .hasDescription("The time it took to create a new connection."), + metric.hasUnit("s").hasDescription("The time it took to create a new connection."), this::verifyPointAttributes); } private void verifyWaitTime() { testing.waitAndAssertHistogramPoints( + instrumentationName, + "db.client.connection.wait_time", metric -> metric - .satisfies(hasScopeName(instrumentationName)) - .hasName("db.client.connection.wait_time") .hasUnit("s") .hasDescription("The time it took to obtain an open connection from the pool."), this::verifyPointAttributes); @@ -280,10 +277,10 @@ private void verifyWaitTime() { private void verifyUseTime() { testing.waitAndAssertHistogramPoints( + instrumentationName, + "db.client.connection.use_time", metric -> metric - .satisfies(hasScopeName(instrumentationName)) - .hasName("db.client.connection.use_time") .hasUnit("s") .hasDescription( "The time between borrowing a connection and returning it to the pool."), diff --git a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpClientTest.java b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpClientTest.java index dfc533ed7c4e..8dbbe68ba1dd 100644 --- a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpClientTest.java +++ b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpClientTest.java @@ -10,7 +10,6 @@ import static io.opentelemetry.instrumentation.api.internal.SemconvExceptionSignal.emitExceptionAsLogs; import static io.opentelemetry.instrumentation.api.internal.SemconvExceptionSignal.emitExceptionAsSpanEvents; import static io.opentelemetry.instrumentation.testing.junit.service.SemconvServiceStabilityUtil.maybeStablePeerService; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeSchemaUrl; import static io.opentelemetry.instrumentation.testing.util.TelemetryDataUtil.comparingRootSpanAttribute; import static io.opentelemetry.instrumentation.testing.util.TelemetryDataUtil.orderByRootSpanName; @@ -794,12 +793,9 @@ void httpClientMetrics() throws Exception { }); testing.waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName(instrumentationName.get())) - .hasName("http.client.request.duration") - .hasDescription("Duration of HTTP client requests.") - .hasUnit("s"), + instrumentationName.get(), + "http.client.request.duration", + metric -> metric.hasDescription("Duration of HTTP client requests.").hasUnit("s"), point -> point.hasSumGreaterThan(0.0)); } diff --git a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpServerTest.java b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpServerTest.java index b91293c74fec..b53137bc579d 100644 --- a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpServerTest.java +++ b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpServerTest.java @@ -20,7 +20,6 @@ import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.PATH_PARAM; import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.REDIRECT; import static io.opentelemetry.instrumentation.testing.junit.http.ServerEndpoint.SUCCESS; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeSchemaUrl; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; @@ -456,12 +455,9 @@ void httpServerMetrics() { }); testing.waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName(instrumentationName.get())) - .hasName("http.server.request.duration") - .hasDescription("Duration of HTTP server requests.") - .hasUnit("s"), + instrumentationName.get(), + "http.server.request.duration", + metric -> metric.hasDescription("Duration of HTTP server requests.").hasUnit("s"), point -> point.hasSumGreaterThan(0.0)); } diff --git a/testing-common/src/test/java/io/opentelemetry/instrumentation/testing/InstrumentationTestRunnerTest.java b/testing-common/src/test/java/io/opentelemetry/instrumentation/testing/InstrumentationTestRunnerTest.java new file mode 100644 index 000000000000..32df1f7d94af --- /dev/null +++ b/testing-common/src/test/java/io/opentelemetry/instrumentation/testing/InstrumentationTestRunnerTest.java @@ -0,0 +1,110 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.instrumentation.testing; + +import static java.util.Arrays.asList; +import static java.util.Collections.emptyList; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.sdk.common.InstrumentationScopeInfo; +import io.opentelemetry.sdk.logs.data.LogRecordData; +import io.opentelemetry.sdk.metrics.data.MetricData; +import io.opentelemetry.sdk.metrics.internal.data.ImmutableGaugeData; +import io.opentelemetry.sdk.metrics.internal.data.ImmutableMetricData; +import io.opentelemetry.sdk.resources.Resource; +import io.opentelemetry.sdk.trace.data.SpanData; +import java.io.IOException; +import java.time.Duration; +import java.util.List; +import java.util.concurrent.atomic.AtomicBoolean; +import org.awaitility.Awaitility; +import org.junit.jupiter.api.Test; + +class InstrumentationTestRunnerTest { + + @Test + void requiresExactlyOneMetricBeforeAssertions() { + MetricData metric = + ImmutableMetricData.createLongGauge( + Resource.empty(), + InstrumentationScopeInfo.create("test"), + "duration", + "", + "", + ImmutableGaugeData.empty()); + InstrumentationTestRunner runner = new FixedMetricsTestRunner(asList(metric, metric)); + AtomicBoolean metricAssertionCalled = new AtomicBoolean(); + AtomicBoolean pointAssertionCalled = new AtomicBoolean(); + + Awaitility.setDefaultPollDelay(Duration.ZERO); + Awaitility.setDefaultPollInterval(Duration.ofMillis(1)); + Awaitility.setDefaultTimeout(Duration.ofMillis(10)); + try { + assertThatThrownBy( + () -> + runner.waitAndAssertHistogramPoints( + "test", + "duration", + metricAssert -> { + metricAssertionCalled.set(true); + throw new IllegalStateException(); + }, + pointAssert -> pointAssertionCalled.set(true))) + .isInstanceOf(AssertionError.class); + } finally { + Awaitility.reset(); + } + + assertThat(metricAssertionCalled).isFalse(); + assertThat(pointAssertionCalled).isFalse(); + } + + private static class FixedMetricsTestRunner extends InstrumentationTestRunner { + + private final List metrics; + + private FixedMetricsTestRunner(List metrics) { + super(OpenTelemetry.noop()); + this.metrics = metrics; + } + + @Override + public void beforeTestClass() {} + + @Override + public void afterTestClass() throws IOException {} + + @Override + public void clearAllExportedData() {} + + @Override + public OpenTelemetry getOpenTelemetry() { + return OpenTelemetry.noop(); + } + + @Override + public List getExportedSpans() { + return emptyList(); + } + + @Override + public List getExportedMetrics() { + return metrics; + } + + @Override + public List getExportedLogRecords() { + return emptyList(); + } + + @Override + public boolean forceFlushCalled() { + return false; + } + } +} diff --git a/testing-common/src/test/java/io/opentelemetry/instrumentation/testing/junit/LibraryInstrumentationExtensionTest.java b/testing-common/src/test/java/io/opentelemetry/instrumentation/testing/junit/LibraryInstrumentationExtensionTest.java index a933db46fa6c..7484d1fdcb9d 100644 --- a/testing-common/src/test/java/io/opentelemetry/instrumentation/testing/junit/LibraryInstrumentationExtensionTest.java +++ b/testing-common/src/test/java/io/opentelemetry/instrumentation/testing/junit/LibraryInstrumentationExtensionTest.java @@ -6,7 +6,6 @@ package io.opentelemetry.instrumentation.testing.junit; import static io.opentelemetry.api.common.AttributeKey.stringKey; -import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; import static org.assertj.core.api.Assertions.assertThatThrownBy; import io.opentelemetry.api.common.Attributes; @@ -78,16 +77,11 @@ void shouldAssertHistogramPoints() { .record(5); testing.waitAndAssertHistogramPoints( - metric -> - metric - .satisfies(hasScopeName("test")) - .hasName("duration") - .hasDescription("Test duration."), + "test", + "duration", + metric -> metric.hasDescription("Test duration."), point -> point.hasCount(1).hasSum(4).hasAttributes(secondAttributes), point -> point.hasCount(1).hasSum(2).hasAttributes(firstAttributes)); - testing.waitAndAssertHistogramPoints( - metric -> metric.satisfies(hasScopeName("test")).hasName("other"), - point -> point.hasCount(1).hasSum(3)); } @Test @@ -103,6 +97,8 @@ void shouldPropagateMetricAssertionFailure() { assertThatThrownBy( () -> testing.waitAndAssertHistogramPoints( + "test", + "failed-duration", metric -> { throw new IllegalStateException("metric assertion failed"); })) From 05db1ed5eeca5f7635832910409d00e7f0c16562 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 20 Oct 2026 03:45:37 +0000 Subject: [PATCH 06/14] Preserve histogram waiter cardinality semantics Co-authored-by: trask <218610+trask@users.noreply.github.com> --- .../apachedubbo/v2_7/AbstractDubboTest.java | 16 ++-- .../v2_7/AbstractDubboTraceChainTest.java | 16 ++-- .../v4_0/DropwizardMetricsTest.java | 2 +- .../grpc/v1_6/AbstractGrpcStreamingTest.java | 8 +- .../grpc/v1_6/AbstractGrpcTest.java | 16 ++-- .../iceberg/v1_8/AbstractIcebergTest.java | 2 +- .../v7_0/KubernetesClientTest.java | 2 +- .../v7_0/KubernetesClientVer20Test.java | 2 +- ...istributionSummaryHistogramGaugesTest.java | 4 +- .../v1_5/AbstractDistributionSummaryTest.java | 4 +- .../v1_5/AbstractPrometheusModeTest.java | 6 +- .../AbstractTimerHistogramGaugesTest.java | 4 +- .../v1_5/AbstractTimerMillisecondsTest.java | 2 +- .../micrometer/v1_5/AbstractTimerTest.java | 6 +- .../v1_10/metrics/MeterTest.java | 4 +- .../v1_31/metrics/MeterTest.java | 4 +- .../v1_32/incubator/metrics/MeterTest.java | 4 +- .../v1_32/metrics/MeterTest.java | 4 +- .../v1_37/incubator/metrics/MeterTest.java | 4 +- .../v1_37/incubator/metrics/MeterTest.java | 4 +- .../v1_37/metrics/MeterTest.java | 4 +- .../client/RatpackHttpClientTest.java | 2 +- .../internal/GarbageCollectorTest.java | 2 +- .../sofarpc/v5_4/AbstractSofaRpcTest.java | 24 +++--- .../v5_4/AbstractSofaRpcTraceChainTest.java | 16 ++-- .../thrift/v0_13/AbstractThriftTest.java | 8 +- .../testing/InstrumentationTestRunner.java | 56 ++++++------ .../junit/InstrumentationExtension.java | 14 ++- .../junit/db/DbClientMetricsTestUtil.java | 2 +- .../db/DbConnectionPoolMetricsAssertions.java | 6 +- .../junit/http/AbstractHttpClientTest.java | 2 +- .../junit/http/AbstractHttpServerTest.java | 2 +- .../InstrumentationTestRunnerTest.java | 86 +++++++++++++++++++ .../LibraryInstrumentationExtensionTest.java | 7 ++ 34 files changed, 227 insertions(+), 118 deletions(-) diff --git a/instrumentation/apache-dubbo-2.7/testing/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/AbstractDubboTest.java b/instrumentation/apache-dubbo-2.7/testing/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/AbstractDubboTest.java index 0cb0cee54d3b..1e7e4db957ad 100644 --- a/instrumentation/apache-dubbo-2.7/testing/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/AbstractDubboTest.java +++ b/instrumentation/apache-dubbo-2.7/testing/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/AbstractDubboTest.java @@ -201,7 +201,7 @@ void testApacheDubboBase() throws ReflectiveOperationException { if (emitOldRpcSemconv()) { testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( "io.opentelemetry.apache-dubbo-2.7", "rpc.server.duration", metric -> metric.hasUnit("ms"), @@ -214,7 +214,7 @@ void testApacheDubboBase() throws ReflectiveOperationException { equalTo(RPC_METHOD, "hello"))); testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( "io.opentelemetry.apache-dubbo-2.7", "rpc.client.duration", metric -> metric.hasUnit("ms"), @@ -230,7 +230,7 @@ void testApacheDubboBase() throws ReflectiveOperationException { if (emitPreviewRpcSemconv()) { testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( "io.opentelemetry.apache-dubbo-2.7", "rpc.server.call.duration", metric -> metric.hasUnit("s"), @@ -242,7 +242,7 @@ void testApacheDubboBase() throws ReflectiveOperationException { "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.HelloService/hello"))); testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( "io.opentelemetry.apache-dubbo-2.7", "rpc.client.call.duration", metric -> metric.hasUnit("s"), @@ -364,7 +364,7 @@ void testApacheDubboTest() throws ReflectiveOperationException { if (emitOldRpcSemconv()) { testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( "io.opentelemetry.apache-dubbo-2.7", "rpc.server.duration", metric -> metric.hasUnit("ms"), @@ -377,7 +377,7 @@ void testApacheDubboTest() throws ReflectiveOperationException { equalTo(RPC_METHOD, "hello"))); testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( "io.opentelemetry.apache-dubbo-2.7", "rpc.client.duration", metric -> metric.hasUnit("ms"), @@ -393,7 +393,7 @@ void testApacheDubboTest() throws ReflectiveOperationException { if (emitPreviewRpcSemconv()) { testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( "io.opentelemetry.apache-dubbo-2.7", "rpc.server.call.duration", metric -> metric.hasUnit("s"), @@ -405,7 +405,7 @@ void testApacheDubboTest() throws ReflectiveOperationException { "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.HelloService/hello"))); testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( "io.opentelemetry.apache-dubbo-2.7", "rpc.client.call.duration", metric -> metric.hasUnit("s"), diff --git a/instrumentation/apache-dubbo-2.7/testing/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/AbstractDubboTraceChainTest.java b/instrumentation/apache-dubbo-2.7/testing/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/AbstractDubboTraceChainTest.java index e39da1af72f9..8362ea70db97 100644 --- a/instrumentation/apache-dubbo-2.7/testing/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/AbstractDubboTraceChainTest.java +++ b/instrumentation/apache-dubbo-2.7/testing/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/AbstractDubboTraceChainTest.java @@ -286,7 +286,7 @@ void testDubboChain() throws ReflectiveOperationException { if (emitOldRpcSemconv()) { testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( "io.opentelemetry.apache-dubbo-2.7", "rpc.server.duration", metric -> metric.hasUnit("ms"), @@ -306,7 +306,7 @@ void testDubboChain() throws ReflectiveOperationException { equalTo(RPC_METHOD, "hello"))); testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( "io.opentelemetry.apache-dubbo-2.7", "rpc.client.duration", metric -> metric.hasUnit("ms"), @@ -330,7 +330,7 @@ void testDubboChain() throws ReflectiveOperationException { if (emitPreviewRpcSemconv()) { testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( "io.opentelemetry.apache-dubbo-2.7", "rpc.server.call.duration", metric -> metric.hasUnit("s"), @@ -348,7 +348,7 @@ void testDubboChain() throws ReflectiveOperationException { "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.MiddleService/hello"))); testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( "io.opentelemetry.apache-dubbo-2.7", "rpc.client.call.duration", metric -> metric.hasUnit("s"), @@ -472,7 +472,7 @@ void testDubboChainInJvm() throws ReflectiveOperationException { if (emitOldRpcSemconv()) { testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( "io.opentelemetry.apache-dubbo-2.7", "rpc.server.duration", metric -> metric.hasUnit("ms"), @@ -485,7 +485,7 @@ void testDubboChainInJvm() throws ReflectiveOperationException { equalTo(RPC_METHOD, "hello"))); testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( "io.opentelemetry.apache-dubbo-2.7", "rpc.client.duration", metric -> metric.hasUnit("ms"), @@ -501,7 +501,7 @@ void testDubboChainInJvm() throws ReflectiveOperationException { if (emitPreviewRpcSemconv()) { testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( "io.opentelemetry.apache-dubbo-2.7", "rpc.server.call.duration", metric -> metric.hasUnit("s"), @@ -513,7 +513,7 @@ void testDubboChainInJvm() throws ReflectiveOperationException { "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.MiddleService/hello"))); testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( "io.opentelemetry.apache-dubbo-2.7", "rpc.client.call.duration", metric -> metric.hasUnit("s"), diff --git a/instrumentation/dropwizard/dropwizard-metrics-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/dropwizardmetrics/v4_0/DropwizardMetricsTest.java b/instrumentation/dropwizard/dropwizard-metrics-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/dropwizardmetrics/v4_0/DropwizardMetricsTest.java index 6e71c01dcde2..a6c86cdbf1d9 100644 --- a/instrumentation/dropwizard/dropwizard-metrics-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/dropwizardmetrics/v4_0/DropwizardMetricsTest.java +++ b/instrumentation/dropwizard/dropwizard-metrics-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/dropwizardmetrics/v4_0/DropwizardMetricsTest.java @@ -156,7 +156,7 @@ void timer() { timer.update(234_000, NANOSECONDS); // then - testing.waitAndAssertHistogramPoints( + testing.waitAndAssertAnyHistogramPoints( INSTRUMENTATION_NAME, "testtimer", metric -> metric.hasUnit("ms"), diff --git a/instrumentation/grpc-1.6/testing/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/AbstractGrpcStreamingTest.java b/instrumentation/grpc-1.6/testing/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/AbstractGrpcStreamingTest.java index 581eeade82fc..bba30b915349 100644 --- a/instrumentation/grpc-1.6/testing/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/AbstractGrpcStreamingTest.java +++ b/instrumentation/grpc-1.6/testing/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/AbstractGrpcStreamingTest.java @@ -295,7 +295,7 @@ RPC_SERVICE, emitOldRpcSemconv() ? "example.Greeter" : null), .hasParent(trace.getSpan(0)))); if (emitOldRpcSemconv()) { testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( "io.opentelemetry.grpc-1.6", "rpc.server.duration", metric -> metric.hasUnit("ms"), @@ -311,7 +311,7 @@ RPC_SERVICE, emitOldRpcSemconv() ? "example.Greeter" : null), } if (emitPreviewRpcSemconv()) { testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( "io.opentelemetry.grpc-1.6", "rpc.server.call.duration", metric -> metric.hasUnit("s"), @@ -325,7 +325,7 @@ RPC_SERVICE, emitOldRpcSemconv() ? "example.Greeter" : null), } if (emitOldRpcSemconv()) { testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( "io.opentelemetry.grpc-1.6", "rpc.client.duration", metric -> metric.hasUnit("ms"), @@ -341,7 +341,7 @@ RPC_SERVICE, emitOldRpcSemconv() ? "example.Greeter" : null), } if (emitPreviewRpcSemconv()) { testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( "io.opentelemetry.grpc-1.6", "rpc.client.call.duration", metric -> metric.hasUnit("s"), diff --git a/instrumentation/grpc-1.6/testing/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/AbstractGrpcTest.java b/instrumentation/grpc-1.6/testing/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/AbstractGrpcTest.java index 5fda45161135..b06d62d57767 100644 --- a/instrumentation/grpc-1.6/testing/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/AbstractGrpcTest.java +++ b/instrumentation/grpc-1.6/testing/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/AbstractGrpcTest.java @@ -1809,7 +1809,7 @@ private void assertMetrics(Server server, Status status) { : null; if (emitOldRpcSemconv()) { testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( "io.opentelemetry.grpc-1.6", "rpc.server.duration", metric -> metric.hasUnit("ms"), @@ -1825,7 +1825,7 @@ private void assertMetrics(Server server, Status status) { if (hasSizeMetric) { testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( "io.opentelemetry.grpc-1.6", "rpc.server.request.size", metric -> metric.hasUnit("By"), @@ -1839,7 +1839,7 @@ private void assertMetrics(Server server, Status status) { equalTo(RPC_GRPC_STATUS_CODE, (long) statusCode.value()), equalTo(NETWORK_TYPE, "ipv4"))); testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( "io.opentelemetry.grpc-1.6", "rpc.server.response.size", metric -> metric.hasUnit("By"), @@ -1855,7 +1855,7 @@ private void assertMetrics(Server server, Status status) { } testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( "io.opentelemetry.grpc-1.6", "rpc.client.duration", metric -> metric.hasUnit("ms"), @@ -1870,7 +1870,7 @@ private void assertMetrics(Server server, Status status) { equalTo(NETWORK_TYPE, testLatestDeps() ? "ipv4" : null))); testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( "io.opentelemetry.grpc-1.6", "rpc.client.request.size", metric -> metric.hasUnit("By"), @@ -1885,7 +1885,7 @@ private void assertMetrics(Server server, Status status) { equalTo(NETWORK_TYPE, testLatestDeps() ? "ipv4" : null))); if (hasSizeMetric) { testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( "io.opentelemetry.grpc-1.6", "rpc.client.response.size", metric -> metric.hasUnit("By"), @@ -1902,7 +1902,7 @@ private void assertMetrics(Server server, Status status) { } if (emitPreviewRpcSemconv()) { testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( "io.opentelemetry.grpc-1.6", "rpc.server.call.duration", metric -> metric.hasUnit("s"), @@ -1915,7 +1915,7 @@ private void assertMetrics(Server server, Status status) { equalTo(RPC_RESPONSE_STATUS_CODE, statusCode.name()), equalTo(ERROR_TYPE, serverErrorType))); testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( "io.opentelemetry.grpc-1.6", "rpc.client.call.duration", metric -> metric.hasUnit("s"), diff --git a/instrumentation/iceberg-1.8/testing/src/main/java/io/opentelemetry/instrumentation/iceberg/v1_8/AbstractIcebergTest.java b/instrumentation/iceberg-1.8/testing/src/main/java/io/opentelemetry/instrumentation/iceberg/v1_8/AbstractIcebergTest.java index 5b5205a926f1..36603392b3e0 100644 --- a/instrumentation/iceberg-1.8/testing/src/main/java/io/opentelemetry/instrumentation/iceberg/v1_8/AbstractIcebergTest.java +++ b/instrumentation/iceberg-1.8/testing/src/main/java/io/opentelemetry/instrumentation/iceberg/v1_8/AbstractIcebergTest.java @@ -110,7 +110,7 @@ void testCreateTelemetry() throws IOException { private void assertScanDurationMetric(ScanReport expectedReport) { testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( INSTRUMENTATION_NAME, "iceberg.scan.planning.duration", metricAssert -> metricAssert.hasUnit("s"), diff --git a/instrumentation/kubernetes-client-7.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/v7_0/KubernetesClientTest.java b/instrumentation/kubernetes-client-7.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/v7_0/KubernetesClientTest.java index 70ba8c16d57d..cc644e78432a 100644 --- a/instrumentation/kubernetes-client-7.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/v7_0/KubernetesClientTest.java +++ b/instrumentation/kubernetes-client-7.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/v7_0/KubernetesClientTest.java @@ -104,7 +104,7 @@ void synchronousCall() throws ApiException { experimental("namespace")), equalTo(stringKey("kubernetes-client.name"), experimental("name"))))); - testing.waitAndAssertHistogramPoints( + testing.waitAndAssertAnyHistogramPoints( "io.opentelemetry.kubernetes-client-7.0", "http.client.request.duration", metric -> metric.hasDescription("Duration of HTTP client requests.").hasUnit("s"), diff --git a/instrumentation/kubernetes-client-7.0/javaagent/src/version20Test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/v7_0/KubernetesClientVer20Test.java b/instrumentation/kubernetes-client-7.0/javaagent/src/version20Test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/v7_0/KubernetesClientVer20Test.java index 05952c5b7185..67b9d47b3e1d 100644 --- a/instrumentation/kubernetes-client-7.0/javaagent/src/version20Test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/v7_0/KubernetesClientVer20Test.java +++ b/instrumentation/kubernetes-client-7.0/javaagent/src/version20Test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/v7_0/KubernetesClientVer20Test.java @@ -108,7 +108,7 @@ void synchronousCall() throws ApiException { experimental("namespace")), equalTo(stringKey("kubernetes-client.name"), experimental("name"))))); - testing.waitAndAssertHistogramPoints( + testing.waitAndAssertAnyHistogramPoints( "io.opentelemetry.kubernetes-client-7.0", "http.client.request.duration", metric -> metric.hasDescription("Duration of HTTP client requests.").hasUnit("s"), diff --git a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractDistributionSummaryHistogramGaugesTest.java b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractDistributionSummaryHistogramGaugesTest.java index 1907fdbda4d2..0366e137d455 100644 --- a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractDistributionSummaryHistogramGaugesTest.java +++ b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractDistributionSummaryHistogramGaugesTest.java @@ -44,7 +44,7 @@ void testMicrometerHistogram() { // then testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( INSTRUMENTATION_NAME, "testSummary", metric -> @@ -106,7 +106,7 @@ void testMicrometerPercentiles() { // then testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( INSTRUMENTATION_NAME, "testSummary", metric -> diff --git a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractDistributionSummaryTest.java b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractDistributionSummaryTest.java index 76eddc771de5..32ee4d8c7d1e 100644 --- a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractDistributionSummaryTest.java +++ b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractDistributionSummaryTest.java @@ -45,7 +45,7 @@ void testMicrometerDistributionSummary() { // then testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( INSTRUMENTATION_NAME, "testSummary", metric -> @@ -103,7 +103,7 @@ void testMicrometerDistributionSummaryWithCustomBuckets() { // then testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( INSTRUMENTATION_NAME, "testSummaryWithCustomBuckets", metric -> diff --git a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractPrometheusModeTest.java b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractPrometheusModeTest.java index b020c8e521db..36605f33316e 100644 --- a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractPrometheusModeTest.java +++ b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractPrometheusModeTest.java @@ -84,7 +84,7 @@ void testDistributionSummary() { // then testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( INSTRUMENTATION_NAME, "testPrometheusSummary.items", metric -> metric.hasDescription("This is a test summary").hasUnit("items"), @@ -308,7 +308,7 @@ void testTimer() { // then testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( INSTRUMENTATION_NAME, "testPrometheusTimer.seconds", metric -> metric.hasDescription("This is a test timer").hasUnit("s"), @@ -373,7 +373,7 @@ void testTimerCustomBucketBoundaryFormatting() { // then testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( INSTRUMENTATION_NAME, "testPrometheusTimerBoundary.seconds", metric -> metric.hasDescription("This is a test timer").hasUnit("s"), diff --git a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerHistogramGaugesTest.java b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerHistogramGaugesTest.java index c1bac09cc164..3613e873f72d 100644 --- a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerHistogramGaugesTest.java +++ b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerHistogramGaugesTest.java @@ -45,7 +45,7 @@ void testMicrometerHistogram() { // then testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( INSTRUMENTATION_NAME, "testTimer", metric -> metric.hasDescription("This is a test timer").hasUnit("s"), @@ -105,7 +105,7 @@ void testMicrometerPercentiles() { // then testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( INSTRUMENTATION_NAME, "testTimer", metric -> metric.hasDescription("This is a test timer").hasUnit("s"), diff --git a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerMillisecondsTest.java b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerMillisecondsTest.java index faa9285429a2..0d9906d1157a 100644 --- a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerMillisecondsTest.java +++ b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerMillisecondsTest.java @@ -38,7 +38,7 @@ void testTimerWithBaseUnitMilliseconds() { // then testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( INSTRUMENTATION_NAME, "testTimerMilliseconds", metric -> metric.hasDescription("This is a test timer").hasUnit("ms"), diff --git a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerTest.java b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerTest.java index 787808304a17..cf4175846d32 100644 --- a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerTest.java +++ b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerTest.java @@ -45,7 +45,7 @@ void testTimer() { // then testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( INSTRUMENTATION_NAME, "testTimer", metric -> metric.hasDescription("This is a test timer").hasUnit("s"), @@ -81,7 +81,7 @@ void testNanoPrecision() { // then testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( INSTRUMENTATION_NAME, "testNanoTimer", metric -> metric.hasUnit("s"), @@ -111,7 +111,7 @@ void testMicrometerTimerWithCustomBuckets() { // then testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( INSTRUMENTATION_NAME, "testTimerWithCustomBuckets", metric -> metric.hasDescription("This is a test timer").hasUnit("s"), diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/MeterTest.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/MeterTest.java index f866f2ab56fe..857a5eca4253 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/MeterTest.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/MeterTest.java @@ -337,7 +337,7 @@ void longHistogram() { instrument.record(5, Attributes.of(stringKey("q"), "r")); instrument.record(6, Attributes.of(stringKey("q"), "r")); - testing.waitAndAssertHistogramPoints( + testing.waitAndAssertAnyHistogramPoints( instrumentationName, "test", metric -> @@ -360,7 +360,7 @@ void doubleHistogram() { instrument.record(5.5, Attributes.of(stringKey("q"), "r")); instrument.record(6.6, Attributes.of(stringKey("q"), "r")); - testing.waitAndAssertHistogramPoints( + testing.waitAndAssertAnyHistogramPoints( instrumentationName, "test", metric -> diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.31/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_31/metrics/MeterTest.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.31/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_31/metrics/MeterTest.java index 00c4c9c37a3b..f0158b00e9fe 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.31/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_31/metrics/MeterTest.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.31/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_31/metrics/MeterTest.java @@ -225,7 +225,7 @@ void longHistogram() { instrument.record(5, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); instrument.record(6, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); - testing.waitAndAssertHistogramPoints( + testing.waitAndAssertAnyHistogramPoints( instrumentationName, "test", metric -> @@ -258,7 +258,7 @@ void doubleHistogram() { instrument.record(5.5, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); instrument.record(6.6, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); - testing.waitAndAssertHistogramPoints( + testing.waitAndAssertAnyHistogramPoints( instrumentationName, "test", metric -> diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/incubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/incubator/metrics/MeterTest.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/incubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/incubator/metrics/MeterTest.java index 30dc0ca3525a..1ce5fe68dd3a 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/incubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/incubator/metrics/MeterTest.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/incubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/incubator/metrics/MeterTest.java @@ -225,7 +225,7 @@ void longHistogram() { instrument.record(5, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); instrument.record(6, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); - testing.waitAndAssertHistogramPoints( + testing.waitAndAssertAnyHistogramPoints( instrumentationName, "test", metric -> @@ -258,7 +258,7 @@ void doubleHistogram() { instrument.record(5.5, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); instrument.record(6.6, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); - testing.waitAndAssertHistogramPoints( + testing.waitAndAssertAnyHistogramPoints( instrumentationName, "test", metric -> diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/metrics/MeterTest.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/metrics/MeterTest.java index 81a05a0b5132..36f7eb9dab23 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/metrics/MeterTest.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/metrics/MeterTest.java @@ -64,7 +64,7 @@ void longHistogram() { instrument.record(5, Attributes.of(stringKey("test"), "test")); instrument.record(6, Attributes.of(stringKey("test"), "test")); - testing.waitAndAssertHistogramPoints( + testing.waitAndAssertAnyHistogramPoints( instrumentationName, "test", metric -> @@ -94,7 +94,7 @@ void doubleHistogram() { instrument.record(5.5, Attributes.of(stringKey("test"), "test")); instrument.record(6.6, Attributes.of(stringKey("test"), "test")); - testing.waitAndAssertHistogramPoints( + testing.waitAndAssertAnyHistogramPoints( instrumentationName, "test", metric -> diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/incubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/MeterTest.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/incubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/MeterTest.java index 74824bb54148..db83f7c10071 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/incubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/MeterTest.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/incubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/MeterTest.java @@ -225,7 +225,7 @@ void longHistogram() { instrument.record(5, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); instrument.record(6, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); - testing.waitAndAssertHistogramPoints( + testing.waitAndAssertAnyHistogramPoints( instrumentationName, "test", metric -> @@ -258,7 +258,7 @@ void doubleHistogram() { instrument.record(5.5, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); instrument.record(6.6, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); - testing.waitAndAssertHistogramPoints( + testing.waitAndAssertAnyHistogramPoints( instrumentationName, "test", metric -> diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/oldAndNewIncubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/MeterTest.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/oldAndNewIncubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/MeterTest.java index 74824bb54148..db83f7c10071 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/oldAndNewIncubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/MeterTest.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/oldAndNewIncubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/MeterTest.java @@ -225,7 +225,7 @@ void longHistogram() { instrument.record(5, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); instrument.record(6, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); - testing.waitAndAssertHistogramPoints( + testing.waitAndAssertAnyHistogramPoints( instrumentationName, "test", metric -> @@ -258,7 +258,7 @@ void doubleHistogram() { instrument.record(5.5, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); instrument.record(6.6, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); - testing.waitAndAssertHistogramPoints( + testing.waitAndAssertAnyHistogramPoints( instrumentationName, "test", metric -> diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/metrics/MeterTest.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/metrics/MeterTest.java index 08b98e37729c..b1263aeb069f 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/metrics/MeterTest.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/metrics/MeterTest.java @@ -62,7 +62,7 @@ void longHistogram() { instrument.record(5, Attributes.of(stringKey("test"), "test")); instrument.record(6, Attributes.of(stringKey("test"), "test")); - testing.waitAndAssertHistogramPoints( + testing.waitAndAssertAnyHistogramPoints( instrumentationName, "test", metric -> @@ -92,7 +92,7 @@ void doubleHistogram() { instrument.record(5.5, Attributes.of(stringKey("test"), "test")); instrument.record(6.6, Attributes.of(stringKey("test"), "test")); - testing.waitAndAssertHistogramPoints( + testing.waitAndAssertAnyHistogramPoints( instrumentationName, "test", metric -> diff --git a/instrumentation/ratpack/ratpack-1.4/javaagent/src/version17Test/java/io/opentelemetry/javaagent/instrumentation/ratpack/v1_4/httpclient/client/RatpackHttpClientTest.java b/instrumentation/ratpack/ratpack-1.4/javaagent/src/version17Test/java/io/opentelemetry/javaagent/instrumentation/ratpack/v1_4/httpclient/client/RatpackHttpClientTest.java index 984857eaca16..df9d699dc752 100644 --- a/instrumentation/ratpack/ratpack-1.4/javaagent/src/version17Test/java/io/opentelemetry/javaagent/instrumentation/ratpack/v1_4/httpclient/client/RatpackHttpClientTest.java +++ b/instrumentation/ratpack/ratpack-1.4/javaagent/src/version17Test/java/io/opentelemetry/javaagent/instrumentation/ratpack/v1_4/httpclient/client/RatpackHttpClientTest.java @@ -64,7 +64,7 @@ void durationMetricHasProtocolVersion() throws Exception { }), span -> assertServerSpan(span).hasParent(trace.getSpan(0)))); - testing.waitAndAssertHistogramPoints( + testing.waitAndAssertAnyHistogramPoints( "io.opentelemetry.ratpack-1.4", "http.client.request.duration", metric -> diff --git a/instrumentation/runtime-telemetry/library/src/test/java/io/opentelemetry/instrumentation/runtimetelemetry/internal/GarbageCollectorTest.java b/instrumentation/runtime-telemetry/library/src/test/java/io/opentelemetry/instrumentation/runtimetelemetry/internal/GarbageCollectorTest.java index 05389a014a6e..9608c5d4ccef 100644 --- a/instrumentation/runtime-telemetry/library/src/test/java/io/opentelemetry/instrumentation/runtimetelemetry/internal/GarbageCollectorTest.java +++ b/instrumentation/runtime-telemetry/library/src/test/java/io/opentelemetry/instrumentation/runtimetelemetry/internal/GarbageCollectorTest.java @@ -69,7 +69,7 @@ void registerObservers() { listener.handleNotification( createTestNotification("G1 Old Generation", "end of major GC", "System.gc()", 11), null); - testing.waitAndAssertHistogramPoints( + testing.waitAndAssertAnyHistogramPoints( "test", "jvm.gc.duration", metric -> metric.hasDescription("Duration of JVM garbage collection actions.").hasUnit("s"), diff --git a/instrumentation/sofa-rpc-5.4/testing/src/main/java/io/opentelemetry/instrumentation/sofarpc/v5_4/AbstractSofaRpcTest.java b/instrumentation/sofa-rpc-5.4/testing/src/main/java/io/opentelemetry/instrumentation/sofarpc/v5_4/AbstractSofaRpcTest.java index b597862e5681..88fc5fba8e35 100644 --- a/instrumentation/sofa-rpc-5.4/testing/src/main/java/io/opentelemetry/instrumentation/sofarpc/v5_4/AbstractSofaRpcTest.java +++ b/instrumentation/sofa-rpc-5.4/testing/src/main/java/io/opentelemetry/instrumentation/sofarpc/v5_4/AbstractSofaRpcTest.java @@ -229,7 +229,7 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), if (emitOldRpcSemconv()) { testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( "io.opentelemetry.sofa-rpc-5.4", "rpc.server.duration", metric -> metric.hasUnit("ms"), @@ -242,7 +242,7 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), equalTo(RPC_METHOD, "hello"))); testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( "io.opentelemetry.sofa-rpc-5.4", "rpc.client.duration", metric -> metric.hasUnit("ms"), @@ -258,7 +258,7 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), if (emitPreviewRpcSemconv()) { testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( "io.opentelemetry.sofa-rpc-5.4", "rpc.server.call.duration", metric -> metric.hasUnit("s"), @@ -270,7 +270,7 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService/hello"))); testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( "io.opentelemetry.sofa-rpc-5.4", "rpc.client.call.duration", metric -> metric.hasUnit("s"), @@ -368,7 +368,7 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), if (emitOldRpcSemconv()) { testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( "io.opentelemetry.sofa-rpc-5.4", "rpc.server.duration", metric -> metric.hasUnit("ms"), @@ -381,7 +381,7 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), equalTo(RPC_METHOD, "hello"))); testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( "io.opentelemetry.sofa-rpc-5.4", "rpc.client.duration", metric -> metric.hasUnit("ms"), @@ -397,7 +397,7 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), if (emitPreviewRpcSemconv()) { testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( "io.opentelemetry.sofa-rpc-5.4", "rpc.server.call.duration", metric -> metric.hasUnit("s"), @@ -409,7 +409,7 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService/hello"))); testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( "io.opentelemetry.sofa-rpc-5.4", "rpc.client.call.duration", metric -> metric.hasUnit("s"), @@ -551,7 +551,7 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), if (emitOldRpcSemconv()) { testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( "io.opentelemetry.sofa-rpc-5.4", "rpc.server.duration", metric -> metric.hasUnit("ms"), @@ -564,7 +564,7 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), equalTo(RPC_METHOD, "throwException"))); testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( "io.opentelemetry.sofa-rpc-5.4", "rpc.client.duration", metric -> metric.hasUnit("ms"), @@ -582,7 +582,7 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), if (emitPreviewRpcSemconv()) { testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( "io.opentelemetry.sofa-rpc-5.4", "rpc.server.call.duration", metric -> metric.hasUnit("s"), @@ -595,7 +595,7 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), equalTo(ERROR_TYPE, SofaRpcRuntimeException.class.getName()))); testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( "io.opentelemetry.sofa-rpc-5.4", "rpc.client.call.duration", metric -> metric.hasUnit("s"), diff --git a/instrumentation/sofa-rpc-5.4/testing/src/main/java/io/opentelemetry/instrumentation/sofarpc/v5_4/AbstractSofaRpcTraceChainTest.java b/instrumentation/sofa-rpc-5.4/testing/src/main/java/io/opentelemetry/instrumentation/sofarpc/v5_4/AbstractSofaRpcTraceChainTest.java index d1c39b5b2d9f..ad836818058a 100644 --- a/instrumentation/sofa-rpc-5.4/testing/src/main/java/io/opentelemetry/instrumentation/sofarpc/v5_4/AbstractSofaRpcTraceChainTest.java +++ b/instrumentation/sofa-rpc-5.4/testing/src/main/java/io/opentelemetry/instrumentation/sofarpc/v5_4/AbstractSofaRpcTraceChainTest.java @@ -264,7 +264,7 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), if (emitOldRpcSemconv()) { testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( "io.opentelemetry.sofa-rpc-5.4", "rpc.server.duration", metric -> metric.hasUnit("ms"), @@ -284,7 +284,7 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), equalTo(RPC_METHOD, "hello"))); testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( "io.opentelemetry.sofa-rpc-5.4", "rpc.client.duration", metric -> metric.hasUnit("ms"), @@ -310,7 +310,7 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), if (emitPreviewRpcSemconv()) { testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( "io.opentelemetry.sofa-rpc-5.4", "rpc.server.call.duration", metric -> metric.hasUnit("s"), @@ -328,7 +328,7 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), "io.opentelemetry.instrumentation.sofarpc.v5_4.api.MiddleService/hello"))); testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( "io.opentelemetry.sofa-rpc-5.4", "rpc.client.call.duration", metric -> metric.hasUnit("s"), @@ -476,7 +476,7 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), if (emitOldRpcSemconv()) { testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( "io.opentelemetry.sofa-rpc-5.4", "rpc.server.duration", metric -> metric.hasUnit("ms"), @@ -498,7 +498,7 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), equalTo(RPC_METHOD, "hello"))); testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( "io.opentelemetry.sofa-rpc-5.4", "rpc.client.duration", metric -> metric.hasUnit("ms"), @@ -514,7 +514,7 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), if (emitPreviewRpcSemconv()) { testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( "io.opentelemetry.sofa-rpc-5.4", "rpc.server.call.duration", metric -> metric.hasUnit("s"), @@ -532,7 +532,7 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService/hello"))); testing() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( "io.opentelemetry.sofa-rpc-5.4", "rpc.client.call.duration", metric -> metric.hasUnit("s"), diff --git a/instrumentation/thrift-0.13/testing/src/main/java/io/opentelemetry/instrumentation/thrift/v0_13/AbstractThriftTest.java b/instrumentation/thrift-0.13/testing/src/main/java/io/opentelemetry/instrumentation/thrift/v0_13/AbstractThriftTest.java index d892d3bf5504..564bf36c75f0 100644 --- a/instrumentation/thrift-0.13/testing/src/main/java/io/opentelemetry/instrumentation/thrift/v0_13/AbstractThriftTest.java +++ b/instrumentation/thrift-0.13/testing/src/main/java/io/opentelemetry/instrumentation/thrift/v0_13/AbstractThriftTest.java @@ -354,7 +354,7 @@ protected SpanDataAssert assertServerSpan(SpanDataAssert span, String method) { private void assertMetrics(int serverPort) { if (emitOldRpcSemconv()) { getTesting() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( "io.opentelemetry.thrift-0.13", "rpc.server.duration", metric -> metric.hasUnit("ms"), @@ -367,7 +367,7 @@ private void assertMetrics(int serverPort) { equalTo(RPC_SYSTEM, "apache_thrift"), equalTo(NETWORK_TYPE, "ipv4"))); getTesting() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( "io.opentelemetry.thrift-0.13", "rpc.client.duration", metric -> metric.hasUnit("ms"), @@ -382,7 +382,7 @@ private void assertMetrics(int serverPort) { } if (emitPreviewRpcSemconv()) { getTesting() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( "io.opentelemetry.thrift-0.13", "rpc.server.call.duration", metric -> metric.hasUnit("s"), @@ -393,7 +393,7 @@ private void assertMetrics(int serverPort) { equalTo(SERVER_PORT, serverPort), equalTo(RPC_METHOD, CustomHandler.class.getName() + "/say"))); getTesting() - .waitAndAssertHistogramPoints( + .waitAndAssertAnyHistogramPoints( "io.opentelemetry.thrift-0.13", "rpc.client.call.duration", metric -> metric.hasUnit("s"), diff --git a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/InstrumentationTestRunner.java b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/InstrumentationTestRunner.java index 53a9e584b834..c34d2c96f6ca 100644 --- a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/InstrumentationTestRunner.java +++ b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/InstrumentationTestRunner.java @@ -246,38 +246,42 @@ public final void waitAndAssertMetrics( } } - /** Waits for the named histogram to match the metadata and exact unordered point assertions. */ + /** Waits for exactly one named histogram to match the metadata and point assertions. */ @SafeVarargs public final void waitAndAssertHistogramPoints( String instrumentationName, String metricName, Consumer metricAssertion, Consumer... pointAssertions) { - awaitUntilAsserted( - () -> { - List matchingMetrics = - getExportedMetrics().stream() - .filter( - metric -> - metric.getInstrumentationScopeInfo().getName().equals(instrumentationName) - && metric.getName().equals(metricName)) - .collect(toList()); - assertThat(matchingMetrics) - .describedAs( - "Metrics for instrumentation %s and metric name %s", - instrumentationName, metricName) - .hasSize(1); - - MetricAssert metricAssert = assertThat(matchingMetrics.get(0)); - metricAssertion.accept(metricAssert); - metricAssert.satisfies(hasHistogramPointsSatisfyingExactly(pointAssertions)); - }); - - TelemetryDataUtil.assertMetricScopeVersion(metricsForScope(instrumentationName)); - - if (Boolean.getBoolean("collectMetadata")) { - collectEmittedMetrics(getExportedMetrics()); - } + waitAndAssertMetrics( + instrumentationName, + metricName, + metrics -> + metrics.satisfiesExactly( + metric -> { + MetricAssert metricAssert = assertThat(metric); + metricAssertion.accept(metricAssert); + metricAssert.satisfies(hasHistogramPointsSatisfyingExactly(pointAssertions)); + })); + } + + /** Waits for any named histogram to match the metadata and exact unordered point assertions. */ + @SafeVarargs + public final void waitAndAssertAnyHistogramPoints( + String instrumentationName, + String metricName, + Consumer metricAssertion, + Consumer... pointAssertions) { + waitAndAssertMetrics( + instrumentationName, + metricName, + metrics -> + metrics.anySatisfy( + metric -> { + MetricAssert metricAssert = assertThat(metric); + metricAssertion.accept(metricAssert); + metricAssert.satisfies(hasHistogramPointsSatisfyingExactly(pointAssertions)); + })); } private List metricsForScope(String instrumentationName) { diff --git a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/InstrumentationExtension.java b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/InstrumentationExtension.java index e0d6a889ac26..96395b8e5b51 100644 --- a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/InstrumentationExtension.java +++ b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/InstrumentationExtension.java @@ -116,7 +116,7 @@ public final void waitAndAssertMetrics( testRunner.waitAndAssertMetrics(instrumentationName, assertions); } - /** Waits for the named histogram to match the metadata and exact unordered point assertions. */ + /** Waits for exactly one named histogram to match the metadata and point assertions. */ @SafeVarargs @SuppressWarnings("varargs") public final void waitAndAssertHistogramPoints( @@ -128,6 +128,18 @@ public final void waitAndAssertHistogramPoints( instrumentationName, metricName, metricAssertion, pointAssertions); } + /** Waits for any named histogram to match the metadata and exact unordered point assertions. */ + @SafeVarargs + @SuppressWarnings("varargs") + public final void waitAndAssertAnyHistogramPoints( + String instrumentationName, + String metricName, + Consumer metricAssertion, + Consumer... pointAssertions) { + testRunner.waitAndAssertAnyHistogramPoints( + instrumentationName, metricName, metricAssertion, pointAssertions); + } + /** * Removes all captured telemetry data. After calling this method {@link #spans()} and {@link * #metrics()} will return empty lists until more telemetry data is captured. diff --git a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbClientMetricsTestUtil.java b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbClientMetricsTestUtil.java index 21369f6f6791..bcef8d7655a8 100644 --- a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbClientMetricsTestUtil.java +++ b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbClientMetricsTestUtil.java @@ -22,7 +22,7 @@ public static void assertDurationMetric( // db.system.name is required - see // https://opentelemetry.io/docs/specs/semconv/database/database-metrics/#metric-dbclientoperationduration assertThat(expectedKeys).extracting(AttributeKey::getKey).contains(DB_SYSTEM_NAME.getKey()); - testing.waitAndAssertHistogramPoints( + testing.waitAndAssertAnyHistogramPoints( instrumentationName, "db.client.operation.duration", metric -> metric.hasDescription("Duration of database client operations.").hasUnit("s"), diff --git a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbConnectionPoolMetricsAssertions.java b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbConnectionPoolMetricsAssertions.java index 16ea9f2cde8f..42d733c83e8a 100644 --- a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbConnectionPoolMetricsAssertions.java +++ b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbConnectionPoolMetricsAssertions.java @@ -256,7 +256,7 @@ private void verifyTimeoutsMetric(MetricData metric) { } private void verifyCreateTime() { - testing.waitAndAssertHistogramPoints( + testing.waitAndAssertAnyHistogramPoints( instrumentationName, "db.client.connection.create_time", metric -> @@ -265,7 +265,7 @@ private void verifyCreateTime() { } private void verifyWaitTime() { - testing.waitAndAssertHistogramPoints( + testing.waitAndAssertAnyHistogramPoints( instrumentationName, "db.client.connection.wait_time", metric -> @@ -276,7 +276,7 @@ private void verifyWaitTime() { } private void verifyUseTime() { - testing.waitAndAssertHistogramPoints( + testing.waitAndAssertAnyHistogramPoints( instrumentationName, "db.client.connection.use_time", metric -> diff --git a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpClientTest.java b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpClientTest.java index 8dbbe68ba1dd..46c8b295ed60 100644 --- a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpClientTest.java +++ b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpClientTest.java @@ -792,7 +792,7 @@ void httpClientMetrics() throws Exception { span -> assertServerSpan(span).hasParent(trace.getSpan(0))); }); - testing.waitAndAssertHistogramPoints( + testing.waitAndAssertAnyHistogramPoints( instrumentationName.get(), "http.client.request.duration", metric -> metric.hasDescription("Duration of HTTP client requests.").hasUnit("s"), diff --git a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpServerTest.java b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpServerTest.java index b53137bc579d..8b6a621f7e97 100644 --- a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpServerTest.java +++ b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpServerTest.java @@ -454,7 +454,7 @@ void httpServerMetrics() { spanData -> assertServerSpan(assertThat(spanData), method, SUCCESS, SUCCESS.status)); }); - testing.waitAndAssertHistogramPoints( + testing.waitAndAssertAnyHistogramPoints( instrumentationName.get(), "http.server.request.duration", metric -> metric.hasDescription("Duration of HTTP server requests.").hasUnit("s"), diff --git a/testing-common/src/test/java/io/opentelemetry/instrumentation/testing/InstrumentationTestRunnerTest.java b/testing-common/src/test/java/io/opentelemetry/instrumentation/testing/InstrumentationTestRunnerTest.java index 32df1f7d94af..eebb245d2db0 100644 --- a/testing-common/src/test/java/io/opentelemetry/instrumentation/testing/InstrumentationTestRunnerTest.java +++ b/testing-common/src/test/java/io/opentelemetry/instrumentation/testing/InstrumentationTestRunnerTest.java @@ -7,14 +7,19 @@ import static java.util.Arrays.asList; import static java.util.Collections.emptyList; +import static java.util.Collections.singletonList; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.api.common.Attributes; import io.opentelemetry.sdk.common.InstrumentationScopeInfo; import io.opentelemetry.sdk.logs.data.LogRecordData; +import io.opentelemetry.sdk.metrics.data.AggregationTemporality; import io.opentelemetry.sdk.metrics.data.MetricData; import io.opentelemetry.sdk.metrics.internal.data.ImmutableGaugeData; +import io.opentelemetry.sdk.metrics.internal.data.ImmutableHistogramData; +import io.opentelemetry.sdk.metrics.internal.data.ImmutableHistogramPointData; import io.opentelemetry.sdk.metrics.internal.data.ImmutableMetricData; import io.opentelemetry.sdk.resources.Resource; import io.opentelemetry.sdk.trace.data.SpanData; @@ -64,6 +69,87 @@ void requiresExactlyOneMetricBeforeAssertions() { assertThat(pointAssertionCalled).isFalse(); } + @Test + void anyHistogramMustMatchMetadataAndPointsOnTheSameMetric() { + MetricData wrongMetadataAndPoints = histogram("test", "duration", "other", 2); + MetricData rightMetadataAndWrongPoints = histogram("test", "duration", "matching", 2); + MetricData wrongMetadataAndRightPoints = histogram("test", "duration", "other", 1); + MetricData expected = histogram("test", "duration", "matching", 1); + MetricData otherScope = histogram("other", "duration", "matching", 1); + MetricData otherName = histogram("test", "other", "matching", 1); + + InstrumentationTestRunner matchingRunner = + new FixedMetricsTestRunner( + asList( + wrongMetadataAndPoints, + rightMetadataAndWrongPoints, + wrongMetadataAndRightPoints, + otherScope, + otherName, + expected)); + + InstrumentationTestRunner nonMatchingRunner = + new FixedMetricsTestRunner( + asList(rightMetadataAndWrongPoints, wrongMetadataAndRightPoints)); + InstrumentationTestRunner noMatchingMetricRunner = + new FixedMetricsTestRunner(asList(otherScope, otherName)); + + Awaitility.setDefaultPollDelay(Duration.ZERO); + Awaitility.setDefaultPollInterval(Duration.ofMillis(1)); + Awaitility.setDefaultTimeout(Duration.ofMillis(10)); + try { + matchingRunner.waitAndAssertAnyHistogramPoints( + "test", + "duration", + metric -> metric.hasDescription("matching"), + point -> point.hasCount(1)); + + assertThatThrownBy( + () -> + nonMatchingRunner.waitAndAssertAnyHistogramPoints( + "test", + "duration", + metric -> metric.hasDescription("matching"), + point -> point.hasCount(1))) + .isInstanceOf(AssertionError.class); + + assertThatThrownBy( + () -> + noMatchingMetricRunner.waitAndAssertAnyHistogramPoints( + "test", + "duration", + metric -> metric.hasDescription("matching"), + point -> point.hasCount(1))) + .isInstanceOf(AssertionError.class); + } finally { + Awaitility.reset(); + } + } + + private static MetricData histogram( + String instrumentationName, String metricName, String description, long pointCount) { + return ImmutableMetricData.createDoubleHistogram( + Resource.empty(), + InstrumentationScopeInfo.create(instrumentationName), + metricName, + description, + "s", + ImmutableHistogramData.create( + AggregationTemporality.CUMULATIVE, + singletonList( + ImmutableHistogramPointData.create( + 0, + 1, + Attributes.empty(), + (double) pointCount, + false, + 0, + false, + 0, + emptyList(), + singletonList(pointCount))))); + } + private static class FixedMetricsTestRunner extends InstrumentationTestRunner { private final List metrics; diff --git a/testing-common/src/test/java/io/opentelemetry/instrumentation/testing/junit/LibraryInstrumentationExtensionTest.java b/testing-common/src/test/java/io/opentelemetry/instrumentation/testing/junit/LibraryInstrumentationExtensionTest.java index 7484d1fdcb9d..625f2e51d24d 100644 --- a/testing-common/src/test/java/io/opentelemetry/instrumentation/testing/junit/LibraryInstrumentationExtensionTest.java +++ b/testing-common/src/test/java/io/opentelemetry/instrumentation/testing/junit/LibraryInstrumentationExtensionTest.java @@ -82,6 +82,13 @@ void shouldAssertHistogramPoints() { metric -> metric.hasDescription("Test duration."), point -> point.hasCount(1).hasSum(4).hasAttributes(secondAttributes), point -> point.hasCount(1).hasSum(2).hasAttributes(firstAttributes)); + + testing.waitAndAssertAnyHistogramPoints( + "test", + "duration", + metric -> metric.hasDescription("Test duration."), + point -> point.hasCount(1).hasSum(4).hasAttributes(secondAttributes), + point -> point.hasCount(1).hasSum(2).hasAttributes(firstAttributes)); } @Test From d12b9337835a31513ef371ca987d32e60bbdacf5 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 20 Oct 2026 04:24:15 +0000 Subject: [PATCH 07/14] Replace partial histogram waiters with exhaustive scope assertions Co-authored-by: trask <218610+trask@users.noreply.github.com> --- .../apachedubbo/v2_7/AbstractDubboTest.java | 213 +-- .../v2_7/AbstractDubboTraceChainTest.java | 273 ++-- .../avaje/jex/v3_0/JexTest.java | 8 +- .../awssdk/v1_11/SqsMetricsAssertions.java | 85 +- .../v2_2/internal/Aws2BedrockRuntimeTest.java | 721 +++++----- .../v2_2/AbstractAws2BedrockRuntimeTest.java | 1261 +++++++++-------- .../awssdk/v2_2/SqsMetricsAssertions.java | 85 +- .../CamelMessagingMetricsAssertions.java | 89 +- .../cassandra/v4_0/CassandraTest.java | 26 +- .../cassandra/v4_4/CassandraTest.java | 26 +- .../clientv1/v0_5/ClickHouseClientV1Test.java | 8 +- .../clientv2/v0_8/ClickHouseClientV2Test.java | 8 +- .../v4_0/DropwizardMetricsTest.java | 19 +- .../failsafe/v3_0/FailsafeTelemetryTest.java | 44 +- .../grpc/v1_6/AbstractGrpcStreamingTest.java | 114 +- .../grpc/v1_6/AbstractGrpcTest.java | 234 +-- .../iceberg/v1_8/AbstractIcebergTest.java | 29 +- .../javalin/AbstractJavalinTest.java | 8 +- .../jdbc/datasource/JdbcTelemetryTest.java | 8 +- .../jedis/v2_0/ShardedJedisClientTest.java | 8 +- .../jedis/v3_0/ShardedJedis30ClientTest.java | 20 +- .../jedis/v4_0/Jedis40ClientTest.java | 16 +- .../v7_0/KubernetesClientTest.java | 13 +- .../v7_0/KubernetesClientVer20Test.java | 13 +- .../v5_0/LettuceReactiveClientTest.java | 8 +- .../v5_1/AbstractLettuceClientTest.java | 19 +- ...istributionSummaryHistogramGaugesTest.java | 44 +- .../v1_5/AbstractDistributionSummaryTest.java | 68 +- .../v1_5/AbstractNamingConventionTest.java | 23 +- .../v1_5/AbstractPrometheusModeTest.java | 83 +- .../AbstractTimerHistogramGaugesTest.java | 46 +- .../v1_5/AbstractTimerMillisecondsTest.java | 23 +- .../micrometer/v1_5/AbstractTimerTest.java | 69 +- .../mongo/v4_0/MongoConfiguredTargetTest.java | 12 +- .../nats/v2_17/AbstractNatsTest.java | 70 +- .../instrumentation/openai/v1_1/ChatTest.java | 357 ++--- .../openai/v1_1/AbstractChatTest.java | 529 +++---- .../openai/v1_1/AbstractEmbeddingsTest.java | 110 +- .../v1_10/metrics/MeterTest.java | 30 +- .../v1_31/metrics/MeterTest.java | 40 +- .../v1_32/incubator/metrics/MeterTest.java | 40 +- .../v1_32/metrics/MeterTest.java | 40 +- .../v1_37/incubator/metrics/MeterTest.java | 40 +- .../v1_37/incubator/metrics/MeterTest.java | 40 +- .../v1_37/metrics/MeterTest.java | 40 +- .../v1_65/incubator/metrics/MeterTest.java | 29 +- .../pulsar/v2_8/PulsarClientTest.java | 93 +- .../client/RatpackHttpClientTest.java | 29 +- .../v4_8/RocketMqMetricsTest.java | 36 +- ...RocketMqClientSuppressReceiveSpanTest.java | 61 +- .../v5_0/AbstractRocketMqClientTest.java | 120 +- .../v5_0/RocketMqSimpleConsumerTest.java | 33 +- .../JmxRuntimeMetricsTest.java | 16 +- .../RuntimeTelemetryDefaultsTest.java | 16 +- .../internal/GarbageCollectorTest.java | 48 +- .../JfrVirtualThreadPinnedTest.java | 3 +- .../sofarpc/v5_4/AbstractSofaRpcTest.java | 330 +++-- .../v5_4/AbstractSofaRpcTraceChainTest.java | 308 ++-- .../ai/v1_0/AbstractOpenAiChatModelTest.java | 63 +- .../spring/ai/v1_0/ChatModelTest.java | 84 +- ...ageProducerSupportInstrumentationTest.java | 13 +- .../v4_1/SpringIntegrationTestHelper.java | 63 +- .../pulsar/v1_0/AbstractSpringPulsarTest.java | 27 +- ...t11SimpleMessageListenerContainerTest.java | 13 +- ...t20DirectMessageListenerContainerTest.java | 13 +- ...pringWebfluxClientInstrumentationTest.java | 20 +- .../thrift/v0_13/AbstractThriftTest.java | 104 +- .../testing/InstrumentationTestRunner.java | 67 +- .../junit/InstrumentationExtension.java | 28 +- .../junit/db/DbClientMetricsTestUtil.java | 20 +- .../db/DbConnectionPoolMetricsAssertions.java | 48 +- .../junit/http/AbstractHttpClientTest.java | 13 +- .../junit/http/AbstractHttpServerTest.java | 13 +- .../testing/util/MetricAssertions.java | 30 +- .../InstrumentationTestRunnerTest.java | 199 +-- .../LibraryInstrumentationExtensionTest.java | 45 +- .../testing/util/MetricAssertionsTest.java | 123 -- 77 files changed, 3959 insertions(+), 3209 deletions(-) delete mode 100644 testing-common/src/test/java/io/opentelemetry/instrumentation/testing/util/MetricAssertionsTest.java diff --git a/instrumentation/apache-dubbo-2.7/testing/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/AbstractDubboTest.java b/instrumentation/apache-dubbo-2.7/testing/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/AbstractDubboTest.java index 1e7e4db957ad..6930f504a486 100644 --- a/instrumentation/apache-dubbo-2.7/testing/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/AbstractDubboTest.java +++ b/instrumentation/apache-dubbo-2.7/testing/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/AbstractDubboTest.java @@ -201,57 +201,85 @@ void testApacheDubboBase() throws ReflectiveOperationException { if (emitOldRpcSemconv()) { testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( "io.opentelemetry.apache-dubbo-2.7", - "rpc.server.duration", - metric -> metric.hasUnit("ms"), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "apache_dubbo"), - equalTo( - RPC_SERVICE, - "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.HelloService"), - equalTo(RPC_METHOD, "hello"))); + metric -> + metric + .hasName("rpc.server.duration") + .hasUnit("ms") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "apache_dubbo"), + equalTo( + RPC_SERVICE, + "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.HelloService"), + equalTo(RPC_METHOD, "hello"))))); testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( "io.opentelemetry.apache-dubbo-2.7", - "rpc.client.duration", - metric -> metric.hasUnit("ms"), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "apache_dubbo"), - equalTo(RPC_SERVICE, "org.apache.dubbo.rpc.service.GenericService"), - equalTo(RPC_METHOD, "$invoke"), - equalTo(SERVER_ADDRESS, "localhost"), - satisfies(SERVER_PORT, val -> val.isInstanceOf(Long.class)), - satisfies(NETWORK_TYPE, AbstractDubboTest::assertNetworkType))); + metric -> + metric + .hasName("rpc.client.duration") + .hasUnit("ms") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "apache_dubbo"), + equalTo( + RPC_SERVICE, + "org.apache.dubbo.rpc.service.GenericService"), + equalTo(RPC_METHOD, "$invoke"), + equalTo(SERVER_ADDRESS, "localhost"), + satisfies( + SERVER_PORT, val -> val.isInstanceOf(Long.class)), + satisfies( + NETWORK_TYPE, + AbstractDubboTest::assertNetworkType))))); } if (emitPreviewRpcSemconv()) { testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( "io.opentelemetry.apache-dubbo-2.7", - "rpc.server.call.duration", - metric -> metric.hasUnit("s"), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "dubbo"), - equalTo( - RPC_METHOD, - "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.HelloService/hello"))); + metric -> + metric + .hasName("rpc.server.call.duration") + .hasUnit("s") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "dubbo"), + equalTo( + RPC_METHOD, + "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.HelloService/hello"))))); testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( "io.opentelemetry.apache-dubbo-2.7", - "rpc.client.call.duration", - metric -> metric.hasUnit("s"), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "dubbo"), - equalTo(RPC_METHOD, "org.apache.dubbo.rpc.service.GenericService/$invoke"), - equalTo(SERVER_ADDRESS, "localhost"), - satisfies(SERVER_PORT, val -> val.isInstanceOf(Long.class)))); + metric -> + metric + .hasName("rpc.client.call.duration") + .hasUnit("s") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "dubbo"), + equalTo( + RPC_METHOD, + "org.apache.dubbo.rpc.service.GenericService/$invoke"), + equalTo(SERVER_ADDRESS, "localhost"), + satisfies( + SERVER_PORT, val -> val.isInstanceOf(Long.class)))))); } } @@ -364,58 +392,85 @@ void testApacheDubboTest() throws ReflectiveOperationException { if (emitOldRpcSemconv()) { testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( "io.opentelemetry.apache-dubbo-2.7", - "rpc.server.duration", - metric -> metric.hasUnit("ms"), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "apache_dubbo"), - equalTo( - RPC_SERVICE, - "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.HelloService"), - equalTo(RPC_METHOD, "hello"))); + metric -> + metric + .hasName("rpc.server.duration") + .hasUnit("ms") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "apache_dubbo"), + equalTo( + RPC_SERVICE, + "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.HelloService"), + equalTo(RPC_METHOD, "hello"))))); testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( "io.opentelemetry.apache-dubbo-2.7", - "rpc.client.duration", - metric -> metric.hasUnit("ms"), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "apache_dubbo"), - equalTo(RPC_SERVICE, "org.apache.dubbo.rpc.service.GenericService"), - equalTo(RPC_METHOD, "$invokeAsync"), - equalTo(SERVER_ADDRESS, "localhost"), - satisfies(SERVER_PORT, val -> val.isInstanceOf(Long.class)), - satisfies(NETWORK_TYPE, AbstractDubboTest::assertNetworkType))); + metric -> + metric + .hasName("rpc.client.duration") + .hasUnit("ms") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "apache_dubbo"), + equalTo( + RPC_SERVICE, + "org.apache.dubbo.rpc.service.GenericService"), + equalTo(RPC_METHOD, "$invokeAsync"), + equalTo(SERVER_ADDRESS, "localhost"), + satisfies( + SERVER_PORT, val -> val.isInstanceOf(Long.class)), + satisfies( + NETWORK_TYPE, + AbstractDubboTest::assertNetworkType))))); } if (emitPreviewRpcSemconv()) { testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( "io.opentelemetry.apache-dubbo-2.7", - "rpc.server.call.duration", - metric -> metric.hasUnit("s"), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "dubbo"), - equalTo( - RPC_METHOD, - "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.HelloService/hello"))); + metric -> + metric + .hasName("rpc.server.call.duration") + .hasUnit("s") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "dubbo"), + equalTo( + RPC_METHOD, + "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.HelloService/hello"))))); testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( "io.opentelemetry.apache-dubbo-2.7", - "rpc.client.call.duration", - metric -> metric.hasUnit("s"), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "dubbo"), - equalTo( - RPC_METHOD, "org.apache.dubbo.rpc.service.GenericService/$invokeAsync"), - equalTo(SERVER_ADDRESS, "localhost"), - satisfies(SERVER_PORT, val -> val.isInstanceOf(Long.class)))); + metric -> + metric + .hasName("rpc.client.call.duration") + .hasUnit("s") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "dubbo"), + equalTo( + RPC_METHOD, + "org.apache.dubbo.rpc.service.GenericService/$invokeAsync"), + equalTo(SERVER_ADDRESS, "localhost"), + satisfies( + SERVER_PORT, val -> val.isInstanceOf(Long.class)))))); } } diff --git a/instrumentation/apache-dubbo-2.7/testing/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/AbstractDubboTraceChainTest.java b/instrumentation/apache-dubbo-2.7/testing/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/AbstractDubboTraceChainTest.java index 8362ea70db97..285fc46466cb 100644 --- a/instrumentation/apache-dubbo-2.7/testing/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/AbstractDubboTraceChainTest.java +++ b/instrumentation/apache-dubbo-2.7/testing/src/main/java/io/opentelemetry/instrumentation/apachedubbo/v2_7/AbstractDubboTraceChainTest.java @@ -286,84 +286,119 @@ void testDubboChain() throws ReflectiveOperationException { if (emitOldRpcSemconv()) { testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( "io.opentelemetry.apache-dubbo-2.7", - "rpc.server.duration", - metric -> metric.hasUnit("ms"), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "apache_dubbo"), - equalTo( - RPC_SERVICE, - "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.HelloService"), - equalTo(RPC_METHOD, "hello")), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "apache_dubbo"), - equalTo( - RPC_SERVICE, - "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.MiddleService"), - equalTo(RPC_METHOD, "hello"))); + metric -> + metric + .hasName("rpc.server.duration") + .hasUnit("ms") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "apache_dubbo"), + equalTo( + RPC_SERVICE, + "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.HelloService"), + equalTo(RPC_METHOD, "hello")), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "apache_dubbo"), + equalTo( + RPC_SERVICE, + "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.MiddleService"), + equalTo(RPC_METHOD, "hello"))))); testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( "io.opentelemetry.apache-dubbo-2.7", - "rpc.client.duration", - metric -> metric.hasUnit("ms"), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "apache_dubbo"), - equalTo(RPC_SERVICE, "org.apache.dubbo.rpc.service.GenericService"), - equalTo(RPC_METHOD, "$invoke"), - equalTo(SERVER_ADDRESS, "localhost"), - satisfies(SERVER_PORT, val -> val.isInstanceOf(Long.class)), - satisfies(NETWORK_TYPE, AbstractDubboTest::assertNetworkType)), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "apache_dubbo"), - equalTo(RPC_SERVICE, "org.apache.dubbo.rpc.service.GenericService"), - equalTo(RPC_METHOD, "$invoke"), - equalTo(SERVER_ADDRESS, "localhost"), - satisfies(SERVER_PORT, val -> val.isInstanceOf(Long.class)), - satisfies(NETWORK_TYPE, AbstractDubboTest::assertNetworkType))); + metric -> + metric + .hasName("rpc.client.duration") + .hasUnit("ms") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "apache_dubbo"), + equalTo( + RPC_SERVICE, + "org.apache.dubbo.rpc.service.GenericService"), + equalTo(RPC_METHOD, "$invoke"), + equalTo(SERVER_ADDRESS, "localhost"), + satisfies( + SERVER_PORT, val -> val.isInstanceOf(Long.class)), + satisfies( + NETWORK_TYPE, AbstractDubboTest::assertNetworkType)), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "apache_dubbo"), + equalTo( + RPC_SERVICE, + "org.apache.dubbo.rpc.service.GenericService"), + equalTo(RPC_METHOD, "$invoke"), + equalTo(SERVER_ADDRESS, "localhost"), + satisfies( + SERVER_PORT, val -> val.isInstanceOf(Long.class)), + satisfies( + NETWORK_TYPE, + AbstractDubboTest::assertNetworkType))))); } if (emitPreviewRpcSemconv()) { testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( "io.opentelemetry.apache-dubbo-2.7", - "rpc.server.call.duration", - metric -> metric.hasUnit("s"), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "dubbo"), - equalTo( - RPC_METHOD, - "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.HelloService/hello")), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "dubbo"), - equalTo( - RPC_METHOD, - "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.MiddleService/hello"))); + metric -> + metric + .hasName("rpc.server.call.duration") + .hasUnit("s") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "dubbo"), + equalTo( + RPC_METHOD, + "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.HelloService/hello")), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "dubbo"), + equalTo( + RPC_METHOD, + "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.MiddleService/hello"))))); testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( "io.opentelemetry.apache-dubbo-2.7", - "rpc.client.call.duration", - metric -> metric.hasUnit("s"), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "dubbo"), - equalTo(RPC_METHOD, "org.apache.dubbo.rpc.service.GenericService/$invoke"), - equalTo(SERVER_ADDRESS, "localhost"), - satisfies(SERVER_PORT, val -> val.isInstanceOf(Long.class))), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "dubbo"), - equalTo(RPC_METHOD, "org.apache.dubbo.rpc.service.GenericService/$invoke"), - equalTo(SERVER_ADDRESS, "localhost"), - satisfies(SERVER_PORT, val -> val.isInstanceOf(Long.class)))); + metric -> + metric + .hasName("rpc.client.call.duration") + .hasUnit("s") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "dubbo"), + equalTo( + RPC_METHOD, + "org.apache.dubbo.rpc.service.GenericService/$invoke"), + equalTo(SERVER_ADDRESS, "localhost"), + satisfies( + SERVER_PORT, val -> val.isInstanceOf(Long.class))), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "dubbo"), + equalTo( + RPC_METHOD, + "org.apache.dubbo.rpc.service.GenericService/$invoke"), + equalTo(SERVER_ADDRESS, "localhost"), + satisfies( + SERVER_PORT, val -> val.isInstanceOf(Long.class)))))); } } @@ -472,57 +507,85 @@ void testDubboChainInJvm() throws ReflectiveOperationException { if (emitOldRpcSemconv()) { testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( "io.opentelemetry.apache-dubbo-2.7", - "rpc.server.duration", - metric -> metric.hasUnit("ms"), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "apache_dubbo"), - equalTo( - RPC_SERVICE, - "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.MiddleService"), - equalTo(RPC_METHOD, "hello"))); + metric -> + metric + .hasName("rpc.server.duration") + .hasUnit("ms") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "apache_dubbo"), + equalTo( + RPC_SERVICE, + "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.MiddleService"), + equalTo(RPC_METHOD, "hello"))))); testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( "io.opentelemetry.apache-dubbo-2.7", - "rpc.client.duration", - metric -> metric.hasUnit("ms"), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "apache_dubbo"), - equalTo(RPC_SERVICE, "org.apache.dubbo.rpc.service.GenericService"), - equalTo(RPC_METHOD, "$invoke"), - equalTo(SERVER_ADDRESS, "localhost"), - satisfies(SERVER_PORT, val -> val.isInstanceOf(Long.class)), - satisfies(NETWORK_TYPE, AbstractDubboTest::assertNetworkType))); + metric -> + metric + .hasName("rpc.client.duration") + .hasUnit("ms") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "apache_dubbo"), + equalTo( + RPC_SERVICE, + "org.apache.dubbo.rpc.service.GenericService"), + equalTo(RPC_METHOD, "$invoke"), + equalTo(SERVER_ADDRESS, "localhost"), + satisfies( + SERVER_PORT, val -> val.isInstanceOf(Long.class)), + satisfies( + NETWORK_TYPE, + AbstractDubboTest::assertNetworkType))))); } if (emitPreviewRpcSemconv()) { testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( "io.opentelemetry.apache-dubbo-2.7", - "rpc.server.call.duration", - metric -> metric.hasUnit("s"), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "dubbo"), - equalTo( - RPC_METHOD, - "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.MiddleService/hello"))); + metric -> + metric + .hasName("rpc.server.call.duration") + .hasUnit("s") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "dubbo"), + equalTo( + RPC_METHOD, + "io.opentelemetry.instrumentation.apachedubbo.v2_7.api.MiddleService/hello"))))); testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( "io.opentelemetry.apache-dubbo-2.7", - "rpc.client.call.duration", - metric -> metric.hasUnit("s"), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "dubbo"), - equalTo(RPC_METHOD, "org.apache.dubbo.rpc.service.GenericService/$invoke"), - equalTo(SERVER_ADDRESS, "localhost"), - satisfies(SERVER_PORT, val -> val.isInstanceOf(Long.class)))); + metric -> + metric + .hasName("rpc.client.call.duration") + .hasUnit("s") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "dubbo"), + equalTo( + RPC_METHOD, + "org.apache.dubbo.rpc.service.GenericService/$invoke"), + equalTo(SERVER_ADDRESS, "localhost"), + satisfies( + SERVER_PORT, val -> val.isInstanceOf(Long.class)))))); } } } diff --git a/instrumentation/avaje-jex-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/avaje/jex/v3_0/JexTest.java b/instrumentation/avaje-jex-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/avaje/jex/v3_0/JexTest.java index b4a2b12e05c1..2d897e29282d 100644 --- a/instrumentation/avaje-jex-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/avaje/jex/v3_0/JexTest.java +++ b/instrumentation/avaje-jex-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/avaje/jex/v3_0/JexTest.java @@ -5,7 +5,6 @@ package io.opentelemetry.javaagent.instrumentation.avaje.jex.v3_0; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; @@ -126,8 +125,9 @@ void testHttpRouteMetricWithPathParamResponseSuccessful() { metric -> metric .hasName("http.server.request.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> point.hasAttribute(HTTP_ROUTE, "/test/param/{id}")))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> point.hasAttribute(HTTP_ROUTE, "/test/param/{id}")))); } } diff --git a/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/SqsMetricsAssertions.java b/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/SqsMetricsAssertions.java index 24f7191bc8ff..5789efb738b6 100644 --- a/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/SqsMetricsAssertions.java +++ b/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/SqsMetricsAssertions.java @@ -72,47 +72,66 @@ private static void assertClientOperationDuration( long operationCount, String operationName, String operationType) { - testing.waitAndAssertHistogramPoints( + testing.waitAndAssertMetrics( INSTRUMENTATION_NAME, "messaging.client.operation.duration", - metric -> - metric - .hasUnit("s") - .hasDescription( - "Duration of messaging operation initiated by a producer or consumer client."), - point -> - point - .satisfies(data -> assertThat(data.getCount()).isEqualTo(operationCount)) - .hasSumGreaterThan(0) - .hasBucketBoundaries(DURATION_BUCKETS) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, operationName), - equalTo(MESSAGING_SYSTEM, AWS_SQS), - equalTo(ERROR_TYPE, null), - equalTo(MESSAGING_DESTINATION_NAME, "testSdkSqs"), - equalTo(MESSAGING_OPERATION_TYPE, operationType), - equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, serverPort))); + metrics -> + metrics.satisfiesExactly( + metric -> + assertThat(metric) + .hasUnit("s") + .hasDescription( + "Duration of messaging operation initiated by a producer or consumer client.") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .satisfies( + data -> + assertThat(data.getCount()) + .isEqualTo(operationCount)) + .hasSumGreaterThan(0) + .hasBucketBoundaries(DURATION_BUCKETS) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, operationName), + equalTo(MESSAGING_SYSTEM, AWS_SQS), + equalTo(ERROR_TYPE, null), + equalTo(MESSAGING_DESTINATION_NAME, "testSdkSqs"), + equalTo(MESSAGING_OPERATION_TYPE, operationType), + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, serverPort)))))); } private static void assertProcessDuration( InstrumentationExtension testing, int serverPort, long operationCount) { - testing.waitAndAssertHistogramPoints( + testing.waitAndAssertMetrics( INSTRUMENTATION_NAME, "messaging.process.duration", - metric -> metric.hasUnit("s").hasDescription("Duration of processing operation."), - point -> - point - .satisfies(data -> assertThat(data.getCount()).isEqualTo(operationCount)) - .hasSumGreaterThan(0) - .hasBucketBoundaries(DURATION_BUCKETS) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "process"), - equalTo(MESSAGING_SYSTEM, AWS_SQS), - equalTo(ERROR_TYPE, null), - equalTo(MESSAGING_DESTINATION_NAME, "testSdkSqs"), - equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, serverPort))); + metrics -> + metrics.satisfiesExactly( + metric -> + assertThat(metric) + .hasUnit("s") + .hasDescription("Duration of processing operation.") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .satisfies( + data -> + assertThat(data.getCount()) + .isEqualTo(operationCount)) + .hasSumGreaterThan(0) + .hasBucketBoundaries(DURATION_BUCKETS) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "process"), + equalTo(MESSAGING_SYSTEM, AWS_SQS), + equalTo(ERROR_TYPE, null), + equalTo(MESSAGING_DESTINATION_NAME, "testSdkSqs"), + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, serverPort)))))); } private static void assertMessageCounter( diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/library/src/testBedrockRuntime/java/io/opentelemetry/instrumentation/awssdk/v2_2/internal/Aws2BedrockRuntimeTest.java b/instrumentation/aws-sdk/aws-sdk-2.2/library/src/testBedrockRuntime/java/io/opentelemetry/instrumentation/awssdk/v2_2/internal/Aws2BedrockRuntimeTest.java index d5dbc823d4b6..0198a01ec9a4 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/library/src/testBedrockRuntime/java/io/opentelemetry/instrumentation/awssdk/v2_2/internal/Aws2BedrockRuntimeTest.java +++ b/instrumentation/aws-sdk/aws-sdk-2.2/library/src/testBedrockRuntime/java/io/opentelemetry/instrumentation/awssdk/v2_2/internal/Aws2BedrockRuntimeTest.java @@ -5,7 +5,6 @@ package io.opentelemetry.instrumentation.awssdk.v2_2.internal; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.incubating.EventIncubatingAttributes.EVENT_NAME; import static io.opentelemetry.semconv.incubating.GenAiIncubatingAttributes.GEN_AI_OPERATION_NAME; @@ -180,40 +179,42 @@ void testConverseToolCallNoMessageContent() { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(415) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(162) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(415) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(162) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx0 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -314,40 +315,42 @@ void testConverseToolCallNoMessageContent() { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(554) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(57) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(554) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(57) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx1 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -522,40 +525,42 @@ void testConverseToolCallStreamNoMessageContent() { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(415) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(162) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(415) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(162) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx0 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -676,40 +681,42 @@ void testConverseToolCallStreamNoMessageContent() { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(554) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(59) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(554) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(59) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx1 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -932,40 +939,42 @@ void testInvokeModelToolCallAmazonNovaNoMessageContent() { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(416) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(166) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(416) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(166) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx0 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); getTesting() @@ -1094,40 +1103,42 @@ void testInvokeModelToolCallAmazonNovaNoMessageContent() { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(559) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(59) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(559) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(59) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx1 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -1370,40 +1381,42 @@ public void accept(PayloadPart chunk) { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(416) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(165) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(416) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(165) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx0 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); getTesting() @@ -1576,40 +1589,42 @@ public void accept(PayloadPart chunk) { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(558) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(58) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(558) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(58) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx1 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -1783,40 +1798,42 @@ void testInvokeModelToolCallAnthropicClaudeNoMessageContent() { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(380) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(133) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(380) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(133) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx0 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); getTesting() @@ -1923,40 +1940,42 @@ void testInvokeModelToolCallAnthropicClaudeNoMessageContent() { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(590) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(132) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(590) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(132) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx1 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -2202,40 +2221,42 @@ public void accept(PayloadPart chunk) { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(380) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(144) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(380) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(144) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx0 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); getTesting() @@ -2383,40 +2404,42 @@ public void accept(PayloadPart chunk) { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(601) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(145) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(601) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(145) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx1 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2BedrockRuntimeTest.java b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2BedrockRuntimeTest.java index 1877a5c17c05..eae06304a749 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2BedrockRuntimeTest.java +++ b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2BedrockRuntimeTest.java @@ -5,7 +5,6 @@ package io.opentelemetry.instrumentation.awssdk.v2_2; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; import static io.opentelemetry.semconv.incubating.AwsIncubatingAttributes.AWS_BEDROCK_GUARDRAIL_ID; @@ -167,40 +166,42 @@ void testConverseBasic() { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(8) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(14) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(8) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(14) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -287,40 +288,42 @@ void testConverseOptions() { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(8) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(10) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(8) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(10) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -416,40 +419,42 @@ void testConverseToolCall() { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(415) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(162) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(415) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(162) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx0 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -572,40 +577,42 @@ void testConverseToolCall() { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(554) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(57) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(554) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(57) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx1 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -881,40 +888,42 @@ void testConverseToolCallStream() { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(415) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(162) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(415) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(162) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx0 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -1057,40 +1066,42 @@ void testConverseToolCallStream() { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(554) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(59) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(554) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(59) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx1 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -1301,40 +1312,42 @@ void testConverseStream() { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(8) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(10) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(8) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(10) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -1528,40 +1541,42 @@ void testInvokeModelAmazonTitan() { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(5) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, TEXT_COMPLETION), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(10) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, TEXT_COMPLETION), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(5) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, TEXT_COMPLETION), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(10) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, TEXT_COMPLETION), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, TEXT_COMPLETION), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, TEXT_COMPLETION), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -1675,40 +1690,42 @@ void testInvokeModelWithResponseStreamAmazonTitan() { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(7) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, TEXT_COMPLETION), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(100) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, TEXT_COMPLETION), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(7) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, TEXT_COMPLETION), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(100) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, TEXT_COMPLETION), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, TEXT_COMPLETION), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, TEXT_COMPLETION), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -1830,40 +1847,42 @@ void testInvokeModelAmazonNova() { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(5) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(10) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(5) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(10) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -1997,40 +2016,42 @@ void testInvokeModelWithResponseStreamAmazonNova() { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(7) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(100) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(7) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(100) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -2138,40 +2159,42 @@ void testInvokeModelAnthropicClaude(String modelId) { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(14) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(10) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(14) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(10) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -2537,40 +2560,42 @@ void testInvokeModelWithResponseStreamAnthropicClaude() { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(16) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(10) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(16) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(10) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -2731,40 +2756,42 @@ void testInvokeModelToolCallAmazonNova() { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(416) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(166) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(416) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(166) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx0 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); getTesting() @@ -2915,40 +2942,42 @@ void testInvokeModelToolCallAmazonNova() { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(559) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(59) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(559) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(59) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx1 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -3226,40 +3255,42 @@ public void accept(PayloadPart chunk) { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(416) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(165) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(416) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(165) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx0 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); getTesting() @@ -3454,40 +3485,42 @@ public void accept(PayloadPart chunk) { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(558) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(58) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(558) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(58) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx1 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -3697,40 +3730,42 @@ void testInvokeModelToolCallAnthropicClaude() { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(380) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(133) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(380) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(133) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx0 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); getTesting() @@ -3859,40 +3894,42 @@ void testInvokeModelToolCallAnthropicClaude() { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(590) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(132) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(590) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(132) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx1 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -4176,40 +4213,42 @@ public void accept(PayloadPart chunk) { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(380) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(144) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(380) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(144) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx0 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); getTesting() @@ -4379,40 +4418,42 @@ public void accept(PayloadPart chunk) { .hasName("gen_ai.client.token.usage") .hasUnit("{token}") .hasDescription("Measures number of input and output tokens used.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(601) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(145) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(601) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(145) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))), metric -> metric .hasName("gen_ai.client.operation.duration") .hasUnit("s") .hasDescription("GenAI operation duration.") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))))); SpanContext spanCtx1 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/SqsMetricsAssertions.java b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/SqsMetricsAssertions.java index 0dd68edf7338..46735508ce7e 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/SqsMetricsAssertions.java +++ b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/SqsMetricsAssertions.java @@ -72,47 +72,66 @@ private static void assertClientOperationDuration( long operationCount, String operationName, String operationType) { - testing.waitAndAssertHistogramPoints( + testing.waitAndAssertMetrics( INSTRUMENTATION_NAME, "messaging.client.operation.duration", - metric -> - metric - .hasUnit("s") - .hasDescription( - "Duration of messaging operation initiated by a producer or consumer client."), - point -> - point - .satisfies(data -> assertThat(data.getCount()).isEqualTo(operationCount)) - .hasSumGreaterThan(0) - .hasBucketBoundaries(DURATION_BUCKETS) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, operationName), - equalTo(MESSAGING_SYSTEM, AWS_SQS), - equalTo(ERROR_TYPE, null), - equalTo(MESSAGING_DESTINATION_NAME, "testSdkSqs"), - equalTo(MESSAGING_OPERATION_TYPE, operationType), - equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, serverPort))); + metrics -> + metrics.satisfiesExactly( + metric -> + assertThat(metric) + .hasUnit("s") + .hasDescription( + "Duration of messaging operation initiated by a producer or consumer client.") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .satisfies( + data -> + assertThat(data.getCount()) + .isEqualTo(operationCount)) + .hasSumGreaterThan(0) + .hasBucketBoundaries(DURATION_BUCKETS) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, operationName), + equalTo(MESSAGING_SYSTEM, AWS_SQS), + equalTo(ERROR_TYPE, null), + equalTo(MESSAGING_DESTINATION_NAME, "testSdkSqs"), + equalTo(MESSAGING_OPERATION_TYPE, operationType), + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, serverPort)))))); } private static void assertProcessDuration( InstrumentationExtension testing, int serverPort, long operationCount) { - testing.waitAndAssertHistogramPoints( + testing.waitAndAssertMetrics( INSTRUMENTATION_NAME, "messaging.process.duration", - metric -> metric.hasUnit("s").hasDescription("Duration of processing operation."), - point -> - point - .satisfies(data -> assertThat(data.getCount()).isEqualTo(operationCount)) - .hasSumGreaterThan(0) - .hasBucketBoundaries(DURATION_BUCKETS) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "process"), - equalTo(MESSAGING_SYSTEM, AWS_SQS), - equalTo(ERROR_TYPE, null), - equalTo(MESSAGING_DESTINATION_NAME, "testSdkSqs"), - equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, serverPort))); + metrics -> + metrics.satisfiesExactly( + metric -> + assertThat(metric) + .hasUnit("s") + .hasDescription("Duration of processing operation.") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .satisfies( + data -> + assertThat(data.getCount()) + .isEqualTo(operationCount)) + .hasSumGreaterThan(0) + .hasBucketBoundaries(DURATION_BUCKETS) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "process"), + equalTo(MESSAGING_SYSTEM, AWS_SQS), + equalTo(ERROR_TYPE, null), + equalTo(MESSAGING_DESTINATION_NAME, "testSdkSqs"), + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, serverPort)))))); } private static void assertMessageCounter( diff --git a/instrumentation/camel-2.20/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/camel/v2_20/CamelMessagingMetricsAssertions.java b/instrumentation/camel-2.20/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/camel/v2_20/CamelMessagingMetricsAssertions.java index f79e8d5169a6..5377b6358ccb 100644 --- a/instrumentation/camel-2.20/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/camel/v2_20/CamelMessagingMetricsAssertions.java +++ b/instrumentation/camel-2.20/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/camel/v2_20/CamelMessagingMetricsAssertions.java @@ -173,46 +173,59 @@ private static void assertDuration( String destination, String errorType, String destinationPartitionId) { - testing.waitAndAssertHistogramPoints( + testing.waitAndAssertMetrics( INSTRUMENTATION_NAME, metricName, - metric -> metric.hasDescription(description).hasUnit("s"), - point -> { - point.hasCount(1); - if (operationType != null) { - if (destinationPartitionId != null) { - point.hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, operationName), - equalTo(MESSAGING_SYSTEM, system), - equalTo(MESSAGING_DESTINATION_NAME, destination), - equalTo(MESSAGING_DESTINATION_PARTITION_ID, destinationPartitionId), - equalTo(MESSAGING_OPERATION_TYPE, operationType), - equalTo(ERROR_TYPE, errorType)); - } else { - point.hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, operationName), - equalTo(MESSAGING_SYSTEM, system), - equalTo(MESSAGING_DESTINATION_NAME, destination), - equalTo(MESSAGING_OPERATION_TYPE, operationType), - equalTo(ERROR_TYPE, errorType)); - } - } else { - if (destinationPartitionId != null) { - point.hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, operationName), - equalTo(MESSAGING_SYSTEM, system), - equalTo(MESSAGING_DESTINATION_NAME, destination), - equalTo(MESSAGING_DESTINATION_PARTITION_ID, destinationPartitionId), - equalTo(ERROR_TYPE, errorType)); - } else { - point.hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, operationName), - equalTo(MESSAGING_SYSTEM, system), - equalTo(MESSAGING_DESTINATION_NAME, destination), - equalTo(ERROR_TYPE, errorType)); - } - } - }); + metrics -> + metrics.satisfiesExactly( + metric -> { + assertThat(metric) + .hasUnit("s") + .hasDescription(description) + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> { + point.hasCount(1); + if (operationType != null) { + if (destinationPartitionId != null) { + point.hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, operationName), + equalTo(MESSAGING_SYSTEM, system), + equalTo(MESSAGING_DESTINATION_NAME, destination), + equalTo( + MESSAGING_DESTINATION_PARTITION_ID, + destinationPartitionId), + equalTo(MESSAGING_OPERATION_TYPE, operationType), + equalTo(ERROR_TYPE, errorType)); + } else { + point.hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, operationName), + equalTo(MESSAGING_SYSTEM, system), + equalTo(MESSAGING_DESTINATION_NAME, destination), + equalTo(MESSAGING_OPERATION_TYPE, operationType), + equalTo(ERROR_TYPE, errorType)); + } + } else { + if (destinationPartitionId != null) { + point.hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, operationName), + equalTo(MESSAGING_SYSTEM, system), + equalTo(MESSAGING_DESTINATION_NAME, destination), + equalTo( + MESSAGING_DESTINATION_PARTITION_ID, + destinationPartitionId), + equalTo(ERROR_TYPE, errorType)); + } else { + point.hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, operationName), + equalTo(MESSAGING_SYSTEM, system), + equalTo(MESSAGING_DESTINATION_NAME, destination), + equalTo(ERROR_TYPE, errorType)); + } + } + })); + })); } private static void assertCounter( diff --git a/instrumentation/cassandra/cassandra-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraTest.java b/instrumentation/cassandra/cassandra-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraTest.java index 96d7fcfd81c3..039345d94388 100644 --- a/instrumentation/cassandra/cassandra-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraTest.java +++ b/instrumentation/cassandra/cassandra-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraTest.java @@ -5,7 +5,6 @@ package io.opentelemetry.javaagent.instrumentation.cassandra.v4_0; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.DbAttributes.DB_COLLECTION_NAME; import static io.opentelemetry.semconv.DbAttributes.DB_OPERATION_NAME; @@ -111,17 +110,18 @@ void responsePeerComesFromTheChannel() { metric -> metric .hasName("db.client.operation.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(DB_COLLECTION_NAME, "system.local"), - equalTo(DB_OPERATION_NAME, "SELECT"), - equalTo(DB_QUERY_SUMMARY, "SELECT system.local"), - equalTo(DB_SYSTEM_NAME, "cassandra"), - equalTo(NETWORK_PEER_ADDRESS, cassandraIp), - equalTo(NETWORK_PEER_PORT, cassandraPort), - equalTo(SERVER_ADDRESS, cassandraHost), - equalTo(SERVER_PORT, cassandraPort))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(DB_COLLECTION_NAME, "system.local"), + equalTo(DB_OPERATION_NAME, "SELECT"), + equalTo(DB_QUERY_SUMMARY, "SELECT system.local"), + equalTo(DB_SYSTEM_NAME, "cassandra"), + equalTo(NETWORK_PEER_ADDRESS, cassandraIp), + equalTo(NETWORK_PEER_PORT, cassandraPort), + equalTo(SERVER_ADDRESS, cassandraHost), + equalTo(SERVER_PORT, cassandraPort))))); } } diff --git a/instrumentation/cassandra/cassandra-4.4/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_4/CassandraTest.java b/instrumentation/cassandra/cassandra-4.4/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_4/CassandraTest.java index ac373b9c689a..73b3625db5e1 100644 --- a/instrumentation/cassandra/cassandra-4.4/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_4/CassandraTest.java +++ b/instrumentation/cassandra/cassandra-4.4/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_4/CassandraTest.java @@ -5,7 +5,6 @@ package io.opentelemetry.javaagent.instrumentation.cassandra.v4_4; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.DbAttributes.DB_COLLECTION_NAME; import static io.opentelemetry.semconv.DbAttributes.DB_OPERATION_NAME; @@ -106,18 +105,19 @@ void responsePeerComesFromTheChannel() throws ReflectiveOperationException { metric -> metric .hasName("db.client.operation.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(DB_COLLECTION_NAME, "system.local"), - equalTo(DB_OPERATION_NAME, "SELECT"), - equalTo(DB_QUERY_SUMMARY, "SELECT system.local"), - equalTo(DB_SYSTEM_NAME, "cassandra"), - equalTo(NETWORK_PEER_ADDRESS, cassandraIp), - equalTo(NETWORK_PEER_PORT, cassandraPort), - equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, cassandraPort))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(DB_COLLECTION_NAME, "system.local"), + equalTo(DB_OPERATION_NAME, "SELECT"), + equalTo(DB_QUERY_SUMMARY, "SELECT system.local"), + equalTo(DB_SYSTEM_NAME, "cassandra"), + equalTo(NETWORK_PEER_ADDRESS, cassandraIp), + equalTo(NETWORK_PEER_PORT, cassandraPort), + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, cassandraPort))))); } private static CqlSession getDelegate(CqlSession session) throws IllegalAccessException { diff --git a/instrumentation/clickhouse/clickhouse-client-v1-0.5/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/clickhouse/clientv1/v0_5/ClickHouseClientV1Test.java b/instrumentation/clickhouse/clickhouse-client-v1-0.5/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/clickhouse/clientv1/v0_5/ClickHouseClientV1Test.java index c6216d2593f4..4ffe448ab4bd 100644 --- a/instrumentation/clickhouse/clickhouse-client-v1-0.5/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/clickhouse/clientv1/v0_5/ClickHouseClientV1Test.java +++ b/instrumentation/clickhouse/clickhouse-client-v1-0.5/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/clickhouse/clientv1/v0_5/ClickHouseClientV1Test.java @@ -6,7 +6,6 @@ package io.opentelemetry.javaagent.instrumentation.clickhouse.clientv1.v0_5; import static io.opentelemetry.instrumentation.testing.junit.db.DbClientMetricsTestUtil.assertDurationMetric; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.DbAttributes.DB_NAMESPACE; import static io.opentelemetry.semconv.DbAttributes.DB_QUERY_SUMMARY; @@ -382,9 +381,10 @@ void testExecuteAndWaitThrowsException() { metric -> metric .hasName("db.client.operation.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> point.hasAttribute(ERROR_TYPE, "60")))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> point.hasAttribute(ERROR_TYPE, "60")))); } @Test diff --git a/instrumentation/clickhouse/clickhouse-client-v2-0.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/clickhouse/clientv2/v0_8/ClickHouseClientV2Test.java b/instrumentation/clickhouse/clickhouse-client-v2-0.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/clickhouse/clientv2/v0_8/ClickHouseClientV2Test.java index ce91b96cecbd..d88118a1eebf 100644 --- a/instrumentation/clickhouse/clickhouse-client-v2-0.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/clickhouse/clientv2/v0_8/ClickHouseClientV2Test.java +++ b/instrumentation/clickhouse/clickhouse-client-v2-0.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/clickhouse/clientv2/v0_8/ClickHouseClientV2Test.java @@ -6,7 +6,6 @@ package io.opentelemetry.javaagent.instrumentation.clickhouse.clientv2.v0_8; import static io.opentelemetry.instrumentation.testing.junit.db.DbClientMetricsTestUtil.assertDurationMetric; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.DbAttributes.DB_NAMESPACE; import static io.opentelemetry.semconv.DbAttributes.DB_QUERY_SUMMARY; @@ -348,9 +347,10 @@ void testQueryThrowsServerException() { metric -> metric .hasName("db.client.operation.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> point.hasAttribute(ERROR_TYPE, "60")))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> point.hasAttribute(ERROR_TYPE, "60")))); } @Test diff --git a/instrumentation/dropwizard/dropwizard-metrics-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/dropwizardmetrics/v4_0/DropwizardMetricsTest.java b/instrumentation/dropwizard/dropwizard-metrics-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/dropwizardmetrics/v4_0/DropwizardMetricsTest.java index a6c86cdbf1d9..539b57eab6d2 100644 --- a/instrumentation/dropwizard/dropwizard-metrics-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/dropwizardmetrics/v4_0/DropwizardMetricsTest.java +++ b/instrumentation/dropwizard/dropwizard-metrics-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/dropwizardmetrics/v4_0/DropwizardMetricsTest.java @@ -5,7 +5,6 @@ package io.opentelemetry.javaagent.instrumentation.dropwizardmetrics.v4_0; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static java.util.concurrent.TimeUnit.MILLISECONDS; import static java.util.concurrent.TimeUnit.NANOSECONDS; import static java.util.concurrent.TimeUnit.SECONDS; @@ -102,8 +101,10 @@ void histogram() { metric -> metric .hasName("testhistogram") - .satisfies( - hasHistogramPointsSatisfyingExactly(point -> point.hasSum(42).hasCount(2)))); + .hasHistogramSatisfying( + histogramMetric -> + histogramMetric.hasPointsSatisfying( + point -> point.hasSum(42).hasCount(2)))); testing.clearData(); // when @@ -156,11 +157,15 @@ void timer() { timer.update(234_000, NANOSECONDS); // then - testing.waitAndAssertAnyHistogramPoints( + testing.waitAndAssertMetrics( INSTRUMENTATION_NAME, - "testtimer", - metric -> metric.hasUnit("ms"), - point -> point.hasSum(1.234).hasCount(2)); + metric -> + metric + .hasName("testtimer") + .hasUnit("ms") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying(point -> point.hasSum(1.234).hasCount(2)))); testing.clearData(); // when diff --git a/instrumentation/failsafe-3.0/library/src/test/java/io/opentelemetry/instrumentation/failsafe/v3_0/FailsafeTelemetryTest.java b/instrumentation/failsafe-3.0/library/src/test/java/io/opentelemetry/instrumentation/failsafe/v3_0/FailsafeTelemetryTest.java index 70939f460295..f937bcaa21cd 100644 --- a/instrumentation/failsafe-3.0/library/src/test/java/io/opentelemetry/instrumentation/failsafe/v3_0/FailsafeTelemetryTest.java +++ b/instrumentation/failsafe-3.0/library/src/test/java/io/opentelemetry/instrumentation/failsafe/v3_0/FailsafeTelemetryTest.java @@ -6,7 +6,6 @@ package io.opentelemetry.instrumentation.failsafe.v3_0; import static io.opentelemetry.api.common.AttributeKey.stringKey; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static org.assertj.core.api.Assertions.assertThat; @@ -121,26 +120,29 @@ void captureRetryPolicyMetrics() { metricAssert -> metricAssert .hasName("failsafe.retry_policy.attempts") - .satisfies( - hasHistogramPointsSatisfyingExactly( - histogramPointAssert -> - histogramPointAssert - .hasCount(3) - .hasMin(1) - .hasMax(3) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("failsafe.retry_policy.name"), "testing"), - equalTo(stringKey("failsafe.retry_policy.outcome"), "success")) - .hasBucketCounts(1L, 1L, 1L, 0L, 0L), - histogramPointAssert -> - histogramPointAssert - .hasCount(2) - .hasMin(3) - .hasMax(3) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("failsafe.retry_policy.name"), "testing"), - equalTo(stringKey("failsafe.retry_policy.outcome"), "failure")) - .hasBucketCounts(0L, 0L, 2L, 0L, 0L)))); + .hasHistogramSatisfying( + histogramAssert -> + histogramAssert.hasPointsSatisfying( + histogramPointAssert -> + histogramPointAssert + .hasCount(3) + .hasMin(1) + .hasMax(3) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("failsafe.retry_policy.name"), "testing"), + equalTo( + stringKey("failsafe.retry_policy.outcome"), "success")) + .hasBucketCounts(1L, 1L, 1L, 0L, 0L), + histogramPointAssert -> + histogramPointAssert + .hasCount(2) + .hasMin(3) + .hasMax(3) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("failsafe.retry_policy.name"), "testing"), + equalTo( + stringKey("failsafe.retry_policy.outcome"), "failure")) + .hasBucketCounts(0L, 0L, 2L, 0L, 0L)))); } private static Consumer buildCircuitBreakerAssertion( diff --git a/instrumentation/grpc-1.6/testing/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/AbstractGrpcStreamingTest.java b/instrumentation/grpc-1.6/testing/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/AbstractGrpcStreamingTest.java index bba30b915349..0da33c2326ca 100644 --- a/instrumentation/grpc-1.6/testing/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/AbstractGrpcStreamingTest.java +++ b/instrumentation/grpc-1.6/testing/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/AbstractGrpcStreamingTest.java @@ -295,63 +295,89 @@ RPC_SERVICE, emitOldRpcSemconv() ? "example.Greeter" : null), .hasParent(trace.getSpan(0)))); if (emitOldRpcSemconv()) { testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( "io.opentelemetry.grpc-1.6", - "rpc.server.duration", - metric -> metric.hasUnit("ms"), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, server.getPort()), - equalTo(RPC_METHOD, "Conversation"), - equalTo(RPC_SERVICE, "example.Greeter"), - equalTo(RPC_SYSTEM, "grpc"), - equalTo(NETWORK_TYPE, "ipv4"), - equalTo(RPC_GRPC_STATUS_CODE, (long) Status.Code.OK.value()))); + metric -> + metric + .hasName("rpc.server.duration") + .hasUnit("ms") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, server.getPort()), + equalTo(RPC_METHOD, "Conversation"), + equalTo(RPC_SERVICE, "example.Greeter"), + equalTo(RPC_SYSTEM, "grpc"), + equalTo(NETWORK_TYPE, "ipv4"), + equalTo( + RPC_GRPC_STATUS_CODE, + (long) Status.Code.OK.value()))))); } if (emitPreviewRpcSemconv()) { testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( "io.opentelemetry.grpc-1.6", - "rpc.server.call.duration", - metric -> metric.hasUnit("s"), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "grpc"), - equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, server.getPort()), - equalTo(RPC_METHOD, "example.Greeter/Conversation"), - equalTo(RPC_RESPONSE_STATUS_CODE, Status.Code.OK.name()))); + metric -> + metric + .hasName("rpc.server.call.duration") + .hasUnit("s") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "grpc"), + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, server.getPort()), + equalTo(RPC_METHOD, "example.Greeter/Conversation"), + equalTo( + RPC_RESPONSE_STATUS_CODE, Status.Code.OK.name()))))); } if (emitOldRpcSemconv()) { testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( "io.opentelemetry.grpc-1.6", - "rpc.client.duration", - metric -> metric.hasUnit("ms"), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, server.getPort()), - equalTo(RPC_METHOD, "Conversation"), - equalTo(RPC_SERVICE, "example.Greeter"), - equalTo(RPC_SYSTEM, "grpc"), - equalTo(RPC_GRPC_STATUS_CODE, (long) Status.Code.OK.value()), - equalTo(NETWORK_TYPE, testLatestDeps() ? "ipv4" : null))); + metric -> + metric + .hasName("rpc.client.duration") + .hasUnit("ms") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, server.getPort()), + equalTo(RPC_METHOD, "Conversation"), + equalTo(RPC_SERVICE, "example.Greeter"), + equalTo(RPC_SYSTEM, "grpc"), + equalTo( + RPC_GRPC_STATUS_CODE, (long) Status.Code.OK.value()), + equalTo( + NETWORK_TYPE, testLatestDeps() ? "ipv4" : null))))); } if (emitPreviewRpcSemconv()) { testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( "io.opentelemetry.grpc-1.6", - "rpc.client.call.duration", - metric -> metric.hasUnit("s"), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "grpc"), - equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, server.getPort()), - equalTo(RPC_METHOD, "example.Greeter/Conversation"), - equalTo(RPC_RESPONSE_STATUS_CODE, Status.Code.OK.name()))); + metric -> + metric + .hasName("rpc.client.call.duration") + .hasUnit("s") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "grpc"), + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, server.getPort()), + equalTo(RPC_METHOD, "example.Greeter/Conversation"), + equalTo( + RPC_RESPONSE_STATUS_CODE, Status.Code.OK.name()))))); } } diff --git a/instrumentation/grpc-1.6/testing/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/AbstractGrpcTest.java b/instrumentation/grpc-1.6/testing/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/AbstractGrpcTest.java index b06d62d57767..8e34179141ff 100644 --- a/instrumentation/grpc-1.6/testing/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/AbstractGrpcTest.java +++ b/instrumentation/grpc-1.6/testing/src/main/java/io/opentelemetry/instrumentation/grpc/v1_6/AbstractGrpcTest.java @@ -1809,124 +1809,170 @@ private void assertMetrics(Server server, Status status) { : null; if (emitOldRpcSemconv()) { testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( "io.opentelemetry.grpc-1.6", - "rpc.server.duration", - metric -> metric.hasUnit("ms"), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, server.getPort()), - equalTo(RPC_METHOD, "SayHello"), - equalTo(RPC_SERVICE, "example.Greeter"), - equalTo(RPC_SYSTEM, "grpc"), - equalTo(RPC_GRPC_STATUS_CODE, (long) statusCode.value()), - equalTo(NETWORK_TYPE, "ipv4"))); + metric -> + metric + .hasName("rpc.server.duration") + .hasUnit("ms") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, server.getPort()), + equalTo(RPC_METHOD, "SayHello"), + equalTo(RPC_SERVICE, "example.Greeter"), + equalTo(RPC_SYSTEM, "grpc"), + equalTo(RPC_GRPC_STATUS_CODE, (long) statusCode.value()), + equalTo(NETWORK_TYPE, "ipv4"))))); if (hasSizeMetric) { testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( "io.opentelemetry.grpc-1.6", - "rpc.server.request.size", - metric -> metric.hasUnit("By"), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, server.getPort()), - equalTo(RPC_METHOD, "SayHello"), - equalTo(RPC_SERVICE, "example.Greeter"), - equalTo(RPC_SYSTEM, "grpc"), - equalTo(RPC_GRPC_STATUS_CODE, (long) statusCode.value()), - equalTo(NETWORK_TYPE, "ipv4"))); + metric -> + metric + .hasName("rpc.server.request.size") + .hasUnit("By") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, server.getPort()), + equalTo(RPC_METHOD, "SayHello"), + equalTo(RPC_SERVICE, "example.Greeter"), + equalTo(RPC_SYSTEM, "grpc"), + equalTo( + RPC_GRPC_STATUS_CODE, (long) statusCode.value()), + equalTo(NETWORK_TYPE, "ipv4"))))); testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( "io.opentelemetry.grpc-1.6", - "rpc.server.response.size", - metric -> metric.hasUnit("By"), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, server.getPort()), - equalTo(RPC_METHOD, "SayHello"), - equalTo(RPC_SERVICE, "example.Greeter"), - equalTo(RPC_SYSTEM, "grpc"), - equalTo(RPC_GRPC_STATUS_CODE, (long) statusCode.value()), - equalTo(NETWORK_TYPE, "ipv4"))); + metric -> + metric + .hasName("rpc.server.response.size") + .hasUnit("By") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, server.getPort()), + equalTo(RPC_METHOD, "SayHello"), + equalTo(RPC_SERVICE, "example.Greeter"), + equalTo(RPC_SYSTEM, "grpc"), + equalTo( + RPC_GRPC_STATUS_CODE, (long) statusCode.value()), + equalTo(NETWORK_TYPE, "ipv4"))))); } testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( "io.opentelemetry.grpc-1.6", - "rpc.client.duration", - metric -> metric.hasUnit("ms"), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, server.getPort()), - equalTo(RPC_METHOD, "SayHello"), - equalTo(RPC_SERVICE, "example.Greeter"), - equalTo(RPC_SYSTEM, "grpc"), - equalTo(RPC_GRPC_STATUS_CODE, (long) statusCode.value()), - equalTo(NETWORK_TYPE, testLatestDeps() ? "ipv4" : null))); + metric -> + metric + .hasName("rpc.client.duration") + .hasUnit("ms") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, server.getPort()), + equalTo(RPC_METHOD, "SayHello"), + equalTo(RPC_SERVICE, "example.Greeter"), + equalTo(RPC_SYSTEM, "grpc"), + equalTo(RPC_GRPC_STATUS_CODE, (long) statusCode.value()), + equalTo( + NETWORK_TYPE, testLatestDeps() ? "ipv4" : null))))); testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( "io.opentelemetry.grpc-1.6", - "rpc.client.request.size", - metric -> metric.hasUnit("By"), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, server.getPort()), - equalTo(RPC_METHOD, "SayHello"), - equalTo(RPC_SERVICE, "example.Greeter"), - equalTo(RPC_SYSTEM, "grpc"), - equalTo(RPC_GRPC_STATUS_CODE, (long) statusCode.value()), - equalTo(NETWORK_TYPE, testLatestDeps() ? "ipv4" : null))); + metric -> + metric + .hasName("rpc.client.request.size") + .hasUnit("By") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, server.getPort()), + equalTo(RPC_METHOD, "SayHello"), + equalTo(RPC_SERVICE, "example.Greeter"), + equalTo(RPC_SYSTEM, "grpc"), + equalTo(RPC_GRPC_STATUS_CODE, (long) statusCode.value()), + equalTo( + NETWORK_TYPE, testLatestDeps() ? "ipv4" : null))))); if (hasSizeMetric) { testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( "io.opentelemetry.grpc-1.6", - "rpc.client.response.size", - metric -> metric.hasUnit("By"), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, server.getPort()), - equalTo(RPC_METHOD, "SayHello"), - equalTo(RPC_SERVICE, "example.Greeter"), - equalTo(RPC_SYSTEM, "grpc"), - equalTo(RPC_GRPC_STATUS_CODE, (long) statusCode.value()), - equalTo(NETWORK_TYPE, testLatestDeps() ? "ipv4" : null))); + metric -> + metric + .hasName("rpc.client.response.size") + .hasUnit("By") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, server.getPort()), + equalTo(RPC_METHOD, "SayHello"), + equalTo(RPC_SERVICE, "example.Greeter"), + equalTo(RPC_SYSTEM, "grpc"), + equalTo( + RPC_GRPC_STATUS_CODE, (long) statusCode.value()), + equalTo( + NETWORK_TYPE, testLatestDeps() ? "ipv4" : null))))); } } if (emitPreviewRpcSemconv()) { testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( "io.opentelemetry.grpc-1.6", - "rpc.server.call.duration", - metric -> metric.hasUnit("s"), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "grpc"), - equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, server.getPort()), - equalTo(RPC_METHOD, "example.Greeter/SayHello"), - equalTo(RPC_RESPONSE_STATUS_CODE, statusCode.name()), - equalTo(ERROR_TYPE, serverErrorType))); + metric -> + metric + .hasName("rpc.server.call.duration") + .hasUnit("s") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "grpc"), + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, server.getPort()), + equalTo(RPC_METHOD, "example.Greeter/SayHello"), + equalTo(RPC_RESPONSE_STATUS_CODE, statusCode.name()), + equalTo(ERROR_TYPE, serverErrorType))))); testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( "io.opentelemetry.grpc-1.6", - "rpc.client.call.duration", - metric -> metric.hasUnit("s"), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "grpc"), - equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, server.getPort()), - equalTo(RPC_METHOD, "example.Greeter/SayHello"), - equalTo(RPC_RESPONSE_STATUS_CODE, statusCode.name()), - equalTo(ERROR_TYPE, clientErrorType))); + metric -> + metric + .hasName("rpc.client.call.duration") + .hasUnit("s") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "grpc"), + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, server.getPort()), + equalTo(RPC_METHOD, "example.Greeter/SayHello"), + equalTo(RPC_RESPONSE_STATUS_CODE, statusCode.name()), + equalTo(ERROR_TYPE, clientErrorType))))); } } } diff --git a/instrumentation/iceberg-1.8/testing/src/main/java/io/opentelemetry/instrumentation/iceberg/v1_8/AbstractIcebergTest.java b/instrumentation/iceberg-1.8/testing/src/main/java/io/opentelemetry/instrumentation/iceberg/v1_8/AbstractIcebergTest.java index 36603392b3e0..3050fda468b0 100644 --- a/instrumentation/iceberg-1.8/testing/src/main/java/io/opentelemetry/instrumentation/iceberg/v1_8/AbstractIcebergTest.java +++ b/instrumentation/iceberg-1.8/testing/src/main/java/io/opentelemetry/instrumentation/iceberg/v1_8/AbstractIcebergTest.java @@ -110,17 +110,26 @@ void testCreateTelemetry() throws IOException { private void assertScanDurationMetric(ScanReport expectedReport) { testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( INSTRUMENTATION_NAME, - "iceberg.scan.planning.duration", - metricAssert -> metricAssert.hasUnit("s"), - point -> - point - .hasSumGreaterThan(0.0) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(longKey("iceberg.schema.id"), expectedReport.schemaId()), - equalTo(stringKey("iceberg.table.name"), expectedReport.tableName()))); + metricAssert -> + metricAssert + .hasName("iceberg.scan.planning.duration") + .hasUnit("s") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo( + longKey("iceberg.schema.id"), + expectedReport.schemaId()), + equalTo( + stringKey("iceberg.table.name"), + expectedReport.tableName()))))); } private void assertDataFilesCountMetrics(ScanReport expectedReport) { diff --git a/instrumentation/javalin/testing/src/main/java/io/opentelemetry/instrumentation/javalin/AbstractJavalinTest.java b/instrumentation/javalin/testing/src/main/java/io/opentelemetry/instrumentation/javalin/AbstractJavalinTest.java index f5dd553d3d63..57dd0f071e71 100644 --- a/instrumentation/javalin/testing/src/main/java/io/opentelemetry/instrumentation/javalin/AbstractJavalinTest.java +++ b/instrumentation/javalin/testing/src/main/java/io/opentelemetry/instrumentation/javalin/AbstractJavalinTest.java @@ -5,7 +5,6 @@ package io.opentelemetry.instrumentation.javalin; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; @@ -167,8 +166,9 @@ void testHttpRouteMetricWithPathParamResponseSuccessful() { metric -> metric .hasName("http.server.request.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> point.hasAttribute(HTTP_ROUTE, "/param/{id}")))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> point.hasAttribute(HTTP_ROUTE, "/param/{id}")))); } } diff --git a/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/datasource/JdbcTelemetryTest.java b/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/datasource/JdbcTelemetryTest.java index 86c49ec1aa40..73e91f613f52 100644 --- a/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/datasource/JdbcTelemetryTest.java +++ b/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/datasource/JdbcTelemetryTest.java @@ -6,7 +6,6 @@ package io.opentelemetry.instrumentation.jdbc.datasource; import static io.opentelemetry.instrumentation.testing.junit.db.DbClientMetricsTestUtil.assertDurationMetric; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.DbAttributes.DB_NAMESPACE; import static io.opentelemetry.semconv.DbAttributes.DB_OPERATION_BATCH_SIZE; @@ -175,9 +174,10 @@ void error(int errorCode, String sqlState, String expectedErrorType) throws SQLE metric -> metric .hasName("db.client.operation.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> point.hasAttribute(ERROR_TYPE, expectedErrorType)))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> point.hasAttribute(ERROR_TYPE, expectedErrorType)))); } private static Stream errorCodes() { diff --git a/instrumentation/jedis/jedis-2.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v2_0/ShardedJedisClientTest.java b/instrumentation/jedis/jedis-2.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v2_0/ShardedJedisClientTest.java index 34a3034e98e7..e49d71d2a987 100644 --- a/instrumentation/jedis/jedis-2.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v2_0/ShardedJedisClientTest.java +++ b/instrumentation/jedis/jedis-2.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v2_0/ShardedJedisClientTest.java @@ -5,7 +5,6 @@ package io.opentelemetry.javaagent.instrumentation.jedis.v2_0; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.DbAttributes.DB_NAMESPACE; import static io.opentelemetry.semconv.DbAttributes.DB_OPERATION_NAME; @@ -150,9 +149,10 @@ void commandFromAllShardsUsesConfiguredTarget() { metric -> metric .hasName("db.client.operation.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> point.hasAttribute(SERVER_ADDRESS, configuredTarget)))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> point.hasAttribute(SERVER_ADDRESS, configuredTarget)))); } @Test diff --git a/instrumentation/jedis/jedis-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v3_0/ShardedJedis30ClientTest.java b/instrumentation/jedis/jedis-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v3_0/ShardedJedis30ClientTest.java index f9d3b81db2b3..63e62200ec1b 100644 --- a/instrumentation/jedis/jedis-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v3_0/ShardedJedis30ClientTest.java +++ b/instrumentation/jedis/jedis-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v3_0/ShardedJedis30ClientTest.java @@ -6,7 +6,6 @@ package io.opentelemetry.javaagent.instrumentation.jedis.v3_0; import static io.opentelemetry.instrumentation.testing.junit.db.DbClientMetricsTestUtil.assertDurationMetric; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; import static io.opentelemetry.semconv.DbAttributes.DB_NAMESPACE; @@ -159,14 +158,15 @@ void commandFromAllShardsUsesConfiguredTarget() { metric -> metric .hasName("db.client.operation.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasAttribute(SERVER_ADDRESS, configuredTarget) - .hasAttributesSatisfying( - attributes -> - assertThat(attributes.asMap()) - .doesNotContainKey(SERVER_PORT))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasAttribute(SERVER_ADDRESS, configuredTarget) + .hasAttributesSatisfying( + attributes -> + assertThat(attributes.asMap()) + .doesNotContainKey(SERVER_PORT))))); } } diff --git a/instrumentation/jedis/jedis-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v4_0/Jedis40ClientTest.java b/instrumentation/jedis/jedis-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v4_0/Jedis40ClientTest.java index ca2177b9d6c9..68afc7385599 100644 --- a/instrumentation/jedis/jedis-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v4_0/Jedis40ClientTest.java +++ b/instrumentation/jedis/jedis-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v4_0/Jedis40ClientTest.java @@ -6,7 +6,6 @@ package io.opentelemetry.javaagent.instrumentation.jedis.v4_0; import static io.opentelemetry.instrumentation.testing.junit.db.DbClientMetricsTestUtil.assertDurationMetric; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.DbAttributes.DB_NAMESPACE; import static io.opentelemetry.semconv.DbAttributes.DB_OPERATION_BATCH_SIZE; @@ -160,13 +159,14 @@ void mappedCommandUsesConfiguredTarget() { metric -> metric .hasName("db.client.operation.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasAttribute(DB_OPERATION_NAME, "SET") - .hasAttribute(SERVER_ADDRESS, configuredHost) - .hasAttribute(SERVER_PORT, (long) configuredPort)))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasAttribute(DB_OPERATION_NAME, "SET") + .hasAttribute(SERVER_ADDRESS, configuredHost) + .hasAttribute(SERVER_PORT, (long) configuredPort)))); } @Test diff --git a/instrumentation/kubernetes-client-7.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/v7_0/KubernetesClientTest.java b/instrumentation/kubernetes-client-7.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/v7_0/KubernetesClientTest.java index cc644e78432a..871a638f04f8 100644 --- a/instrumentation/kubernetes-client-7.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/v7_0/KubernetesClientTest.java +++ b/instrumentation/kubernetes-client-7.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/v7_0/KubernetesClientTest.java @@ -104,11 +104,16 @@ void synchronousCall() throws ApiException { experimental("namespace")), equalTo(stringKey("kubernetes-client.name"), experimental("name"))))); - testing.waitAndAssertAnyHistogramPoints( + testing.waitAndAssertMetrics( "io.opentelemetry.kubernetes-client-7.0", - "http.client.request.duration", - metric -> metric.hasDescription("Duration of HTTP client requests.").hasUnit("s"), - point -> point.hasSumGreaterThan(0.0)); + metric -> + metric + .hasName("http.client.request.duration") + .hasDescription("Duration of HTTP client requests.") + .hasUnit("s") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying(point -> point.hasSumGreaterThan(0.0)))); } @Test diff --git a/instrumentation/kubernetes-client-7.0/javaagent/src/version20Test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/v7_0/KubernetesClientVer20Test.java b/instrumentation/kubernetes-client-7.0/javaagent/src/version20Test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/v7_0/KubernetesClientVer20Test.java index 67b9d47b3e1d..0696a7cd31f3 100644 --- a/instrumentation/kubernetes-client-7.0/javaagent/src/version20Test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/v7_0/KubernetesClientVer20Test.java +++ b/instrumentation/kubernetes-client-7.0/javaagent/src/version20Test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/v7_0/KubernetesClientVer20Test.java @@ -108,11 +108,16 @@ void synchronousCall() throws ApiException { experimental("namespace")), equalTo(stringKey("kubernetes-client.name"), experimental("name"))))); - testing.waitAndAssertAnyHistogramPoints( + testing.waitAndAssertMetrics( "io.opentelemetry.kubernetes-client-7.0", - "http.client.request.duration", - metric -> metric.hasDescription("Duration of HTTP client requests.").hasUnit("s"), - point -> point.hasSumGreaterThan(0.0)); + metric -> + metric + .hasName("http.client.request.duration") + .hasDescription("Duration of HTTP client requests.") + .hasUnit("s") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying(point -> point.hasSumGreaterThan(0.0)))); } @Test diff --git a/instrumentation/lettuce/lettuce-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceReactiveClientTest.java b/instrumentation/lettuce/lettuce-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceReactiveClientTest.java index 821a0ab079bf..29bcfb1cf545 100644 --- a/instrumentation/lettuce/lettuce-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceReactiveClientTest.java +++ b/instrumentation/lettuce/lettuce-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceReactiveClientTest.java @@ -7,7 +7,6 @@ import static io.opentelemetry.api.common.AttributeKey.booleanKey; import static io.opentelemetry.api.common.AttributeKey.longKey; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.javaagent.instrumentation.lettuce.v5_0.ExperimentalHelper.EXPERIMENTAL_ATTRIBUTES_ENABLED; import static io.opentelemetry.javaagent.instrumentation.lettuce.v5_0.ExperimentalHelper.experimental; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; @@ -438,10 +437,11 @@ void testNoResponseCommandFluxCancellationEndsSpanOnce() { span -> span.hasName("DEBUG " + host + ":" + port).hasKind(SpanKind.CLIENT))); testing.waitAndAssertMetrics( "io.opentelemetry.lettuce-5.0", - metric -> - metric + metrics -> + metrics .hasName("db.client.operation.duration") - .satisfies(hasHistogramPointsSatisfyingExactly(point -> point.hasCount(1)))); + .hasHistogramSatisfying( + histogram -> histogram.hasPointsSatisfying(point -> point.hasCount(1)))); }); } diff --git a/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceClientTest.java b/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceClientTest.java index a2d0e0a33251..6846fcece1db 100644 --- a/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceClientTest.java +++ b/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceClientTest.java @@ -5,7 +5,6 @@ package io.opentelemetry.instrumentation.lettuce.v5_1; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.instrumentation.testing.util.TestLatestDeps.testLatestDeps; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; @@ -104,13 +103,17 @@ protected void assertCommandErrorMetric(String errorType) { testing() .waitAndAssertMetrics( "io.opentelemetry.lettuce-5.1", - metric -> - metric - .hasName("db.client.operation.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfying(equalTo(ERROR_TYPE, errorType))))); + "db.client.operation.duration", + metrics -> + metrics.anySatisfy( + metric -> + assertThat(metric) + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfying( + equalTo(ERROR_TYPE, errorType)))))); } protected String spanName(String operation) { diff --git a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractDistributionSummaryHistogramGaugesTest.java b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractDistributionSummaryHistogramGaugesTest.java index 0366e137d455..318a346dc897 100644 --- a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractDistributionSummaryHistogramGaugesTest.java +++ b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractDistributionSummaryHistogramGaugesTest.java @@ -44,16 +44,22 @@ void testMicrometerHistogram() { // then testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( INSTRUMENTATION_NAME, - "testSummary", metric -> - metric.hasDescription("This is a test distribution summary").hasUnit("things"), - points -> - points - .hasSum(555.5) - .hasCount(4) - .hasAttributesSatisfyingExactly(equalTo(stringKey("tag"), "value"))); + metric + .hasName("testSummary") + .hasDescription("This is a test distribution summary") + .hasUnit("things") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + points -> + points + .hasSum(555.5) + .hasCount(4) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("tag"), "value"))))); testing() .waitAndAssertMetrics( INSTRUMENTATION_NAME, @@ -106,16 +112,22 @@ void testMicrometerPercentiles() { // then testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( INSTRUMENTATION_NAME, - "testSummary", metric -> - metric.hasDescription("This is a test distribution summary").hasUnit("things"), - point -> - point - .hasSum(150) - .hasCount(2) - .hasAttributesSatisfyingExactly(equalTo(stringKey("tag"), "value"))); + metric + .hasName("testSummary") + .hasDescription("This is a test distribution summary") + .hasUnit("things") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(150) + .hasCount(2) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("tag"), "value"))))); testing() .waitAndAssertMetrics( INSTRUMENTATION_NAME, diff --git a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractDistributionSummaryTest.java b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractDistributionSummaryTest.java index 32ee4d8c7d1e..ee0b50d3bb95 100644 --- a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractDistributionSummaryTest.java +++ b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractDistributionSummaryTest.java @@ -7,7 +7,6 @@ import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.instrumentation.micrometer.v1_5.AbstractCounterTest.INSTRUMENTATION_NAME; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import io.micrometer.core.instrument.DistributionSummary; @@ -45,17 +44,23 @@ void testMicrometerDistributionSummary() { // then testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( INSTRUMENTATION_NAME, - "testSummary", metric -> - metric.hasDescription("This is a test distribution summary").hasUnit("things"), - point -> - point - .hasSum(7) - .hasCount(3) - .hasAttributesSatisfyingExactly(equalTo(stringKey("tag"), "value")) - .hasBucketBoundaries(NO_BUCKETS)); + metric + .hasName("testSummary") + .hasDescription("This is a test distribution summary") + .hasUnit("things") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(7) + .hasCount(3) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("tag"), "value")) + .hasBucketBoundaries(NO_BUCKETS)))); // micrometer gauge histogram is not emitted testing() @@ -73,14 +78,15 @@ void testMicrometerDistributionSummary() { metric -> metric .hasName("testSummary") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(7) - .hasCount(3) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("tag"), "value"))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(7) + .hasCount(3) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("tag"), "value"))))); } @Test @@ -103,18 +109,24 @@ void testMicrometerDistributionSummaryWithCustomBuckets() { // then testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( INSTRUMENTATION_NAME, - "testSummaryWithCustomBuckets", metric -> - metric.hasDescription("This is a test distribution summary").hasUnit("things"), - points -> - points - .hasSum(555.5) - .hasCount(4) - .hasAttributesSatisfyingExactly(equalTo(stringKey("tag"), "value")) - .hasBucketBoundaries(1, 10, 100, 1000) - .hasBucketCounts(1, 1, 1, 1, 0)); + metric + .hasName("testSummaryWithCustomBuckets") + .hasDescription("This is a test distribution summary") + .hasUnit("things") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + points -> + points + .hasSum(555.5) + .hasCount(4) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("tag"), "value")) + .hasBucketBoundaries(1, 10, 100, 1000) + .hasBucketCounts(1, 1, 1, 1, 0)))); // micrometer gauge histogram is not emitted testing() diff --git a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractNamingConventionTest.java b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractNamingConventionTest.java index 672acefed9a3..e3ae8cf73f2a 100644 --- a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractNamingConventionTest.java +++ b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractNamingConventionTest.java @@ -7,7 +7,6 @@ import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.instrumentation.micrometer.v1_5.AbstractCounterTest.INSTRUMENTATION_NAME; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static java.util.Collections.singletonList; import static java.util.concurrent.TimeUnit.SECONDS; @@ -91,11 +90,12 @@ void renameDistributionSummary() { metric -> metric .hasName("test.renamedSummary") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(stringKey("test.tag"), "test.value"))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(stringKey("test.tag"), "test.value"))))); } @Test @@ -247,10 +247,11 @@ void renameTimer() { metric -> metric .hasName("test.renamedTimer") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(stringKey("test.tag"), "test.value"))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(stringKey("test.tag"), "test.value"))))); } } diff --git a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractPrometheusModeTest.java b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractPrometheusModeTest.java index 36605f33316e..2d78a0b1a232 100644 --- a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractPrometheusModeTest.java +++ b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractPrometheusModeTest.java @@ -84,15 +84,22 @@ void testDistributionSummary() { // then testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( INSTRUMENTATION_NAME, - "testPrometheusSummary.items", - metric -> metric.hasDescription("This is a test summary").hasUnit("items"), - point -> - point - .hasSum(54) - .hasCount(2) - .hasAttributesSatisfyingExactly(equalTo(stringKey("tag"), "value"))); + metric -> + metric + .hasName("testPrometheusSummary.items") + .hasDescription("This is a test summary") + .hasUnit("items") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(54) + .hasCount(2) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("tag"), "value"))))); } @Test @@ -308,15 +315,22 @@ void testTimer() { // then testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( INSTRUMENTATION_NAME, - "testPrometheusTimer.seconds", - metric -> metric.hasDescription("This is a test timer").hasUnit("s"), - point -> - point - .hasSum(16.789) - .hasCount(3) - .hasAttributesSatisfyingExactly(equalTo(stringKey("tag"), "value"))); + metric -> + metric + .hasName("testPrometheusTimer.seconds") + .hasDescription("This is a test timer") + .hasUnit("s") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(16.789) + .hasCount(3) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("tag"), "value"))))); } @Test @@ -373,20 +387,29 @@ void testTimerCustomBucketBoundaryFormatting() { // then testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( INSTRUMENTATION_NAME, - "testPrometheusTimerBoundary.seconds", - metric -> metric.hasDescription("This is a test timer").hasUnit("s"), - point -> - point - .hasSum(0.1) - .hasCount(1) - .hasAttributesSatisfyingExactly(equalTo(stringKey("tag"), "value")) - .satisfies( - pointData -> { - assertThat(pointData.getBoundaries()).hasSize(1); - assertThat(Double.toString(pointData.getBoundaries().get(0))) - .isEqualTo("0.3"); - })); + metric -> + metric + .hasName("testPrometheusTimerBoundary.seconds") + .hasDescription("This is a test timer") + .hasUnit("s") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(0.1) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("tag"), "value")) + .satisfies( + pointData -> { + assertThat(pointData.getBoundaries()).hasSize(1); + assertThat( + Double.toString( + pointData.getBoundaries().get(0))) + .isEqualTo("0.3"); + })))); } } diff --git a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerHistogramGaugesTest.java b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerHistogramGaugesTest.java index 3613e873f72d..d206a385ac8a 100644 --- a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerHistogramGaugesTest.java +++ b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerHistogramGaugesTest.java @@ -45,15 +45,22 @@ void testMicrometerHistogram() { // then testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( INSTRUMENTATION_NAME, - "testTimer", - metric -> metric.hasDescription("This is a test timer").hasUnit("s"), - point -> - point - .hasSum(555.5) - .hasCount(4) - .hasAttributesSatisfyingExactly(equalTo(stringKey("tag"), "value"))); + metric -> + metric + .hasName("testTimer") + .hasDescription("This is a test timer") + .hasUnit("s") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(555.5) + .hasCount(4) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("tag"), "value"))))); testing() .waitAndAssertMetrics( INSTRUMENTATION_NAME, @@ -105,15 +112,22 @@ void testMicrometerPercentiles() { // then testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( INSTRUMENTATION_NAME, - "testTimer", - metric -> metric.hasDescription("This is a test timer").hasUnit("s"), - point -> - point - .hasSum(0.55) - .hasCount(2) - .hasAttributesSatisfyingExactly(equalTo(stringKey("tag"), "value"))); + metric -> + metric + .hasName("testTimer") + .hasDescription("This is a test timer") + .hasUnit("s") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(0.55) + .hasCount(2) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("tag"), "value"))))); testing() .waitAndAssertMetrics( INSTRUMENTATION_NAME, diff --git a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerMillisecondsTest.java b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerMillisecondsTest.java index 0d9906d1157a..8a6d1357d8f3 100644 --- a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerMillisecondsTest.java +++ b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerMillisecondsTest.java @@ -38,15 +38,22 @@ void testTimerWithBaseUnitMilliseconds() { // then testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( INSTRUMENTATION_NAME, - "testTimerMilliseconds", - metric -> metric.hasDescription("This is a test timer").hasUnit("ms"), - point -> - point - .hasSum(23_345) - .hasCount(3) - .hasAttributesSatisfyingExactly(equalTo(stringKey("tag"), "value"))); + metric -> + metric + .hasName("testTimerMilliseconds") + .hasDescription("This is a test timer") + .hasUnit("ms") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(23_345) + .hasCount(3) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("tag"), "value"))))); // when Metrics.globalRegistry.remove(timer); diff --git a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerTest.java b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerTest.java index cf4175846d32..2658fc4b1122 100644 --- a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerTest.java +++ b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerTest.java @@ -45,16 +45,23 @@ void testTimer() { // then testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( INSTRUMENTATION_NAME, - "testTimer", - metric -> metric.hasDescription("This is a test timer").hasUnit("s"), - point -> - point - .hasSum(42) - .hasCount(1) - .hasAttributesSatisfyingExactly(equalTo(stringKey("tag"), "value")) - .hasBucketBoundaries(NO_BUCKETS)); + metric -> + metric + .hasName("testTimer") + .hasDescription("This is a test timer") + .hasUnit("s") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(42) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("tag"), "value")) + .hasBucketBoundaries(NO_BUCKETS)))); // micrometer gauge histogram is not emitted testing() @@ -81,11 +88,20 @@ void testNanoPrecision() { // then testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( INSTRUMENTATION_NAME, - "testNanoTimer", - metric -> metric.hasUnit("s"), - point -> point.hasSum(0.001234).hasCount(1).hasAttributes(Attributes.empty())); + metric -> + metric + .hasName("testNanoTimer") + .hasUnit("s") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(0.001234) + .hasCount(1) + .hasAttributes(Attributes.empty())))); } @Test @@ -111,17 +127,24 @@ void testMicrometerTimerWithCustomBuckets() { // then testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( INSTRUMENTATION_NAME, - "testTimerWithCustomBuckets", - metric -> metric.hasDescription("This is a test timer").hasUnit("s"), - point -> - point - .hasSum(555.5) - .hasCount(4) - .hasAttributesSatisfyingExactly(equalTo(stringKey("tag"), "value")) - .satisfies(hasBucketBoundaries(1, 10, 100, 1_000)) - .hasBucketCounts(1, 1, 1, 1, 0)); + metric -> + metric + .hasName("testTimerWithCustomBuckets") + .hasDescription("This is a test timer") + .hasUnit("s") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(555.5) + .hasCount(4) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("tag"), "value")) + .satisfies(hasBucketBoundaries(1, 10, 100, 1_000)) + .hasBucketCounts(1, 1, 1, 1, 0)))); } private static ThrowingConsumer hasBucketBoundaries(double... buckets) { diff --git a/instrumentation/mongo/mongo-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/mongo/v4_0/MongoConfiguredTargetTest.java b/instrumentation/mongo/mongo-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/mongo/v4_0/MongoConfiguredTargetTest.java index 13a70c1e9a0c..06112e14ea42 100644 --- a/instrumentation/mongo/mongo-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/mongo/v4_0/MongoConfiguredTargetTest.java +++ b/instrumentation/mongo/mongo-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/mongo/v4_0/MongoConfiguredTargetTest.java @@ -6,7 +6,6 @@ package io.opentelemetry.javaagent.instrumentation.mongo.v4_0; import static io.opentelemetry.instrumentation.testing.junit.db.DbClientMetricsTestUtil.assertDurationMetric; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.semconv.DbAttributes.DB_COLLECTION_NAME; import static io.opentelemetry.semconv.DbAttributes.DB_NAMESPACE; import static io.opentelemetry.semconv.DbAttributes.DB_OPERATION_NAME; @@ -97,10 +96,11 @@ void severalSeedsAreTheOperationDurationLogicalServer() { metric -> metric .hasName("db.client.operation.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttribute( - SERVER_ADDRESS, "db1.example:27017,db2.example:27018")))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttribute( + SERVER_ADDRESS, "db1.example:27017,db2.example:27018")))); } } diff --git a/instrumentation/nats/nats-2.17/testing/src/main/java/io/opentelemetry/instrumentation/nats/v2_17/AbstractNatsTest.java b/instrumentation/nats/nats-2.17/testing/src/main/java/io/opentelemetry/instrumentation/nats/v2_17/AbstractNatsTest.java index b4ef59eb5d58..c6120d167e44 100644 --- a/instrumentation/nats/nats-2.17/testing/src/main/java/io/opentelemetry/instrumentation/nats/v2_17/AbstractNatsTest.java +++ b/instrumentation/nats/nats-2.17/testing/src/main/java/io/opentelemetry/instrumentation/nats/v2_17/AbstractNatsTest.java @@ -44,24 +44,31 @@ abstract class AbstractNatsTest { void assertProducerMetrics(String operationName, String destination, String errorType) { testing() - .waitAndAssertHistogramPoints( + .waitAndAssertMetrics( INSTRUMENTATION_NAME, "messaging.client.operation.duration", - metric -> - metric - .hasDescription( - "Duration of messaging operation initiated by a producer or consumer client.") - .hasUnit("s"), - point -> - point - .hasSumGreaterThan(0) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, operationName), - equalTo(MESSAGING_SYSTEM, "nats"), - equalTo(ERROR_TYPE, errorType), - equalTo(MESSAGING_DESTINATION_NAME, destination), - equalTo(MESSAGING_OPERATION_TYPE, "send")) - .hasBucketBoundaries(DURATION_BUCKETS)); + metrics -> + metrics.satisfiesExactly( + metric -> + assertThat(metric) + .hasUnit("s") + .hasDescription( + "Duration of messaging operation initiated by a producer or consumer client.") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0) + .hasAttributesSatisfyingExactly( + equalTo( + MESSAGING_OPERATION_NAME, operationName), + equalTo(MESSAGING_SYSTEM, "nats"), + equalTo(ERROR_TYPE, errorType), + equalTo( + MESSAGING_DESTINATION_NAME, destination), + equalTo(MESSAGING_OPERATION_TYPE, "send")) + .hasBucketBoundaries(DURATION_BUCKETS))))); testing() .waitAndAssertMetrics( INSTRUMENTATION_NAME, @@ -92,19 +99,28 @@ void assertProducerMetrics(String operationName, String destination, String erro void assertProcessMetrics(String destination, String errorType) { testing() - .waitAndAssertHistogramPoints( + .waitAndAssertMetrics( INSTRUMENTATION_NAME, "messaging.process.duration", - metric -> metric.hasDescription("Duration of processing operation.").hasUnit("s"), - point -> - point - .hasSumGreaterThan(0) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "process"), - equalTo(MESSAGING_SYSTEM, "nats"), - equalTo(ERROR_TYPE, errorType), - equalTo(MESSAGING_DESTINATION_NAME, destination)) - .hasBucketBoundaries(DURATION_BUCKETS)); + metrics -> + metrics.satisfiesExactly( + metric -> + assertThat(metric) + .hasUnit("s") + .hasDescription("Duration of processing operation.") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "process"), + equalTo(MESSAGING_SYSTEM, "nats"), + equalTo(ERROR_TYPE, errorType), + equalTo( + MESSAGING_DESTINATION_NAME, destination)) + .hasBucketBoundaries(DURATION_BUCKETS))))); testing() .waitAndAssertMetrics( INSTRUMENTATION_NAME, diff --git a/instrumentation/openai/openai-java-1.1/library/src/test/java/io/opentelemetry/instrumentation/openai/v1_1/ChatTest.java b/instrumentation/openai/openai-java-1.1/library/src/test/java/io/opentelemetry/instrumentation/openai/v1_1/ChatTest.java index 5263347f92ef..dd6ab772df2c 100644 --- a/instrumentation/openai/openai-java-1.1/library/src/test/java/io/opentelemetry/instrumentation/openai/v1_1/ChatTest.java +++ b/instrumentation/openai/openai-java-1.1/library/src/test/java/io/opentelemetry/instrumentation/openai/v1_1/ChatTest.java @@ -5,7 +5,6 @@ package io.opentelemetry.instrumentation.openai.v1_1; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; import static io.opentelemetry.semconv.incubating.EventIncubatingAttributes.EVENT_NAME; @@ -132,39 +131,44 @@ void basicNoCaptureContent() { metric -> metric .hasName("gen_ai.client.operation.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL)))), + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo( + GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL)))), metric -> metric .hasName("gen_ai.client.token.usage") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(22.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, INPUT)), - point -> - point - .hasSum(2.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(22.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo( + GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, INPUT)), + point -> + point + .hasSum(2.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo( + GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT))))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -230,39 +234,44 @@ void multipleChoicesNoCaptureContent() { metric -> metric .hasName("gen_ai.client.operation.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL)))), + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo( + GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL)))), metric -> metric .hasName("gen_ai.client.token.usage") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(22.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, INPUT)), - point -> - point - .hasSum(7.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(22.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo( + GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, INPUT)), + point -> + point + .hasSum(7.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo( + GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT))))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -357,39 +366,44 @@ void toolCallsNoCaptureContent() { metric -> metric .hasName("gen_ai.client.operation.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL)))), + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo( + GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL)))), metric -> metric .hasName("gen_ai.client.token.usage") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(67) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, INPUT)), - point -> - point - .hasSum(46.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(67) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo( + GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, INPUT)), + point -> + point + .hasSum(46.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo( + GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT))))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -477,39 +491,44 @@ void toolCallsNoCaptureContent() { metric -> metric .hasName("gen_ai.client.operation.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL)))), + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo( + GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL)))), metric -> metric .hasName("gen_ai.client.token.usage") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(99) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, INPUT)), - point -> - point - .hasSum(25.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(99) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo( + GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, INPUT)), + point -> + point + .hasSum(25.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo( + GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT))))); SpanContext spanCtx1 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -624,17 +643,19 @@ void streamNoCaptureContent() { metric -> metric .hasName("gen_ai.client.operation.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo( + GEN_AI_RESPONSE_MODEL, + TEST_CHAT_RESPONSE_MODEL))))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -719,17 +740,19 @@ void streamMultipleChoicesNoCaptureContent() { metric -> metric .hasName("gen_ai.client.operation.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo( + GEN_AI_RESPONSE_MODEL, + TEST_CHAT_RESPONSE_MODEL))))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -820,17 +843,19 @@ void streamToolCallsNoCaptureContent() { metric -> metric .hasName("gen_ai.client.operation.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo( + GEN_AI_RESPONSE_MODEL, + TEST_CHAT_RESPONSE_MODEL))))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -921,17 +946,19 @@ void streamToolCallsNoCaptureContent() { metric -> metric .hasName("gen_ai.client.operation.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo( + GEN_AI_RESPONSE_MODEL, + TEST_CHAT_RESPONSE_MODEL))))); SpanContext spanCtx1 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); diff --git a/instrumentation/openai/openai-java-1.1/testing/src/main/java/io/opentelemetry/instrumentation/openai/v1_1/AbstractChatTest.java b/instrumentation/openai/openai-java-1.1/testing/src/main/java/io/opentelemetry/instrumentation/openai/v1_1/AbstractChatTest.java index 8d29404c8bbf..455d8e2f712a 100644 --- a/instrumentation/openai/openai-java-1.1/testing/src/main/java/io/opentelemetry/instrumentation/openai/v1_1/AbstractChatTest.java +++ b/instrumentation/openai/openai-java-1.1/testing/src/main/java/io/opentelemetry/instrumentation/openai/v1_1/AbstractChatTest.java @@ -6,7 +6,6 @@ package io.opentelemetry.instrumentation.openai.v1_1; import static io.opentelemetry.instrumentation.api.internal.SemconvExceptionSignal.emitExceptionAsSpanEvents; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; import static io.opentelemetry.semconv.ErrorAttributes.ERROR_TYPE; @@ -211,39 +210,44 @@ void basic() { metric -> metric .hasName("gen_ai.client.operation.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL)))), + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo( + GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL)))), metric -> metric .hasName("gen_ai.client.token.usage") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(22.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, INPUT)), - point -> - point - .hasSum(2.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(22.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo( + GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, INPUT)), + point -> + point + .hasSum(2.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo( + GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT))))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -374,39 +378,44 @@ void allTheClientOptions() { metric -> metric .hasName("gen_ai.client.operation.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL)))), + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo( + GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL)))), metric -> metric .hasName("gen_ai.client.token.usage") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(22.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, INPUT)), - point -> - point - .hasSum(3.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(22.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo( + GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, INPUT)), + point -> + point + .hasSum(3.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo( + GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT))))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -474,39 +483,44 @@ void multipleChoices() { metric -> metric .hasName("gen_ai.client.operation.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL)))), + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo( + GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL)))), metric -> metric .hasName("gen_ai.client.token.usage") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(22.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, INPUT)), - point -> - point - .hasSum(7.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(22.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo( + GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, INPUT)), + point -> + point + .hasSum(7.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo( + GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT))))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -604,39 +618,44 @@ void toolCalls() { metric -> metric .hasName("gen_ai.client.operation.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL)))), + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo( + GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL)))), metric -> metric .hasName("gen_ai.client.token.usage") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(67) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, INPUT)), - point -> - point - .hasSum(46.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(67) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo( + GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, INPUT)), + point -> + point + .hasSum(46.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo( + GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT))))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -751,39 +770,44 @@ void toolCalls() { metric -> metric .hasName("gen_ai.client.operation.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL)))), + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo( + GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL)))), metric -> metric .hasName("gen_ai.client.token.usage") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(99) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, INPUT)), - point -> - point - .hasSum(25.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(99) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo( + GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, INPUT)), + point -> + point + .hasSum(25.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo( + GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT))))); SpanContext spanCtx1 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -920,16 +944,17 @@ void connectionError() { metric -> metric .hasName("gen_ai.client.operation.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(ERROR_TYPE, OpenAIIoException.class.getName()), - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(ERROR_TYPE, OpenAIIoException.class.getName()), + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL))))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -987,17 +1012,19 @@ void stream() { metric -> metric .hasName("gen_ai.client.operation.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo( + GEN_AI_RESPONSE_MODEL, + TEST_CHAT_RESPONSE_MODEL))))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -1112,39 +1139,44 @@ void streamIncludeUsage() { metric -> metric .hasName("gen_ai.client.operation.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL)))), + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo( + GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL)))), metric -> metric .hasName("gen_ai.client.token.usage") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(22.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, INPUT)), - point -> - point - .hasSum(3.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(22.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo( + GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, INPUT)), + point -> + point + .hasSum(3.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo( + GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT))))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -1229,17 +1261,19 @@ void streamMultipleChoices() { metric -> metric .hasName("gen_ai.client.operation.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo( + GEN_AI_RESPONSE_MODEL, + TEST_CHAT_RESPONSE_MODEL))))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -1382,17 +1416,19 @@ void streamToolCalls() { metric -> metric .hasName("gen_ai.client.operation.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo( + GEN_AI_RESPONSE_MODEL, + TEST_CHAT_RESPONSE_MODEL))))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -1513,17 +1549,19 @@ void streamToolCalls() { metric -> metric .hasName("gen_ai.client.operation.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo( + GEN_AI_RESPONSE_MODEL, + TEST_CHAT_RESPONSE_MODEL))))); SpanContext spanCtx1 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -1661,16 +1699,17 @@ void streamConnectionError() { metric -> metric .hasName("gen_ai.client.operation.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(ERROR_TYPE, OpenAIIoException.class.getName()), - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(ERROR_TYPE, OpenAIIoException.class.getName()), + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL))))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); diff --git a/instrumentation/openai/openai-java-1.1/testing/src/main/java/io/opentelemetry/instrumentation/openai/v1_1/AbstractEmbeddingsTest.java b/instrumentation/openai/openai-java-1.1/testing/src/main/java/io/opentelemetry/instrumentation/openai/v1_1/AbstractEmbeddingsTest.java index 713e43a7f8d6..f3d3cdab7099 100644 --- a/instrumentation/openai/openai-java-1.1/testing/src/main/java/io/opentelemetry/instrumentation/openai/v1_1/AbstractEmbeddingsTest.java +++ b/instrumentation/openai/openai-java-1.1/testing/src/main/java/io/opentelemetry/instrumentation/openai/v1_1/AbstractEmbeddingsTest.java @@ -6,7 +6,6 @@ package io.opentelemetry.instrumentation.openai.v1_1; import static io.opentelemetry.instrumentation.api.internal.SemconvExceptionSignal.emitExceptionAsSpanEvents; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; @@ -118,30 +117,32 @@ void basic() { metric -> metric .hasName("gen_ai.client.operation.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, EMBEDDINGS), - equalTo(GEN_AI_REQUEST_MODEL, MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, MODEL)))), + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, EMBEDDINGS), + equalTo(GEN_AI_REQUEST_MODEL, MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, MODEL)))), metric -> metric .hasName("gen_ai.client.token.usage") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(4.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, EMBEDDINGS), - equalTo(GEN_AI_REQUEST_MODEL, MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, MODEL), - equalTo(GEN_AI_TOKEN_TYPE, INPUT))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(4.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, EMBEDDINGS), + equalTo(GEN_AI_REQUEST_MODEL, MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, MODEL), + equalTo(GEN_AI_TOKEN_TYPE, INPUT))))); } @Test @@ -181,30 +182,32 @@ GEN_AI_REQUEST_ENCODING_FORMATS, singletonList("base64")), metric -> metric .hasName("gen_ai.client.operation.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, EMBEDDINGS), - equalTo(GEN_AI_REQUEST_MODEL, MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, MODEL)))), + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, EMBEDDINGS), + equalTo(GEN_AI_REQUEST_MODEL, MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, MODEL)))), metric -> metric .hasName("gen_ai.client.token.usage") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(4.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, EMBEDDINGS), - equalTo(GEN_AI_REQUEST_MODEL, MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, MODEL), - equalTo(GEN_AI_TOKEN_TYPE, INPUT))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(4.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, EMBEDDINGS), + equalTo(GEN_AI_REQUEST_MODEL, MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, MODEL), + equalTo(GEN_AI_TOKEN_TYPE, INPUT))))); } @Test @@ -263,15 +266,16 @@ void connectionError() { metric -> metric .hasName("gen_ai.client.operation.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(ERROR_TYPE, OpenAIIoException.class.getName()), - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, EMBEDDINGS), - equalTo(GEN_AI_REQUEST_MODEL, MODEL))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(ERROR_TYPE, OpenAIIoException.class.getName()), + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, EMBEDDINGS), + equalTo(GEN_AI_REQUEST_MODEL, MODEL))))); } } diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/MeterTest.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/MeterTest.java index 857a5eca4253..6ebe4174f8e6 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/MeterTest.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/MeterTest.java @@ -337,19 +337,26 @@ void longHistogram() { instrument.record(5, Attributes.of(stringKey("q"), "r")); instrument.record(6, Attributes.of(stringKey("q"), "r")); - testing.waitAndAssertAnyHistogramPoints( + testing.waitAndAssertMetrics( instrumentationName, - "test", metric -> metric + .hasName("test") .hasDescription("d") + .hasUnit("u") .hasInstrumentationScope( InstrumentationScopeInfo.builder(instrumentationName) .setVersion("1.2.3") .setSchemaUrl("http://schema.org") .build()) - .hasUnit("u"), - point -> point.hasSum(11.0).hasAttributesSatisfyingExactly(equalTo(stringKey("q"), "r"))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(11.0) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("q"), "r"))))); } @Test @@ -360,19 +367,26 @@ void doubleHistogram() { instrument.record(5.5, Attributes.of(stringKey("q"), "r")); instrument.record(6.6, Attributes.of(stringKey("q"), "r")); - testing.waitAndAssertAnyHistogramPoints( + testing.waitAndAssertMetrics( instrumentationName, - "test", metric -> metric + .hasName("test") .hasDescription("d") + .hasUnit("u") .hasInstrumentationScope( InstrumentationScopeInfo.builder(instrumentationName) .setVersion("1.2.3") .setSchemaUrl("http://schema.org") .build()) - .hasUnit("u"), - point -> point.hasSum(12.1).hasAttributesSatisfyingExactly(equalTo(stringKey("q"), "r"))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(12.1) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("q"), "r"))))); } @Test diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.31/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_31/metrics/MeterTest.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.31/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_31/metrics/MeterTest.java index f0158b00e9fe..acd7d2d25b35 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.31/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_31/metrics/MeterTest.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.31/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_31/metrics/MeterTest.java @@ -225,23 +225,27 @@ void longHistogram() { instrument.record(5, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); instrument.record(6, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); - testing.waitAndAssertAnyHistogramPoints( + testing.waitAndAssertMetrics( instrumentationName, - "test", metric -> metric + .hasName("test") .hasDescription("d") .hasUnit("u") .hasInstrumentationScope( InstrumentationScopeInfo.builder(instrumentationName) .setVersion("1.2.3") .setSchemaUrl("http://schema.org") - .build()), - point -> - point - .hasSum(11.0) - .hasBucketBoundaries(10.0) - .hasAttributesSatisfyingExactly(equalTo(stringKey("test"), "test"))); + .build()) + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(11.0) + .hasBucketBoundaries(10.0) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("test"), "test"))))); } @Test @@ -258,23 +262,27 @@ void doubleHistogram() { instrument.record(5.5, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); instrument.record(6.6, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); - testing.waitAndAssertAnyHistogramPoints( + testing.waitAndAssertMetrics( instrumentationName, - "test", metric -> metric + .hasName("test") .hasDescription("d") .hasUnit("u") .hasInstrumentationScope( InstrumentationScopeInfo.builder(instrumentationName) .setVersion("1.2.3") .setSchemaUrl("http://schema.org") - .build()), - point -> - point - .hasSum(12.1) - .hasBucketBoundaries(10.0) - .hasAttributesSatisfyingExactly(equalTo(stringKey("test"), "test"))); + .build()) + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(12.1) + .hasBucketBoundaries(10.0) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("test"), "test"))))); } @Test diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/incubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/incubator/metrics/MeterTest.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/incubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/incubator/metrics/MeterTest.java index 1ce5fe68dd3a..7dd5db361405 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/incubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/incubator/metrics/MeterTest.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/incubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/incubator/metrics/MeterTest.java @@ -225,23 +225,27 @@ void longHistogram() { instrument.record(5, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); instrument.record(6, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); - testing.waitAndAssertAnyHistogramPoints( + testing.waitAndAssertMetrics( instrumentationName, - "test", metric -> metric + .hasName("test") .hasDescription("d") .hasUnit("u") .hasInstrumentationScope( InstrumentationScopeInfo.builder(instrumentationName) .setVersion("1.2.3") .setSchemaUrl("http://schema.org") - .build()), - point -> - point - .hasSum(11.0) - .hasBucketBoundaries(10.0) - .hasAttributesSatisfyingExactly(equalTo(stringKey("test"), "test"))); + .build()) + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(11.0) + .hasBucketBoundaries(10.0) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("test"), "test"))))); } @Test @@ -258,23 +262,27 @@ void doubleHistogram() { instrument.record(5.5, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); instrument.record(6.6, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); - testing.waitAndAssertAnyHistogramPoints( + testing.waitAndAssertMetrics( instrumentationName, - "test", metric -> metric + .hasName("test") .hasDescription("d") .hasUnit("u") .hasInstrumentationScope( InstrumentationScopeInfo.builder(instrumentationName) .setVersion("1.2.3") .setSchemaUrl("http://schema.org") - .build()), - point -> - point - .hasSum(12.1) - .hasBucketBoundaries(10.0) - .hasAttributesSatisfyingExactly(equalTo(stringKey("test"), "test"))); + .build()) + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(12.1) + .hasBucketBoundaries(10.0) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("test"), "test"))))); } @Test diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/metrics/MeterTest.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/metrics/MeterTest.java index 36f7eb9dab23..0a1f8a2bde9c 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/metrics/MeterTest.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/metrics/MeterTest.java @@ -64,23 +64,27 @@ void longHistogram() { instrument.record(5, Attributes.of(stringKey("test"), "test")); instrument.record(6, Attributes.of(stringKey("test"), "test")); - testing.waitAndAssertAnyHistogramPoints( + testing.waitAndAssertMetrics( instrumentationName, - "test", metric -> metric + .hasName("test") .hasDescription("d") .hasUnit("u") .hasInstrumentationScope( InstrumentationScopeInfo.builder(instrumentationName) .setVersion("1.2.3") .setSchemaUrl("http://schema.org") - .build()), - point -> - point - .hasSum(11.0) - .hasBucketBoundaries(10.0) - .hasAttributesSatisfyingExactly(equalTo(stringKey("test"), "test"))); + .build()) + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(11.0) + .hasBucketBoundaries(10.0) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("test"), "test"))))); } @Test @@ -94,22 +98,26 @@ void doubleHistogram() { instrument.record(5.5, Attributes.of(stringKey("test"), "test")); instrument.record(6.6, Attributes.of(stringKey("test"), "test")); - testing.waitAndAssertAnyHistogramPoints( + testing.waitAndAssertMetrics( instrumentationName, - "test", metric -> metric + .hasName("test") .hasDescription("d") .hasUnit("u") .hasInstrumentationScope( InstrumentationScopeInfo.builder(instrumentationName) .setVersion("1.2.3") .setSchemaUrl("http://schema.org") - .build()), - point -> - point - .hasSum(12.1) - .hasBucketBoundaries(10.0) - .hasAttributesSatisfyingExactly(equalTo(stringKey("test"), "test"))); + .build()) + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(12.1) + .hasBucketBoundaries(10.0) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("test"), "test"))))); } } diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/incubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/MeterTest.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/incubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/MeterTest.java index db83f7c10071..c9cf6cc2a2b3 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/incubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/MeterTest.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/incubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/MeterTest.java @@ -225,23 +225,27 @@ void longHistogram() { instrument.record(5, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); instrument.record(6, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); - testing.waitAndAssertAnyHistogramPoints( + testing.waitAndAssertMetrics( instrumentationName, - "test", metric -> metric + .hasName("test") .hasDescription("d") .hasUnit("u") .hasInstrumentationScope( InstrumentationScopeInfo.builder(instrumentationName) .setVersion("1.2.3") .setSchemaUrl("http://schema.org") - .build()), - point -> - point - .hasSum(11.0) - .hasBucketBoundaries(10.0) - .hasAttributesSatisfyingExactly(equalTo(stringKey("test"), "test"))); + .build()) + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(11.0) + .hasBucketBoundaries(10.0) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("test"), "test"))))); } @Test @@ -258,23 +262,27 @@ void doubleHistogram() { instrument.record(5.5, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); instrument.record(6.6, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); - testing.waitAndAssertAnyHistogramPoints( + testing.waitAndAssertMetrics( instrumentationName, - "test", metric -> metric + .hasName("test") .hasDescription("d") .hasUnit("u") .hasInstrumentationScope( InstrumentationScopeInfo.builder(instrumentationName) .setVersion("1.2.3") .setSchemaUrl("http://schema.org") - .build()), - point -> - point - .hasSum(12.1) - .hasBucketBoundaries(10.0) - .hasAttributesSatisfyingExactly(equalTo(stringKey("test"), "test"))); + .build()) + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(12.1) + .hasBucketBoundaries(10.0) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("test"), "test"))))); } @Test diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/oldAndNewIncubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/MeterTest.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/oldAndNewIncubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/MeterTest.java index db83f7c10071..c9cf6cc2a2b3 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/oldAndNewIncubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/MeterTest.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/oldAndNewIncubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/MeterTest.java @@ -225,23 +225,27 @@ void longHistogram() { instrument.record(5, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); instrument.record(6, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); - testing.waitAndAssertAnyHistogramPoints( + testing.waitAndAssertMetrics( instrumentationName, - "test", metric -> metric + .hasName("test") .hasDescription("d") .hasUnit("u") .hasInstrumentationScope( InstrumentationScopeInfo.builder(instrumentationName) .setVersion("1.2.3") .setSchemaUrl("http://schema.org") - .build()), - point -> - point - .hasSum(11.0) - .hasBucketBoundaries(10.0) - .hasAttributesSatisfyingExactly(equalTo(stringKey("test"), "test"))); + .build()) + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(11.0) + .hasBucketBoundaries(10.0) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("test"), "test"))))); } @Test @@ -258,23 +262,27 @@ void doubleHistogram() { instrument.record(5.5, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); instrument.record(6.6, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); - testing.waitAndAssertAnyHistogramPoints( + testing.waitAndAssertMetrics( instrumentationName, - "test", metric -> metric + .hasName("test") .hasDescription("d") .hasUnit("u") .hasInstrumentationScope( InstrumentationScopeInfo.builder(instrumentationName) .setVersion("1.2.3") .setSchemaUrl("http://schema.org") - .build()), - point -> - point - .hasSum(12.1) - .hasBucketBoundaries(10.0) - .hasAttributesSatisfyingExactly(equalTo(stringKey("test"), "test"))); + .build()) + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(12.1) + .hasBucketBoundaries(10.0) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("test"), "test"))))); } @Test diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/metrics/MeterTest.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/metrics/MeterTest.java index b1263aeb069f..b520c8338250 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/metrics/MeterTest.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/metrics/MeterTest.java @@ -62,23 +62,27 @@ void longHistogram() { instrument.record(5, Attributes.of(stringKey("test"), "test")); instrument.record(6, Attributes.of(stringKey("test"), "test")); - testing.waitAndAssertAnyHistogramPoints( + testing.waitAndAssertMetrics( instrumentationName, - "test", metric -> metric + .hasName("test") .hasDescription("d") .hasUnit("u") .hasInstrumentationScope( InstrumentationScopeInfo.builder(instrumentationName) .setVersion("1.2.3") .setSchemaUrl("http://schema.org") - .build()), - point -> - point - .hasSum(11.0) - .hasBucketBoundaries(10.0) - .hasAttributesSatisfyingExactly(equalTo(stringKey("test"), "test"))); + .build()) + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(11.0) + .hasBucketBoundaries(10.0) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("test"), "test"))))); } @Test @@ -92,22 +96,26 @@ void doubleHistogram() { instrument.record(5.5, Attributes.of(stringKey("test"), "test")); instrument.record(6.6, Attributes.of(stringKey("test"), "test")); - testing.waitAndAssertAnyHistogramPoints( + testing.waitAndAssertMetrics( instrumentationName, - "test", metric -> metric + .hasName("test") .hasDescription("d") .hasUnit("u") .hasInstrumentationScope( InstrumentationScopeInfo.builder(instrumentationName) .setVersion("1.2.3") .setSchemaUrl("http://schema.org") - .build()), - point -> - point - .hasSum(12.1) - .hasBucketBoundaries(10.0) - .hasAttributesSatisfyingExactly(equalTo(stringKey("test"), "test"))); + .build()) + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(12.1) + .hasBucketBoundaries(10.0) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("test"), "test"))))); } } diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.65/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_65/incubator/metrics/MeterTest.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.65/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_65/incubator/metrics/MeterTest.java index f9ee405c6ce4..5fd58a2cb2a3 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.65/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_65/incubator/metrics/MeterTest.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.65/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_65/incubator/metrics/MeterTest.java @@ -6,7 +6,6 @@ package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_65.incubator.metrics; import static io.opentelemetry.api.common.AttributeKey.stringKey; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; @@ -172,12 +171,14 @@ void boundLongHistogram() { metric -> metric .hasName("test") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(11.0) - .hasAttributesSatisfyingExactly(equalTo(stringKey("q"), "r"))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(11.0) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("q"), "r"))))); } @Test @@ -196,12 +197,14 @@ void boundDoubleHistogram() { metric -> metric .hasName("test") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(12.1) - .hasAttributesSatisfyingExactly(equalTo(stringKey("q"), "r"))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(12.1) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("q"), "r"))))); } @Test diff --git a/instrumentation/pulsar/pulsar-2.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/pulsar/v2_8/PulsarClientTest.java b/instrumentation/pulsar/pulsar-2.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/pulsar/v2_8/PulsarClientTest.java index 0eec7bfb50ff..04a77471b741 100644 --- a/instrumentation/pulsar/pulsar-2.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/pulsar/v2_8/PulsarClientTest.java +++ b/instrumentation/pulsar/pulsar-2.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/pulsar/v2_8/PulsarClientTest.java @@ -67,19 +67,29 @@ void testConsumeNonPartitionedTopic() throws Exception { latch.await(1, MINUTES); - testing.waitAndAssertHistogramPoints( + testing.waitAndAssertMetrics( INSTRUMENTATION_NAME, "messaging.process.duration", - metric -> metric.hasDescription("Duration of processing operation.").hasUnit("s"), - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "process"), - equalTo(MESSAGING_SYSTEM, "pulsar"), - equalTo(MESSAGING_DESTINATION_NAME, topic), - equalTo(MESSAGING_DESTINATION_SUBSCRIPTION_NAME, "test_sub")) - .hasBucketBoundaries(DURATION_BUCKETS)); + metrics -> + metrics.satisfiesExactly( + metric -> + assertThat(metric) + .hasUnit("s") + .hasDescription("Duration of processing operation.") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "process"), + equalTo(MESSAGING_SYSTEM, "pulsar"), + equalTo(MESSAGING_DESTINATION_NAME, topic), + equalTo( + MESSAGING_DESTINATION_SUBSCRIPTION_NAME, + "test_sub")) + .hasBucketBoundaries(DURATION_BUCKETS))))); testing.waitAndAssertMetrics( INSTRUMENTATION_NAME, "messaging.client.consumed.messages", @@ -127,35 +137,42 @@ void testConsumeNonPartitionedTopic() throws Exception { equalTo(MESSAGING_DESTINATION_NAME, topic), equalTo(SERVER_ADDRESS, brokerHost), equalTo(SERVER_PORT, brokerPort)))))); - testing.waitAndAssertHistogramPoints( + testing.waitAndAssertMetrics( INSTRUMENTATION_NAME, "messaging.client.operation.duration", - metric -> - metric - .hasDescription( - "Duration of messaging operation initiated by a producer or consumer client.") - .hasUnit("s"), - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "send"), - equalTo(MESSAGING_SYSTEM, "pulsar"), - equalTo(MESSAGING_DESTINATION_NAME, topic), - equalTo(MESSAGING_OPERATION_TYPE, "send"), - equalTo(SERVER_ADDRESS, brokerHost), - equalTo(SERVER_PORT, brokerPort)), - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "receive"), - equalTo(MESSAGING_SYSTEM, "pulsar"), - equalTo(MESSAGING_DESTINATION_NAME, topic), - equalTo(MESSAGING_DESTINATION_SUBSCRIPTION_NAME, "test_sub"), - equalTo(MESSAGING_OPERATION_TYPE, "receive"), - equalTo(SERVER_ADDRESS, brokerHost), - equalTo(SERVER_PORT, brokerPort))); + metrics -> + metrics.satisfiesExactly( + metric -> + assertThat(metric) + .hasUnit("s") + .hasDescription( + "Duration of messaging operation initiated by a producer or consumer client.") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "send"), + equalTo(MESSAGING_SYSTEM, "pulsar"), + equalTo(MESSAGING_DESTINATION_NAME, topic), + equalTo(MESSAGING_OPERATION_TYPE, "send"), + equalTo(SERVER_ADDRESS, brokerHost), + equalTo(SERVER_PORT, brokerPort)), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "receive"), + equalTo(MESSAGING_SYSTEM, "pulsar"), + equalTo(MESSAGING_DESTINATION_NAME, topic), + equalTo( + MESSAGING_DESTINATION_SUBSCRIPTION_NAME, + "test_sub"), + equalTo(MESSAGING_OPERATION_TYPE, "receive"), + equalTo(SERVER_ADDRESS, brokerHost), + equalTo(SERVER_PORT, brokerPort)))))); AtomicReference producerSpan = new AtomicReference<>(); testing.waitAndAssertSortedTraces( diff --git a/instrumentation/ratpack/ratpack-1.4/javaagent/src/version17Test/java/io/opentelemetry/javaagent/instrumentation/ratpack/v1_4/httpclient/client/RatpackHttpClientTest.java b/instrumentation/ratpack/ratpack-1.4/javaagent/src/version17Test/java/io/opentelemetry/javaagent/instrumentation/ratpack/v1_4/httpclient/client/RatpackHttpClientTest.java index df9d699dc752..6c5ec8f0dd8d 100644 --- a/instrumentation/ratpack/ratpack-1.4/javaagent/src/version17Test/java/io/opentelemetry/javaagent/instrumentation/ratpack/v1_4/httpclient/client/RatpackHttpClientTest.java +++ b/instrumentation/ratpack/ratpack-1.4/javaagent/src/version17Test/java/io/opentelemetry/javaagent/instrumentation/ratpack/v1_4/httpclient/client/RatpackHttpClientTest.java @@ -64,19 +64,24 @@ void durationMetricHasProtocolVersion() throws Exception { }), span -> assertServerSpan(span).hasParent(trace.getSpan(0)))); - testing.waitAndAssertAnyHistogramPoints( + testing.waitAndAssertMetrics( "io.opentelemetry.ratpack-1.4", - "http.client.request.duration", metric -> - metric.satisfies( - metricData -> - assertThat(metricData.getInstrumentationScopeInfo().getVersion()).isNotEmpty()), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(HTTP_REQUEST_METHOD, "GET"), - equalTo(HTTP_RESPONSE_STATUS_CODE, 200), - equalTo(NETWORK_PROTOCOL_VERSION, "1.1"), - equalTo(SERVER_ADDRESS, uri.getHost()), - equalTo(SERVER_PORT, uri.getPort()))); + metric + .hasName("http.client.request.duration") + .satisfies( + metricData -> + assertThat(metricData.getInstrumentationScopeInfo().getVersion()) + .isNotEmpty()) + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(HTTP_REQUEST_METHOD, "GET"), + equalTo(HTTP_RESPONSE_STATUS_CODE, 200), + equalTo(NETWORK_PROTOCOL_VERSION, "1.1"), + equalTo(SERVER_ADDRESS, uri.getHost()), + equalTo(SERVER_PORT, uri.getPort()))))); } } diff --git a/instrumentation/rocketmq/rocketmq-client-4.8/library/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v4_8/RocketMqMetricsTest.java b/instrumentation/rocketmq/rocketmq-client-4.8/library/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v4_8/RocketMqMetricsTest.java index 2920ec994c23..2fa7072d59d0 100644 --- a/instrumentation/rocketmq/rocketmq-client-4.8/library/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v4_8/RocketMqMetricsTest.java +++ b/instrumentation/rocketmq/rocketmq-client-4.8/library/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v4_8/RocketMqMetricsTest.java @@ -5,7 +5,6 @@ package io.opentelemetry.instrumentation.rocketmqclient.v4_8; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.ErrorAttributes.ERROR_TYPE; @@ -218,20 +217,25 @@ private static void assertDuration( String errorType) { testing.waitAndAssertMetrics( INSTRUMENTATION_NAME, - metric -> - metric - .hasName(metricName) - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, operationName), - equalTo(MESSAGING_SYSTEM, "rocketmq"), - equalTo(ERROR_TYPE, errorType), - equalTo(MESSAGING_CONSUMER_GROUP_NAME, consumerGroup), - equalTo(MESSAGING_DESTINATION_NAME, destination), - equalTo(MESSAGING_OPERATION_TYPE, operationType))))); + metricName, + metrics -> + metrics.satisfiesExactly( + metric -> + assertThat(metric) + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, operationName), + equalTo(MESSAGING_SYSTEM, "rocketmq"), + equalTo(ERROR_TYPE, errorType), + equalTo( + MESSAGING_CONSUMER_GROUP_NAME, consumerGroup), + equalTo(MESSAGING_DESTINATION_NAME, destination), + equalTo( + MESSAGING_OPERATION_TYPE, operationType)))))); } } diff --git a/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/AbstractRocketMqClientSuppressReceiveSpanTest.java b/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/AbstractRocketMqClientSuppressReceiveSpanTest.java index 1bc2eca908dd..85500429b6a1 100644 --- a/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/AbstractRocketMqClientSuppressReceiveSpanTest.java +++ b/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/AbstractRocketMqClientSuppressReceiveSpanTest.java @@ -5,7 +5,6 @@ package io.opentelemetry.instrumentation.rocketmqclient.v5_0; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.instrumentation.testing.util.TelemetryDataUtil.asRemote; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; @@ -173,35 +172,43 @@ private void assertMetrics(String topic, String consumerGroup) { testing() .waitAndAssertMetrics( "io.opentelemetry.rocketmq-client-5.0", - metric -> - metric - .hasName("messaging.client.operation.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "send"), - equalTo(MESSAGING_SYSTEM, "rocketmq"), - equalTo(MESSAGING_DESTINATION_NAME, topic), - equalTo(MESSAGING_OPERATION_TYPE, "send"))))); + "messaging.client.operation.duration", + metrics -> + metrics.satisfiesExactly( + metric -> + assertThat(metric) + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "send"), + equalTo(MESSAGING_SYSTEM, "rocketmq"), + equalTo(MESSAGING_DESTINATION_NAME, topic), + equalTo(MESSAGING_OPERATION_TYPE, "send")))))); testing() .waitAndAssertMetrics( "io.opentelemetry.rocketmq-client-5.0", - metric -> - metric - .hasName("messaging.process.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "process"), - equalTo(MESSAGING_SYSTEM, "rocketmq"), - equalTo(MESSAGING_CONSUMER_GROUP_NAME, consumerGroup), - equalTo(MESSAGING_DESTINATION_NAME, topic))))); + "messaging.process.duration", + metrics -> + metrics.satisfiesExactly( + metric -> + assertThat(metric) + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "process"), + equalTo(MESSAGING_SYSTEM, "rocketmq"), + equalTo( + MESSAGING_CONSUMER_GROUP_NAME, + consumerGroup), + equalTo(MESSAGING_DESTINATION_NAME, topic)))))); testing() .waitAndAssertMetrics( "io.opentelemetry.rocketmq-client-5.0", diff --git a/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/AbstractRocketMqClientTest.java b/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/AbstractRocketMqClientTest.java index 47e3e6253254..e32bc5a62abc 100644 --- a/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/AbstractRocketMqClientTest.java +++ b/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/AbstractRocketMqClientTest.java @@ -7,7 +7,6 @@ import static io.opentelemetry.api.trace.SpanKind.CLIENT; import static io.opentelemetry.instrumentation.testing.junit.message.MessageHeaderUtil.headerAttributeKey; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.instrumentation.testing.util.TelemetryDataUtil.asRemote; import static io.opentelemetry.instrumentation.testing.util.TelemetryDataUtil.orderByRootSpanKind; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; @@ -762,20 +761,28 @@ private void assertFailureMetrics() { testing() .waitAndAssertMetrics( "io.opentelemetry.rocketmq-client-5.0", - metric -> - metric - .hasName("messaging.process.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "process"), - equalTo(MESSAGING_SYSTEM, "rocketmq"), - equalTo(ERROR_TYPE, ConsumeResult.FAILURE.name()), - equalTo(MESSAGING_CONSUMER_GROUP_NAME, CONSUMER_GROUP), - equalTo(MESSAGING_DESTINATION_NAME, NORMAL_TOPIC))))); + "messaging.process.duration", + metrics -> + metrics.satisfiesExactly( + metric -> + assertThat(metric) + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "process"), + equalTo(MESSAGING_SYSTEM, "rocketmq"), + equalTo( + ERROR_TYPE, ConsumeResult.FAILURE.name()), + equalTo( + MESSAGING_CONSUMER_GROUP_NAME, + CONSUMER_GROUP), + equalTo( + MESSAGING_DESTINATION_NAME, + NORMAL_TOPIC)))))); // messaging.client.consumed.messages is owned by the receive operation here, which the retry // gate cannot hold back, so the redelivery would race this assertion; the counter is asserted // in testSendAndConsumeNormalMessage instead @@ -823,45 +830,56 @@ private void assertMetrics() { testing() .waitAndAssertMetrics( "io.opentelemetry.rocketmq-client-5.0", - metric -> - metric - .hasName("messaging.client.operation.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "send"), - equalTo(MESSAGING_SYSTEM, "rocketmq"), - equalTo(MESSAGING_DESTINATION_NAME, NORMAL_TOPIC), - equalTo( - MESSAGING_OPERATION_TYPE, - "send")), // The consumer keeps polling, so the number - // of recorded receives is not deterministic. - point -> - point.hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "receive"), - equalTo(MESSAGING_SYSTEM, "rocketmq"), - equalTo(MESSAGING_CONSUMER_GROUP_NAME, CONSUMER_GROUP), - equalTo(MESSAGING_DESTINATION_NAME, NORMAL_TOPIC), - equalTo(MESSAGING_OPERATION_TYPE, "receive"))))); + "messaging.client.operation.duration", + metrics -> + metrics.satisfiesExactly( + metric -> + assertThat(metric) + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "send"), + equalTo(MESSAGING_SYSTEM, "rocketmq"), + equalTo( + MESSAGING_DESTINATION_NAME, NORMAL_TOPIC), + equalTo(MESSAGING_OPERATION_TYPE, "send")), + // the consumer keeps polling, so the number of recorded + // receives is not deterministic + point -> + point.hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "receive"), + equalTo(MESSAGING_SYSTEM, "rocketmq"), + equalTo( + MESSAGING_CONSUMER_GROUP_NAME, CONSUMER_GROUP), + equalTo(MESSAGING_DESTINATION_NAME, NORMAL_TOPIC), + equalTo(MESSAGING_OPERATION_TYPE, "receive")))))); testing() .waitAndAssertMetrics( "io.opentelemetry.rocketmq-client-5.0", - metric -> - metric - .hasName("messaging.process.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "process"), - equalTo(MESSAGING_SYSTEM, "rocketmq"), - equalTo(MESSAGING_CONSUMER_GROUP_NAME, CONSUMER_GROUP), - equalTo(MESSAGING_DESTINATION_NAME, NORMAL_TOPIC))))); + "messaging.process.duration", + metrics -> + metrics.satisfiesExactly( + metric -> + assertThat(metric) + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "process"), + equalTo(MESSAGING_SYSTEM, "rocketmq"), + equalTo( + MESSAGING_CONSUMER_GROUP_NAME, + CONSUMER_GROUP), + equalTo( + MESSAGING_DESTINATION_NAME, + NORMAL_TOPIC)))))); testing() .waitAndAssertMetrics( "io.opentelemetry.rocketmq-client-5.0", diff --git a/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/RocketMqSimpleConsumerTest.java b/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/RocketMqSimpleConsumerTest.java index 61ef38adbf18..b045a731e726 100644 --- a/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/RocketMqSimpleConsumerTest.java +++ b/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/RocketMqSimpleConsumerTest.java @@ -5,7 +5,6 @@ package io.opentelemetry.instrumentation.rocketmqclient.v5_0; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.instrumentation.testing.util.TelemetryDataUtil.asRemote; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; @@ -197,20 +196,24 @@ void shouldInstrumentReceiveWhenReceiveTelemetryDisabled() throws ClientExceptio assertSuccessfulReceiveTrace("disabled receive parent", sendSpan); testing.waitAndAssertMetrics( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("messaging.client.operation.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_CONSUMER_GROUP_NAME, CONSUMER_GROUP), - equalTo(MESSAGING_SYSTEM, "rocketmq"), - equalTo(MESSAGING_DESTINATION_NAME, TOPIC), - equalTo(MESSAGING_OPERATION_NAME, "receive"), - equalTo(MESSAGING_OPERATION_TYPE, "receive"))))); + "messaging.client.operation.duration", + metrics -> + metrics.satisfiesExactly( + metric -> + assertThat(metric) + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo( + MESSAGING_CONSUMER_GROUP_NAME, CONSUMER_GROUP), + equalTo(MESSAGING_SYSTEM, "rocketmq"), + equalTo(MESSAGING_DESTINATION_NAME, TOPIC), + equalTo(MESSAGING_OPERATION_NAME, "receive"), + equalTo(MESSAGING_OPERATION_TYPE, "receive")))))); testing.waitAndAssertMetrics( INSTRUMENTATION_NAME, "messaging.client.consumed.messages", diff --git a/instrumentation/runtime-telemetry/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/runtimetelemetry/JmxRuntimeMetricsTest.java b/instrumentation/runtime-telemetry/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/runtimetelemetry/JmxRuntimeMetricsTest.java index abf32b56d5c1..235b3026a798 100644 --- a/instrumentation/runtime-telemetry/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/runtimetelemetry/JmxRuntimeMetricsTest.java +++ b/instrumentation/runtime-telemetry/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/runtimetelemetry/JmxRuntimeMetricsTest.java @@ -5,7 +5,6 @@ package io.opentelemetry.javaagent.instrumentation.runtimetelemetry; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; import static io.opentelemetry.semconv.JvmAttributes.JVM_GC_ACTION; import static io.opentelemetry.semconv.JvmAttributes.JVM_GC_NAME; @@ -37,13 +36,14 @@ void runtimeMetricsAreEnabled() { metric -> metric .hasName("jvm.gc.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - satisfies(JVM_GC_NAME, val -> val.isNotBlank()), - satisfies(JVM_GC_ACTION, val -> val.isNotBlank()), - satisfies(JVM_GC_CAUSE, val -> val.isNotBlank())))), + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfyingExactly( + satisfies(JVM_GC_NAME, val -> val.isNotBlank()), + satisfies(JVM_GC_ACTION, val -> val.isNotBlank()), + satisfies(JVM_GC_CAUSE, val -> val.isNotBlank())))), metric -> metric.hasName("jvm.memory.used"), metric -> metric.hasName("jvm.memory.committed"), metric -> metric.hasName("jvm.memory.limit"), diff --git a/instrumentation/runtime-telemetry/library/src/test/java/io/opentelemetry/instrumentation/runtimetelemetry/RuntimeTelemetryDefaultsTest.java b/instrumentation/runtime-telemetry/library/src/test/java/io/opentelemetry/instrumentation/runtimetelemetry/RuntimeTelemetryDefaultsTest.java index 3a5f64a6b473..007955550fa3 100644 --- a/instrumentation/runtime-telemetry/library/src/test/java/io/opentelemetry/instrumentation/runtimetelemetry/RuntimeTelemetryDefaultsTest.java +++ b/instrumentation/runtime-telemetry/library/src/test/java/io/opentelemetry/instrumentation/runtimetelemetry/RuntimeTelemetryDefaultsTest.java @@ -5,7 +5,6 @@ package io.opentelemetry.instrumentation.runtimetelemetry; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; import static io.opentelemetry.semconv.JvmAttributes.JVM_GC_ACTION; import static io.opentelemetry.semconv.JvmAttributes.JVM_GC_NAME; @@ -38,13 +37,14 @@ void capturesGcCause(boolean useBuilder) { metric -> metric .hasName("jvm.gc.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - satisfies(JVM_GC_NAME, val -> val.isNotBlank()), - satisfies(JVM_GC_ACTION, val -> val.isNotBlank()), - satisfies(JVM_GC_CAUSE, val -> val.isNotBlank()))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfyingExactly( + satisfies(JVM_GC_NAME, val -> val.isNotBlank()), + satisfies(JVM_GC_ACTION, val -> val.isNotBlank()), + satisfies(JVM_GC_CAUSE, val -> val.isNotBlank()))))); } } } diff --git a/instrumentation/runtime-telemetry/library/src/test/java/io/opentelemetry/instrumentation/runtimetelemetry/internal/GarbageCollectorTest.java b/instrumentation/runtime-telemetry/library/src/test/java/io/opentelemetry/instrumentation/runtimetelemetry/internal/GarbageCollectorTest.java index 9608c5d4ccef..40b482b43aba 100644 --- a/instrumentation/runtime-telemetry/library/src/test/java/io/opentelemetry/instrumentation/runtimetelemetry/internal/GarbageCollectorTest.java +++ b/instrumentation/runtime-telemetry/library/src/test/java/io/opentelemetry/instrumentation/runtimetelemetry/internal/GarbageCollectorTest.java @@ -69,28 +69,34 @@ void registerObservers() { listener.handleNotification( createTestNotification("G1 Old Generation", "end of major GC", "System.gc()", 11), null); - testing.waitAndAssertAnyHistogramPoints( + testing.waitAndAssertMetrics( "test", - "jvm.gc.duration", - metric -> metric.hasDescription("Duration of JVM garbage collection actions.").hasUnit("s"), - point -> - point - .hasCount(2) - .hasSum(0.022) - .hasAttributesSatisfyingExactly( - equalTo(JVM_GC_NAME, "G1 Young Generation"), - equalTo(JVM_GC_ACTION, "end of minor GC"), - equalTo(JVM_GC_CAUSE, "Allocation Failure")) - .hasBucketBoundaries(GC_DURATION_BUCKETS), - point -> - point - .hasCount(1) - .hasSum(0.011) - .hasAttributesSatisfyingExactly( - equalTo(JVM_GC_NAME, "G1 Old Generation"), - equalTo(JVM_GC_ACTION, "end of major GC"), - equalTo(JVM_GC_CAUSE, "System.gc()")) - .hasBucketBoundaries(GC_DURATION_BUCKETS)); + metric -> + metric + .hasName("jvm.gc.duration") + .hasDescription("Duration of JVM garbage collection actions.") + .hasUnit("s") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasCount(2) + .hasSum(0.022) + .hasAttributesSatisfyingExactly( + equalTo(JVM_GC_NAME, "G1 Young Generation"), + equalTo(JVM_GC_ACTION, "end of minor GC"), + equalTo(JVM_GC_CAUSE, "Allocation Failure")) + .hasBucketBoundaries(GC_DURATION_BUCKETS), + point -> + point + .hasCount(1) + .hasSum(0.011) + .hasAttributesSatisfyingExactly( + equalTo(JVM_GC_NAME, "G1 Old Generation"), + equalTo(JVM_GC_ACTION, "end of major GC"), + equalTo(JVM_GC_CAUSE, "System.gc()")) + .hasBucketBoundaries(GC_DURATION_BUCKETS)))); } private static Notification createTestNotification( diff --git a/instrumentation/runtime-telemetry/library/src/testJava21/java/io/opentelemetry/instrumentation/runtimetelemetry/JfrVirtualThreadPinnedTest.java b/instrumentation/runtime-telemetry/library/src/testJava21/java/io/opentelemetry/instrumentation/runtimetelemetry/JfrVirtualThreadPinnedTest.java index 135042cfc346..55cb6d2de5fa 100644 --- a/instrumentation/runtime-telemetry/library/src/testJava21/java/io/opentelemetry/instrumentation/runtimetelemetry/JfrVirtualThreadPinnedTest.java +++ b/instrumentation/runtime-telemetry/library/src/testJava21/java/io/opentelemetry/instrumentation/runtimetelemetry/JfrVirtualThreadPinnedTest.java @@ -5,7 +5,6 @@ package io.opentelemetry.instrumentation.runtimetelemetry; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static java.util.concurrent.TimeUnit.SECONDS; import static org.assertj.core.api.Assertions.assertThat; @@ -48,6 +47,6 @@ void shouldHaveVirtualThreadPinnedEvents() throws InterruptedException { metric .hasName("jvm.thread.virtual.pinned") .hasUnit(Constants.SECONDS) - .satisfies(hasHistogramPointsSatisfyingExactly(point -> {}))); + .hasHistogramSatisfying(histogram -> histogram.hasPointsSatisfying(point -> {}))); } } diff --git a/instrumentation/sofa-rpc-5.4/testing/src/main/java/io/opentelemetry/instrumentation/sofarpc/v5_4/AbstractSofaRpcTest.java b/instrumentation/sofa-rpc-5.4/testing/src/main/java/io/opentelemetry/instrumentation/sofarpc/v5_4/AbstractSofaRpcTest.java index 88fc5fba8e35..c3429bc40b4f 100644 --- a/instrumentation/sofa-rpc-5.4/testing/src/main/java/io/opentelemetry/instrumentation/sofarpc/v5_4/AbstractSofaRpcTest.java +++ b/instrumentation/sofa-rpc-5.4/testing/src/main/java/io/opentelemetry/instrumentation/sofarpc/v5_4/AbstractSofaRpcTest.java @@ -229,57 +229,92 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), if (emitOldRpcSemconv()) { testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( "io.opentelemetry.sofa-rpc-5.4", "rpc.server.duration", - metric -> metric.hasUnit("ms"), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "sofarpc"), - equalTo( - RPC_SERVICE, - "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService"), - equalTo(RPC_METHOD, "hello"))); + metrics -> + metrics.anySatisfy( + metric -> + assertThat(metric) + .hasUnit("ms") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "sofarpc"), + equalTo( + RPC_SERVICE, + "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService"), + equalTo(RPC_METHOD, "hello")))))); testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( "io.opentelemetry.sofa-rpc-5.4", "rpc.client.duration", - metric -> metric.hasUnit("ms"), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "sofarpc"), - equalTo(RPC_SERVICE, GenericService.class.getName()), - equalTo(RPC_METHOD, genericMethodName()), - equalTo(SERVER_ADDRESS, "127.0.0.1"), - satisfies(SERVER_PORT, val -> val.isInstanceOf(Long.class)), - satisfies(NETWORK_TYPE, AbstractSofaRpcTest::assertNetworkType))); + metrics -> + metrics.anySatisfy( + metric -> + assertThat(metric) + .hasUnit("ms") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "sofarpc"), + equalTo( + RPC_SERVICE, GenericService.class.getName()), + equalTo(RPC_METHOD, genericMethodName()), + equalTo(SERVER_ADDRESS, "127.0.0.1"), + satisfies( + SERVER_PORT, + val -> val.isInstanceOf(Long.class)), + satisfies( + NETWORK_TYPE, + AbstractSofaRpcTest::assertNetworkType)))))); } if (emitPreviewRpcSemconv()) { testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( "io.opentelemetry.sofa-rpc-5.4", "rpc.server.call.duration", - metric -> metric.hasUnit("s"), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "sofarpc"), - equalTo( - RPC_METHOD, - "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService/hello"))); + metrics -> + metrics.anySatisfy( + metric -> + assertThat(metric) + .hasUnit("s") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "sofarpc"), + equalTo( + RPC_METHOD, + "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService/hello")))))); testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( "io.opentelemetry.sofa-rpc-5.4", "rpc.client.call.duration", - metric -> metric.hasUnit("s"), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "sofarpc"), - equalTo(RPC_METHOD, genericServiceSpanName()), - equalTo(SERVER_ADDRESS, "127.0.0.1"), - satisfies(SERVER_PORT, val -> val.isInstanceOf(Long.class)))); + metrics -> + metrics.anySatisfy( + metric -> + assertThat(metric) + .hasUnit("s") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "sofarpc"), + equalTo(RPC_METHOD, genericServiceSpanName()), + equalTo(SERVER_ADDRESS, "127.0.0.1"), + satisfies( + SERVER_PORT, + val -> val.isInstanceOf(Long.class))))))); } } @@ -368,57 +403,92 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), if (emitOldRpcSemconv()) { testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( "io.opentelemetry.sofa-rpc-5.4", "rpc.server.duration", - metric -> metric.hasUnit("ms"), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "sofarpc"), - equalTo( - RPC_SERVICE, - "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService"), - equalTo(RPC_METHOD, "hello"))); + metrics -> + metrics.anySatisfy( + metric -> + assertThat(metric) + .hasUnit("ms") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "sofarpc"), + equalTo( + RPC_SERVICE, + "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService"), + equalTo(RPC_METHOD, "hello")))))); testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( "io.opentelemetry.sofa-rpc-5.4", "rpc.client.duration", - metric -> metric.hasUnit("ms"), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "sofarpc"), - equalTo(RPC_SERVICE, GenericService.class.getName()), - equalTo(RPC_METHOD, genericMethodName()), - equalTo(SERVER_ADDRESS, "127.0.0.1"), - satisfies(SERVER_PORT, val -> val.isInstanceOf(Long.class)), - satisfies(NETWORK_TYPE, AbstractSofaRpcTest::assertNetworkType))); + metrics -> + metrics.anySatisfy( + metric -> + assertThat(metric) + .hasUnit("ms") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "sofarpc"), + equalTo( + RPC_SERVICE, GenericService.class.getName()), + equalTo(RPC_METHOD, genericMethodName()), + equalTo(SERVER_ADDRESS, "127.0.0.1"), + satisfies( + SERVER_PORT, + val -> val.isInstanceOf(Long.class)), + satisfies( + NETWORK_TYPE, + AbstractSofaRpcTest::assertNetworkType)))))); } if (emitPreviewRpcSemconv()) { testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( "io.opentelemetry.sofa-rpc-5.4", "rpc.server.call.duration", - metric -> metric.hasUnit("s"), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "sofarpc"), - equalTo( - RPC_METHOD, - "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService/hello"))); + metrics -> + metrics.anySatisfy( + metric -> + assertThat(metric) + .hasUnit("s") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "sofarpc"), + equalTo( + RPC_METHOD, + "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService/hello")))))); testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( "io.opentelemetry.sofa-rpc-5.4", "rpc.client.call.duration", - metric -> metric.hasUnit("s"), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "sofarpc"), - equalTo(RPC_METHOD, genericServiceSpanName()), - equalTo(SERVER_ADDRESS, "127.0.0.1"), - satisfies(SERVER_PORT, val -> val.isInstanceOf(Long.class)))); + metrics -> + metrics.anySatisfy( + metric -> + assertThat(metric) + .hasUnit("s") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "sofarpc"), + equalTo(RPC_METHOD, genericServiceSpanName()), + equalTo(SERVER_ADDRESS, "127.0.0.1"), + satisfies( + SERVER_PORT, + val -> val.isInstanceOf(Long.class))))))); } } @@ -551,63 +621,101 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), if (emitOldRpcSemconv()) { testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( "io.opentelemetry.sofa-rpc-5.4", "rpc.server.duration", - metric -> metric.hasUnit("ms"), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "sofarpc"), - equalTo( - RPC_SERVICE, - "io.opentelemetry.instrumentation.sofarpc.v5_4.api.ErrorService"), - equalTo(RPC_METHOD, "throwException"))); + metrics -> + metrics.anySatisfy( + metric -> + assertThat(metric) + .hasUnit("ms") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "sofarpc"), + equalTo( + RPC_SERVICE, + "io.opentelemetry.instrumentation.sofarpc.v5_4.api.ErrorService"), + equalTo(RPC_METHOD, "throwException")))))); testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( "io.opentelemetry.sofa-rpc-5.4", "rpc.client.duration", - metric -> metric.hasUnit("ms"), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "sofarpc"), - equalTo( - RPC_SERVICE, - "io.opentelemetry.instrumentation.sofarpc.v5_4.api.ErrorService"), - equalTo(RPC_METHOD, "throwException"), - equalTo(SERVER_ADDRESS, "127.0.0.1"), - satisfies(SERVER_PORT, val -> val.isInstanceOf(Long.class)), - satisfies(NETWORK_TYPE, AbstractSofaRpcTest::assertNetworkType))); + metrics -> + metrics.anySatisfy( + metric -> + assertThat(metric) + .hasUnit("ms") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "sofarpc"), + equalTo( + RPC_SERVICE, + "io.opentelemetry.instrumentation.sofarpc.v5_4.api.ErrorService"), + equalTo(RPC_METHOD, "throwException"), + equalTo(SERVER_ADDRESS, "127.0.0.1"), + satisfies( + SERVER_PORT, + val -> val.isInstanceOf(Long.class)), + satisfies( + NETWORK_TYPE, + AbstractSofaRpcTest::assertNetworkType)))))); } if (emitPreviewRpcSemconv()) { testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( "io.opentelemetry.sofa-rpc-5.4", "rpc.server.call.duration", - metric -> metric.hasUnit("s"), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "sofarpc"), - equalTo( - RPC_METHOD, - "io.opentelemetry.instrumentation.sofarpc.v5_4.api.ErrorService/throwException"), - equalTo(ERROR_TYPE, SofaRpcRuntimeException.class.getName()))); + metrics -> + metrics.anySatisfy( + metric -> + assertThat(metric) + .hasUnit("s") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "sofarpc"), + equalTo( + RPC_METHOD, + "io.opentelemetry.instrumentation.sofarpc.v5_4.api.ErrorService/throwException"), + equalTo( + ERROR_TYPE, + SofaRpcRuntimeException.class.getName())))))); testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( "io.opentelemetry.sofa-rpc-5.4", "rpc.client.call.duration", - metric -> metric.hasUnit("s"), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "sofarpc"), - equalTo( - RPC_METHOD, - "io.opentelemetry.instrumentation.sofarpc.v5_4.api.ErrorService/throwException"), - equalTo(ERROR_TYPE, SofaRpcRuntimeException.class.getName()), - equalTo(SERVER_ADDRESS, "127.0.0.1"), - satisfies(SERVER_PORT, val -> val.isInstanceOf(Long.class)))); + metrics -> + metrics.anySatisfy( + metric -> + assertThat(metric) + .hasUnit("s") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "sofarpc"), + equalTo( + RPC_METHOD, + "io.opentelemetry.instrumentation.sofarpc.v5_4.api.ErrorService/throwException"), + equalTo( + ERROR_TYPE, + SofaRpcRuntimeException.class.getName()), + equalTo(SERVER_ADDRESS, "127.0.0.1"), + satisfies( + SERVER_PORT, + val -> val.isInstanceOf(Long.class))))))); } } diff --git a/instrumentation/sofa-rpc-5.4/testing/src/main/java/io/opentelemetry/instrumentation/sofarpc/v5_4/AbstractSofaRpcTraceChainTest.java b/instrumentation/sofa-rpc-5.4/testing/src/main/java/io/opentelemetry/instrumentation/sofarpc/v5_4/AbstractSofaRpcTraceChainTest.java index ad836818058a..800e3f7424f1 100644 --- a/instrumentation/sofa-rpc-5.4/testing/src/main/java/io/opentelemetry/instrumentation/sofarpc/v5_4/AbstractSofaRpcTraceChainTest.java +++ b/instrumentation/sofa-rpc-5.4/testing/src/main/java/io/opentelemetry/instrumentation/sofarpc/v5_4/AbstractSofaRpcTraceChainTest.java @@ -264,88 +264,129 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), if (emitOldRpcSemconv()) { testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( "io.opentelemetry.sofa-rpc-5.4", "rpc.server.duration", - metric -> metric.hasUnit("ms"), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "sofarpc"), - equalTo( - RPC_SERVICE, - "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService"), - equalTo(RPC_METHOD, "hello")), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "sofarpc"), - equalTo( - RPC_SERVICE, - "io.opentelemetry.instrumentation.sofarpc.v5_4.api.MiddleService"), - equalTo(RPC_METHOD, "hello"))); + metrics -> + metrics.anySatisfy( + metric -> + assertThat(metric) + .hasUnit("ms") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "sofarpc"), + equalTo( + RPC_SERVICE, + "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService"), + equalTo(RPC_METHOD, "hello")), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "sofarpc"), + equalTo( + RPC_SERVICE, + "io.opentelemetry.instrumentation.sofarpc.v5_4.api.MiddleService"), + equalTo(RPC_METHOD, "hello")))))); testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( "io.opentelemetry.sofa-rpc-5.4", "rpc.client.duration", - metric -> metric.hasUnit("ms"), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "sofarpc"), - equalTo(RPC_SERVICE, GenericService.class.getName()), - equalTo(RPC_METHOD, genericMethodName()), - equalTo(SERVER_ADDRESS, "127.0.0.1"), - satisfies(SERVER_PORT, val -> val.isInstanceOf(Long.class)), - satisfies(NETWORK_TYPE, AbstractSofaRpcTest::assertNetworkType)), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "sofarpc"), - equalTo( - RPC_SERVICE, - "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService"), - equalTo(RPC_METHOD, "hello"), - equalTo(SERVER_ADDRESS, "127.0.0.1"), - satisfies(SERVER_PORT, val -> val.isInstanceOf(Long.class)), - satisfies(NETWORK_TYPE, AbstractSofaRpcTest::assertNetworkType))); + metrics -> + metrics.anySatisfy( + metric -> + assertThat(metric) + .hasUnit("ms") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "sofarpc"), + equalTo( + RPC_SERVICE, GenericService.class.getName()), + equalTo(RPC_METHOD, genericMethodName()), + equalTo(SERVER_ADDRESS, "127.0.0.1"), + satisfies( + SERVER_PORT, + val -> val.isInstanceOf(Long.class)), + satisfies( + NETWORK_TYPE, + AbstractSofaRpcTest::assertNetworkType)), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "sofarpc"), + equalTo( + RPC_SERVICE, + "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService"), + equalTo(RPC_METHOD, "hello"), + equalTo(SERVER_ADDRESS, "127.0.0.1"), + satisfies( + SERVER_PORT, + val -> val.isInstanceOf(Long.class)), + satisfies( + NETWORK_TYPE, + AbstractSofaRpcTest::assertNetworkType)))))); } if (emitPreviewRpcSemconv()) { testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( "io.opentelemetry.sofa-rpc-5.4", "rpc.server.call.duration", - metric -> metric.hasUnit("s"), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "sofarpc"), - equalTo( - RPC_METHOD, - "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService/hello")), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "sofarpc"), - equalTo( - RPC_METHOD, - "io.opentelemetry.instrumentation.sofarpc.v5_4.api.MiddleService/hello"))); + metrics -> + metrics.anySatisfy( + metric -> + assertThat(metric) + .hasUnit("s") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "sofarpc"), + equalTo( + RPC_METHOD, + "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService/hello")), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "sofarpc"), + equalTo( + RPC_METHOD, + "io.opentelemetry.instrumentation.sofarpc.v5_4.api.MiddleService/hello")))))); testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( "io.opentelemetry.sofa-rpc-5.4", "rpc.client.call.duration", - metric -> metric.hasUnit("s"), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "sofarpc"), - equalTo(RPC_METHOD, genericServiceSpanName()), - equalTo(SERVER_ADDRESS, "127.0.0.1"), - satisfies(SERVER_PORT, val -> val.isInstanceOf(Long.class))), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "sofarpc"), - equalTo( - RPC_METHOD, - "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService/hello"), - equalTo(SERVER_ADDRESS, "127.0.0.1"), - satisfies(SERVER_PORT, val -> val.isInstanceOf(Long.class)))); + metrics -> + metrics.anySatisfy( + metric -> + assertThat(metric) + .hasUnit("s") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "sofarpc"), + equalTo(RPC_METHOD, genericServiceSpanName()), + equalTo(SERVER_ADDRESS, "127.0.0.1"), + satisfies( + SERVER_PORT, + val -> val.isInstanceOf(Long.class))), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "sofarpc"), + equalTo( + RPC_METHOD, + "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService/hello"), + equalTo(SERVER_ADDRESS, "127.0.0.1"), + satisfies( + SERVER_PORT, + val -> val.isInstanceOf(Long.class))))))); } } @@ -476,72 +517,107 @@ RPC_SYSTEM_NAME, emitPreviewRpcSemconv() ? "sofarpc" : null), if (emitOldRpcSemconv()) { testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( "io.opentelemetry.sofa-rpc-5.4", "rpc.server.duration", - metric -> metric.hasUnit("ms"), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "sofarpc"), - equalTo( - RPC_SERVICE, - "io.opentelemetry.instrumentation.sofarpc.v5_4.api.MiddleService"), - equalTo(RPC_METHOD, "hello")), - // HelloService SERVER metrics are also kept for local - // calls - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "sofarpc"), - equalTo( - RPC_SERVICE, - "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService"), - equalTo(RPC_METHOD, "hello"))); + metrics -> + metrics.anySatisfy( + metric -> + assertThat(metric) + .hasUnit("ms") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "sofarpc"), + equalTo( + RPC_SERVICE, + "io.opentelemetry.instrumentation.sofarpc.v5_4.api.MiddleService"), + equalTo(RPC_METHOD, "hello")), + // HelloService SERVER metrics are also kept for local + // calls + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "sofarpc"), + equalTo( + RPC_SERVICE, + "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService"), + equalTo(RPC_METHOD, "hello")))))); testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( "io.opentelemetry.sofa-rpc-5.4", "rpc.client.duration", - metric -> metric.hasUnit("ms"), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM, "sofarpc"), - equalTo(RPC_SERVICE, GenericService.class.getName()), - equalTo(RPC_METHOD, genericMethodName()), - equalTo(SERVER_ADDRESS, "127.0.0.1"), - satisfies(SERVER_PORT, val -> val.isInstanceOf(Long.class)), - satisfies(NETWORK_TYPE, AbstractSofaRpcTest::assertNetworkType))); + metrics -> + metrics.anySatisfy( + metric -> + assertThat(metric) + .hasUnit("ms") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM, "sofarpc"), + equalTo( + RPC_SERVICE, GenericService.class.getName()), + equalTo(RPC_METHOD, genericMethodName()), + equalTo(SERVER_ADDRESS, "127.0.0.1"), + satisfies( + SERVER_PORT, + val -> val.isInstanceOf(Long.class)), + satisfies( + NETWORK_TYPE, + AbstractSofaRpcTest::assertNetworkType)))))); } if (emitPreviewRpcSemconv()) { testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( "io.opentelemetry.sofa-rpc-5.4", "rpc.server.call.duration", - metric -> metric.hasUnit("s"), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "sofarpc"), - equalTo( - RPC_METHOD, - "io.opentelemetry.instrumentation.sofarpc.v5_4.api.MiddleService/hello")), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "sofarpc"), - equalTo( - RPC_METHOD, - "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService/hello"))); + metrics -> + metrics.anySatisfy( + metric -> + assertThat(metric) + .hasUnit("s") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "sofarpc"), + equalTo( + RPC_METHOD, + "io.opentelemetry.instrumentation.sofarpc.v5_4.api.MiddleService/hello")), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "sofarpc"), + equalTo( + RPC_METHOD, + "io.opentelemetry.instrumentation.sofarpc.v5_4.api.HelloService/hello")))))); testing() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( "io.opentelemetry.sofa-rpc-5.4", "rpc.client.call.duration", - metric -> metric.hasUnit("s"), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "sofarpc"), - equalTo(RPC_METHOD, genericServiceSpanName()), - equalTo(SERVER_ADDRESS, "127.0.0.1"), - satisfies(SERVER_PORT, val -> val.isInstanceOf(Long.class)))); + metrics -> + metrics.anySatisfy( + metric -> + assertThat(metric) + .hasUnit("s") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "sofarpc"), + equalTo(RPC_METHOD, genericServiceSpanName()), + equalTo(SERVER_ADDRESS, "127.0.0.1"), + satisfies( + SERVER_PORT, + val -> val.isInstanceOf(Long.class))))))); } } } diff --git a/instrumentation/spring/spring-ai-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/ai/v1_0/AbstractOpenAiChatModelTest.java b/instrumentation/spring/spring-ai-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/ai/v1_0/AbstractOpenAiChatModelTest.java index f08cafee24e9..b389fbf190f5 100644 --- a/instrumentation/spring/spring-ai-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/ai/v1_0/AbstractOpenAiChatModelTest.java +++ b/instrumentation/spring/spring-ai-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/ai/v1_0/AbstractOpenAiChatModelTest.java @@ -11,7 +11,6 @@ import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.api.trace.SpanKind.CLIENT; import static io.opentelemetry.api.trace.SpanKind.INTERNAL; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.incubating.GenAiIncubatingAttributes.GEN_AI_OPERATION_NAME; import static io.opentelemetry.semconv.incubating.GenAiIncubatingAttributes.GEN_AI_PROVIDER_NAME; @@ -110,39 +109,41 @@ private static void assertMetrics() { metric -> metric .hasName("gen_ai.client.operation.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, RESPONSE_MODEL)))), + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, RESPONSE_MODEL)))), metric -> metric .hasName("gen_ai.client.token.usage") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(22.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, INPUT)), - point -> - point - .hasSum(2.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(22.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, INPUT)), + point -> + point + .hasSum(2.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT))))); } private static void assertMessageEvents(SpanContext spanContext) { diff --git a/instrumentation/spring/spring-ai-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/ai/v1_0/ChatModelTest.java b/instrumentation/spring/spring-ai-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/ai/v1_0/ChatModelTest.java index ba78f488b997..b1257ac1fb9f 100644 --- a/instrumentation/spring/spring-ai-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/ai/v1_0/ChatModelTest.java +++ b/instrumentation/spring/spring-ai-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/ai/v1_0/ChatModelTest.java @@ -8,7 +8,6 @@ import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.api.trace.SpanKind.CLIENT; import static io.opentelemetry.api.trace.SpanKind.INTERNAL; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.ErrorAttributes.ERROR_TYPE; @@ -861,39 +860,41 @@ private static void assertMetrics() { metric -> metric .hasName("gen_ai.client.operation.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, "test"), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, MODEL)))), + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, "test"), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, MODEL)))), metric -> metric .hasName("gen_ai.client.token.usage") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSum(3.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, "test"), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, MODEL), - equalTo(GEN_AI_TOKEN_TYPE, INPUT)), - point -> - point - .hasSum(2.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, "test"), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, MODEL), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSum(3.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, "test"), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, MODEL), + equalTo(GEN_AI_TOKEN_TYPE, INPUT)), + point -> + point + .hasSum(2.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, "test"), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, MODEL), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT))))); } private static void assertMetricsWithoutTokenUsage() { @@ -902,16 +903,17 @@ private static void assertMetricsWithoutTokenUsage() { metric -> metric .hasName("gen_ai.client.operation.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, "test"), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, MODEL))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, "test"), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, MODEL))))); testing.waitAndAssertMetrics( INSTRUMENTATION_NAME, "gen_ai.client.token.usage", metrics -> metrics.isEmpty()); } diff --git a/instrumentation/spring/spring-integration-4.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/integration/v4_1/MessageProducerSupportInstrumentationTest.java b/instrumentation/spring/spring-integration-4.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/integration/v4_1/MessageProducerSupportInstrumentationTest.java index f5579ac5e077..3358e7af54bb 100644 --- a/instrumentation/spring/spring-integration-4.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/integration/v4_1/MessageProducerSupportInstrumentationTest.java +++ b/instrumentation/spring/spring-integration-4.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/integration/v4_1/MessageProducerSupportInstrumentationTest.java @@ -5,7 +5,6 @@ package io.opentelemetry.javaagent.instrumentation.spring.integration.v4_1; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.instrumentation.testing.util.TestLatestDeps.testLatestDeps; import static io.opentelemetry.javaagent.instrumentation.spring.integration.v4_1.SpringIntegrationTestHelper.assertNoMetrics; import static io.opentelemetry.javaagent.instrumentation.spring.integration.v4_1.SpringIntegrationTestHelper.assertProcessMetrics; @@ -338,10 +337,14 @@ private static void assertSpringRabbitProcessMetrics() { testing.waitAndAssertMetrics( SPRING_RABBIT_INSTRUMENTATION_NAME, - metric -> - metric - .hasName("messaging.process.duration") - .satisfies(hasHistogramPointsSatisfyingExactly(point -> point.hasCount(1)))); + "messaging.process.duration", + metrics -> + metrics.satisfiesExactly( + metric -> + assertThat(metric) + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying(point -> point.hasCount(1))))); } private static Message newRawMessage() { diff --git a/instrumentation/spring/spring-integration-4.1/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/integration/v4_1/SpringIntegrationTestHelper.java b/instrumentation/spring/spring-integration-4.1/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/integration/v4_1/SpringIntegrationTestHelper.java index 222efb743c5a..9fb67727ecea 100644 --- a/instrumentation/spring/spring-integration-4.1/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/integration/v4_1/SpringIntegrationTestHelper.java +++ b/instrumentation/spring/spring-integration-4.1/testing/src/main/java/io/opentelemetry/javaagent/instrumentation/spring/integration/v4_1/SpringIntegrationTestHelper.java @@ -58,18 +58,27 @@ static void assertProcessMetrics( ? satisfies(ERROR_TYPE, AbstractStringAssert::isNotEmpty) : equalTo(ERROR_TYPE, null); - testing.waitAndAssertHistogramPoints( + testing.waitAndAssertMetrics( INSTRUMENTATION_NAME, "messaging.process.duration", - metric -> metric.hasDescription("Duration of processing operation.").hasUnit("s"), - point -> - point - .hasCount(expectedCount) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "process"), - equalTo(MESSAGING_SYSTEM, "spring_integration"), - equalTo(MESSAGING_DESTINATION_NAME, destinationName), - errorType)); + metrics -> + metrics.satisfiesExactly( + metric -> + assertThat(metric) + .hasUnit("s") + .hasDescription("Duration of processing operation.") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasCount(expectedCount) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "process"), + equalTo(MESSAGING_SYSTEM, "spring_integration"), + equalTo( + MESSAGING_DESTINATION_NAME, destinationName), + errorType))))); testing.waitAndAssertMetrics( INSTRUMENTATION_NAME, "messaging.client.consumed.messages", @@ -95,22 +104,28 @@ static void assertProcessMetrics( } static void assertSendMetrics(InstrumentationExtension testing, String destinationName) { - testing.waitAndAssertHistogramPoints( + testing.waitAndAssertMetrics( INSTRUMENTATION_NAME, "messaging.client.operation.duration", - metric -> - metric - .hasDescription( - "Duration of messaging operation initiated by a producer or consumer client.") - .hasUnit("s"), - point -> - point - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "send"), - equalTo(MESSAGING_SYSTEM, "spring_integration"), - equalTo(MESSAGING_DESTINATION_NAME, destinationName), - equalTo(MESSAGING_OPERATION_TYPE, "send"))); + metrics -> + metrics.satisfiesExactly( + metric -> + assertThat(metric) + .hasUnit("s") + .hasDescription( + "Duration of messaging operation initiated by a producer or consumer client.") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "send"), + equalTo(MESSAGING_SYSTEM, "spring_integration"), + equalTo( + MESSAGING_DESTINATION_NAME, destinationName), + equalTo(MESSAGING_OPERATION_TYPE, "send")))))); testing.waitAndAssertMetrics( INSTRUMENTATION_NAME, "messaging.client.sent.messages", diff --git a/instrumentation/spring/spring-pulsar-1.0/testing/src/main/java/io/opentelemetry/instrumentation/spring/pulsar/v1_0/AbstractSpringPulsarTest.java b/instrumentation/spring/spring-pulsar-1.0/testing/src/main/java/io/opentelemetry/instrumentation/spring/pulsar/v1_0/AbstractSpringPulsarTest.java index 5ed53f4e534e..798befb4b1cf 100644 --- a/instrumentation/spring/spring-pulsar-1.0/testing/src/main/java/io/opentelemetry/instrumentation/spring/pulsar/v1_0/AbstractSpringPulsarTest.java +++ b/instrumentation/spring/spring-pulsar-1.0/testing/src/main/java/io/opentelemetry/instrumentation/spring/pulsar/v1_0/AbstractSpringPulsarTest.java @@ -112,17 +112,26 @@ void testSpringPulsar() throws PulsarClientException, InterruptedException { protected void assertProcessMetrics() { - testing.waitAndAssertHistogramPoints( + testing.waitAndAssertMetrics( "io.opentelemetry.spring-pulsar-1.0", "messaging.process.duration", - metric -> metric.hasDescription("Duration of processing operation.").hasUnit("s"), - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "process"), - equalTo(MESSAGING_SYSTEM, "pulsar"), - equalTo(MESSAGING_DESTINATION_NAME, OTEL_TOPIC))); + metrics -> + metrics.satisfiesExactly( + metric -> + assertThat(metric) + .hasUnit("s") + .hasDescription("Duration of processing operation.") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "process"), + equalTo(MESSAGING_SYSTEM, "pulsar"), + equalTo( + MESSAGING_DESTINATION_NAME, OTEL_TOPIC)))))); testing.waitAndAssertMetrics( "io.opentelemetry.pulsar-2.8", diff --git a/instrumentation/spring/spring-rabbit-1.0/javaagent/src/version11Test/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbit11SimpleMessageListenerContainerTest.java b/instrumentation/spring/spring-rabbit-1.0/javaagent/src/version11Test/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbit11SimpleMessageListenerContainerTest.java index a01a3d39f086..8bef994eb938 100644 --- a/instrumentation/spring/spring-rabbit-1.0/javaagent/src/version11Test/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbit11SimpleMessageListenerContainerTest.java +++ b/instrumentation/spring/spring-rabbit-1.0/javaagent/src/version11Test/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbit11SimpleMessageListenerContainerTest.java @@ -5,7 +5,6 @@ package io.opentelemetry.javaagent.instrumentation.spring.rabbit.v1_0; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static java.util.concurrent.TimeUnit.SECONDS; import static org.assertj.core.api.Assertions.assertThat; @@ -109,10 +108,14 @@ void shouldUseSpringProcessTelemetry() throws InterruptedException { testing.waitAndAssertMetrics( SPRING_INSTRUMENTATION_NAME, - metric -> - metric - .hasName("messaging.process.duration") - .satisfies(hasHistogramPointsSatisfyingExactly(point -> point.hasCount(1)))); + "messaging.process.duration", + metrics -> + metrics.satisfiesExactly( + metric -> + assertThat(metric) + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying(point -> point.hasCount(1))))); testing.waitAndAssertMetrics( SPRING_INSTRUMENTATION_NAME, "messaging.client.consumed.messages", diff --git a/instrumentation/spring/spring-rabbit-1.0/javaagent/src/version20Test/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbit20DirectMessageListenerContainerTest.java b/instrumentation/spring/spring-rabbit-1.0/javaagent/src/version20Test/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbit20DirectMessageListenerContainerTest.java index 7c3e8f240542..7a2b6ab1c648 100644 --- a/instrumentation/spring/spring-rabbit-1.0/javaagent/src/version20Test/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbit20DirectMessageListenerContainerTest.java +++ b/instrumentation/spring/spring-rabbit-1.0/javaagent/src/version20Test/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbit20DirectMessageListenerContainerTest.java @@ -6,7 +6,6 @@ package io.opentelemetry.javaagent.instrumentation.spring.rabbit.v1_0; import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static java.util.concurrent.TimeUnit.SECONDS; import static org.assertj.core.api.Assertions.assertThat; @@ -104,10 +103,14 @@ void shouldUseSpringProcessTelemetry() throws InterruptedException { testing.waitAndAssertMetrics( SPRING_INSTRUMENTATION_NAME, - metric -> - metric - .hasName("messaging.process.duration") - .satisfies(hasHistogramPointsSatisfyingExactly(point -> point.hasCount(1)))); + "messaging.process.duration", + metrics -> + metrics.satisfiesExactly( + metric -> + assertThat(metric) + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying(point -> point.hasCount(1))))); testing.waitAndAssertMetrics( SPRING_INSTRUMENTATION_NAME, "messaging.client.consumed.messages", diff --git a/instrumentation/spring/spring-webflux/spring-webflux-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/webflux/v5_0/client/SpringWebfluxClientInstrumentationTest.java b/instrumentation/spring/spring-webflux/spring-webflux-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/webflux/v5_0/client/SpringWebfluxClientInstrumentationTest.java index 1cfcc04ec219..70045d60f343 100644 --- a/instrumentation/spring/spring-webflux/spring-webflux-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/webflux/v5_0/client/SpringWebfluxClientInstrumentationTest.java +++ b/instrumentation/spring/spring-webflux/spring-webflux-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/webflux/v5_0/client/SpringWebfluxClientInstrumentationTest.java @@ -5,7 +5,6 @@ package io.opentelemetry.javaagent.instrumentation.spring.webflux.v5_0.client; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.HttpAttributes.HTTP_REQUEST_METHOD; import static io.opentelemetry.semconv.HttpAttributes.HTTP_RESPONSE_STATUS_CODE; @@ -72,14 +71,15 @@ void shouldAddProtocolVersionToDurationMetric() { metric -> metric .hasName("http.client.request.duration") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(HTTP_REQUEST_METHOD, "GET"), - equalTo(HTTP_RESPONSE_STATUS_CODE, 200), - equalTo(NETWORK_PROTOCOL_VERSION, "1.1"), - equalTo(SERVER_ADDRESS, uri.getHost()), - equalTo(SERVER_PORT, uri.getPort()))))); + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(HTTP_REQUEST_METHOD, "GET"), + equalTo(HTTP_RESPONSE_STATUS_CODE, 200), + equalTo(NETWORK_PROTOCOL_VERSION, "1.1"), + equalTo(SERVER_ADDRESS, uri.getHost()), + equalTo(SERVER_PORT, uri.getPort()))))); } } diff --git a/instrumentation/thrift-0.13/testing/src/main/java/io/opentelemetry/instrumentation/thrift/v0_13/AbstractThriftTest.java b/instrumentation/thrift-0.13/testing/src/main/java/io/opentelemetry/instrumentation/thrift/v0_13/AbstractThriftTest.java index 564bf36c75f0..12d6f80f97e5 100644 --- a/instrumentation/thrift-0.13/testing/src/main/java/io/opentelemetry/instrumentation/thrift/v0_13/AbstractThriftTest.java +++ b/instrumentation/thrift-0.13/testing/src/main/java/io/opentelemetry/instrumentation/thrift/v0_13/AbstractThriftTest.java @@ -354,55 +354,79 @@ protected SpanDataAssert assertServerSpan(SpanDataAssert span, String method) { private void assertMetrics(int serverPort) { if (emitOldRpcSemconv()) { getTesting() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( "io.opentelemetry.thrift-0.13", - "rpc.server.duration", - metric -> metric.hasUnit("ms"), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(SERVER_ADDRESS, "127.0.0.1"), - equalTo(SERVER_PORT, serverPort), - equalTo(RPC_METHOD, "say"), - equalTo(RPC_SERVICE, CustomHandler.class.getName()), - equalTo(RPC_SYSTEM, "apache_thrift"), - equalTo(NETWORK_TYPE, "ipv4"))); + metric -> + metric + .hasName("rpc.server.duration") + .hasUnit("ms") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(SERVER_ADDRESS, "127.0.0.1"), + equalTo(SERVER_PORT, serverPort), + equalTo(RPC_METHOD, "say"), + equalTo(RPC_SERVICE, CustomHandler.class.getName()), + equalTo(RPC_SYSTEM, "apache_thrift"), + equalTo(NETWORK_TYPE, "ipv4"))))); getTesting() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( "io.opentelemetry.thrift-0.13", - "rpc.client.duration", - metric -> metric.hasUnit("ms"), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, serverPort), - equalTo(RPC_METHOD, "say"), - equalTo(RPC_SERVICE, CustomService.class.getName()), - equalTo(RPC_SYSTEM, "apache_thrift"), - equalTo(NETWORK_TYPE, "ipv4"))); + metric -> + metric + .hasName("rpc.client.duration") + .hasUnit("ms") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, serverPort), + equalTo(RPC_METHOD, "say"), + equalTo(RPC_SERVICE, CustomService.class.getName()), + equalTo(RPC_SYSTEM, "apache_thrift"), + equalTo(NETWORK_TYPE, "ipv4"))))); } if (emitPreviewRpcSemconv()) { getTesting() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( "io.opentelemetry.thrift-0.13", - "rpc.server.call.duration", - metric -> metric.hasUnit("s"), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "apache_thrift"), - equalTo(SERVER_ADDRESS, "127.0.0.1"), - equalTo(SERVER_PORT, serverPort), - equalTo(RPC_METHOD, CustomHandler.class.getName() + "/say"))); + metric -> + metric + .hasName("rpc.server.call.duration") + .hasUnit("s") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "apache_thrift"), + equalTo(SERVER_ADDRESS, "127.0.0.1"), + equalTo(SERVER_PORT, serverPort), + equalTo( + RPC_METHOD, + CustomHandler.class.getName() + "/say"))))); getTesting() - .waitAndAssertAnyHistogramPoints( + .waitAndAssertMetrics( "io.opentelemetry.thrift-0.13", - "rpc.client.call.duration", - metric -> metric.hasUnit("s"), - point -> - point.hasAttributesSatisfyingExactly( - equalTo(RPC_SYSTEM_NAME, "apache_thrift"), - equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, serverPort), - equalTo(RPC_METHOD, CustomService.class.getName() + "/say"))); + metric -> + metric + .hasName("rpc.client.call.duration") + .hasUnit("s") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfyingExactly( + equalTo(RPC_SYSTEM_NAME, "apache_thrift"), + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, serverPort), + equalTo( + RPC_METHOD, + CustomService.class.getName() + "/say"))))); } } diff --git a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/InstrumentationTestRunner.java b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/InstrumentationTestRunner.java index c34d2c96f6ca..7da23a81e74a 100644 --- a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/InstrumentationTestRunner.java +++ b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/InstrumentationTestRunner.java @@ -5,7 +5,6 @@ package io.opentelemetry.instrumentation.testing; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static java.util.Arrays.asList; import static java.util.concurrent.TimeUnit.SECONDS; @@ -26,7 +25,6 @@ import io.opentelemetry.sdk.common.InstrumentationScopeInfo; import io.opentelemetry.sdk.logs.data.LogRecordData; import io.opentelemetry.sdk.metrics.data.MetricData; -import io.opentelemetry.sdk.testing.assertj.HistogramPointAssert; import io.opentelemetry.sdk.testing.assertj.LogRecordDataAssert; import io.opentelemetry.sdk.testing.assertj.MetricAssert; import io.opentelemetry.sdk.testing.assertj.TraceAssert; @@ -246,42 +244,37 @@ public final void waitAndAssertMetrics( } } - /** Waits for exactly one named histogram to match the metadata and point assertions. */ - @SafeVarargs - public final void waitAndAssertHistogramPoints( - String instrumentationName, - String metricName, - Consumer metricAssertion, - Consumer... pointAssertions) { - waitAndAssertMetrics( - instrumentationName, - metricName, - metrics -> - metrics.satisfiesExactly( - metric -> { - MetricAssert metricAssert = assertThat(metric); - metricAssertion.accept(metricAssert); - metricAssert.satisfies(hasHistogramPointsSatisfyingExactly(pointAssertions)); - })); - } - - /** Waits for any named histogram to match the metadata and exact unordered point assertions. */ + /** + * Waits for all metrics from the given instrumentation to satisfy the supplied assertions, + * matching each assertion to a distinct metric in any order. + */ @SafeVarargs - public final void waitAndAssertAnyHistogramPoints( - String instrumentationName, - String metricName, - Consumer metricAssertion, - Consumer... pointAssertions) { - waitAndAssertMetrics( - instrumentationName, - metricName, - metrics -> - metrics.anySatisfy( - metric -> { - MetricAssert metricAssert = assertThat(metric); - metricAssertion.accept(metricAssert); - metricAssert.satisfies(hasHistogramPointsSatisfyingExactly(pointAssertions)); - })); + @SuppressWarnings("varargs") + public final void waitAndAssertMetricsExactly( + String instrumentationName, Consumer... assertions) { + awaitUntilAsserted( + () -> { + List metrics = instrumentationMetrics(instrumentationName); + assertThat(metrics).satisfiesExactlyInAnyOrder(toMetricAssertions(assertions)); + }); + + TelemetryDataUtil.assertMetricScopeVersion(metricsForScope(instrumentationName)); + + if (Boolean.getBoolean("collectMetadata")) { + collectEmittedMetrics(getExportedMetrics()); + } + } + + // The runtime array type is Consumer and every element is a Consumer. + @SuppressWarnings("unchecked") + private static Consumer[] toMetricAssertions(Consumer[] assertions) { + Consumer[] metricAssertions = + (Consumer[]) new Consumer[assertions.length]; + for (int i = 0; i < assertions.length; i++) { + Consumer assertion = assertions[i]; + metricAssertions[i] = metric -> assertion.accept(assertThat(metric)); + } + return metricAssertions; } private List metricsForScope(String instrumentationName) { diff --git a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/InstrumentationExtension.java b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/InstrumentationExtension.java index 96395b8e5b51..14723332f2ff 100644 --- a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/InstrumentationExtension.java +++ b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/InstrumentationExtension.java @@ -15,7 +15,6 @@ import io.opentelemetry.sdk.OpenTelemetrySdk; import io.opentelemetry.sdk.logs.data.LogRecordData; import io.opentelemetry.sdk.metrics.data.MetricData; -import io.opentelemetry.sdk.testing.assertj.HistogramPointAssert; import io.opentelemetry.sdk.testing.assertj.LogRecordDataAssert; import io.opentelemetry.sdk.testing.assertj.MetricAssert; import io.opentelemetry.sdk.testing.assertj.TraceAssert; @@ -116,28 +115,15 @@ public final void waitAndAssertMetrics( testRunner.waitAndAssertMetrics(instrumentationName, assertions); } - /** Waits for exactly one named histogram to match the metadata and point assertions. */ - @SafeVarargs - @SuppressWarnings("varargs") - public final void waitAndAssertHistogramPoints( - String instrumentationName, - String metricName, - Consumer metricAssertion, - Consumer... pointAssertions) { - testRunner.waitAndAssertHistogramPoints( - instrumentationName, metricName, metricAssertion, pointAssertions); - } - - /** Waits for any named histogram to match the metadata and exact unordered point assertions. */ + /** + * Waits for all metrics from the given instrumentation to satisfy the supplied assertions, + * matching each assertion to a distinct metric in any order. + */ @SafeVarargs @SuppressWarnings("varargs") - public final void waitAndAssertAnyHistogramPoints( - String instrumentationName, - String metricName, - Consumer metricAssertion, - Consumer... pointAssertions) { - testRunner.waitAndAssertAnyHistogramPoints( - instrumentationName, metricName, metricAssertion, pointAssertions); + public final void waitAndAssertMetricsExactly( + String instrumentationName, Consumer... assertions) { + testRunner.waitAndAssertMetricsExactly(instrumentationName, assertions); } /** diff --git a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbClientMetricsTestUtil.java b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbClientMetricsTestUtil.java index bcef8d7655a8..f02dd7fec5eb 100644 --- a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbClientMetricsTestUtil.java +++ b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbClientMetricsTestUtil.java @@ -22,12 +22,20 @@ public static void assertDurationMetric( // db.system.name is required - see // https://opentelemetry.io/docs/specs/semconv/database/database-metrics/#metric-dbclientoperationduration assertThat(expectedKeys).extracting(AttributeKey::getKey).contains(DB_SYSTEM_NAME.getKey()); - testing.waitAndAssertAnyHistogramPoints( + testing.waitAndAssertMetrics( instrumentationName, - "db.client.operation.duration", - metric -> metric.hasDescription("Duration of database client operations.").hasUnit("s"), - point -> - point.hasAttributesSatisfying( - attributes -> assertThat(attributes.asMap()).containsOnlyKeys(expectedKeys))); + metrics -> + metrics + .hasName("db.client.operation.duration") + .hasUnit("s") + .hasDescription("Duration of database client operations.") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying( + point -> + point.hasAttributesSatisfying( + attributes -> + assertThat(attributes.asMap()) + .containsOnlyKeys(expectedKeys))))); } } diff --git a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbConnectionPoolMetricsAssertions.java b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbConnectionPoolMetricsAssertions.java index 42d733c83e8a..a1657def0225 100644 --- a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbConnectionPoolMetricsAssertions.java +++ b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/db/DbConnectionPoolMetricsAssertions.java @@ -17,6 +17,7 @@ import io.opentelemetry.sdk.testing.assertj.AbstractPointAssert; import io.opentelemetry.sdk.testing.assertj.AttributeAssertion; import io.opentelemetry.sdk.testing.assertj.LongSumAssert; +import io.opentelemetry.sdk.testing.assertj.MetricAssert; import java.util.ArrayList; import java.util.List; @@ -256,34 +257,47 @@ private void verifyTimeoutsMetric(MetricData metric) { } private void verifyCreateTime() { - testing.waitAndAssertAnyHistogramPoints( + testing.waitAndAssertMetrics( instrumentationName, "db.client.connection.create_time", - metric -> - metric.hasUnit("s").hasDescription("The time it took to create a new connection."), - this::verifyPointAttributes); + metrics -> metrics.anySatisfy(this::verifyCreateTimeMetric)); + } + + private void verifyCreateTimeMetric(MetricData metric) { + assertThat(metric) + .hasUnit("s") + .hasDescription("The time it took to create a new connection.") + .hasHistogramSatisfying( + histogram -> histogram.hasPointsSatisfying(this::verifyPointAttributes)); } private void verifyWaitTime() { - testing.waitAndAssertAnyHistogramPoints( + testing.waitAndAssertMetrics( instrumentationName, "db.client.connection.wait_time", - metric -> - metric - .hasUnit("s") - .hasDescription("The time it took to obtain an open connection from the pool."), - this::verifyPointAttributes); + metrics -> metrics.anySatisfy(this::verifyWaitTimeMetric)); + } + + private void verifyWaitTimeMetric(MetricData metric) { + assertThat(metric) + .hasUnit("s") + .hasDescription("The time it took to obtain an open connection from the pool.") + .hasHistogramSatisfying( + histogram -> histogram.hasPointsSatisfying(this::verifyPointAttributes)); } private void verifyUseTime() { - testing.waitAndAssertAnyHistogramPoints( + testing.waitAndAssertMetrics( instrumentationName, "db.client.connection.use_time", - metric -> - metric - .hasUnit("s") - .hasDescription( - "The time between borrowing a connection and returning it to the pool."), - this::verifyPointAttributes); + metrics -> metrics.anySatisfy(this::verifyUseTimeMetric)); + } + + private MetricAssert verifyUseTimeMetric(MetricData metric) { + return assertThat(metric) + .hasUnit("s") + .hasDescription("The time between borrowing a connection and returning it to the pool.") + .hasHistogramSatisfying( + histogram -> histogram.hasPointsSatisfying(this::verifyPointAttributes)); } } diff --git a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpClientTest.java b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpClientTest.java index 46c8b295ed60..0db2de1c64df 100644 --- a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpClientTest.java +++ b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpClientTest.java @@ -792,11 +792,16 @@ void httpClientMetrics() throws Exception { span -> assertServerSpan(span).hasParent(trace.getSpan(0))); }); - testing.waitAndAssertAnyHistogramPoints( + testing.waitAndAssertMetrics( instrumentationName.get(), - "http.client.request.duration", - metric -> metric.hasDescription("Duration of HTTP client requests.").hasUnit("s"), - point -> point.hasSumGreaterThan(0.0)); + metric -> + metric + .hasName("http.client.request.duration") + .hasDescription("Duration of HTTP client requests.") + .hasUnit("s") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying(point -> point.hasSumGreaterThan(0.0)))); } /** diff --git a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpServerTest.java b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpServerTest.java index 8b6a621f7e97..60d14b5c1760 100644 --- a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpServerTest.java +++ b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/http/AbstractHttpServerTest.java @@ -454,11 +454,16 @@ void httpServerMetrics() { spanData -> assertServerSpan(assertThat(spanData), method, SUCCESS, SUCCESS.status)); }); - testing.waitAndAssertAnyHistogramPoints( + testing.waitAndAssertMetrics( instrumentationName.get(), - "http.server.request.duration", - metric -> metric.hasDescription("Duration of HTTP server requests.").hasUnit("s"), - point -> point.hasSumGreaterThan(0.0)); + metric -> + metric + .hasName("http.server.request.duration") + .hasDescription("Duration of HTTP server requests.") + .hasUnit("s") + .hasHistogramSatisfying( + histogram -> + histogram.hasPointsSatisfying(point -> point.hasSumGreaterThan(0.0)))); } /** diff --git a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/util/MetricAssertions.java b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/util/MetricAssertions.java index 1ffe299979b2..39805105314f 100644 --- a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/util/MetricAssertions.java +++ b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/util/MetricAssertions.java @@ -5,33 +5,33 @@ package io.opentelemetry.instrumentation.testing.util; -import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; - -import io.opentelemetry.sdk.metrics.data.MetricData; import io.opentelemetry.sdk.testing.assertj.HistogramPointAssert; +import io.opentelemetry.sdk.testing.assertj.MetricAssert; import java.util.function.Consumer; -import org.assertj.core.api.ThrowingConsumer; -/** Composable assertions on {@link MetricData}, intended to be passed to {@code satisfies(...)}. */ +/** Composable assertions on metrics. */ public final class MetricAssertions { /** - * Asserts that the metric is a histogram whose points match exactly the given assertions, in any - * order. + * Returns an assertion that validates metric metadata and exactly matches the histogram points, + * in any order. * *
{@code
-   * assertThat(metric)
-   *     .hasName("duration")
-   *     .satisfies(hasHistogramPointsSatisfyingExactly(point -> point.hasCount(1)));
+   * testing.waitAndAssertMetricsExactly(
+   *     "test",
+   *     histogram(
+   *         metric -> metric.hasName("duration").hasUnit("s"),
+   *         point -> point.hasCount(1)));
    * }
*/ @SafeVarargs @SuppressWarnings("varargs") - public static ThrowingConsumer hasHistogramPointsSatisfyingExactly( - Consumer... assertions) { - return metric -> - assertThat(metric) - .hasHistogramSatisfying(histogram -> histogram.hasPointsSatisfying(assertions)); + public static Consumer histogram( + Consumer metricAssertion, Consumer... pointAssertions) { + return metric -> { + metricAssertion.accept(metric); + metric.hasHistogramSatisfying(histogram -> histogram.hasPointsSatisfying(pointAssertions)); + }; } private MetricAssertions() {} diff --git a/testing-common/src/test/java/io/opentelemetry/instrumentation/testing/InstrumentationTestRunnerTest.java b/testing-common/src/test/java/io/opentelemetry/instrumentation/testing/InstrumentationTestRunnerTest.java index eebb245d2db0..52afcbb37f80 100644 --- a/testing-common/src/test/java/io/opentelemetry/instrumentation/testing/InstrumentationTestRunnerTest.java +++ b/testing-common/src/test/java/io/opentelemetry/instrumentation/testing/InstrumentationTestRunnerTest.java @@ -5,10 +5,11 @@ package io.opentelemetry.instrumentation.testing; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.histogram; +import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static java.util.Arrays.asList; import static java.util.Collections.emptyList; import static java.util.Collections.singletonList; -import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; import io.opentelemetry.api.OpenTelemetry; @@ -16,6 +17,7 @@ import io.opentelemetry.sdk.common.InstrumentationScopeInfo; import io.opentelemetry.sdk.logs.data.LogRecordData; import io.opentelemetry.sdk.metrics.data.AggregationTemporality; +import io.opentelemetry.sdk.metrics.data.HistogramPointData; import io.opentelemetry.sdk.metrics.data.MetricData; import io.opentelemetry.sdk.metrics.internal.data.ImmutableGaugeData; import io.opentelemetry.sdk.metrics.internal.data.ImmutableHistogramData; @@ -26,128 +28,135 @@ import java.io.IOException; import java.time.Duration; import java.util.List; -import java.util.concurrent.atomic.AtomicBoolean; import org.awaitility.Awaitility; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; class InstrumentationTestRunnerTest { + @BeforeEach + void setAwaitilityDefaults() { + Awaitility.setDefaultPollDelay(Duration.ZERO); + Awaitility.setDefaultPollInterval(Duration.ofMillis(1)); + Awaitility.setDefaultTimeout(Duration.ofMillis(20)); + } + + @AfterEach + void resetAwaitilityDefaults() { + Awaitility.reset(); + } + @Test - void requiresExactlyOneMetricBeforeAssertions() { - MetricData metric = + void matchesAllMetricsInScopeInAnyOrderAndIgnoresOtherScopes() { + MetricData duration = histogramData("test", "duration", "s", point(2), point(1)); + MetricData gauge = ImmutableMetricData.createLongGauge( Resource.empty(), InstrumentationScopeInfo.create("test"), - "duration", + "request.count", "", "", ImmutableGaugeData.empty()); - InstrumentationTestRunner runner = new FixedMetricsTestRunner(asList(metric, metric)); - AtomicBoolean metricAssertionCalled = new AtomicBoolean(); - AtomicBoolean pointAssertionCalled = new AtomicBoolean(); + MetricData unrelatedScope = histogramData("other", "unrelated", "s", point(3)); + + runner(asList(duration, gauge, unrelatedScope)) + .waitAndAssertMetricsExactly( + "test", + metric -> metric.hasName("request.count"), + histogram( + metric -> metric.hasName("duration").hasUnit("s"), + pointAssert -> pointAssert.hasCount(1).hasSum(1), + pointAssert -> pointAssert.hasCount(1).hasSum(2))); + } - Awaitility.setDefaultPollDelay(Duration.ZERO); - Awaitility.setDefaultPollInterval(Duration.ofMillis(1)); - Awaitility.setDefaultTimeout(Duration.ofMillis(10)); - try { + @Test + void rejectsMissingMetrics() { + InstrumentationTestRunner runner = + runner(singletonList(histogramData("test", "duration", "s", point(1)))); + + assertThatThrownBy( + () -> + runner.waitAndAssertMetricsExactly( + "test", + metric -> metric.hasName("duration"), + metric -> metric.hasName("request.count"))) + .isInstanceOf(AssertionError.class); + } + + @Test + void rejectsExtraAndDuplicateMetricsEvenWhenTheirAssertionsFail() { + MetricData duration = histogramData("test", "duration", "s", point(1)); + MetricData extra = histogramData("test", "extra", "ms", point(2)); + MetricData duplicateWithWrongMetadata = histogramData("test", "duration", "ms", point(3)); + + for (List metrics : + asList(asList(duration, extra), asList(duration, duplicateWithWrongMetadata))) { assertThatThrownBy( () -> - runner.waitAndAssertHistogramPoints( - "test", - "duration", - metricAssert -> { - metricAssertionCalled.set(true); - throw new IllegalStateException(); - }, - pointAssert -> pointAssertionCalled.set(true))) + runner(metrics) + .waitAndAssertMetricsExactly( + "test", + histogram( + metric -> metric.hasName("duration").hasUnit("s"), + pointAssert -> pointAssert.hasCount(1)))) .isInstanceOf(AssertionError.class); - } finally { - Awaitility.reset(); } - - assertThat(metricAssertionCalled).isFalse(); - assertThat(pointAssertionCalled).isFalse(); } @Test - void anyHistogramMustMatchMetadataAndPointsOnTheSameMetric() { - MetricData wrongMetadataAndPoints = histogram("test", "duration", "other", 2); - MetricData rightMetadataAndWrongPoints = histogram("test", "duration", "matching", 2); - MetricData wrongMetadataAndRightPoints = histogram("test", "duration", "other", 1); - MetricData expected = histogram("test", "duration", "matching", 1); - MetricData otherScope = histogram("other", "duration", "matching", 1); - MetricData otherName = histogram("test", "other", "matching", 1); - - InstrumentationTestRunner matchingRunner = - new FixedMetricsTestRunner( - asList( - wrongMetadataAndPoints, - rightMetadataAndWrongPoints, - wrongMetadataAndRightPoints, - otherScope, - otherName, - expected)); - - InstrumentationTestRunner nonMatchingRunner = - new FixedMetricsTestRunner( - asList(rightMetadataAndWrongPoints, wrongMetadataAndRightPoints)); - InstrumentationTestRunner noMatchingMetricRunner = - new FixedMetricsTestRunner(asList(otherScope, otherName)); + void histogramAssertionRejectsExtraPoints() { + InstrumentationTestRunner runner = + runner(singletonList(histogramData("test", "duration", "s", point(1), point(2)))); + + assertThatThrownBy( + () -> + runner.waitAndAssertMetricsExactly( + "test", + histogram( + metric -> metric.hasName("duration"), + pointAssert -> pointAssert.hasCount(1).hasSum(1)))) + .isInstanceOf(AssertionError.class); + } - Awaitility.setDefaultPollDelay(Duration.ZERO); - Awaitility.setDefaultPollInterval(Duration.ofMillis(1)); - Awaitility.setDefaultTimeout(Duration.ofMillis(10)); - try { - matchingRunner.waitAndAssertAnyHistogramPoints( - "test", - "duration", - metric -> metric.hasDescription("matching"), - point -> point.hasCount(1)); + @Test + void histogramAssertionRejectsNonHistogramMetricType() { + MetricData gauge = + ImmutableMetricData.createLongGauge( + Resource.empty(), + InstrumentationScopeInfo.create("test"), + "duration", + "", + "", + ImmutableGaugeData.empty()); - assertThatThrownBy( - () -> - nonMatchingRunner.waitAndAssertAnyHistogramPoints( - "test", - "duration", - metric -> metric.hasDescription("matching"), - point -> point.hasCount(1))) - .isInstanceOf(AssertionError.class); + assertThatThrownBy( + () -> + histogram( + metric -> metric.hasName("duration"), + pointAssert -> pointAssert.hasCount(1)) + .accept(assertThat(gauge))) + .isInstanceOf(AssertionError.class); + } - assertThatThrownBy( - () -> - noMatchingMetricRunner.waitAndAssertAnyHistogramPoints( - "test", - "duration", - metric -> metric.hasDescription("matching"), - point -> point.hasCount(1))) - .isInstanceOf(AssertionError.class); - } finally { - Awaitility.reset(); - } + private static InstrumentationTestRunner runner(List metrics) { + return new FixedMetricsTestRunner(metrics); } - private static MetricData histogram( - String instrumentationName, String metricName, String description, long pointCount) { + private static MetricData histogramData( + String scopeName, String metricName, String unit, HistogramPointData... points) { return ImmutableMetricData.createDoubleHistogram( Resource.empty(), - InstrumentationScopeInfo.create(instrumentationName), + InstrumentationScopeInfo.create(scopeName), metricName, - description, - "s", - ImmutableHistogramData.create( - AggregationTemporality.CUMULATIVE, - singletonList( - ImmutableHistogramPointData.create( - 0, - 1, - Attributes.empty(), - (double) pointCount, - false, - 0, - false, - 0, - emptyList(), - singletonList(pointCount))))); + "", + unit, + ImmutableHistogramData.create(AggregationTemporality.CUMULATIVE, asList(points))); + } + + private static HistogramPointData point(long sum) { + return ImmutableHistogramPointData.create( + 0, 1, Attributes.empty(), (double) sum, false, 0, false, 0, emptyList(), singletonList(1L)); } private static class FixedMetricsTestRunner extends InstrumentationTestRunner { diff --git a/testing-common/src/test/java/io/opentelemetry/instrumentation/testing/junit/LibraryInstrumentationExtensionTest.java b/testing-common/src/test/java/io/opentelemetry/instrumentation/testing/junit/LibraryInstrumentationExtensionTest.java index 625f2e51d24d..092e2dbd3c8b 100644 --- a/testing-common/src/test/java/io/opentelemetry/instrumentation/testing/junit/LibraryInstrumentationExtensionTest.java +++ b/testing-common/src/test/java/io/opentelemetry/instrumentation/testing/junit/LibraryInstrumentationExtensionTest.java @@ -6,7 +6,7 @@ package io.opentelemetry.instrumentation.testing.junit; import static io.opentelemetry.api.common.AttributeKey.stringKey; -import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.histogram; import io.opentelemetry.api.common.Attributes; import org.junit.jupiter.api.RepeatedTest; @@ -43,7 +43,7 @@ void shouldCollectTraces() { } @Test - void shouldAssertHistogramPoints() { + void shouldAssertAllMetricsForScope() { Attributes firstAttributes = Attributes.of(stringKey("key"), "first"); Attributes secondAttributes = Attributes.of(stringKey("key"), "second"); testing @@ -76,40 +76,13 @@ void shouldAssertHistogramPoints() { .build() .record(5); - testing.waitAndAssertHistogramPoints( + testing.waitAndAssertMetricsExactly( "test", - "duration", - metric -> metric.hasDescription("Test duration."), - point -> point.hasCount(1).hasSum(4).hasAttributes(secondAttributes), - point -> point.hasCount(1).hasSum(2).hasAttributes(firstAttributes)); - - testing.waitAndAssertAnyHistogramPoints( - "test", - "duration", - metric -> metric.hasDescription("Test duration."), - point -> point.hasCount(1).hasSum(4).hasAttributes(secondAttributes), - point -> point.hasCount(1).hasSum(2).hasAttributes(firstAttributes)); - } - - @Test - void shouldPropagateMetricAssertionFailure() { - testing - .getOpenTelemetry() - .getMeter("test") - .histogramBuilder("failed-duration") - .setUnit("s") - .build() - .record(2); - - assertThatThrownBy( - () -> - testing.waitAndAssertHistogramPoints( - "test", - "failed-duration", - metric -> { - throw new IllegalStateException("metric assertion failed"); - })) - .isInstanceOf(IllegalStateException.class) - .hasMessage("metric assertion failed"); + histogram( + metric -> metric.hasName("duration").hasUnit("s").hasDescription("Test duration."), + point -> point.hasCount(1).hasSum(4).hasAttributes(secondAttributes), + point -> point.hasCount(1).hasSum(2).hasAttributes(firstAttributes)), + histogram( + metric -> metric.hasName("other").hasUnit("ms"), point -> point.hasCount(1).hasSum(3))); } } diff --git a/testing-common/src/test/java/io/opentelemetry/instrumentation/testing/util/MetricAssertionsTest.java b/testing-common/src/test/java/io/opentelemetry/instrumentation/testing/util/MetricAssertionsTest.java deleted file mode 100644 index 69a6d4caa920..000000000000 --- a/testing-common/src/test/java/io/opentelemetry/instrumentation/testing/util/MetricAssertionsTest.java +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -package io.opentelemetry.instrumentation.testing.util; - -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.hasHistogramPointsSatisfyingExactly; -import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; -import static java.util.Arrays.asList; -import static java.util.Collections.emptyList; -import static java.util.Collections.singletonList; -import static org.assertj.core.api.Assertions.assertThatThrownBy; - -import io.opentelemetry.api.common.Attributes; -import io.opentelemetry.sdk.common.InstrumentationScopeInfo; -import io.opentelemetry.sdk.metrics.data.AggregationTemporality; -import io.opentelemetry.sdk.metrics.data.HistogramPointData; -import io.opentelemetry.sdk.metrics.data.MetricData; -import io.opentelemetry.sdk.metrics.internal.data.ImmutableGaugeData; -import io.opentelemetry.sdk.metrics.internal.data.ImmutableHistogramData; -import io.opentelemetry.sdk.metrics.internal.data.ImmutableHistogramPointData; -import io.opentelemetry.sdk.metrics.internal.data.ImmutableMetricData; -import io.opentelemetry.sdk.resources.Resource; -import org.junit.jupiter.api.Test; - -class MetricAssertionsTest { - - private static final InstrumentationScopeInfo SCOPE = InstrumentationScopeInfo.create("test"); - - @Test - void singlePoint() { - assertThat(histogram(point(1))) - .hasName("duration") - .hasUnit("s") - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> - point - .hasCount(1) - .hasSum(1) - .hasBucketBoundaries() - .hasBucketCounts(1) - .hasAttributes(Attributes.empty()))); - } - - @Test - void multiplePointsInAnyOrder() { - assertThat(singletonList(histogram(point(1), point(2)))) - .satisfiesExactly( - hasHistogramPointsSatisfyingExactly( - point -> point.hasCount(2).hasSum(2), point -> point.hasCount(1).hasSum(1))); - } - - @Test - void zeroPoints() { - assertThat(histogram()).satisfies(hasHistogramPointsSatisfyingExactly()); - } - - @Test - void missingPoint() { - assertThatThrownBy( - () -> - assertThat(histogram(point(1))) - .satisfies( - hasHistogramPointsSatisfyingExactly( - point -> point.hasCount(1), point -> point.hasCount(2)))) - .isInstanceOf(AssertionError.class); - } - - @Test - void extraPoint() { - assertThatThrownBy( - () -> - assertThat(histogram(point(1), point(2))) - .satisfies(hasHistogramPointsSatisfyingExactly(point -> point.hasCount(1)))) - .isInstanceOf(AssertionError.class); - } - - @Test - void wrongMetricType() { - MetricData gauge = - ImmutableMetricData.createLongGauge( - Resource.empty(), SCOPE, "gauge", "", "", ImmutableGaugeData.empty()); - - assertThatThrownBy(() -> assertThat(gauge).satisfies(hasHistogramPointsSatisfyingExactly())) - .isInstanceOf(AssertionError.class); - } - - @Test - void failedPointAssertion() { - assertThatThrownBy( - () -> - assertThat(histogram(point(1))) - .satisfies(hasHistogramPointsSatisfyingExactly(point -> point.hasCount(999)))) - .isInstanceOf(AssertionError.class) - .hasMessageContaining("to satisfy all the consumers in any order"); - } - - private static MetricData histogram(HistogramPointData... points) { - return ImmutableMetricData.createDoubleHistogram( - Resource.empty(), - SCOPE, - "duration", - "", - "s", - ImmutableHistogramData.create(AggregationTemporality.CUMULATIVE, asList(points))); - } - - private static HistogramPointData point(long count) { - return ImmutableHistogramPointData.create( - 0, - 1, - Attributes.empty(), - (double) count, - false, - 0, - false, - 0, - emptyList(), - singletonList(count)); - } -} From cce4a2816c5079a7d0f8a37c578547ad698eb7ec Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 20 Oct 2026 05:07:58 +0000 Subject: [PATCH 08/14] Migrate exhaustive metric assertions in tests Co-authored-by: trask <218610+trask@users.noreply.github.com> --- .../cassandra/v4_0/CassandraTest.java | 31 ++- .../cassandra/v4_4/CassandraTest.java | 31 ++- .../clientv1/v0_5/ClickHouseClientV1Test.java | 13 +- .../clientv2/v0_8/ClickHouseClientV2Test.java | 13 +- .../jedis/v2_0/ShardedJedisClientTest.java | 13 +- .../jedis/v3_0/ShardedJedis30ClientTest.java | 24 +-- .../jedis/v4_0/Jedis40ClientTest.java | 21 +- .../v7_0/KubernetesClientTest.java | 18 +- .../v7_0/KubernetesClientVer20Test.java | 18 +- .../v5_0/LettuceReactiveClientTest.java | 11 +- .../v5_1/AbstractLettuceClientTest.java | 17 +- .../mongo/v4_0/MongoConfiguredTargetTest.java | 15 +- .../v1_10/metrics/MeterTest.java | 67 +++---- .../v1_31/metrics/MeterTest.java | 75 ++++--- .../v1_32/incubator/metrics/MeterTest.java | 75 ++++--- .../v1_32/metrics/MeterTest.java | 75 ++++--- .../v1_37/incubator/metrics/MeterTest.java | 75 ++++--- .../v1_37/incubator/metrics/MeterTest.java | 75 ++++--- .../v1_37/metrics/MeterTest.java | 75 ++++--- .../v1_65/incubator/metrics/MeterTest.java | 35 ++-- .../pulsar/v2_8/PulsarClientTest.java | 186 ++++++++---------- .../client/RatpackHttpClientTest.java | 35 ++-- 22 files changed, 443 insertions(+), 555 deletions(-) diff --git a/instrumentation/cassandra/cassandra-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraTest.java b/instrumentation/cassandra/cassandra-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraTest.java index 039345d94388..97bda27b61e1 100644 --- a/instrumentation/cassandra/cassandra-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraTest.java +++ b/instrumentation/cassandra/cassandra-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_0/CassandraTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.cassandra.v4_0; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.histogram; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.DbAttributes.DB_COLLECTION_NAME; import static io.opentelemetry.semconv.DbAttributes.DB_OPERATION_NAME; @@ -105,23 +106,19 @@ void responsePeerComesFromTheChannel() { assertThat(span.getAttributes().get(NETWORK_PEER_PORT)).isEqualTo(cassandraPort); assertThat(span.getAttributes().get(NETWORK_TYPE)).isEqualTo(null); }); - testing.waitAndAssertMetrics( + testing.waitAndAssertMetricsExactly( getInstrumentationName(), - metric -> - metric - .hasName("db.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(DB_COLLECTION_NAME, "system.local"), - equalTo(DB_OPERATION_NAME, "SELECT"), - equalTo(DB_QUERY_SUMMARY, "SELECT system.local"), - equalTo(DB_SYSTEM_NAME, "cassandra"), - equalTo(NETWORK_PEER_ADDRESS, cassandraIp), - equalTo(NETWORK_PEER_PORT, cassandraPort), - equalTo(SERVER_ADDRESS, cassandraHost), - equalTo(SERVER_PORT, cassandraPort))))); + histogram( + metric -> metric.hasName("db.client.operation.duration"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(DB_COLLECTION_NAME, "system.local"), + equalTo(DB_OPERATION_NAME, "SELECT"), + equalTo(DB_QUERY_SUMMARY, "SELECT system.local"), + equalTo(DB_SYSTEM_NAME, "cassandra"), + equalTo(NETWORK_PEER_ADDRESS, cassandraIp), + equalTo(NETWORK_PEER_PORT, cassandraPort), + equalTo(SERVER_ADDRESS, cassandraHost), + equalTo(SERVER_PORT, cassandraPort)))); } } diff --git a/instrumentation/cassandra/cassandra-4.4/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_4/CassandraTest.java b/instrumentation/cassandra/cassandra-4.4/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_4/CassandraTest.java index 73b3625db5e1..68b92f0f7c49 100644 --- a/instrumentation/cassandra/cassandra-4.4/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_4/CassandraTest.java +++ b/instrumentation/cassandra/cassandra-4.4/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/cassandra/v4_4/CassandraTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.cassandra.v4_4; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.histogram; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.DbAttributes.DB_COLLECTION_NAME; import static io.opentelemetry.semconv.DbAttributes.DB_OPERATION_NAME; @@ -100,24 +101,20 @@ void responsePeerComesFromTheChannel() throws ReflectiveOperationException { assertThat(span.getAttributes().get(NETWORK_PEER_PORT)).isEqualTo(cassandraPort); assertThat(span.getAttributes().get(NETWORK_TYPE)).isEqualTo(null); }); - testing.waitAndAssertMetrics( + testing.waitAndAssertMetricsExactly( getInstrumentationName(), - metric -> - metric - .hasName("db.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(DB_COLLECTION_NAME, "system.local"), - equalTo(DB_OPERATION_NAME, "SELECT"), - equalTo(DB_QUERY_SUMMARY, "SELECT system.local"), - equalTo(DB_SYSTEM_NAME, "cassandra"), - equalTo(NETWORK_PEER_ADDRESS, cassandraIp), - equalTo(NETWORK_PEER_PORT, cassandraPort), - equalTo(SERVER_ADDRESS, "localhost"), - equalTo(SERVER_PORT, cassandraPort))))); + histogram( + metric -> metric.hasName("db.client.operation.duration"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(DB_COLLECTION_NAME, "system.local"), + equalTo(DB_OPERATION_NAME, "SELECT"), + equalTo(DB_QUERY_SUMMARY, "SELECT system.local"), + equalTo(DB_SYSTEM_NAME, "cassandra"), + equalTo(NETWORK_PEER_ADDRESS, cassandraIp), + equalTo(NETWORK_PEER_PORT, cassandraPort), + equalTo(SERVER_ADDRESS, "localhost"), + equalTo(SERVER_PORT, cassandraPort)))); } private static CqlSession getDelegate(CqlSession session) throws IllegalAccessException { diff --git a/instrumentation/clickhouse/clickhouse-client-v1-0.5/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/clickhouse/clientv1/v0_5/ClickHouseClientV1Test.java b/instrumentation/clickhouse/clickhouse-client-v1-0.5/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/clickhouse/clientv1/v0_5/ClickHouseClientV1Test.java index 4ffe448ab4bd..0f0036447006 100644 --- a/instrumentation/clickhouse/clickhouse-client-v1-0.5/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/clickhouse/clientv1/v0_5/ClickHouseClientV1Test.java +++ b/instrumentation/clickhouse/clickhouse-client-v1-0.5/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/clickhouse/clientv1/v0_5/ClickHouseClientV1Test.java @@ -6,6 +6,7 @@ package io.opentelemetry.javaagent.instrumentation.clickhouse.clientv1.v0_5; import static io.opentelemetry.instrumentation.testing.junit.db.DbClientMetricsTestUtil.assertDurationMetric; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.histogram; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.DbAttributes.DB_NAMESPACE; import static io.opentelemetry.semconv.DbAttributes.DB_QUERY_SUMMARY; @@ -376,15 +377,11 @@ void testExecuteAndWaitThrowsException() { NETWORK_PEER_PORT, SERVER_ADDRESS, SERVER_PORT); - testing.waitAndAssertMetrics( + testing.waitAndAssertMetricsExactly( "io.opentelemetry.clickhouse-client-v1-0.5", - metric -> - metric - .hasName("db.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> point.hasAttribute(ERROR_TYPE, "60")))); + histogram( + metric -> metric.hasName("db.client.operation.duration"), + point -> point.hasAttribute(ERROR_TYPE, "60"))); } @Test diff --git a/instrumentation/clickhouse/clickhouse-client-v2-0.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/clickhouse/clientv2/v0_8/ClickHouseClientV2Test.java b/instrumentation/clickhouse/clickhouse-client-v2-0.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/clickhouse/clientv2/v0_8/ClickHouseClientV2Test.java index d88118a1eebf..63b571421626 100644 --- a/instrumentation/clickhouse/clickhouse-client-v2-0.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/clickhouse/clientv2/v0_8/ClickHouseClientV2Test.java +++ b/instrumentation/clickhouse/clickhouse-client-v2-0.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/clickhouse/clientv2/v0_8/ClickHouseClientV2Test.java @@ -6,6 +6,7 @@ package io.opentelemetry.javaagent.instrumentation.clickhouse.clientv2.v0_8; import static io.opentelemetry.instrumentation.testing.junit.db.DbClientMetricsTestUtil.assertDurationMetric; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.histogram; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.DbAttributes.DB_NAMESPACE; import static io.opentelemetry.semconv.DbAttributes.DB_QUERY_SUMMARY; @@ -342,15 +343,11 @@ void testQueryThrowsServerException() { NETWORK_PEER_PORT, SERVER_ADDRESS, SERVER_PORT); - testing.waitAndAssertMetrics( + testing.waitAndAssertMetricsExactly( "io.opentelemetry.clickhouse-client-v2-0.8", - metric -> - metric - .hasName("db.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> point.hasAttribute(ERROR_TYPE, "60")))); + histogram( + metric -> metric.hasName("db.client.operation.duration"), + point -> point.hasAttribute(ERROR_TYPE, "60"))); } @Test diff --git a/instrumentation/jedis/jedis-2.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v2_0/ShardedJedisClientTest.java b/instrumentation/jedis/jedis-2.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v2_0/ShardedJedisClientTest.java index e49d71d2a987..fafb5f7761c4 100644 --- a/instrumentation/jedis/jedis-2.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v2_0/ShardedJedisClientTest.java +++ b/instrumentation/jedis/jedis-2.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v2_0/ShardedJedisClientTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.jedis.v2_0; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.histogram; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.DbAttributes.DB_NAMESPACE; import static io.opentelemetry.semconv.DbAttributes.DB_OPERATION_NAME; @@ -144,15 +145,11 @@ void commandFromAllShardsUsesConfiguredTarget() { NETWORK_PEER_ADDRESS, peerAddress.getAddress().getHostAddress()), equalTo(NETWORK_PEER_PORT, (long) peerAddress.getPort())))); - testing.waitAndAssertMetrics( + testing.waitAndAssertMetricsExactly( "io.opentelemetry.jedis-2.0", - metric -> - metric - .hasName("db.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> point.hasAttribute(SERVER_ADDRESS, configuredTarget)))); + histogram( + metric -> metric.hasName("db.client.operation.duration"), + point -> point.hasAttribute(SERVER_ADDRESS, configuredTarget))); } @Test diff --git a/instrumentation/jedis/jedis-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v3_0/ShardedJedis30ClientTest.java b/instrumentation/jedis/jedis-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v3_0/ShardedJedis30ClientTest.java index 63e62200ec1b..0391ed26385c 100644 --- a/instrumentation/jedis/jedis-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v3_0/ShardedJedis30ClientTest.java +++ b/instrumentation/jedis/jedis-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v3_0/ShardedJedis30ClientTest.java @@ -6,6 +6,7 @@ package io.opentelemetry.javaagent.instrumentation.jedis.v3_0; import static io.opentelemetry.instrumentation.testing.junit.db.DbClientMetricsTestUtil.assertDurationMetric; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.histogram; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; import static io.opentelemetry.semconv.DbAttributes.DB_NAMESPACE; @@ -153,20 +154,15 @@ void commandFromAllShardsUsesConfiguredTarget() { SERVER_ADDRESS, NETWORK_PEER_ADDRESS, NETWORK_PEER_PORT); - testing.waitAndAssertMetrics( + testing.waitAndAssertMetricsExactly( "io.opentelemetry.jedis-3.0", - metric -> - metric - .hasName("db.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasAttribute(SERVER_ADDRESS, configuredTarget) - .hasAttributesSatisfying( - attributes -> - assertThat(attributes.asMap()) - .doesNotContainKey(SERVER_PORT))))); + histogram( + metric -> metric.hasName("db.client.operation.duration"), + point -> + point + .hasAttribute(SERVER_ADDRESS, configuredTarget) + .hasAttributesSatisfying( + attributes -> + assertThat(attributes.asMap()).doesNotContainKey(SERVER_PORT)))); } } diff --git a/instrumentation/jedis/jedis-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v4_0/Jedis40ClientTest.java b/instrumentation/jedis/jedis-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v4_0/Jedis40ClientTest.java index 68afc7385599..4f2c489166a6 100644 --- a/instrumentation/jedis/jedis-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v4_0/Jedis40ClientTest.java +++ b/instrumentation/jedis/jedis-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jedis/v4_0/Jedis40ClientTest.java @@ -6,6 +6,7 @@ package io.opentelemetry.javaagent.instrumentation.jedis.v4_0; import static io.opentelemetry.instrumentation.testing.junit.db.DbClientMetricsTestUtil.assertDurationMetric; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.histogram; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.DbAttributes.DB_NAMESPACE; import static io.opentelemetry.semconv.DbAttributes.DB_OPERATION_BATCH_SIZE; @@ -154,19 +155,15 @@ void mappedCommandUsesConfiguredTarget() { equalTo(NETWORK_PEER_PORT, port), equalTo(NETWORK_PEER_ADDRESS, ip)))); - testing.waitAndAssertMetrics( + testing.waitAndAssertMetricsExactly( "io.opentelemetry.jedis-4.0", - metric -> - metric - .hasName("db.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasAttribute(DB_OPERATION_NAME, "SET") - .hasAttribute(SERVER_ADDRESS, configuredHost) - .hasAttribute(SERVER_PORT, (long) configuredPort)))); + histogram( + metric -> metric.hasName("db.client.operation.duration"), + point -> + point + .hasAttribute(DB_OPERATION_NAME, "SET") + .hasAttribute(SERVER_ADDRESS, configuredHost) + .hasAttribute(SERVER_PORT, (long) configuredPort))); } @Test diff --git a/instrumentation/kubernetes-client-7.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/v7_0/KubernetesClientTest.java b/instrumentation/kubernetes-client-7.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/v7_0/KubernetesClientTest.java index 871a638f04f8..839c99a65f08 100644 --- a/instrumentation/kubernetes-client-7.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/v7_0/KubernetesClientTest.java +++ b/instrumentation/kubernetes-client-7.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/v7_0/KubernetesClientTest.java @@ -7,6 +7,7 @@ import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.instrumentation.testing.junit.service.SemconvServiceStabilityUtil.maybeStablePeerService; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.histogram; import static io.opentelemetry.instrumentation.testing.util.TelemetryDataUtil.orderByRootSpanName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; @@ -104,16 +105,15 @@ void synchronousCall() throws ApiException { experimental("namespace")), equalTo(stringKey("kubernetes-client.name"), experimental("name"))))); - testing.waitAndAssertMetrics( + testing.waitAndAssertMetricsExactly( "io.opentelemetry.kubernetes-client-7.0", - metric -> - metric - .hasName("http.client.request.duration") - .hasDescription("Duration of HTTP client requests.") - .hasUnit("s") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying(point -> point.hasSumGreaterThan(0.0)))); + histogram( + metric -> + metric + .hasName("http.client.request.duration") + .hasDescription("Duration of HTTP client requests.") + .hasUnit("s"), + point -> point.hasSumGreaterThan(0.0))); } @Test diff --git a/instrumentation/kubernetes-client-7.0/javaagent/src/version20Test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/v7_0/KubernetesClientVer20Test.java b/instrumentation/kubernetes-client-7.0/javaagent/src/version20Test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/v7_0/KubernetesClientVer20Test.java index 0696a7cd31f3..64eb523a2c5a 100644 --- a/instrumentation/kubernetes-client-7.0/javaagent/src/version20Test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/v7_0/KubernetesClientVer20Test.java +++ b/instrumentation/kubernetes-client-7.0/javaagent/src/version20Test/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/v7_0/KubernetesClientVer20Test.java @@ -7,6 +7,7 @@ import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.instrumentation.testing.junit.service.SemconvServiceStabilityUtil.maybeStablePeerService; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.histogram; import static io.opentelemetry.instrumentation.testing.util.TelemetryDataUtil.orderByRootSpanName; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; @@ -108,16 +109,15 @@ void synchronousCall() throws ApiException { experimental("namespace")), equalTo(stringKey("kubernetes-client.name"), experimental("name"))))); - testing.waitAndAssertMetrics( + testing.waitAndAssertMetricsExactly( "io.opentelemetry.kubernetes-client-7.0", - metric -> - metric - .hasName("http.client.request.duration") - .hasDescription("Duration of HTTP client requests.") - .hasUnit("s") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying(point -> point.hasSumGreaterThan(0.0)))); + histogram( + metric -> + metric + .hasName("http.client.request.duration") + .hasDescription("Duration of HTTP client requests.") + .hasUnit("s"), + point -> point.hasSumGreaterThan(0.0))); } @Test diff --git a/instrumentation/lettuce/lettuce-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceReactiveClientTest.java b/instrumentation/lettuce/lettuce-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceReactiveClientTest.java index 29bcfb1cf545..8655a4842859 100644 --- a/instrumentation/lettuce/lettuce-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceReactiveClientTest.java +++ b/instrumentation/lettuce/lettuce-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/lettuce/v5_0/LettuceReactiveClientTest.java @@ -7,6 +7,7 @@ import static io.opentelemetry.api.common.AttributeKey.booleanKey; import static io.opentelemetry.api.common.AttributeKey.longKey; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.histogram; import static io.opentelemetry.javaagent.instrumentation.lettuce.v5_0.ExperimentalHelper.EXPERIMENTAL_ATTRIBUTES_ENABLED; import static io.opentelemetry.javaagent.instrumentation.lettuce.v5_0.ExperimentalHelper.experimental; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; @@ -435,13 +436,11 @@ void testNoResponseCommandFluxCancellationEndsSpanOnce() { trace -> trace.hasSpansSatisfyingExactly( span -> span.hasName("DEBUG " + host + ":" + port).hasKind(SpanKind.CLIENT))); - testing.waitAndAssertMetrics( + testing.waitAndAssertMetricsExactly( "io.opentelemetry.lettuce-5.0", - metrics -> - metrics - .hasName("db.client.operation.duration") - .hasHistogramSatisfying( - histogram -> histogram.hasPointsSatisfying(point -> point.hasCount(1)))); + histogram( + metric -> metric.hasName("db.client.operation.duration"), + point -> point.hasCount(1))); }); } diff --git a/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceClientTest.java b/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceClientTest.java index 6846fcece1db..66c829df4d47 100644 --- a/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceClientTest.java +++ b/instrumentation/lettuce/lettuce-5.1/testing/src/main/java/io/opentelemetry/instrumentation/lettuce/v5_1/AbstractLettuceClientTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.instrumentation.lettuce.v5_1; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.histogram; import static io.opentelemetry.instrumentation.testing.util.TestLatestDeps.testLatestDeps; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; @@ -101,19 +102,11 @@ protected static void assertCommandErrorEvents(SpanData span) { protected void assertCommandErrorMetric(String errorType) { testing() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( "io.opentelemetry.lettuce-5.1", - "db.client.operation.duration", - metrics -> - metrics.anySatisfy( - metric -> - assertThat(metric) - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfying( - equalTo(ERROR_TYPE, errorType)))))); + histogram( + metric -> metric.hasName("db.client.operation.duration"), + point -> point.hasAttributesSatisfying(equalTo(ERROR_TYPE, errorType)))); } protected String spanName(String operation) { diff --git a/instrumentation/mongo/mongo-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/mongo/v4_0/MongoConfiguredTargetTest.java b/instrumentation/mongo/mongo-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/mongo/v4_0/MongoConfiguredTargetTest.java index 06112e14ea42..f17552853eff 100644 --- a/instrumentation/mongo/mongo-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/mongo/v4_0/MongoConfiguredTargetTest.java +++ b/instrumentation/mongo/mongo-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/mongo/v4_0/MongoConfiguredTargetTest.java @@ -6,6 +6,7 @@ package io.opentelemetry.javaagent.instrumentation.mongo.v4_0; import static io.opentelemetry.instrumentation.testing.junit.db.DbClientMetricsTestUtil.assertDurationMetric; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.histogram; import static io.opentelemetry.semconv.DbAttributes.DB_COLLECTION_NAME; import static io.opentelemetry.semconv.DbAttributes.DB_NAMESPACE; import static io.opentelemetry.semconv.DbAttributes.DB_OPERATION_NAME; @@ -91,16 +92,10 @@ void severalSeedsAreTheOperationDurationLogicalServer() { DB_OPERATION_NAME, DB_COLLECTION_NAME, SERVER_ADDRESS); - testing.waitAndAssertMetrics( + testing.waitAndAssertMetricsExactly( "io.opentelemetry.mongo-4.0", - metric -> - metric - .hasName("db.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttribute( - SERVER_ADDRESS, "db1.example:27017,db2.example:27018")))); + histogram( + metric -> metric.hasName("db.client.operation.duration"), + point -> point.hasAttribute(SERVER_ADDRESS, "db1.example:27017,db2.example:27018"))); } } diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/MeterTest.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/MeterTest.java index 6ebe4174f8e6..cc69b31e3d3c 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/MeterTest.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.10/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_10/metrics/MeterTest.java @@ -6,6 +6,7 @@ package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_10.metrics; import static io.opentelemetry.api.common.AttributeKey.stringKey; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.histogram; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import io.opentelemetry.api.common.Attributes; @@ -337,26 +338,21 @@ void longHistogram() { instrument.record(5, Attributes.of(stringKey("q"), "r")); instrument.record(6, Attributes.of(stringKey("q"), "r")); - testing.waitAndAssertMetrics( + testing.waitAndAssertMetricsExactly( instrumentationName, - metric -> - metric - .hasName("test") - .hasDescription("d") - .hasUnit("u") - .hasInstrumentationScope( - InstrumentationScopeInfo.builder(instrumentationName) - .setVersion("1.2.3") - .setSchemaUrl("http://schema.org") - .build()) - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(11.0) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("q"), "r"))))); + histogram( + metric -> + metric + .hasName("test") + .hasDescription("d") + .hasUnit("u") + .hasInstrumentationScope( + InstrumentationScopeInfo.builder(instrumentationName) + .setVersion("1.2.3") + .setSchemaUrl("http://schema.org") + .build()), + point -> + point.hasSum(11.0).hasAttributesSatisfyingExactly(equalTo(stringKey("q"), "r")))); } @Test @@ -367,26 +363,21 @@ void doubleHistogram() { instrument.record(5.5, Attributes.of(stringKey("q"), "r")); instrument.record(6.6, Attributes.of(stringKey("q"), "r")); - testing.waitAndAssertMetrics( + testing.waitAndAssertMetricsExactly( instrumentationName, - metric -> - metric - .hasName("test") - .hasDescription("d") - .hasUnit("u") - .hasInstrumentationScope( - InstrumentationScopeInfo.builder(instrumentationName) - .setVersion("1.2.3") - .setSchemaUrl("http://schema.org") - .build()) - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(12.1) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("q"), "r"))))); + histogram( + metric -> + metric + .hasName("test") + .hasDescription("d") + .hasUnit("u") + .hasInstrumentationScope( + InstrumentationScopeInfo.builder(instrumentationName) + .setVersion("1.2.3") + .setSchemaUrl("http://schema.org") + .build()), + point -> + point.hasSum(12.1).hasAttributesSatisfyingExactly(equalTo(stringKey("q"), "r")))); } @Test diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.31/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_31/metrics/MeterTest.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.31/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_31/metrics/MeterTest.java index acd7d2d25b35..ee22784a369e 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.31/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_31/metrics/MeterTest.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.31/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_31/metrics/MeterTest.java @@ -6,6 +6,7 @@ package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_31.metrics; import static io.opentelemetry.api.common.AttributeKey.stringKey; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.histogram; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static java.util.Collections.singletonList; @@ -225,27 +226,24 @@ void longHistogram() { instrument.record(5, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); instrument.record(6, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); - testing.waitAndAssertMetrics( + testing.waitAndAssertMetricsExactly( instrumentationName, - metric -> - metric - .hasName("test") - .hasDescription("d") - .hasUnit("u") - .hasInstrumentationScope( - InstrumentationScopeInfo.builder(instrumentationName) - .setVersion("1.2.3") - .setSchemaUrl("http://schema.org") - .build()) - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(11.0) - .hasBucketBoundaries(10.0) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("test"), "test"))))); + histogram( + metric -> + metric + .hasName("test") + .hasDescription("d") + .hasUnit("u") + .hasInstrumentationScope( + InstrumentationScopeInfo.builder(instrumentationName) + .setVersion("1.2.3") + .setSchemaUrl("http://schema.org") + .build()), + point -> + point + .hasSum(11.0) + .hasBucketBoundaries(10.0) + .hasAttributesSatisfyingExactly(equalTo(stringKey("test"), "test")))); } @Test @@ -262,27 +260,24 @@ void doubleHistogram() { instrument.record(5.5, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); instrument.record(6.6, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); - testing.waitAndAssertMetrics( + testing.waitAndAssertMetricsExactly( instrumentationName, - metric -> - metric - .hasName("test") - .hasDescription("d") - .hasUnit("u") - .hasInstrumentationScope( - InstrumentationScopeInfo.builder(instrumentationName) - .setVersion("1.2.3") - .setSchemaUrl("http://schema.org") - .build()) - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(12.1) - .hasBucketBoundaries(10.0) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("test"), "test"))))); + histogram( + metric -> + metric + .hasName("test") + .hasDescription("d") + .hasUnit("u") + .hasInstrumentationScope( + InstrumentationScopeInfo.builder(instrumentationName) + .setVersion("1.2.3") + .setSchemaUrl("http://schema.org") + .build()), + point -> + point + .hasSum(12.1) + .hasBucketBoundaries(10.0) + .hasAttributesSatisfyingExactly(equalTo(stringKey("test"), "test")))); } @Test diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/incubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/incubator/metrics/MeterTest.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/incubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/incubator/metrics/MeterTest.java index 7dd5db361405..a9605da6d67e 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/incubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/incubator/metrics/MeterTest.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/incubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/incubator/metrics/MeterTest.java @@ -6,6 +6,7 @@ package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_32.incubator.metrics; import static io.opentelemetry.api.common.AttributeKey.stringKey; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.histogram; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static java.util.Collections.singletonList; @@ -225,27 +226,24 @@ void longHistogram() { instrument.record(5, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); instrument.record(6, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); - testing.waitAndAssertMetrics( + testing.waitAndAssertMetricsExactly( instrumentationName, - metric -> - metric - .hasName("test") - .hasDescription("d") - .hasUnit("u") - .hasInstrumentationScope( - InstrumentationScopeInfo.builder(instrumentationName) - .setVersion("1.2.3") - .setSchemaUrl("http://schema.org") - .build()) - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(11.0) - .hasBucketBoundaries(10.0) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("test"), "test"))))); + histogram( + metric -> + metric + .hasName("test") + .hasDescription("d") + .hasUnit("u") + .hasInstrumentationScope( + InstrumentationScopeInfo.builder(instrumentationName) + .setVersion("1.2.3") + .setSchemaUrl("http://schema.org") + .build()), + point -> + point + .hasSum(11.0) + .hasBucketBoundaries(10.0) + .hasAttributesSatisfyingExactly(equalTo(stringKey("test"), "test")))); } @Test @@ -262,27 +260,24 @@ void doubleHistogram() { instrument.record(5.5, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); instrument.record(6.6, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); - testing.waitAndAssertMetrics( + testing.waitAndAssertMetricsExactly( instrumentationName, - metric -> - metric - .hasName("test") - .hasDescription("d") - .hasUnit("u") - .hasInstrumentationScope( - InstrumentationScopeInfo.builder(instrumentationName) - .setVersion("1.2.3") - .setSchemaUrl("http://schema.org") - .build()) - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(12.1) - .hasBucketBoundaries(10.0) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("test"), "test"))))); + histogram( + metric -> + metric + .hasName("test") + .hasDescription("d") + .hasUnit("u") + .hasInstrumentationScope( + InstrumentationScopeInfo.builder(instrumentationName) + .setVersion("1.2.3") + .setSchemaUrl("http://schema.org") + .build()), + point -> + point + .hasSum(12.1) + .hasBucketBoundaries(10.0) + .hasAttributesSatisfyingExactly(equalTo(stringKey("test"), "test")))); } @Test diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/metrics/MeterTest.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/metrics/MeterTest.java index 0a1f8a2bde9c..44927bf33a08 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/metrics/MeterTest.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.32/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_32/metrics/MeterTest.java @@ -6,6 +6,7 @@ package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_32.metrics; import static io.opentelemetry.api.common.AttributeKey.stringKey; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.histogram; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static java.util.Collections.singletonList; import static org.assertj.core.api.Assertions.assertThatThrownBy; @@ -64,27 +65,24 @@ void longHistogram() { instrument.record(5, Attributes.of(stringKey("test"), "test")); instrument.record(6, Attributes.of(stringKey("test"), "test")); - testing.waitAndAssertMetrics( + testing.waitAndAssertMetricsExactly( instrumentationName, - metric -> - metric - .hasName("test") - .hasDescription("d") - .hasUnit("u") - .hasInstrumentationScope( - InstrumentationScopeInfo.builder(instrumentationName) - .setVersion("1.2.3") - .setSchemaUrl("http://schema.org") - .build()) - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(11.0) - .hasBucketBoundaries(10.0) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("test"), "test"))))); + histogram( + metric -> + metric + .hasName("test") + .hasDescription("d") + .hasUnit("u") + .hasInstrumentationScope( + InstrumentationScopeInfo.builder(instrumentationName) + .setVersion("1.2.3") + .setSchemaUrl("http://schema.org") + .build()), + point -> + point + .hasSum(11.0) + .hasBucketBoundaries(10.0) + .hasAttributesSatisfyingExactly(equalTo(stringKey("test"), "test")))); } @Test @@ -98,26 +96,23 @@ void doubleHistogram() { instrument.record(5.5, Attributes.of(stringKey("test"), "test")); instrument.record(6.6, Attributes.of(stringKey("test"), "test")); - testing.waitAndAssertMetrics( + testing.waitAndAssertMetricsExactly( instrumentationName, - metric -> - metric - .hasName("test") - .hasDescription("d") - .hasUnit("u") - .hasInstrumentationScope( - InstrumentationScopeInfo.builder(instrumentationName) - .setVersion("1.2.3") - .setSchemaUrl("http://schema.org") - .build()) - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(12.1) - .hasBucketBoundaries(10.0) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("test"), "test"))))); + histogram( + metric -> + metric + .hasName("test") + .hasDescription("d") + .hasUnit("u") + .hasInstrumentationScope( + InstrumentationScopeInfo.builder(instrumentationName) + .setVersion("1.2.3") + .setSchemaUrl("http://schema.org") + .build()), + point -> + point + .hasSum(12.1) + .hasBucketBoundaries(10.0) + .hasAttributesSatisfyingExactly(equalTo(stringKey("test"), "test")))); } } diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/incubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/MeterTest.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/incubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/MeterTest.java index c9cf6cc2a2b3..34d0de05e22a 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/incubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/MeterTest.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/incubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/MeterTest.java @@ -6,6 +6,7 @@ package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_37.incubator.metrics; import static io.opentelemetry.api.common.AttributeKey.stringKey; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.histogram; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static java.util.Collections.singletonList; @@ -225,27 +226,24 @@ void longHistogram() { instrument.record(5, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); instrument.record(6, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); - testing.waitAndAssertMetrics( + testing.waitAndAssertMetricsExactly( instrumentationName, - metric -> - metric - .hasName("test") - .hasDescription("d") - .hasUnit("u") - .hasInstrumentationScope( - InstrumentationScopeInfo.builder(instrumentationName) - .setVersion("1.2.3") - .setSchemaUrl("http://schema.org") - .build()) - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(11.0) - .hasBucketBoundaries(10.0) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("test"), "test"))))); + histogram( + metric -> + metric + .hasName("test") + .hasDescription("d") + .hasUnit("u") + .hasInstrumentationScope( + InstrumentationScopeInfo.builder(instrumentationName) + .setVersion("1.2.3") + .setSchemaUrl("http://schema.org") + .build()), + point -> + point + .hasSum(11.0) + .hasBucketBoundaries(10.0) + .hasAttributesSatisfyingExactly(equalTo(stringKey("test"), "test")))); } @Test @@ -262,27 +260,24 @@ void doubleHistogram() { instrument.record(5.5, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); instrument.record(6.6, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); - testing.waitAndAssertMetrics( + testing.waitAndAssertMetricsExactly( instrumentationName, - metric -> - metric - .hasName("test") - .hasDescription("d") - .hasUnit("u") - .hasInstrumentationScope( - InstrumentationScopeInfo.builder(instrumentationName) - .setVersion("1.2.3") - .setSchemaUrl("http://schema.org") - .build()) - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(12.1) - .hasBucketBoundaries(10.0) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("test"), "test"))))); + histogram( + metric -> + metric + .hasName("test") + .hasDescription("d") + .hasUnit("u") + .hasInstrumentationScope( + InstrumentationScopeInfo.builder(instrumentationName) + .setVersion("1.2.3") + .setSchemaUrl("http://schema.org") + .build()), + point -> + point + .hasSum(12.1) + .hasBucketBoundaries(10.0) + .hasAttributesSatisfyingExactly(equalTo(stringKey("test"), "test")))); } @Test diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/oldAndNewIncubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/MeterTest.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/oldAndNewIncubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/MeterTest.java index c9cf6cc2a2b3..34d0de05e22a 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/oldAndNewIncubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/MeterTest.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/oldAndNewIncubatorTest/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/incubator/metrics/MeterTest.java @@ -6,6 +6,7 @@ package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_37.incubator.metrics; import static io.opentelemetry.api.common.AttributeKey.stringKey; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.histogram; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static java.util.Collections.singletonList; @@ -225,27 +226,24 @@ void longHistogram() { instrument.record(5, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); instrument.record(6, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); - testing.waitAndAssertMetrics( + testing.waitAndAssertMetricsExactly( instrumentationName, - metric -> - metric - .hasName("test") - .hasDescription("d") - .hasUnit("u") - .hasInstrumentationScope( - InstrumentationScopeInfo.builder(instrumentationName) - .setVersion("1.2.3") - .setSchemaUrl("http://schema.org") - .build()) - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(11.0) - .hasBucketBoundaries(10.0) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("test"), "test"))))); + histogram( + metric -> + metric + .hasName("test") + .hasDescription("d") + .hasUnit("u") + .hasInstrumentationScope( + InstrumentationScopeInfo.builder(instrumentationName) + .setVersion("1.2.3") + .setSchemaUrl("http://schema.org") + .build()), + point -> + point + .hasSum(11.0) + .hasBucketBoundaries(10.0) + .hasAttributesSatisfyingExactly(equalTo(stringKey("test"), "test")))); } @Test @@ -262,27 +260,24 @@ void doubleHistogram() { instrument.record(5.5, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); instrument.record(6.6, Attributes.of(stringKey("test"), "test", stringKey("q"), "r")); - testing.waitAndAssertMetrics( + testing.waitAndAssertMetricsExactly( instrumentationName, - metric -> - metric - .hasName("test") - .hasDescription("d") - .hasUnit("u") - .hasInstrumentationScope( - InstrumentationScopeInfo.builder(instrumentationName) - .setVersion("1.2.3") - .setSchemaUrl("http://schema.org") - .build()) - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(12.1) - .hasBucketBoundaries(10.0) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("test"), "test"))))); + histogram( + metric -> + metric + .hasName("test") + .hasDescription("d") + .hasUnit("u") + .hasInstrumentationScope( + InstrumentationScopeInfo.builder(instrumentationName) + .setVersion("1.2.3") + .setSchemaUrl("http://schema.org") + .build()), + point -> + point + .hasSum(12.1) + .hasBucketBoundaries(10.0) + .hasAttributesSatisfyingExactly(equalTo(stringKey("test"), "test")))); } @Test diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/metrics/MeterTest.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/metrics/MeterTest.java index b520c8338250..72eb8509864e 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/metrics/MeterTest.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.37/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_37/metrics/MeterTest.java @@ -6,6 +6,7 @@ package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_37.metrics; import static io.opentelemetry.api.common.AttributeKey.stringKey; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.histogram; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static java.util.Collections.singletonList; import static org.assertj.core.api.Assertions.assertThatThrownBy; @@ -62,27 +63,24 @@ void longHistogram() { instrument.record(5, Attributes.of(stringKey("test"), "test")); instrument.record(6, Attributes.of(stringKey("test"), "test")); - testing.waitAndAssertMetrics( + testing.waitAndAssertMetricsExactly( instrumentationName, - metric -> - metric - .hasName("test") - .hasDescription("d") - .hasUnit("u") - .hasInstrumentationScope( - InstrumentationScopeInfo.builder(instrumentationName) - .setVersion("1.2.3") - .setSchemaUrl("http://schema.org") - .build()) - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(11.0) - .hasBucketBoundaries(10.0) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("test"), "test"))))); + histogram( + metric -> + metric + .hasName("test") + .hasDescription("d") + .hasUnit("u") + .hasInstrumentationScope( + InstrumentationScopeInfo.builder(instrumentationName) + .setVersion("1.2.3") + .setSchemaUrl("http://schema.org") + .build()), + point -> + point + .hasSum(11.0) + .hasBucketBoundaries(10.0) + .hasAttributesSatisfyingExactly(equalTo(stringKey("test"), "test")))); } @Test @@ -96,26 +94,23 @@ void doubleHistogram() { instrument.record(5.5, Attributes.of(stringKey("test"), "test")); instrument.record(6.6, Attributes.of(stringKey("test"), "test")); - testing.waitAndAssertMetrics( + testing.waitAndAssertMetricsExactly( instrumentationName, - metric -> - metric - .hasName("test") - .hasDescription("d") - .hasUnit("u") - .hasInstrumentationScope( - InstrumentationScopeInfo.builder(instrumentationName) - .setVersion("1.2.3") - .setSchemaUrl("http://schema.org") - .build()) - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(12.1) - .hasBucketBoundaries(10.0) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("test"), "test"))))); + histogram( + metric -> + metric + .hasName("test") + .hasDescription("d") + .hasUnit("u") + .hasInstrumentationScope( + InstrumentationScopeInfo.builder(instrumentationName) + .setVersion("1.2.3") + .setSchemaUrl("http://schema.org") + .build()), + point -> + point + .hasSum(12.1) + .hasBucketBoundaries(10.0) + .hasAttributesSatisfyingExactly(equalTo(stringKey("test"), "test")))); } } diff --git a/instrumentation/opentelemetry-api/opentelemetry-api-1.65/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_65/incubator/metrics/MeterTest.java b/instrumentation/opentelemetry-api/opentelemetry-api-1.65/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_65/incubator/metrics/MeterTest.java index 5fd58a2cb2a3..67932fea6009 100644 --- a/instrumentation/opentelemetry-api/opentelemetry-api-1.65/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_65/incubator/metrics/MeterTest.java +++ b/instrumentation/opentelemetry-api/opentelemetry-api-1.65/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/opentelemetryapi/v1_65/incubator/metrics/MeterTest.java @@ -6,6 +6,7 @@ package io.opentelemetry.javaagent.instrumentation.opentelemetryapi.v1_65.incubator.metrics; import static io.opentelemetry.api.common.AttributeKey.stringKey; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.histogram; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; @@ -166,19 +167,12 @@ void boundLongHistogram() { ((ExtendedLongHistogram) longHistogram).bind(Attributes.of(stringKey("q"), "r")); bound.record(11); - testing.waitAndAssertMetrics( + testing.waitAndAssertMetricsExactly( "test-bound-long-histogram", - metric -> - metric - .hasName("test") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(11.0) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("q"), "r"))))); + histogram( + metric -> metric.hasName("test"), + point -> + point.hasSum(11.0).hasAttributesSatisfyingExactly(equalTo(stringKey("q"), "r")))); } @Test @@ -192,19 +186,12 @@ void boundDoubleHistogram() { ((ExtendedDoubleHistogram) doubleHistogram).bind(Attributes.of(stringKey("q"), "r")); bound.record(12.1); - testing.waitAndAssertMetrics( + testing.waitAndAssertMetricsExactly( "test-bound-double-histogram", - metric -> - metric - .hasName("test") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(12.1) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("q"), "r"))))); + histogram( + metric -> metric.hasName("test"), + point -> + point.hasSum(12.1).hasAttributesSatisfyingExactly(equalTo(stringKey("q"), "r")))); } @Test diff --git a/instrumentation/pulsar/pulsar-2.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/pulsar/v2_8/PulsarClientTest.java b/instrumentation/pulsar/pulsar-2.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/pulsar/v2_8/PulsarClientTest.java index 04a77471b741..7d66c3041e2c 100644 --- a/instrumentation/pulsar/pulsar-2.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/pulsar/v2_8/PulsarClientTest.java +++ b/instrumentation/pulsar/pulsar-2.8/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/pulsar/v2_8/PulsarClientTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.pulsar.v2_8; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.histogram; import static io.opentelemetry.instrumentation.testing.util.TelemetryDataUtil.asRemote; import static io.opentelemetry.instrumentation.testing.util.TelemetryDataUtil.orderByRootSpanKind; import static io.opentelemetry.instrumentation.testing.util.TelemetryDataUtil.orderByRootSpanName; @@ -67,112 +68,87 @@ void testConsumeNonPartitionedTopic() throws Exception { latch.await(1, MINUTES); - testing.waitAndAssertMetrics( + testing.waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - "messaging.process.duration", - metrics -> - metrics.satisfiesExactly( - metric -> - assertThat(metric) - .hasUnit("s") - .hasDescription("Duration of processing operation.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "process"), - equalTo(MESSAGING_SYSTEM, "pulsar"), - equalTo(MESSAGING_DESTINATION_NAME, topic), - equalTo( - MESSAGING_DESTINATION_SUBSCRIPTION_NAME, - "test_sub")) - .hasBucketBoundaries(DURATION_BUCKETS))))); - testing.waitAndAssertMetrics( - INSTRUMENTATION_NAME, - "messaging.client.consumed.messages", - metrics -> - metrics.satisfiesExactly( - metric -> - assertThat(metric) - .hasUnit("{message}") - .hasDescription( - "Number of messages that were delivered to the application.") - .hasLongSumSatisfying( - sum -> - sum.hasPointsSatisfying( - point -> - point - .hasValue(1) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "receive"), - equalTo(MESSAGING_SYSTEM, "pulsar"), - equalTo(MESSAGING_DESTINATION_NAME, topic), - equalTo( - MESSAGING_DESTINATION_SUBSCRIPTION_NAME, - "test_sub"), - equalTo(SERVER_ADDRESS, brokerHost), - equalTo(SERVER_PORT, brokerPort)))))); - testing.waitAndAssertMetrics( - INSTRUMENTATION_NAME, - "messaging.client.sent.messages", - metrics -> - metrics.satisfiesExactly( - metric -> - assertThat(metric) - .hasUnit("{message}") - .hasDescription( - "Number of messages producer attempted to send to the broker.") - .hasLongSumSatisfying( - sum -> - sum.hasPointsSatisfying( - point -> - point - .hasValue(1) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "send"), - equalTo(MESSAGING_SYSTEM, "pulsar"), - equalTo(MESSAGING_DESTINATION_NAME, topic), - equalTo(SERVER_ADDRESS, brokerHost), - equalTo(SERVER_PORT, brokerPort)))))); - testing.waitAndAssertMetrics( - INSTRUMENTATION_NAME, - "messaging.client.operation.duration", - metrics -> - metrics.satisfiesExactly( - metric -> - assertThat(metric) - .hasUnit("s") - .hasDescription( - "Duration of messaging operation initiated by a producer or consumer client.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "send"), - equalTo(MESSAGING_SYSTEM, "pulsar"), - equalTo(MESSAGING_DESTINATION_NAME, topic), - equalTo(MESSAGING_OPERATION_TYPE, "send"), - equalTo(SERVER_ADDRESS, brokerHost), - equalTo(SERVER_PORT, brokerPort)), - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "receive"), - equalTo(MESSAGING_SYSTEM, "pulsar"), - equalTo(MESSAGING_DESTINATION_NAME, topic), - equalTo( - MESSAGING_DESTINATION_SUBSCRIPTION_NAME, - "test_sub"), - equalTo(MESSAGING_OPERATION_TYPE, "receive"), - equalTo(SERVER_ADDRESS, brokerHost), - equalTo(SERVER_PORT, brokerPort)))))); + histogram( + metric -> + metric + .hasName("messaging.process.duration") + .hasUnit("s") + .hasDescription("Duration of processing operation."), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "process"), + equalTo(MESSAGING_SYSTEM, "pulsar"), + equalTo(MESSAGING_DESTINATION_NAME, topic), + equalTo(MESSAGING_DESTINATION_SUBSCRIPTION_NAME, "test_sub")) + .hasBucketBoundaries(DURATION_BUCKETS)), + metric -> + metric + .hasName("messaging.client.consumed.messages") + .hasUnit("{message}") + .hasDescription("Number of messages that were delivered to the application.") + .hasLongSumSatisfying( + sum -> + sum.hasPointsSatisfying( + point -> + point + .hasValue(1) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "receive"), + equalTo(MESSAGING_SYSTEM, "pulsar"), + equalTo(MESSAGING_DESTINATION_NAME, topic), + equalTo( + MESSAGING_DESTINATION_SUBSCRIPTION_NAME, "test_sub"), + equalTo(SERVER_ADDRESS, brokerHost), + equalTo(SERVER_PORT, brokerPort)))), + metric -> + metric + .hasName("messaging.client.sent.messages") + .hasUnit("{message}") + .hasDescription("Number of messages producer attempted to send to the broker.") + .hasLongSumSatisfying( + sum -> + sum.hasPointsSatisfying( + point -> + point + .hasValue(1) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "send"), + equalTo(MESSAGING_SYSTEM, "pulsar"), + equalTo(MESSAGING_DESTINATION_NAME, topic), + equalTo(SERVER_ADDRESS, brokerHost), + equalTo(SERVER_PORT, brokerPort)))), + histogram( + metric -> + metric + .hasName("messaging.client.operation.duration") + .hasUnit("s") + .hasDescription( + "Duration of messaging operation initiated by a producer or consumer client."), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "send"), + equalTo(MESSAGING_SYSTEM, "pulsar"), + equalTo(MESSAGING_DESTINATION_NAME, topic), + equalTo(MESSAGING_OPERATION_TYPE, "send"), + equalTo(SERVER_ADDRESS, brokerHost), + equalTo(SERVER_PORT, brokerPort)), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "receive"), + equalTo(MESSAGING_SYSTEM, "pulsar"), + equalTo(MESSAGING_DESTINATION_NAME, topic), + equalTo(MESSAGING_DESTINATION_SUBSCRIPTION_NAME, "test_sub"), + equalTo(MESSAGING_OPERATION_TYPE, "receive"), + equalTo(SERVER_ADDRESS, brokerHost), + equalTo(SERVER_PORT, brokerPort)))); AtomicReference producerSpan = new AtomicReference<>(); testing.waitAndAssertSortedTraces( diff --git a/instrumentation/ratpack/ratpack-1.4/javaagent/src/version17Test/java/io/opentelemetry/javaagent/instrumentation/ratpack/v1_4/httpclient/client/RatpackHttpClientTest.java b/instrumentation/ratpack/ratpack-1.4/javaagent/src/version17Test/java/io/opentelemetry/javaagent/instrumentation/ratpack/v1_4/httpclient/client/RatpackHttpClientTest.java index 6c5ec8f0dd8d..16ee0c980042 100644 --- a/instrumentation/ratpack/ratpack-1.4/javaagent/src/version17Test/java/io/opentelemetry/javaagent/instrumentation/ratpack/v1_4/httpclient/client/RatpackHttpClientTest.java +++ b/instrumentation/ratpack/ratpack-1.4/javaagent/src/version17Test/java/io/opentelemetry/javaagent/instrumentation/ratpack/v1_4/httpclient/client/RatpackHttpClientTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.ratpack.v1_4.httpclient.client; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.histogram; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.HttpAttributes.HTTP_REQUEST_METHOD; import static io.opentelemetry.semconv.HttpAttributes.HTTP_RESPONSE_STATUS_CODE; @@ -64,24 +65,22 @@ void durationMetricHasProtocolVersion() throws Exception { }), span -> assertServerSpan(span).hasParent(trace.getSpan(0)))); - testing.waitAndAssertMetrics( + testing.waitAndAssertMetricsExactly( "io.opentelemetry.ratpack-1.4", - metric -> - metric - .hasName("http.client.request.duration") - .satisfies( - metricData -> - assertThat(metricData.getInstrumentationScopeInfo().getVersion()) - .isNotEmpty()) - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(HTTP_REQUEST_METHOD, "GET"), - equalTo(HTTP_RESPONSE_STATUS_CODE, 200), - equalTo(NETWORK_PROTOCOL_VERSION, "1.1"), - equalTo(SERVER_ADDRESS, uri.getHost()), - equalTo(SERVER_PORT, uri.getPort()))))); + histogram( + metric -> + metric + .hasName("http.client.request.duration") + .satisfies( + metricData -> + assertThat(metricData.getInstrumentationScopeInfo().getVersion()) + .isNotEmpty()), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(HTTP_REQUEST_METHOD, "GET"), + equalTo(HTTP_RESPONSE_STATUS_CODE, 200), + equalTo(NETWORK_PROTOCOL_VERSION, "1.1"), + equalTo(SERVER_ADDRESS, uri.getHost()), + equalTo(SERVER_PORT, uri.getPort())))); } } From 2911ae3d0b54540e72e851c1782228a5dc0c4366 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 20 Oct 2026 05:34:48 +0000 Subject: [PATCH 09/14] Migrate selected exhaustive metric assertions Co-authored-by: trask <218610+trask@users.noreply.github.com> --- .../v2_2/AwsLambdaSqsMetricsAssertions.java | 140 ++++++++---------- ...istributionSummaryHistogramGaugesTest.java | 61 ++++---- .../AbstractTimerHistogramGaugesTest.java | 61 ++++---- 3 files changed, 110 insertions(+), 152 deletions(-) diff --git a/instrumentation/aws-lambda/aws-lambda-events-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/AwsLambdaSqsMetricsAssertions.java b/instrumentation/aws-lambda/aws-lambda-events-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/AwsLambdaSqsMetricsAssertions.java index 48840de45937..c1e7e0213ac6 100644 --- a/instrumentation/aws-lambda/aws-lambda-events-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/AwsLambdaSqsMetricsAssertions.java +++ b/instrumentation/aws-lambda/aws-lambda-events-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/AwsLambdaSqsMetricsAssertions.java @@ -7,6 +7,7 @@ import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.histogram; import static io.opentelemetry.semconv.ErrorAttributes.ERROR_TYPE; import static io.opentelemetry.semconv.incubating.MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME; import static io.opentelemetry.semconv.incubating.MessagingIncubatingAttributes.MESSAGING_OPERATION_NAME; @@ -14,7 +15,9 @@ import static io.opentelemetry.semconv.incubating.MessagingIncubatingAttributes.MessagingSystemIncubatingValues.AWS_SQS; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; -import io.opentelemetry.sdk.metrics.data.MetricData; +import io.opentelemetry.sdk.testing.assertj.HistogramPointAssert; +import io.opentelemetry.sdk.testing.assertj.MetricAssert; +import java.util.function.Consumer; public class AwsLambdaSqsMetricsAssertions { @@ -45,86 +48,63 @@ public static void assertMetrics( String errorType, long failedProcessCount, String failedProcessErrorType) { - testing.waitAndAssertMetrics( + testing.waitAndAssertMetricsExactly( instrumentationName, - "messaging.process.duration", - metrics -> - metrics.satisfiesExactly( - metric -> - assertThat(metric) - .hasUnit("s") - .hasDescription("Duration of processing operation.") - .hasHistogramSatisfying( - histogram -> { - if (failedProcessCount == 0) { - histogram.hasPointsSatisfying( - point -> - point - .satisfies( - data -> - assertThat(data.getCount()) - .isEqualTo(processCount)) - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "process"), - equalTo(MESSAGING_SYSTEM, AWS_SQS), - equalTo(MESSAGING_DESTINATION_NAME, destination), - equalTo(ERROR_TYPE, errorType))); - } else { - histogram.hasPointsSatisfying( - point -> - point - .satisfies( - data -> - assertThat(data.getCount()) - .isEqualTo(processCount)) - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "process"), - equalTo(MESSAGING_SYSTEM, AWS_SQS), - equalTo(MESSAGING_DESTINATION_NAME, destination), - equalTo(ERROR_TYPE, errorType)), - point -> - point - .satisfies( - data -> - assertThat(data.getCount()) - .isEqualTo(failedProcessCount)) - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "process"), - equalTo(MESSAGING_SYSTEM, AWS_SQS), - equalTo(MESSAGING_DESTINATION_NAME, destination), - equalTo(ERROR_TYPE, failedProcessErrorType))); - } - }))); - testing.waitAndAssertMetrics( - instrumentationName, - "messaging.client.consumed.messages", - metrics -> - metrics.satisfiesExactly( - metric -> - assertThat(metric) - .hasUnit("{message}") - .hasDescription( - "Number of messages that were delivered to the application.") - .hasLongSumSatisfying( - sum -> - sum.hasPointsSatisfying( - point -> - point - .hasValue(consumedMessageCount) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "process"), - equalTo(MESSAGING_SYSTEM, AWS_SQS), - equalTo(MESSAGING_DESTINATION_NAME, destination), - equalTo(ERROR_TYPE, errorType)))))); - assertThat(testing.metrics()) - .filteredOn( - metric -> metric.getInstrumentationScopeInfo().getName().equals(instrumentationName)) - .extracting(MetricData::getName) - .containsExactlyInAnyOrder( - "messaging.process.duration", "messaging.client.consumed.messages"); + processingDurationAssertion( + destination, processCount, errorType, failedProcessCount, failedProcessErrorType), + metric -> + metric + .hasName("messaging.client.consumed.messages") + .hasUnit("{message}") + .hasDescription("Number of messages that were delivered to the application.") + .hasLongSumSatisfying( + sum -> + sum.hasPointsSatisfying( + point -> + point + .hasValue(consumedMessageCount) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "process"), + equalTo(MESSAGING_SYSTEM, AWS_SQS), + equalTo(MESSAGING_DESTINATION_NAME, destination), + equalTo(ERROR_TYPE, errorType))))); + } + + private static Consumer processingDurationAssertion( + String destination, + long processCount, + String errorType, + long failedProcessCount, + String failedProcessErrorType) { + Consumer metricAssertion = + metric -> + metric + .hasName("messaging.process.duration") + .hasUnit("s") + .hasDescription("Duration of processing operation."); + Consumer processPoint = + processPointAssertion(processCount, destination, errorType); + + if (failedProcessCount == 0) { + return histogram(metricAssertion, processPoint); + } + return histogram( + metricAssertion, + processPoint, + processPointAssertion(failedProcessCount, destination, failedProcessErrorType)); + } + + private static Consumer processPointAssertion( + long processCount, String destination, String errorType) { + return point -> + point + .satisfies(data -> assertThat(data.getCount()).isEqualTo(processCount)) + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "process"), + equalTo(MESSAGING_SYSTEM, AWS_SQS), + equalTo(MESSAGING_DESTINATION_NAME, destination), + equalTo(ERROR_TYPE, errorType)); } private AwsLambdaSqsMetricsAssertions() {} diff --git a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractDistributionSummaryHistogramGaugesTest.java b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractDistributionSummaryHistogramGaugesTest.java index 318a346dc897..301e6de6ff21 100644 --- a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractDistributionSummaryHistogramGaugesTest.java +++ b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractDistributionSummaryHistogramGaugesTest.java @@ -7,6 +7,7 @@ import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.instrumentation.micrometer.v1_5.AbstractCounterTest.INSTRUMENTATION_NAME; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.histogram; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import io.micrometer.core.instrument.DistributionSummary; @@ -44,25 +45,19 @@ void testMicrometerHistogram() { // then testing() - .waitAndAssertMetrics( - INSTRUMENTATION_NAME, - metric -> - metric - .hasName("testSummary") - .hasDescription("This is a test distribution summary") - .hasUnit("things") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - points -> - points - .hasSum(555.5) - .hasCount(4) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("tag"), "value"))))); - testing() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, + histogram( + metric -> + metric + .hasName("testSummary") + .hasDescription("This is a test distribution summary") + .hasUnit("things"), + point -> + point + .hasSum(555.5) + .hasCount(4) + .hasAttributesSatisfyingExactly(equalTo(stringKey("tag"), "value"))), metric -> metric .hasName("testSummary.histogram") @@ -112,25 +107,19 @@ void testMicrometerPercentiles() { // then testing() - .waitAndAssertMetrics( - INSTRUMENTATION_NAME, - metric -> - metric - .hasName("testSummary") - .hasDescription("This is a test distribution summary") - .hasUnit("things") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(150) - .hasCount(2) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("tag"), "value"))))); - testing() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, + histogram( + metric -> + metric + .hasName("testSummary") + .hasDescription("This is a test distribution summary") + .hasUnit("things"), + point -> + point + .hasSum(150) + .hasCount(2) + .hasAttributesSatisfyingExactly(equalTo(stringKey("tag"), "value"))), metric -> metric .hasName("testSummary.percentile") diff --git a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerHistogramGaugesTest.java b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerHistogramGaugesTest.java index d206a385ac8a..9de762b1d531 100644 --- a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerHistogramGaugesTest.java +++ b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerHistogramGaugesTest.java @@ -7,6 +7,7 @@ import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.instrumentation.micrometer.v1_5.AbstractCounterTest.INSTRUMENTATION_NAME; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.histogram; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static java.util.concurrent.TimeUnit.MILLISECONDS; import static java.util.concurrent.TimeUnit.SECONDS; @@ -45,25 +46,19 @@ void testMicrometerHistogram() { // then testing() - .waitAndAssertMetrics( - INSTRUMENTATION_NAME, - metric -> - metric - .hasName("testTimer") - .hasDescription("This is a test timer") - .hasUnit("s") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(555.5) - .hasCount(4) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("tag"), "value"))))); - testing() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, + histogram( + metric -> + metric + .hasName("testTimer") + .hasDescription("This is a test timer") + .hasUnit("s"), + point -> + point + .hasSum(555.5) + .hasCount(4) + .hasAttributesSatisfyingExactly(equalTo(stringKey("tag"), "value"))), metric -> metric .hasName("testTimer.histogram") @@ -112,25 +107,19 @@ void testMicrometerPercentiles() { // then testing() - .waitAndAssertMetrics( - INSTRUMENTATION_NAME, - metric -> - metric - .hasName("testTimer") - .hasDescription("This is a test timer") - .hasUnit("s") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(0.55) - .hasCount(2) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("tag"), "value"))))); - testing() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, + histogram( + metric -> + metric + .hasName("testTimer") + .hasDescription("This is a test timer") + .hasUnit("s"), + point -> + point + .hasSum(0.55) + .hasCount(2) + .hasAttributesSatisfyingExactly(equalTo(stringKey("tag"), "value"))), metric -> metric .hasName("testTimer.percentile") From 0779ddad33f0b5f51f93b242555442862bebcc24 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 20 Oct 2026 06:08:54 +0000 Subject: [PATCH 10/14] Migrate selected exhaustive metric assertions Co-authored-by: trask <218610+trask@users.noreply.github.com> --- .../avaje/jex/v3_0/JexTest.java | 13 +- .../v2_2/AwsLambdaSqsMetricsAssertions.java | 2 +- .../v2_2/internal/Aws2BedrockRuntimeTest.java | 24 +- .../v2_2/AbstractAws2BedrockRuntimeTest.java | 42 +- .../v4_0/DropwizardMetricsTest.java | 30 +- .../failsafe/v3_0/FailsafeTelemetryTest.java | 51 +- .../iceberg/v1_8/AbstractIcebergTest.java | 490 ++++++++---------- .../javalin/AbstractJavalinTest.java | 13 +- .../jdbc/datasource/JdbcTelemetryTest.java | 13 +- .../v1_5/AbstractDistributionSummaryTest.java | 82 ++- .../v1_5/AbstractNamingConventionTest.java | 55 +- .../v1_5/AbstractPrometheusModeTest.java | 121 ++--- .../AbstractTimerHistogramGaugesTest.java | 10 +- .../v1_5/AbstractTimerMillisecondsTest.java | 28 +- .../micrometer/v1_5/AbstractTimerTest.java | 75 ++- .../instrumentation/openai/v1_1/ChatTest.java | 16 +- .../openai/v1_1/AbstractChatTest.java | 24 +- .../openai/v1_1/AbstractEmbeddingsTest.java | 6 +- .../v4_8/RocketMqMetricsTest.java | 146 +++--- ...RocketMqClientSuppressReceiveSpanTest.java | 141 ++--- .../v5_0/RocketMqSimpleConsumerTest.java | 65 +-- .../JmxRuntimeMetricsTest.java | 21 +- .../internal/GarbageCollectorTest.java | 53 +- .../ai/v1_0/AbstractOpenAiChatModelTest.java | 2 +- .../spring/ai/v1_0/ChatModelTest.java | 4 +- .../pulsar/v1_0/AbstractSpringPulsarTest.java | 66 +-- ...t11SimpleMessageListenerContainerTest.java | 26 +- ...t20DirectMessageListenerContainerTest.java | 26 +- ...pringWebfluxClientInstrumentationTest.java | 25 +- 29 files changed, 702 insertions(+), 968 deletions(-) diff --git a/instrumentation/avaje-jex-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/avaje/jex/v3_0/JexTest.java b/instrumentation/avaje-jex-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/avaje/jex/v3_0/JexTest.java index 2d897e29282d..0cc7bb581716 100644 --- a/instrumentation/avaje-jex-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/avaje/jex/v3_0/JexTest.java +++ b/instrumentation/avaje-jex-3.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/avaje/jex/v3_0/JexTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.avaje.jex.v3_0; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.histogram; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; @@ -120,14 +121,10 @@ void testHttpRouteMetricWithPathParamResponseSuccessful() { assertThat(content).isEqualTo(id); assertThat(response.status().code()).isEqualTo(200); - testing.waitAndAssertMetrics( + testing.waitAndAssertMetricsExactly( instrumentation, - metric -> - metric - .hasName("http.server.request.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> point.hasAttribute(HTTP_ROUTE, "/test/param/{id}")))); + histogram( + metric -> metric.hasName("http.server.request.duration"), + point -> point.hasAttribute(HTTP_ROUTE, "/test/param/{id}"))); } } diff --git a/instrumentation/aws-lambda/aws-lambda-events-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/AwsLambdaSqsMetricsAssertions.java b/instrumentation/aws-lambda/aws-lambda-events-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/AwsLambdaSqsMetricsAssertions.java index c1e7e0213ac6..501c27849f49 100644 --- a/instrumentation/aws-lambda/aws-lambda-events-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/AwsLambdaSqsMetricsAssertions.java +++ b/instrumentation/aws-lambda/aws-lambda-events-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awslambdaevents/v2_2/AwsLambdaSqsMetricsAssertions.java @@ -5,9 +5,9 @@ package io.opentelemetry.instrumentation.awslambdaevents.v2_2; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.histogram; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; -import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.histogram; import static io.opentelemetry.semconv.ErrorAttributes.ERROR_TYPE; import static io.opentelemetry.semconv.incubating.MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME; import static io.opentelemetry.semconv.incubating.MessagingIncubatingAttributes.MESSAGING_OPERATION_NAME; diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/library/src/testBedrockRuntime/java/io/opentelemetry/instrumentation/awssdk/v2_2/internal/Aws2BedrockRuntimeTest.java b/instrumentation/aws-sdk/aws-sdk-2.2/library/src/testBedrockRuntime/java/io/opentelemetry/instrumentation/awssdk/v2_2/internal/Aws2BedrockRuntimeTest.java index 0198a01ec9a4..fb7b6825931c 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/library/src/testBedrockRuntime/java/io/opentelemetry/instrumentation/awssdk/v2_2/internal/Aws2BedrockRuntimeTest.java +++ b/instrumentation/aws-sdk/aws-sdk-2.2/library/src/testBedrockRuntime/java/io/opentelemetry/instrumentation/awssdk/v2_2/internal/Aws2BedrockRuntimeTest.java @@ -172,7 +172,7 @@ void testConverseToolCallNoMessageContent() { equalTo(GEN_AI_RESPONSE_FINISH_REASONS, asList("tool_use"))))); getTesting() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -308,7 +308,7 @@ void testConverseToolCallNoMessageContent() { equalTo(GEN_AI_RESPONSE_FINISH_REASONS, asList("end_turn"))))); getTesting() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -518,7 +518,7 @@ void testConverseToolCallStreamNoMessageContent() { equalTo(GEN_AI_RESPONSE_FINISH_REASONS, asList("tool_use"))))); getTesting() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -674,7 +674,7 @@ void testConverseToolCallStreamNoMessageContent() { equalTo(GEN_AI_RESPONSE_FINISH_REASONS, asList("end_turn"))))); getTesting() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -932,7 +932,7 @@ void testInvokeModelToolCallAmazonNovaNoMessageContent() { equalTo(GEN_AI_RESPONSE_FINISH_REASONS, asList("tool_use"))))); getTesting() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -1096,7 +1096,7 @@ void testInvokeModelToolCallAmazonNovaNoMessageContent() { equalTo(GEN_AI_RESPONSE_FINISH_REASONS, asList("end_turn"))))); getTesting() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -1374,7 +1374,7 @@ public void accept(PayloadPart chunk) { equalTo(GEN_AI_RESPONSE_FINISH_REASONS, asList("tool_use"))))); getTesting() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -1582,7 +1582,7 @@ public void accept(PayloadPart chunk) { equalTo(GEN_AI_RESPONSE_FINISH_REASONS, asList("end_turn"))))); getTesting() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -1791,7 +1791,7 @@ void testInvokeModelToolCallAnthropicClaudeNoMessageContent() { equalTo(GEN_AI_RESPONSE_FINISH_REASONS, asList("tool_use"))))); getTesting() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -1933,7 +1933,7 @@ void testInvokeModelToolCallAnthropicClaudeNoMessageContent() { equalTo(GEN_AI_RESPONSE_FINISH_REASONS, asList("end_turn"))))); getTesting() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -2214,7 +2214,7 @@ public void accept(PayloadPart chunk) { equalTo(GEN_AI_RESPONSE_FINISH_REASONS, asList("tool_use"))))); getTesting() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -2397,7 +2397,7 @@ public void accept(PayloadPart chunk) { equalTo(GEN_AI_RESPONSE_FINISH_REASONS, asList("end_turn"))))); getTesting() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2BedrockRuntimeTest.java b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2BedrockRuntimeTest.java index eae06304a749..be6981eeaa87 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2BedrockRuntimeTest.java +++ b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2BedrockRuntimeTest.java @@ -159,7 +159,7 @@ void testConverseBasic() { equalTo(GEN_AI_RESPONSE_FINISH_REASONS, asList("end_turn"))))); getTesting() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -281,7 +281,7 @@ void testConverseOptions() { equalTo(GEN_AI_RESPONSE_FINISH_REASONS, asList("max_tokens"))))); getTesting() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -412,7 +412,7 @@ void testConverseToolCall() { equalTo(GEN_AI_RESPONSE_FINISH_REASONS, asList("tool_use"))))); getTesting() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -570,7 +570,7 @@ void testConverseToolCall() { equalTo(GEN_AI_RESPONSE_FINISH_REASONS, asList("end_turn"))))); getTesting() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -881,7 +881,7 @@ void testConverseToolCallStream() { equalTo(GEN_AI_RESPONSE_FINISH_REASONS, asList("tool_use"))))); getTesting() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -1059,7 +1059,7 @@ void testConverseToolCallStream() { equalTo(GEN_AI_RESPONSE_FINISH_REASONS, asList("end_turn"))))); getTesting() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -1305,7 +1305,7 @@ void testConverseStream() { equalTo(GEN_AI_RESPONSE_FINISH_REASONS, asList("end_turn"))))); getTesting() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -1534,7 +1534,7 @@ void testInvokeModelAmazonTitan() { equalTo(GEN_AI_RESPONSE_FINISH_REASONS, asList("LENGTH"))))); getTesting() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -1683,7 +1683,7 @@ void testInvokeModelWithResponseStreamAmazonTitan() { equalTo(GEN_AI_RESPONSE_FINISH_REASONS, asList("LENGTH"))))); getTesting() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -1840,7 +1840,7 @@ void testInvokeModelAmazonNova() { equalTo(GEN_AI_RESPONSE_FINISH_REASONS, asList("max_tokens"))))); getTesting() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -2009,7 +2009,7 @@ void testInvokeModelWithResponseStreamAmazonNova() { equalTo(GEN_AI_RESPONSE_FINISH_REASONS, asList("max_tokens"))))); getTesting() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -2152,7 +2152,7 @@ void testInvokeModelAnthropicClaude(String modelId) { equalTo(GEN_AI_RESPONSE_FINISH_REASONS, asList("max_tokens"))))); getTesting() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -2553,7 +2553,7 @@ void testInvokeModelWithResponseStreamAnthropicClaude() { equalTo(GEN_AI_RESPONSE_FINISH_REASONS, asList("max_tokens"))))); getTesting() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -2749,7 +2749,7 @@ void testInvokeModelToolCallAmazonNova() { equalTo(GEN_AI_RESPONSE_FINISH_REASONS, asList("tool_use"))))); getTesting() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -2935,7 +2935,7 @@ void testInvokeModelToolCallAmazonNova() { equalTo(GEN_AI_RESPONSE_FINISH_REASONS, asList("end_turn"))))); getTesting() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -3248,7 +3248,7 @@ public void accept(PayloadPart chunk) { equalTo(GEN_AI_RESPONSE_FINISH_REASONS, asList("tool_use"))))); getTesting() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -3478,7 +3478,7 @@ public void accept(PayloadPart chunk) { equalTo(GEN_AI_RESPONSE_FINISH_REASONS, asList("end_turn"))))); getTesting() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -3723,7 +3723,7 @@ void testInvokeModelToolCallAnthropicClaude() { equalTo(GEN_AI_RESPONSE_FINISH_REASONS, asList("tool_use"))))); getTesting() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -3887,7 +3887,7 @@ void testInvokeModelToolCallAnthropicClaude() { equalTo(GEN_AI_RESPONSE_FINISH_REASONS, asList("end_turn"))))); getTesting() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -4206,7 +4206,7 @@ public void accept(PayloadPart chunk) { equalTo(GEN_AI_RESPONSE_FINISH_REASONS, asList("tool_use"))))); getTesting() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -4411,7 +4411,7 @@ public void accept(PayloadPart chunk) { equalTo(GEN_AI_RESPONSE_FINISH_REASONS, asList("end_turn"))))); getTesting() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric diff --git a/instrumentation/dropwizard/dropwizard-metrics-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/dropwizardmetrics/v4_0/DropwizardMetricsTest.java b/instrumentation/dropwizard/dropwizard-metrics-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/dropwizardmetrics/v4_0/DropwizardMetricsTest.java index 539b57eab6d2..e1c596be5168 100644 --- a/instrumentation/dropwizard/dropwizard-metrics-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/dropwizardmetrics/v4_0/DropwizardMetricsTest.java +++ b/instrumentation/dropwizard/dropwizard-metrics-4.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/dropwizardmetrics/v4_0/DropwizardMetricsTest.java @@ -16,6 +16,7 @@ import com.codahale.metrics.Timer; import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; +import io.opentelemetry.instrumentation.testing.util.MetricAssertions; import java.util.concurrent.atomic.AtomicLong; import org.assertj.core.api.AbstractIterableAssert; import org.junit.jupiter.api.Test; @@ -39,7 +40,7 @@ void gauge() { metricRegistry.gauge("test'gauge", () -> value::get); // then - testing.waitAndAssertMetrics( + testing.waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -67,7 +68,7 @@ void counter() { counter.dec(5); // then - testing.waitAndAssertMetrics( + testing.waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -96,15 +97,10 @@ void histogram() { histogram.update(30); // then - testing.waitAndAssertMetrics( + testing.waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("testhistogram") - .hasHistogramSatisfying( - histogramMetric -> - histogramMetric.hasPointsSatisfying( - point -> point.hasSum(42).hasCount(2)))); + MetricAssertions.histogram( + metric -> metric.hasName("testhistogram"), point -> point.hasSum(42).hasCount(2))); testing.clearData(); // when @@ -127,7 +123,7 @@ void meter() { meter.mark(11); // then - testing.waitAndAssertMetrics( + testing.waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -157,15 +153,11 @@ void timer() { timer.update(234_000, NANOSECONDS); // then - testing.waitAndAssertMetrics( + testing.waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("testtimer") - .hasUnit("ms") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying(point -> point.hasSum(1.234).hasCount(2)))); + MetricAssertions.histogram( + metric -> metric.hasName("testtimer").hasUnit("ms"), + point -> point.hasSum(1.234).hasCount(2))); testing.clearData(); // when diff --git a/instrumentation/failsafe-3.0/library/src/test/java/io/opentelemetry/instrumentation/failsafe/v3_0/FailsafeTelemetryTest.java b/instrumentation/failsafe-3.0/library/src/test/java/io/opentelemetry/instrumentation/failsafe/v3_0/FailsafeTelemetryTest.java index f937bcaa21cd..829b237f821c 100644 --- a/instrumentation/failsafe-3.0/library/src/test/java/io/opentelemetry/instrumentation/failsafe/v3_0/FailsafeTelemetryTest.java +++ b/instrumentation/failsafe-3.0/library/src/test/java/io/opentelemetry/instrumentation/failsafe/v3_0/FailsafeTelemetryTest.java @@ -6,6 +6,7 @@ package io.opentelemetry.instrumentation.failsafe.v3_0; import static io.opentelemetry.api.common.AttributeKey.stringKey; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.histogram; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static org.assertj.core.api.Assertions.assertThat; @@ -52,7 +53,7 @@ void captureCircuitBreakerMetrics() { } // then - testing.waitAndAssertMetrics( + testing.waitAndAssertMetricsExactly( "io.opentelemetry.failsafe-3.0", metricAssert -> metricAssert @@ -106,7 +107,7 @@ void captureRetryPolicyMetrics() { } // then - testing.waitAndAssertMetrics( + testing.waitAndAssertMetricsExactly( "io.opentelemetry.failsafe-3.0", metricAssert -> metricAssert @@ -117,32 +118,26 @@ void captureRetryPolicyMetrics() { .hasPointsSatisfying( buildRetryPolicyAssertion(2, "failure"), buildRetryPolicyAssertion(3, "success"))), - metricAssert -> - metricAssert - .hasName("failsafe.retry_policy.attempts") - .hasHistogramSatisfying( - histogramAssert -> - histogramAssert.hasPointsSatisfying( - histogramPointAssert -> - histogramPointAssert - .hasCount(3) - .hasMin(1) - .hasMax(3) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("failsafe.retry_policy.name"), "testing"), - equalTo( - stringKey("failsafe.retry_policy.outcome"), "success")) - .hasBucketCounts(1L, 1L, 1L, 0L, 0L), - histogramPointAssert -> - histogramPointAssert - .hasCount(2) - .hasMin(3) - .hasMax(3) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("failsafe.retry_policy.name"), "testing"), - equalTo( - stringKey("failsafe.retry_policy.outcome"), "failure")) - .hasBucketCounts(0L, 0L, 2L, 0L, 0L)))); + histogram( + metricAssert -> metricAssert.hasName("failsafe.retry_policy.attempts"), + histogramPointAssert -> + histogramPointAssert + .hasCount(3) + .hasMin(1) + .hasMax(3) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("failsafe.retry_policy.name"), "testing"), + equalTo(stringKey("failsafe.retry_policy.outcome"), "success")) + .hasBucketCounts(1L, 1L, 1L, 0L, 0L), + histogramPointAssert -> + histogramPointAssert + .hasCount(2) + .hasMin(3) + .hasMax(3) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("failsafe.retry_policy.name"), "testing"), + equalTo(stringKey("failsafe.retry_policy.outcome"), "failure")) + .hasBucketCounts(0L, 0L, 2L, 0L, 0L))); } private static Consumer buildCircuitBreakerAssertion( diff --git a/instrumentation/iceberg-1.8/testing/src/main/java/io/opentelemetry/instrumentation/iceberg/v1_8/AbstractIcebergTest.java b/instrumentation/iceberg-1.8/testing/src/main/java/io/opentelemetry/instrumentation/iceberg/v1_8/AbstractIcebergTest.java index 3050fda468b0..a3bd1ae74e9e 100644 --- a/instrumentation/iceberg-1.8/testing/src/main/java/io/opentelemetry/instrumentation/iceberg/v1_8/AbstractIcebergTest.java +++ b/instrumentation/iceberg-1.8/testing/src/main/java/io/opentelemetry/instrumentation/iceberg/v1_8/AbstractIcebergTest.java @@ -7,13 +7,16 @@ import static io.opentelemetry.api.common.AttributeKey.longKey; import static io.opentelemetry.api.common.AttributeKey.stringKey; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.histogram; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static java.util.Arrays.asList; import static org.assertj.core.api.Assertions.assertThat; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; +import io.opentelemetry.sdk.testing.assertj.MetricAssert; import java.io.File; import java.io.IOException; +import java.util.function.Consumer; import org.apache.iceberg.DataFile; import org.apache.iceberg.DataFiles; import org.apache.iceberg.FileScanTask; @@ -93,298 +96,227 @@ void testCreateTelemetry() throws IOException { assertThat(reporter.report).isInstanceOf(ScanReport.class); ScanReport expected = (ScanReport) reporter.report; - assertScanDurationMetric(expected); - assertDataFilesCountMetrics(expected); - assertDeleteFilesCountMetrics(expected); - assertDataManifestCountMetrics(expected); - assertDeleteManifestCountMetrics(expected); - assertSizeMetric( - "iceberg.scan.data_files.size", - expected, - expected.scanMetrics().totalFileSizeInBytes().value()); - assertSizeMetric( - "iceberg.scan.delete_files.size", - expected, - expected.scanMetrics().totalDeleteFileSizeInBytes().value()); - } - - private void assertScanDurationMetric(ScanReport expectedReport) { testing() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metricAssert -> - metricAssert - .hasName("iceberg.scan.planning.duration") - .hasUnit("s") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo( - longKey("iceberg.schema.id"), - expectedReport.schemaId()), - equalTo( - stringKey("iceberg.table.name"), - expectedReport.tableName()))))); + assertScanDurationMetric(expected), + assertDataFilesCountMetrics(expected), + assertDeleteFilesCountMetrics(expected), + assertDataManifestCountMetrics(expected), + assertDeleteManifestCountMetrics(expected), + assertSizeMetric( + "iceberg.scan.data_files.size", + expected, + expected.scanMetrics().totalFileSizeInBytes().value()), + assertSizeMetric( + "iceberg.scan.delete_files.size", + expected, + expected.scanMetrics().totalDeleteFileSizeInBytes().value())); } - private void assertDataFilesCountMetrics(ScanReport expectedReport) { - testing() - .waitAndAssertMetrics( - INSTRUMENTATION_NAME, - metricAssert -> - metricAssert - .hasName("iceberg.scan.data_files.count") - .hasUnit("{file}") - .hasLongSumSatisfying( - sum -> - sum.hasPointsSatisfying( - longSumAssert -> - longSumAssert - .hasValue( - expectedReport.scanMetrics().resultDataFiles().value()) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("iceberg.scan.state"), "scanned"), - equalTo( - longKey("iceberg.schema.id"), - expectedReport.schemaId()), - equalTo( - stringKey("iceberg.table.name"), - expectedReport.tableName())), - longSumAssert -> - longSumAssert - .hasValue( - expectedReport.scanMetrics().skippedDataFiles().value()) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("iceberg.scan.state"), "skipped"), - equalTo( - longKey("iceberg.schema.id"), - expectedReport.schemaId()), - equalTo( - stringKey("iceberg.table.name"), - expectedReport.tableName()))))); + private static Consumer assertScanDurationMetric(ScanReport expectedReport) { + return histogram( + metric -> metric.hasName("iceberg.scan.planning.duration").hasUnit("s"), + point -> + point + .hasSumGreaterThan(0.0) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(longKey("iceberg.schema.id"), expectedReport.schemaId()), + equalTo(stringKey("iceberg.table.name"), expectedReport.tableName()))); } - private void assertDataManifestCountMetrics(ScanReport expectedReport) { - testing() - .waitAndAssertMetrics( - INSTRUMENTATION_NAME, - metricAssert -> - metricAssert - .hasName("iceberg.scan.data_manifests.count") - .hasUnit("{file}") - .hasLongSumSatisfying( - sum -> - sum.hasPointsSatisfying( - longSumAssert -> - longSumAssert - .hasValue( - expectedReport - .scanMetrics() - .scannedDataManifests() - .value()) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("iceberg.scan.state"), "scanned"), - equalTo( - longKey("iceberg.schema.id"), - expectedReport.schemaId()), - equalTo( - stringKey("iceberg.table.name"), - expectedReport.tableName())), - longSumAssert -> - longSumAssert - .hasValue( - expectedReport - .scanMetrics() - .skippedDataManifests() - .value()) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("iceberg.scan.state"), "skipped"), - equalTo( - longKey("iceberg.schema.id"), - expectedReport.schemaId()), - equalTo( - stringKey("iceberg.table.name"), - expectedReport.tableName()))))); + private static Consumer assertDataFilesCountMetrics(ScanReport expectedReport) { + return metricAssert -> + metricAssert + .hasName("iceberg.scan.data_files.count") + .hasUnit("{file}") + .hasLongSumSatisfying( + sum -> + sum.hasPointsSatisfying( + longSumAssert -> + longSumAssert + .hasValue(expectedReport.scanMetrics().resultDataFiles().value()) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("iceberg.scan.state"), "scanned"), + equalTo( + longKey("iceberg.schema.id"), expectedReport.schemaId()), + equalTo( + stringKey("iceberg.table.name"), + expectedReport.tableName())), + longSumAssert -> + longSumAssert + .hasValue(expectedReport.scanMetrics().skippedDataFiles().value()) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("iceberg.scan.state"), "skipped"), + equalTo( + longKey("iceberg.schema.id"), expectedReport.schemaId()), + equalTo( + stringKey("iceberg.table.name"), + expectedReport.tableName())))); } - private void assertDeleteManifestCountMetrics(ScanReport expectedReport) { - testing() - .waitAndAssertMetrics( - INSTRUMENTATION_NAME, - metricAssert -> - metricAssert - .hasName("iceberg.scan.delete_manifests.count") - .hasUnit("{file}") - .hasLongSumSatisfying( - sum -> - sum.hasPointsSatisfying( - longSumAssert -> - longSumAssert - .hasValue( - expectedReport - .scanMetrics() - .scannedDeleteManifests() - .value()) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("iceberg.scan.state"), "scanned"), - equalTo( - longKey("iceberg.schema.id"), - expectedReport.schemaId()), - equalTo( - stringKey("iceberg.table.name"), - expectedReport.tableName())), - longSumAssert -> - longSumAssert - .hasValue( - expectedReport - .scanMetrics() - .skippedDeleteManifests() - .value()) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("iceberg.scan.state"), "skipped"), - equalTo( - longKey("iceberg.schema.id"), - expectedReport.schemaId()), - equalTo( - stringKey("iceberg.table.name"), - expectedReport.tableName()))))); + private static Consumer assertDataManifestCountMetrics(ScanReport expectedReport) { + return metricAssert -> + metricAssert + .hasName("iceberg.scan.data_manifests.count") + .hasUnit("{file}") + .hasLongSumSatisfying( + sum -> + sum.hasPointsSatisfying( + longSumAssert -> + longSumAssert + .hasValue( + expectedReport.scanMetrics().scannedDataManifests().value()) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("iceberg.scan.state"), "scanned"), + equalTo( + longKey("iceberg.schema.id"), expectedReport.schemaId()), + equalTo( + stringKey("iceberg.table.name"), + expectedReport.tableName())), + longSumAssert -> + longSumAssert + .hasValue( + expectedReport.scanMetrics().skippedDataManifests().value()) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("iceberg.scan.state"), "skipped"), + equalTo( + longKey("iceberg.schema.id"), expectedReport.schemaId()), + equalTo( + stringKey("iceberg.table.name"), + expectedReport.tableName())))); } - private void assertDeleteFilesCountMetrics(ScanReport expectedReport) { - testing() - .waitAndAssertMetrics( - INSTRUMENTATION_NAME, - metricAssert -> - metricAssert - .hasName("iceberg.scan.delete_files.count") - .hasUnit("{file}") - .hasLongSumSatisfying( - sum -> - sum.hasPointsSatisfying( - longSumAssert -> - longSumAssert - .hasValue( - expectedReport - .scanMetrics() - .resultDeleteFiles() - .value()) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("iceberg.scan.state"), "scanned"), - equalTo(stringKey("iceberg.delete_file.type"), "all"), - equalTo( - longKey("iceberg.schema.id"), - expectedReport.schemaId()), - equalTo( - stringKey("iceberg.table.name"), - expectedReport.tableName())), - longSumAssert -> - longSumAssert - .hasValue( - expectedReport - .scanMetrics() - .skippedDeleteFiles() - .value()) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("iceberg.scan.state"), "skipped"), - equalTo(stringKey("iceberg.delete_file.type"), "all"), - equalTo( - longKey("iceberg.schema.id"), - expectedReport.schemaId()), - equalTo( - stringKey("iceberg.table.name"), - expectedReport.tableName())), - longSumAssert -> - longSumAssert - .hasValue( - expectedReport - .scanMetrics() - .indexedDeleteFiles() - .value()) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("iceberg.scan.state"), "scanned"), - equalTo( - stringKey("iceberg.delete_file.type"), "indexed"), - equalTo( - longKey("iceberg.schema.id"), - expectedReport.schemaId()), - equalTo( - stringKey("iceberg.table.name"), - expectedReport.tableName())), - longSumAssert -> - longSumAssert - .hasValue( - expectedReport - .scanMetrics() - .equalityDeleteFiles() - .value()) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("iceberg.scan.state"), "scanned"), - equalTo( - stringKey("iceberg.delete_file.type"), "equality"), - equalTo( - longKey("iceberg.schema.id"), - expectedReport.schemaId()), - equalTo( - stringKey("iceberg.table.name"), - expectedReport.tableName())), - longSumAssert -> - longSumAssert - .hasValue( - expectedReport - .scanMetrics() - .positionalDeleteFiles() - .value()) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("iceberg.scan.state"), "scanned"), - equalTo( - stringKey("iceberg.delete_file.type"), "position"), - equalTo( - longKey("iceberg.schema.id"), - expectedReport.schemaId()), - equalTo( - stringKey("iceberg.table.name"), - expectedReport.tableName())), - longSumAssert -> - longSumAssert - .hasValue(expectedReport.scanMetrics().dvs().value()) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("iceberg.scan.state"), "scanned"), - equalTo(stringKey("iceberg.delete_file.type"), "dvs"), - equalTo( - longKey("iceberg.schema.id"), - expectedReport.schemaId()), - equalTo( - stringKey("iceberg.table.name"), - expectedReport.tableName()))))); + private static Consumer assertDeleteManifestCountMetrics( + ScanReport expectedReport) { + return metricAssert -> + metricAssert + .hasName("iceberg.scan.delete_manifests.count") + .hasUnit("{file}") + .hasLongSumSatisfying( + sum -> + sum.hasPointsSatisfying( + longSumAssert -> + longSumAssert + .hasValue( + expectedReport.scanMetrics().scannedDeleteManifests().value()) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("iceberg.scan.state"), "scanned"), + equalTo( + longKey("iceberg.schema.id"), expectedReport.schemaId()), + equalTo( + stringKey("iceberg.table.name"), + expectedReport.tableName())), + longSumAssert -> + longSumAssert + .hasValue( + expectedReport.scanMetrics().skippedDeleteManifests().value()) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("iceberg.scan.state"), "skipped"), + equalTo( + longKey("iceberg.schema.id"), expectedReport.schemaId()), + equalTo( + stringKey("iceberg.table.name"), + expectedReport.tableName())))); } - private void assertSizeMetric( + private static Consumer assertDeleteFilesCountMetrics(ScanReport expectedReport) { + return metricAssert -> + metricAssert + .hasName("iceberg.scan.delete_files.count") + .hasUnit("{file}") + .hasLongSumSatisfying( + sum -> + sum.hasPointsSatisfying( + longSumAssert -> + longSumAssert + .hasValue(expectedReport.scanMetrics().resultDeleteFiles().value()) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("iceberg.scan.state"), "scanned"), + equalTo(stringKey("iceberg.delete_file.type"), "all"), + equalTo( + longKey("iceberg.schema.id"), expectedReport.schemaId()), + equalTo( + stringKey("iceberg.table.name"), + expectedReport.tableName())), + longSumAssert -> + longSumAssert + .hasValue(expectedReport.scanMetrics().skippedDeleteFiles().value()) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("iceberg.scan.state"), "skipped"), + equalTo(stringKey("iceberg.delete_file.type"), "all"), + equalTo( + longKey("iceberg.schema.id"), expectedReport.schemaId()), + equalTo( + stringKey("iceberg.table.name"), + expectedReport.tableName())), + longSumAssert -> + longSumAssert + .hasValue(expectedReport.scanMetrics().indexedDeleteFiles().value()) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("iceberg.scan.state"), "scanned"), + equalTo(stringKey("iceberg.delete_file.type"), "indexed"), + equalTo( + longKey("iceberg.schema.id"), expectedReport.schemaId()), + equalTo( + stringKey("iceberg.table.name"), + expectedReport.tableName())), + longSumAssert -> + longSumAssert + .hasValue( + expectedReport.scanMetrics().equalityDeleteFiles().value()) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("iceberg.scan.state"), "scanned"), + equalTo(stringKey("iceberg.delete_file.type"), "equality"), + equalTo( + longKey("iceberg.schema.id"), expectedReport.schemaId()), + equalTo( + stringKey("iceberg.table.name"), + expectedReport.tableName())), + longSumAssert -> + longSumAssert + .hasValue( + expectedReport.scanMetrics().positionalDeleteFiles().value()) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("iceberg.scan.state"), "scanned"), + equalTo(stringKey("iceberg.delete_file.type"), "position"), + equalTo( + longKey("iceberg.schema.id"), expectedReport.schemaId()), + equalTo( + stringKey("iceberg.table.name"), + expectedReport.tableName())), + longSumAssert -> + longSumAssert + .hasValue(expectedReport.scanMetrics().dvs().value()) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("iceberg.scan.state"), "scanned"), + equalTo(stringKey("iceberg.delete_file.type"), "dvs"), + equalTo( + longKey("iceberg.schema.id"), expectedReport.schemaId()), + equalTo( + stringKey("iceberg.table.name"), + expectedReport.tableName())))); + } + + private static Consumer assertSizeMetric( String otelMetricName, ScanReport expectedReport, long expectedValue) { - testing() - .waitAndAssertMetrics( - INSTRUMENTATION_NAME, - metricAssert -> - metricAssert - .hasName(otelMetricName) - .hasUnit("By") - .hasLongSumSatisfying( - sum -> - sum.hasPointsSatisfying( - longSumAssert -> - longSumAssert - .hasValue(expectedValue) - .hasAttributesSatisfyingExactly( - equalTo( - longKey("iceberg.schema.id"), - expectedReport.schemaId()), - equalTo( - stringKey("iceberg.table.name"), - expectedReport.tableName()))))); + return metricAssert -> + metricAssert + .hasName(otelMetricName) + .hasUnit("By") + .hasLongSumSatisfying( + sum -> + sum.hasPointsSatisfying( + longSumAssert -> + longSumAssert + .hasValue(expectedValue) + .hasAttributesSatisfyingExactly( + equalTo( + longKey("iceberg.schema.id"), expectedReport.schemaId()), + equalTo( + stringKey("iceberg.table.name"), + expectedReport.tableName())))); } private static class SimpleReporter implements MetricsReporter { diff --git a/instrumentation/javalin/testing/src/main/java/io/opentelemetry/instrumentation/javalin/AbstractJavalinTest.java b/instrumentation/javalin/testing/src/main/java/io/opentelemetry/instrumentation/javalin/AbstractJavalinTest.java index 57dd0f071e71..8337e03a5cce 100644 --- a/instrumentation/javalin/testing/src/main/java/io/opentelemetry/instrumentation/javalin/AbstractJavalinTest.java +++ b/instrumentation/javalin/testing/src/main/java/io/opentelemetry/instrumentation/javalin/AbstractJavalinTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.instrumentation.javalin; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.histogram; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; @@ -161,14 +162,10 @@ void testHttpRouteMetricWithPathParamResponseSuccessful() { assertThat(content).isEqualTo(id); assertThat(response.status().code()).isEqualTo(200); testing() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( getJettyInstrumentation(), - metric -> - metric - .hasName("http.server.request.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> point.hasAttribute(HTTP_ROUTE, "/param/{id}")))); + histogram( + metric -> metric.hasName("http.server.request.duration"), + point -> point.hasAttribute(HTTP_ROUTE, "/param/{id}"))); } } diff --git a/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/datasource/JdbcTelemetryTest.java b/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/datasource/JdbcTelemetryTest.java index 73e91f613f52..5302bf626959 100644 --- a/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/datasource/JdbcTelemetryTest.java +++ b/instrumentation/jdbc/library/src/test/java/io/opentelemetry/instrumentation/jdbc/datasource/JdbcTelemetryTest.java @@ -6,6 +6,7 @@ package io.opentelemetry.instrumentation.jdbc.datasource; import static io.opentelemetry.instrumentation.testing.junit.db.DbClientMetricsTestUtil.assertDurationMetric; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.histogram; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.DbAttributes.DB_NAMESPACE; import static io.opentelemetry.semconv.DbAttributes.DB_OPERATION_BATCH_SIZE; @@ -169,15 +170,11 @@ void error(int errorCode, String sqlState, String expectedErrorType) throws SQLE DB_SYSTEM_NAME, ERROR_TYPE, SERVER_ADDRESS); - testing.waitAndAssertMetrics( + testing.waitAndAssertMetricsExactly( "io.opentelemetry.jdbc", - metric -> - metric - .hasName("db.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> point.hasAttribute(ERROR_TYPE, expectedErrorType)))); + histogram( + metric -> metric.hasName("db.client.operation.duration"), + point -> point.hasAttribute(ERROR_TYPE, expectedErrorType))); } private static Stream errorCodes() { diff --git a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractDistributionSummaryTest.java b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractDistributionSummaryTest.java index ee0b50d3bb95..8b3016e79a07 100644 --- a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractDistributionSummaryTest.java +++ b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractDistributionSummaryTest.java @@ -7,6 +7,7 @@ import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.instrumentation.micrometer.v1_5.AbstractCounterTest.INSTRUMENTATION_NAME; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.histogram; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import io.micrometer.core.instrument.DistributionSummary; @@ -44,23 +45,20 @@ void testMicrometerDistributionSummary() { // then testing() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("testSummary") - .hasDescription("This is a test distribution summary") - .hasUnit("things") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(7) - .hasCount(3) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("tag"), "value")) - .hasBucketBoundaries(NO_BUCKETS)))); + histogram( + metric -> + metric + .hasName("testSummary") + .hasDescription("This is a test distribution summary") + .hasUnit("things"), + point -> + point + .hasSum(7) + .hasCount(3) + .hasAttributesSatisfyingExactly(equalTo(stringKey("tag"), "value")) + .hasBucketBoundaries(NO_BUCKETS))); // micrometer gauge histogram is not emitted testing() @@ -73,20 +71,15 @@ void testMicrometerDistributionSummary() { // then // The synchronous histogram returns its previous value after removal. testing() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("testSummary") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(7) - .hasCount(3) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("tag"), "value"))))); + histogram( + metric -> metric.hasName("testSummary"), + point -> + point + .hasSum(7) + .hasCount(3) + .hasAttributesSatisfyingExactly(equalTo(stringKey("tag"), "value")))); } @Test @@ -109,24 +102,21 @@ void testMicrometerDistributionSummaryWithCustomBuckets() { // then testing() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("testSummaryWithCustomBuckets") - .hasDescription("This is a test distribution summary") - .hasUnit("things") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - points -> - points - .hasSum(555.5) - .hasCount(4) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("tag"), "value")) - .hasBucketBoundaries(1, 10, 100, 1000) - .hasBucketCounts(1, 1, 1, 1, 0)))); + histogram( + metric -> + metric + .hasName("testSummaryWithCustomBuckets") + .hasDescription("This is a test distribution summary") + .hasUnit("things"), + points -> + points + .hasSum(555.5) + .hasCount(4) + .hasAttributesSatisfyingExactly(equalTo(stringKey("tag"), "value")) + .hasBucketBoundaries(1, 10, 100, 1000) + .hasBucketCounts(1, 1, 1, 1, 0))); // micrometer gauge histogram is not emitted testing() diff --git a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractNamingConventionTest.java b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractNamingConventionTest.java index e3ae8cf73f2a..27e7a7abc0e1 100644 --- a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractNamingConventionTest.java +++ b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractNamingConventionTest.java @@ -7,6 +7,7 @@ import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.instrumentation.micrometer.v1_5.AbstractCounterTest.INSTRUMENTATION_NAME; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.histogram; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static java.util.Collections.singletonList; import static java.util.concurrent.TimeUnit.SECONDS; @@ -62,7 +63,7 @@ void renameCounter() { // then testing() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -85,17 +86,13 @@ void renameDistributionSummary() { // then testing() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("test.renamedSummary") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(stringKey("test.tag"), "test.value"))))); + histogram( + metric -> metric.hasName("test.renamedSummary"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(stringKey("test.tag"), "test.value")))); } @Test @@ -105,7 +102,7 @@ void renameFunctionCounter() { // then testing() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -127,7 +124,7 @@ void renameCustomMeterStatistic() { .register(Metrics.globalRegistry); testing() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -152,7 +149,7 @@ void renameFunctionTimer() { // then testing() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -162,10 +159,7 @@ void renameFunctionTimer() { sum.hasPointsSatisfying( point -> point.hasAttributesSatisfyingExactly( - equalTo(stringKey("test.tag"), "test.value"))))); - testing() - .waitAndAssertMetrics( - INSTRUMENTATION_NAME, + equalTo(stringKey("test.tag"), "test.value")))), metric -> metric .hasName("test.renamedFunctionTimer.sum") @@ -184,7 +178,7 @@ void renameGauge() { // then testing() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -207,7 +201,7 @@ void renameLongTaskTimer() { // then testing() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -217,10 +211,7 @@ void renameLongTaskTimer() { sum.hasPointsSatisfying( point -> point.hasAttributesSatisfyingExactly( - equalTo(stringKey("test.tag"), "test.value"))))); - testing() - .waitAndAssertMetrics( - INSTRUMENTATION_NAME, + equalTo(stringKey("test.tag"), "test.value")))), metric -> metric .hasName("test.renamedLongTaskTimer.duration") @@ -242,16 +233,12 @@ void renameTimer() { // then testing() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("test.renamedTimer") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(stringKey("test.tag"), "test.value"))))); + histogram( + metric -> metric.hasName("test.renamedTimer"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(stringKey("test.tag"), "test.value")))); } } diff --git a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractPrometheusModeTest.java b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractPrometheusModeTest.java index 2d78a0b1a232..55ea4719b882 100644 --- a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractPrometheusModeTest.java +++ b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractPrometheusModeTest.java @@ -7,6 +7,7 @@ import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.instrumentation.micrometer.v1_5.AbstractCounterTest.INSTRUMENTATION_NAME; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.histogram; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static java.util.Collections.singletonList; @@ -50,7 +51,7 @@ void testCounter() { // then testing() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -84,22 +85,19 @@ void testDistributionSummary() { // then testing() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("testPrometheusSummary.items") - .hasDescription("This is a test summary") - .hasUnit("items") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(54) - .hasCount(2) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("tag"), "value"))))); + histogram( + metric -> + metric + .hasName("testPrometheusSummary.items") + .hasDescription("This is a test summary") + .hasUnit("items"), + point -> + point + .hasSum(54) + .hasCount(2) + .hasAttributesSatisfyingExactly(equalTo(stringKey("tag"), "value")))); } @Test @@ -135,10 +133,7 @@ void testFunctionTimer() { point .hasValue(1) .hasAttributesSatisfyingExactly( - equalTo(stringKey("tag"), "value"))))); - testing() - .waitAndAssertMetrics( - INSTRUMENTATION_NAME, + equalTo(stringKey("tag"), "value")))), metric -> metric .hasName("testPrometheusFunctionTimer.seconds.sum") @@ -165,7 +160,7 @@ void testGauge() { // then testing() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -196,7 +191,7 @@ void testLongTaskTimer() throws InterruptedException { // then testing() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -211,10 +206,7 @@ void testLongTaskTimer() throws InterruptedException { point .hasValue(1) .hasAttributesSatisfyingExactly( - equalTo(stringKey("tag"), "value"))))); - testing() - .waitAndAssertMetrics( - INSTRUMENTATION_NAME, + equalTo(stringKey("tag"), "value")))), metric -> metric .hasName("testPrometheusLongTaskTimer.seconds.duration") @@ -281,7 +273,7 @@ void testMeter() { // then testing() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -315,22 +307,19 @@ void testTimer() { // then testing() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("testPrometheusTimer.seconds") - .hasDescription("This is a test timer") - .hasUnit("s") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(16.789) - .hasCount(3) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("tag"), "value"))))); + histogram( + metric -> + metric + .hasName("testPrometheusTimer.seconds") + .hasDescription("This is a test timer") + .hasUnit("s"), + point -> + point + .hasSum(16.789) + .hasCount(3) + .hasAttributesSatisfyingExactly(equalTo(stringKey("tag"), "value")))); } @Test @@ -355,16 +344,13 @@ void testSameNameDifferentTypeKeepsOwnDescription() { // then each instrument keeps its own description testing() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric .hasName("testPrometheusSharedName") .hasDescription("This is a test counter") - .hasDoubleSumSatisfying(sum -> sum.isMonotonic())); - testing() - .waitAndAssertMetrics( - INSTRUMENTATION_NAME, + .hasDoubleSumSatisfying(sum -> sum.isMonotonic()), metric -> metric .hasName("testPrometheusSharedName.seconds") @@ -387,29 +373,24 @@ void testTimerCustomBucketBoundaryFormatting() { // then testing() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("testPrometheusTimerBoundary.seconds") - .hasDescription("This is a test timer") - .hasUnit("s") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(0.1) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("tag"), "value")) - .satisfies( - pointData -> { - assertThat(pointData.getBoundaries()).hasSize(1); - assertThat( - Double.toString( - pointData.getBoundaries().get(0))) - .isEqualTo("0.3"); - })))); + histogram( + metric -> + metric + .hasName("testPrometheusTimerBoundary.seconds") + .hasDescription("This is a test timer") + .hasUnit("s"), + point -> + point + .hasSum(0.1) + .hasCount(1) + .hasAttributesSatisfyingExactly(equalTo(stringKey("tag"), "value")) + .satisfies( + pointData -> { + assertThat(pointData.getBoundaries()).hasSize(1); + assertThat(Double.toString(pointData.getBoundaries().get(0))) + .isEqualTo("0.3"); + }))); } } diff --git a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerHistogramGaugesTest.java b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerHistogramGaugesTest.java index 9de762b1d531..c3c052707ac0 100644 --- a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerHistogramGaugesTest.java +++ b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerHistogramGaugesTest.java @@ -50,10 +50,7 @@ void testMicrometerHistogram() { INSTRUMENTATION_NAME, histogram( metric -> - metric - .hasName("testTimer") - .hasDescription("This is a test timer") - .hasUnit("s"), + metric.hasName("testTimer").hasDescription("This is a test timer").hasUnit("s"), point -> point .hasSum(555.5) @@ -111,10 +108,7 @@ void testMicrometerPercentiles() { INSTRUMENTATION_NAME, histogram( metric -> - metric - .hasName("testTimer") - .hasDescription("This is a test timer") - .hasUnit("s"), + metric.hasName("testTimer").hasDescription("This is a test timer").hasUnit("s"), point -> point .hasSum(0.55) diff --git a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerMillisecondsTest.java b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerMillisecondsTest.java index 8a6d1357d8f3..7d4a26d5ce37 100644 --- a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerMillisecondsTest.java +++ b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerMillisecondsTest.java @@ -7,6 +7,7 @@ import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.instrumentation.micrometer.v1_5.AbstractCounterTest.INSTRUMENTATION_NAME; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.histogram; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static java.util.concurrent.TimeUnit.MILLISECONDS; import static java.util.concurrent.TimeUnit.SECONDS; @@ -38,22 +39,19 @@ void testTimerWithBaseUnitMilliseconds() { // then testing() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("testTimerMilliseconds") - .hasDescription("This is a test timer") - .hasUnit("ms") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(23_345) - .hasCount(3) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("tag"), "value"))))); + histogram( + metric -> + metric + .hasName("testTimerMilliseconds") + .hasDescription("This is a test timer") + .hasUnit("ms"), + point -> + point + .hasSum(23_345) + .hasCount(3) + .hasAttributesSatisfyingExactly(equalTo(stringKey("tag"), "value")))); // when Metrics.globalRegistry.remove(timer); diff --git a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerTest.java b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerTest.java index 2658fc4b1122..cd85e27471f9 100644 --- a/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerTest.java +++ b/instrumentation/micrometer/micrometer-1.5/testing/src/main/java/io/opentelemetry/instrumentation/micrometer/v1_5/AbstractTimerTest.java @@ -7,6 +7,7 @@ import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.instrumentation.micrometer.v1_5.AbstractCounterTest.INSTRUMENTATION_NAME; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.histogram; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static java.util.concurrent.TimeUnit.MILLISECONDS; @@ -45,23 +46,17 @@ void testTimer() { // then testing() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("testTimer") - .hasDescription("This is a test timer") - .hasUnit("s") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(42) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("tag"), "value")) - .hasBucketBoundaries(NO_BUCKETS)))); + histogram( + metric -> + metric.hasName("testTimer").hasDescription("This is a test timer").hasUnit("s"), + point -> + point + .hasSum(42) + .hasCount(1) + .hasAttributesSatisfyingExactly(equalTo(stringKey("tag"), "value")) + .hasBucketBoundaries(NO_BUCKETS))); // micrometer gauge histogram is not emitted testing() @@ -88,20 +83,11 @@ void testNanoPrecision() { // then testing() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("testNanoTimer") - .hasUnit("s") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(0.001234) - .hasCount(1) - .hasAttributes(Attributes.empty())))); + histogram( + metric -> metric.hasName("testNanoTimer").hasUnit("s"), + point -> point.hasSum(0.001234).hasCount(1).hasAttributes(Attributes.empty()))); } @Test @@ -127,24 +113,21 @@ void testMicrometerTimerWithCustomBuckets() { // then testing() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("testTimerWithCustomBuckets") - .hasDescription("This is a test timer") - .hasUnit("s") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(555.5) - .hasCount(4) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("tag"), "value")) - .satisfies(hasBucketBoundaries(1, 10, 100, 1_000)) - .hasBucketCounts(1, 1, 1, 1, 0)))); + histogram( + metric -> + metric + .hasName("testTimerWithCustomBuckets") + .hasDescription("This is a test timer") + .hasUnit("s"), + point -> + point + .hasSum(555.5) + .hasCount(4) + .hasAttributesSatisfyingExactly(equalTo(stringKey("tag"), "value")) + .satisfies(hasBucketBoundaries(1, 10, 100, 1_000)) + .hasBucketCounts(1, 1, 1, 1, 0))); } private static ThrowingConsumer hasBucketBoundaries(double... buckets) { diff --git a/instrumentation/openai/openai-java-1.1/library/src/test/java/io/opentelemetry/instrumentation/openai/v1_1/ChatTest.java b/instrumentation/openai/openai-java-1.1/library/src/test/java/io/opentelemetry/instrumentation/openai/v1_1/ChatTest.java index dd6ab772df2c..82e4dad279e6 100644 --- a/instrumentation/openai/openai-java-1.1/library/src/test/java/io/opentelemetry/instrumentation/openai/v1_1/ChatTest.java +++ b/instrumentation/openai/openai-java-1.1/library/src/test/java/io/opentelemetry/instrumentation/openai/v1_1/ChatTest.java @@ -126,7 +126,7 @@ void basicNoCaptureContent() { equalTo(GEN_AI_USAGE_OUTPUT_TOKENS, 2L)))); getTesting() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -229,7 +229,7 @@ void multipleChoicesNoCaptureContent() { equalTo(GEN_AI_USAGE_REASONING_OUTPUT_TOKENS, 0L)))); getTesting() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -361,7 +361,7 @@ void toolCallsNoCaptureContent() { equalTo(GEN_AI_USAGE_REASONING_OUTPUT_TOKENS, 0L)))); getTesting() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -486,7 +486,7 @@ void toolCallsNoCaptureContent() { equalTo(GEN_AI_USAGE_REASONING_OUTPUT_TOKENS, 0L)))); getTesting() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -638,7 +638,7 @@ void streamNoCaptureContent() { val -> val.containsExactly("stop")))))); getTesting() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -735,7 +735,7 @@ void streamMultipleChoicesNoCaptureContent() { val -> val.containsExactly("stop", "stop")))))); getTesting() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -838,7 +838,7 @@ void streamToolCallsNoCaptureContent() { val -> val.containsExactly("tool_calls")))))); getTesting() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -941,7 +941,7 @@ void streamToolCallsNoCaptureContent() { val -> val.containsExactly("stop")))))); getTesting() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric diff --git a/instrumentation/openai/openai-java-1.1/testing/src/main/java/io/opentelemetry/instrumentation/openai/v1_1/AbstractChatTest.java b/instrumentation/openai/openai-java-1.1/testing/src/main/java/io/opentelemetry/instrumentation/openai/v1_1/AbstractChatTest.java index 455d8e2f712a..b75537bff09c 100644 --- a/instrumentation/openai/openai-java-1.1/testing/src/main/java/io/opentelemetry/instrumentation/openai/v1_1/AbstractChatTest.java +++ b/instrumentation/openai/openai-java-1.1/testing/src/main/java/io/opentelemetry/instrumentation/openai/v1_1/AbstractChatTest.java @@ -205,7 +205,7 @@ void basic() { equalTo(GEN_AI_USAGE_OUTPUT_TOKENS, 2L))))); getTesting() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -373,7 +373,7 @@ void allTheClientOptions() { equalTo(GEN_AI_USAGE_REASONING_OUTPUT_TOKENS, 0L))))); getTesting() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -478,7 +478,7 @@ void multipleChoices() { equalTo(GEN_AI_USAGE_REASONING_OUTPUT_TOKENS, 0L))))); getTesting() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -613,7 +613,7 @@ void toolCalls() { equalTo(GEN_AI_USAGE_REASONING_OUTPUT_TOKENS, 0L))))); getTesting() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -765,7 +765,7 @@ void toolCalls() { equalTo(GEN_AI_USAGE_REASONING_OUTPUT_TOKENS, 0L))))); getTesting() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -939,7 +939,7 @@ void connectionError() { equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL))))); getTesting() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -1007,7 +1007,7 @@ void stream() { val -> val.containsExactly("stop")))))); getTesting() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -1134,7 +1134,7 @@ void streamIncludeUsage() { equalTo(GEN_AI_USAGE_REASONING_OUTPUT_TOKENS, 0L))))); getTesting() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -1256,7 +1256,7 @@ void streamMultipleChoices() { val -> val.containsExactly("stop", "stop")))))); getTesting() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -1411,7 +1411,7 @@ void streamToolCalls() { val -> val.containsExactly("tool_calls")))))); getTesting() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -1544,7 +1544,7 @@ void streamToolCalls() { val -> val.containsExactly("stop")))))); getTesting() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -1694,7 +1694,7 @@ void streamConnectionError() { equalTo(GEN_AI_REQUEST_STREAM, true))))); getTesting() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric diff --git a/instrumentation/openai/openai-java-1.1/testing/src/main/java/io/opentelemetry/instrumentation/openai/v1_1/AbstractEmbeddingsTest.java b/instrumentation/openai/openai-java-1.1/testing/src/main/java/io/opentelemetry/instrumentation/openai/v1_1/AbstractEmbeddingsTest.java index f3d3cdab7099..9b582b08d45c 100644 --- a/instrumentation/openai/openai-java-1.1/testing/src/main/java/io/opentelemetry/instrumentation/openai/v1_1/AbstractEmbeddingsTest.java +++ b/instrumentation/openai/openai-java-1.1/testing/src/main/java/io/opentelemetry/instrumentation/openai/v1_1/AbstractEmbeddingsTest.java @@ -112,7 +112,7 @@ void basic() { val -> val.isIn(singletonList("base64"), null)))))); getTesting() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -177,7 +177,7 @@ GEN_AI_REQUEST_ENCODING_FORMATS, singletonList("base64")), equalTo(GEN_AI_USAGE_INPUT_TOKENS, 4))))); getTesting() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -261,7 +261,7 @@ void connectionError() { getTesting().waitAndAssertLogRecords(genAiClientExceptionLogs(thrown)); getTesting() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric diff --git a/instrumentation/rocketmq/rocketmq-client-4.8/library/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v4_8/RocketMqMetricsTest.java b/instrumentation/rocketmq/rocketmq-client-4.8/library/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v4_8/RocketMqMetricsTest.java index 2fa7072d59d0..263bdd835f6e 100644 --- a/instrumentation/rocketmq/rocketmq-client-4.8/library/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v4_8/RocketMqMetricsTest.java +++ b/instrumentation/rocketmq/rocketmq-client-4.8/library/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v4_8/RocketMqMetricsTest.java @@ -5,7 +5,7 @@ package io.opentelemetry.instrumentation.rocketmqclient.v4_8; -import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.histogram; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.ErrorAttributes.ERROR_TYPE; import static io.opentelemetry.semconv.incubating.MessagingIncubatingAttributes.MESSAGING_CONSUMER_GROUP_NAME; @@ -26,8 +26,9 @@ import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; import io.opentelemetry.instrumentation.testing.junit.LibraryInstrumentationExtension; -import io.opentelemetry.sdk.metrics.data.MetricData; +import io.opentelemetry.sdk.testing.assertj.MetricAssert; import java.util.List; +import java.util.function.Consumer; import java.util.stream.Stream; import org.apache.rocketmq.client.consumer.listener.ConsumeReturnType; import org.apache.rocketmq.client.hook.ConsumeMessageContext; @@ -63,21 +64,22 @@ void recordsProducerMetrics( Context context = instrumenter.start(Context.root(), request); instrumenter.end(context, request, null, error); - assertMessageCount( - "messaging.client.sent.messages", - expectedCount, - "send", - message.getTopic(), - null, - errorType); - assertDuration( - "messaging.client.operation.duration", "send", message.getTopic(), null, "send", errorType); - assertThat(testing.metrics()) - .filteredOn( - metric -> metric.getInstrumentationScopeInfo().getName().equals(INSTRUMENTATION_NAME)) - .extracting(MetricData::getName) - .containsExactlyInAnyOrder( - "messaging.client.sent.messages", "messaging.client.operation.duration"); + testing.waitAndAssertMetricsExactly( + INSTRUMENTATION_NAME, + assertMessageCount( + "messaging.client.sent.messages", + expectedCount, + "send", + message.getTopic(), + null, + errorType), + assertDuration( + "messaging.client.operation.duration", + "send", + message.getTopic(), + null, + "send", + errorType)); } private static Stream producerCases() { @@ -123,26 +125,22 @@ void recordsProcessMetrics( instrumenter.end(consumerContext, response); String destination = messages.get(0).getTopic(); - assertMessageCount( - "messaging.client.consumed.messages", - expectedCount, - "process", - destination, - "consumer-group", - consumeErrorType); - assertDuration( - "messaging.process.duration", - "process", - destination, - "consumer-group", - null, - consumeErrorType); - assertThat(testing.metrics()) - .filteredOn( - metric -> metric.getInstrumentationScopeInfo().getName().equals(INSTRUMENTATION_NAME)) - .extracting(MetricData::getName) - .containsExactlyInAnyOrder( - "messaging.client.consumed.messages", "messaging.process.duration"); + testing.waitAndAssertMetricsExactly( + INSTRUMENTATION_NAME, + assertMessageCount( + "messaging.client.consumed.messages", + expectedCount, + "process", + destination, + "consumer-group", + consumeErrorType), + assertDuration( + "messaging.process.duration", + "process", + destination, + "consumer-group", + null, + consumeErrorType)); } private static Stream consumerCases() { @@ -178,64 +176,48 @@ private static MessageExt messageExt(String topic) { return message; } - private static void assertMessageCount( + private static Consumer assertMessageCount( String metricName, long expectedCount, String operationName, String destination, String consumerGroup, String errorType) { - testing.waitAndAssertMetrics( - INSTRUMENTATION_NAME, - metricName, - metrics -> - metrics.satisfiesExactly( - metric -> - assertThat(metric) - .hasLongSumSatisfying( - sum -> - sum.hasPointsSatisfying( - point -> - point - .hasValue(expectedCount) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, operationName), - equalTo(MESSAGING_SYSTEM, "rocketmq"), - equalTo(ERROR_TYPE, errorType), - equalTo( - MESSAGING_CONSUMER_GROUP_NAME, consumerGroup), - equalTo( - MESSAGING_DESTINATION_NAME, destination)))))); + return metric -> + metric + .hasName(metricName) + .hasLongSumSatisfying( + sum -> + sum.hasPointsSatisfying( + point -> + point + .hasValue(expectedCount) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, operationName), + equalTo(MESSAGING_SYSTEM, "rocketmq"), + equalTo(ERROR_TYPE, errorType), + equalTo(MESSAGING_CONSUMER_GROUP_NAME, consumerGroup), + equalTo(MESSAGING_DESTINATION_NAME, destination)))); } - private static void assertDuration( + private static Consumer assertDuration( String metricName, String operationName, String destination, String consumerGroup, String operationType, String errorType) { - testing.waitAndAssertMetrics( - INSTRUMENTATION_NAME, - metricName, - metrics -> - metrics.satisfiesExactly( - metric -> - assertThat(metric) - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, operationName), - equalTo(MESSAGING_SYSTEM, "rocketmq"), - equalTo(ERROR_TYPE, errorType), - equalTo( - MESSAGING_CONSUMER_GROUP_NAME, consumerGroup), - equalTo(MESSAGING_DESTINATION_NAME, destination), - equalTo( - MESSAGING_OPERATION_TYPE, operationType)))))); + return histogram( + metric -> metric.hasName(metricName), + point -> + point + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, operationName), + equalTo(MESSAGING_SYSTEM, "rocketmq"), + equalTo(ERROR_TYPE, errorType), + equalTo(MESSAGING_CONSUMER_GROUP_NAME, consumerGroup), + equalTo(MESSAGING_DESTINATION_NAME, destination), + equalTo(MESSAGING_OPERATION_TYPE, operationType))); } } diff --git a/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/AbstractRocketMqClientSuppressReceiveSpanTest.java b/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/AbstractRocketMqClientSuppressReceiveSpanTest.java index 85500429b6a1..59a9be634906 100644 --- a/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/AbstractRocketMqClientSuppressReceiveSpanTest.java +++ b/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/AbstractRocketMqClientSuppressReceiveSpanTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.instrumentation.rocketmqclient.v5_0; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.histogram; import static io.opentelemetry.instrumentation.testing.util.TelemetryDataUtil.asRemote; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; @@ -150,100 +151,56 @@ void testSendAndConsumeMessage() throws ClientException { private void assertMetrics(String topic, String consumerGroup) { testing() - .waitAndAssertMetrics( + .waitAndAssertMetricsExactly( "io.opentelemetry.rocketmq-client-5.0", - "messaging.client.sent.messages", - metrics -> - metrics.satisfiesExactly( - metric -> - assertThat(metric) - .satisfies( - data -> assertThat(data.getLongSumData().getPoints()).hasSize(1)) - .hasLongSumSatisfying( - sum -> - sum.hasPointsSatisfying( - point -> - point - .hasValue(1) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "send"), - equalTo(MESSAGING_SYSTEM, "rocketmq"), - equalTo(MESSAGING_DESTINATION_NAME, topic)))))); - testing() - .waitAndAssertMetrics( - "io.opentelemetry.rocketmq-client-5.0", - "messaging.client.operation.duration", - metrics -> - metrics.satisfiesExactly( - metric -> - assertThat(metric) - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "send"), - equalTo(MESSAGING_SYSTEM, "rocketmq"), - equalTo(MESSAGING_DESTINATION_NAME, topic), - equalTo(MESSAGING_OPERATION_TYPE, "send")))))); - testing() - .waitAndAssertMetrics( - "io.opentelemetry.rocketmq-client-5.0", - "messaging.process.duration", - metrics -> - metrics.satisfiesExactly( - metric -> - assertThat(metric) - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "process"), - equalTo(MESSAGING_SYSTEM, "rocketmq"), - equalTo( - MESSAGING_CONSUMER_GROUP_NAME, - consumerGroup), - equalTo(MESSAGING_DESTINATION_NAME, topic)))))); - testing() - .waitAndAssertMetrics( - "io.opentelemetry.rocketmq-client-5.0", - "messaging.client.consumed.messages", - metrics -> - metrics.satisfiesExactly( - metric -> - assertThat(metric) - .satisfies( - data -> assertThat(data.getLongSumData().getPoints()).hasSize(1)) - .hasLongSumSatisfying( - sum -> - sum.hasPointsSatisfying( - point -> - point - .hasValue(1) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "process"), - equalTo(MESSAGING_SYSTEM, "rocketmq"), - equalTo( - MESSAGING_CONSUMER_GROUP_NAME, - consumerGroup), - equalTo(MESSAGING_DESTINATION_NAME, topic)))))); - assertThat(testing().metrics()) - .filteredOn( metric -> metric - .getInstrumentationScopeInfo() - .getName() - .equals("io.opentelemetry.rocketmq-client-5.0")) - .extracting(metric -> metric.getName()) - .containsExactlyInAnyOrder( - "messaging.client.sent.messages", - "messaging.client.operation.duration", - "messaging.process.duration", - "messaging.client.consumed.messages"); + .hasName("messaging.client.sent.messages") + .satisfies(data -> assertThat(data.getLongSumData().getPoints()).hasSize(1)) + .hasLongSumSatisfying( + sum -> + sum.hasPointsSatisfying( + point -> + point + .hasValue(1) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "send"), + equalTo(MESSAGING_SYSTEM, "rocketmq"), + equalTo(MESSAGING_DESTINATION_NAME, topic)))), + histogram( + metric -> metric.hasName("messaging.client.operation.duration"), + point -> + point + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "send"), + equalTo(MESSAGING_SYSTEM, "rocketmq"), + equalTo(MESSAGING_DESTINATION_NAME, topic), + equalTo(MESSAGING_OPERATION_TYPE, "send"))), + histogram( + metric -> metric.hasName("messaging.process.duration"), + point -> + point + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "process"), + equalTo(MESSAGING_SYSTEM, "rocketmq"), + equalTo(MESSAGING_CONSUMER_GROUP_NAME, consumerGroup), + equalTo(MESSAGING_DESTINATION_NAME, topic))), + metric -> + metric + .hasName("messaging.client.consumed.messages") + .satisfies(data -> assertThat(data.getLongSumData().getPoints()).hasSize(1)) + .hasLongSumSatisfying( + sum -> + sum.hasPointsSatisfying( + point -> + point + .hasValue(1) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "process"), + equalTo(MESSAGING_SYSTEM, "rocketmq"), + equalTo(MESSAGING_CONSUMER_GROUP_NAME, consumerGroup), + equalTo(MESSAGING_DESTINATION_NAME, topic))))); } } diff --git a/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/RocketMqSimpleConsumerTest.java b/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/RocketMqSimpleConsumerTest.java index b045a731e726..f418c3729f9e 100644 --- a/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/RocketMqSimpleConsumerTest.java +++ b/instrumentation/rocketmq/rocketmq-client-5.0/javaagent/src/test/java/io/opentelemetry/instrumentation/rocketmqclient/v5_0/RocketMqSimpleConsumerTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.instrumentation.rocketmqclient.v5_0; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.histogram; import static io.opentelemetry.instrumentation.testing.util.TelemetryDataUtil.asRemote; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; @@ -194,45 +195,33 @@ void shouldInstrumentReceiveWhenReceiveTelemetryDisabled() throws ClientExceptio }); assertSuccessfulReceiveTrace("disabled receive parent", sendSpan); - testing.waitAndAssertMetrics( + testing.waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - "messaging.client.operation.duration", - metrics -> - metrics.satisfiesExactly( - metric -> - assertThat(metric) - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo( - MESSAGING_CONSUMER_GROUP_NAME, CONSUMER_GROUP), - equalTo(MESSAGING_SYSTEM, "rocketmq"), - equalTo(MESSAGING_DESTINATION_NAME, TOPIC), - equalTo(MESSAGING_OPERATION_NAME, "receive"), - equalTo(MESSAGING_OPERATION_TYPE, "receive")))))); - testing.waitAndAssertMetrics( - INSTRUMENTATION_NAME, - "messaging.client.consumed.messages", - metrics -> - metrics.satisfiesExactly( - metric -> - assertThat(metric) - .hasLongSumSatisfying( - sum -> - sum.hasPointsSatisfying( - point -> - point - .hasValue(1) - .hasAttributesSatisfyingExactly( - equalTo( - MESSAGING_CONSUMER_GROUP_NAME, CONSUMER_GROUP), - equalTo(MESSAGING_SYSTEM, "rocketmq"), - equalTo(MESSAGING_DESTINATION_NAME, TOPIC), - equalTo(MESSAGING_OPERATION_NAME, "receive")))))); + histogram( + metric -> metric.hasName("messaging.client.operation.duration"), + point -> + point + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_CONSUMER_GROUP_NAME, CONSUMER_GROUP), + equalTo(MESSAGING_SYSTEM, "rocketmq"), + equalTo(MESSAGING_DESTINATION_NAME, TOPIC), + equalTo(MESSAGING_OPERATION_NAME, "receive"), + equalTo(MESSAGING_OPERATION_TYPE, "receive"))), + metric -> + metric + .hasName("messaging.client.consumed.messages") + .hasLongSumSatisfying( + sum -> + sum.hasPointsSatisfying( + point -> + point + .hasValue(1) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_CONSUMER_GROUP_NAME, CONSUMER_GROUP), + equalTo(MESSAGING_SYSTEM, "rocketmq"), + equalTo(MESSAGING_DESTINATION_NAME, TOPIC), + equalTo(MESSAGING_OPERATION_NAME, "receive"))))); } @Test diff --git a/instrumentation/runtime-telemetry/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/runtimetelemetry/JmxRuntimeMetricsTest.java b/instrumentation/runtime-telemetry/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/runtimetelemetry/JmxRuntimeMetricsTest.java index 235b3026a798..4b04a37a69eb 100644 --- a/instrumentation/runtime-telemetry/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/runtimetelemetry/JmxRuntimeMetricsTest.java +++ b/instrumentation/runtime-telemetry/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/runtimetelemetry/JmxRuntimeMetricsTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.runtimetelemetry; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.histogram; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; import static io.opentelemetry.semconv.JvmAttributes.JVM_GC_ACTION; import static io.opentelemetry.semconv.JvmAttributes.JVM_GC_NAME; @@ -25,7 +26,7 @@ void runtimeMetricsAreEnabled() { // Force a gc to "ensure" gc metrics System.gc(); - testing.waitAndAssertMetrics( + testing.waitAndAssertMetricsExactly( "io.opentelemetry.runtime-telemetry", metric -> metric.hasName("jvm.class.loaded"), metric -> metric.hasName("jvm.class.unloaded"), @@ -33,17 +34,13 @@ void runtimeMetricsAreEnabled() { metric -> metric.hasName("jvm.cpu.time"), metric -> metric.hasName("jvm.cpu.count"), metric -> metric.hasName("jvm.cpu.recent_utilization"), - metric -> - metric - .hasName("jvm.gc.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - satisfies(JVM_GC_NAME, val -> val.isNotBlank()), - satisfies(JVM_GC_ACTION, val -> val.isNotBlank()), - satisfies(JVM_GC_CAUSE, val -> val.isNotBlank())))), + histogram( + metric -> metric.hasName("jvm.gc.duration"), + point -> + point.hasAttributesSatisfyingExactly( + satisfies(JVM_GC_NAME, val -> val.isNotBlank()), + satisfies(JVM_GC_ACTION, val -> val.isNotBlank()), + satisfies(JVM_GC_CAUSE, val -> val.isNotBlank()))), metric -> metric.hasName("jvm.memory.used"), metric -> metric.hasName("jvm.memory.committed"), metric -> metric.hasName("jvm.memory.limit"), diff --git a/instrumentation/runtime-telemetry/library/src/test/java/io/opentelemetry/instrumentation/runtimetelemetry/internal/GarbageCollectorTest.java b/instrumentation/runtime-telemetry/library/src/test/java/io/opentelemetry/instrumentation/runtimetelemetry/internal/GarbageCollectorTest.java index 40b482b43aba..766ac67fe41a 100644 --- a/instrumentation/runtime-telemetry/library/src/test/java/io/opentelemetry/instrumentation/runtimetelemetry/internal/GarbageCollectorTest.java +++ b/instrumentation/runtime-telemetry/library/src/test/java/io/opentelemetry/instrumentation/runtimetelemetry/internal/GarbageCollectorTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.instrumentation.runtimetelemetry.internal; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.histogram; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.JvmAttributes.JVM_GC_ACTION; import static io.opentelemetry.semconv.JvmAttributes.JVM_GC_NAME; @@ -69,34 +70,32 @@ void registerObservers() { listener.handleNotification( createTestNotification("G1 Old Generation", "end of major GC", "System.gc()", 11), null); - testing.waitAndAssertMetrics( + testing.waitAndAssertMetricsExactly( "test", - metric -> - metric - .hasName("jvm.gc.duration") - .hasDescription("Duration of JVM garbage collection actions.") - .hasUnit("s") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasCount(2) - .hasSum(0.022) - .hasAttributesSatisfyingExactly( - equalTo(JVM_GC_NAME, "G1 Young Generation"), - equalTo(JVM_GC_ACTION, "end of minor GC"), - equalTo(JVM_GC_CAUSE, "Allocation Failure")) - .hasBucketBoundaries(GC_DURATION_BUCKETS), - point -> - point - .hasCount(1) - .hasSum(0.011) - .hasAttributesSatisfyingExactly( - equalTo(JVM_GC_NAME, "G1 Old Generation"), - equalTo(JVM_GC_ACTION, "end of major GC"), - equalTo(JVM_GC_CAUSE, "System.gc()")) - .hasBucketBoundaries(GC_DURATION_BUCKETS)))); + histogram( + metric -> + metric + .hasName("jvm.gc.duration") + .hasDescription("Duration of JVM garbage collection actions.") + .hasUnit("s"), + point -> + point + .hasCount(2) + .hasSum(0.022) + .hasAttributesSatisfyingExactly( + equalTo(JVM_GC_NAME, "G1 Young Generation"), + equalTo(JVM_GC_ACTION, "end of minor GC"), + equalTo(JVM_GC_CAUSE, "Allocation Failure")) + .hasBucketBoundaries(GC_DURATION_BUCKETS), + point -> + point + .hasCount(1) + .hasSum(0.011) + .hasAttributesSatisfyingExactly( + equalTo(JVM_GC_NAME, "G1 Old Generation"), + equalTo(JVM_GC_ACTION, "end of major GC"), + equalTo(JVM_GC_CAUSE, "System.gc()")) + .hasBucketBoundaries(GC_DURATION_BUCKETS))); } private static Notification createTestNotification( diff --git a/instrumentation/spring/spring-ai-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/ai/v1_0/AbstractOpenAiChatModelTest.java b/instrumentation/spring/spring-ai-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/ai/v1_0/AbstractOpenAiChatModelTest.java index b389fbf190f5..696caecba404 100644 --- a/instrumentation/spring/spring-ai-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/ai/v1_0/AbstractOpenAiChatModelTest.java +++ b/instrumentation/spring/spring-ai-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/ai/v1_0/AbstractOpenAiChatModelTest.java @@ -104,7 +104,7 @@ void callRecordsOpenAiSpringAiResponse() { } private static void assertMetrics() { - testing.waitAndAssertMetrics( + testing.waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric diff --git a/instrumentation/spring/spring-ai-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/ai/v1_0/ChatModelTest.java b/instrumentation/spring/spring-ai-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/ai/v1_0/ChatModelTest.java index b1257ac1fb9f..d0b464413f4f 100644 --- a/instrumentation/spring/spring-ai-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/ai/v1_0/ChatModelTest.java +++ b/instrumentation/spring/spring-ai-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/ai/v1_0/ChatModelTest.java @@ -855,7 +855,7 @@ private static void assertErrorTrace(IllegalStateException error, boolean stream } private static void assertMetrics() { - testing.waitAndAssertMetrics( + testing.waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric @@ -898,7 +898,7 @@ private static void assertMetrics() { } private static void assertMetricsWithoutTokenUsage() { - testing.waitAndAssertMetrics( + testing.waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, metric -> metric diff --git a/instrumentation/spring/spring-pulsar-1.0/testing/src/main/java/io/opentelemetry/instrumentation/spring/pulsar/v1_0/AbstractSpringPulsarTest.java b/instrumentation/spring/spring-pulsar-1.0/testing/src/main/java/io/opentelemetry/instrumentation/spring/pulsar/v1_0/AbstractSpringPulsarTest.java index 798befb4b1cf..4b30965b9239 100644 --- a/instrumentation/spring/spring-pulsar-1.0/testing/src/main/java/io/opentelemetry/instrumentation/spring/pulsar/v1_0/AbstractSpringPulsarTest.java +++ b/instrumentation/spring/spring-pulsar-1.0/testing/src/main/java/io/opentelemetry/instrumentation/spring/pulsar/v1_0/AbstractSpringPulsarTest.java @@ -6,6 +6,7 @@ package io.opentelemetry.instrumentation.spring.pulsar.v1_0; import static io.opentelemetry.api.common.AttributeKey.stringKey; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.histogram; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; @@ -112,27 +113,6 @@ void testSpringPulsar() throws PulsarClientException, InterruptedException { protected void assertProcessMetrics() { - testing.waitAndAssertMetrics( - "io.opentelemetry.spring-pulsar-1.0", - "messaging.process.duration", - metrics -> - metrics.satisfiesExactly( - metric -> - assertThat(metric) - .hasUnit("s") - .hasDescription("Duration of processing operation.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "process"), - equalTo(MESSAGING_SYSTEM, "pulsar"), - equalTo( - MESSAGING_DESTINATION_NAME, OTEL_TOPIC)))))); - testing.waitAndAssertMetrics( "io.opentelemetry.pulsar-2.8", "messaging.client.consumed.messages", @@ -158,24 +138,34 @@ protected void assertProcessMetrics() { OTEL_SUBSCRIPTION), equalTo(SERVER_ADDRESS, brokerHost), equalTo(SERVER_PORT, brokerPort)))))); - testing.waitAndAssertMetrics( + testing.waitAndAssertMetricsExactly( "io.opentelemetry.spring-pulsar-1.0", - "messaging.client.consumed.messages", - metrics -> - metrics.satisfiesExactly( - metric -> - assertThat(metric) - .hasLongSumSatisfying( - sum -> - sum.hasPointsSatisfying( - point -> - point - .hasValue(1) - .hasAttributesSatisfyingExactly( - equalTo(MESSAGING_OPERATION_NAME, "process"), - equalTo(MESSAGING_SYSTEM, "pulsar"), - equalTo( - MESSAGING_DESTINATION_NAME, OTEL_TOPIC)))))); + histogram( + metric -> + metric + .hasName("messaging.process.duration") + .hasUnit("s") + .hasDescription("Duration of processing operation."), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "process"), + equalTo(MESSAGING_SYSTEM, "pulsar"), + equalTo(MESSAGING_DESTINATION_NAME, OTEL_TOPIC))), + metric -> + metric + .hasName("messaging.client.consumed.messages") + .hasLongSumSatisfying( + sum -> + sum.hasPointsSatisfying( + point -> + point + .hasValue(1) + .hasAttributesSatisfyingExactly( + equalTo(MESSAGING_OPERATION_NAME, "process"), + equalTo(MESSAGING_SYSTEM, "pulsar"), + equalTo(MESSAGING_DESTINATION_NAME, OTEL_TOPIC))))); } protected List publishAttributes() { diff --git a/instrumentation/spring/spring-rabbit-1.0/javaagent/src/version11Test/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbit11SimpleMessageListenerContainerTest.java b/instrumentation/spring/spring-rabbit-1.0/javaagent/src/version11Test/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbit11SimpleMessageListenerContainerTest.java index 8bef994eb938..076b4dbd5195 100644 --- a/instrumentation/spring/spring-rabbit-1.0/javaagent/src/version11Test/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbit11SimpleMessageListenerContainerTest.java +++ b/instrumentation/spring/spring-rabbit-1.0/javaagent/src/version11Test/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbit11SimpleMessageListenerContainerTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.spring.rabbit.v1_0; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.histogram; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static java.util.concurrent.TimeUnit.SECONDS; import static org.assertj.core.api.Assertions.assertThat; @@ -106,25 +107,14 @@ void shouldUseSpringProcessTelemetry() throws InterruptedException { span -> span.hasName("consumer").hasParent(processSpan)); }); - testing.waitAndAssertMetrics( + testing.waitAndAssertMetricsExactly( SPRING_INSTRUMENTATION_NAME, - "messaging.process.duration", - metrics -> - metrics.satisfiesExactly( - metric -> - assertThat(metric) - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying(point -> point.hasCount(1))))); - testing.waitAndAssertMetrics( - SPRING_INSTRUMENTATION_NAME, - "messaging.client.consumed.messages", - metrics -> - metrics.satisfiesExactly( - metric -> - assertThat(metric) - .hasLongSumSatisfying( - sum -> sum.hasPointsSatisfying(point -> point.hasValue(1))))); + histogram( + metric -> metric.hasName("messaging.process.duration"), point -> point.hasCount(1)), + metric -> + metric + .hasName("messaging.client.consumed.messages") + .hasLongSumSatisfying(sum -> sum.hasPointsSatisfying(point -> point.hasValue(1)))); assertThat(testing.metrics()) .filteredOn( metric -> diff --git a/instrumentation/spring/spring-rabbit-1.0/javaagent/src/version20Test/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbit20DirectMessageListenerContainerTest.java b/instrumentation/spring/spring-rabbit-1.0/javaagent/src/version20Test/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbit20DirectMessageListenerContainerTest.java index 7a2b6ab1c648..24de3e6adc8d 100644 --- a/instrumentation/spring/spring-rabbit-1.0/javaagent/src/version20Test/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbit20DirectMessageListenerContainerTest.java +++ b/instrumentation/spring/spring-rabbit-1.0/javaagent/src/version20Test/java/io/opentelemetry/javaagent/instrumentation/spring/rabbit/v1_0/SpringRabbit20DirectMessageListenerContainerTest.java @@ -6,6 +6,7 @@ package io.opentelemetry.javaagent.instrumentation.spring.rabbit.v1_0; import static io.opentelemetry.instrumentation.testing.util.InstrumentationScopeAssertions.hasScopeName; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.histogram; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static java.util.concurrent.TimeUnit.SECONDS; import static org.assertj.core.api.Assertions.assertThat; @@ -101,25 +102,14 @@ void shouldUseSpringProcessTelemetry() throws InterruptedException { span -> span.hasName("consumer").hasParent(processSpan)); }); - testing.waitAndAssertMetrics( + testing.waitAndAssertMetricsExactly( SPRING_INSTRUMENTATION_NAME, - "messaging.process.duration", - metrics -> - metrics.satisfiesExactly( - metric -> - assertThat(metric) - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying(point -> point.hasCount(1))))); - testing.waitAndAssertMetrics( - SPRING_INSTRUMENTATION_NAME, - "messaging.client.consumed.messages", - metrics -> - metrics.satisfiesExactly( - metric -> - assertThat(metric) - .hasLongSumSatisfying( - sum -> sum.hasPointsSatisfying(point -> point.hasValue(1))))); + histogram( + metric -> metric.hasName("messaging.process.duration"), point -> point.hasCount(1)), + metric -> + metric + .hasName("messaging.client.consumed.messages") + .hasLongSumSatisfying(sum -> sum.hasPointsSatisfying(point -> point.hasValue(1)))); assertThat(testing.metrics()) .filteredOn( metric -> diff --git a/instrumentation/spring/spring-webflux/spring-webflux-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/webflux/v5_0/client/SpringWebfluxClientInstrumentationTest.java b/instrumentation/spring/spring-webflux/spring-webflux-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/webflux/v5_0/client/SpringWebfluxClientInstrumentationTest.java index 70045d60f343..2efbf979f209 100644 --- a/instrumentation/spring/spring-webflux/spring-webflux-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/webflux/v5_0/client/SpringWebfluxClientInstrumentationTest.java +++ b/instrumentation/spring/spring-webflux/spring-webflux-5.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/webflux/v5_0/client/SpringWebfluxClientInstrumentationTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.javaagent.instrumentation.spring.webflux.v5_0.client; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.histogram; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.HttpAttributes.HTTP_REQUEST_METHOD; import static io.opentelemetry.semconv.HttpAttributes.HTTP_RESPONSE_STATUS_CODE; @@ -66,20 +67,16 @@ void shouldAddProtocolVersionToDurationMetric() { assertThat(responseCode).isEqualTo(200); - testing.waitAndAssertMetrics( + testing.waitAndAssertMetricsExactly( "io.opentelemetry.spring-webflux-5.0", - metric -> - metric - .hasName("http.client.request.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point.hasAttributesSatisfyingExactly( - equalTo(HTTP_REQUEST_METHOD, "GET"), - equalTo(HTTP_RESPONSE_STATUS_CODE, 200), - equalTo(NETWORK_PROTOCOL_VERSION, "1.1"), - equalTo(SERVER_ADDRESS, uri.getHost()), - equalTo(SERVER_PORT, uri.getPort()))))); + histogram( + metric -> metric.hasName("http.client.request.duration"), + point -> + point.hasAttributesSatisfyingExactly( + equalTo(HTTP_REQUEST_METHOD, "GET"), + equalTo(HTTP_RESPONSE_STATUS_CODE, 200), + equalTo(NETWORK_PROTOCOL_VERSION, "1.1"), + equalTo(SERVER_ADDRESS, uri.getHost()), + equalTo(SERVER_PORT, uri.getPort())))); } } From c9623eb6ff8295f50bea053d759df05bf738d262 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 20 Oct 2026 15:45:17 +0000 Subject: [PATCH 11/14] Flatten remaining GenAI histogram callbacks Co-authored-by: trask <218610+trask@users.noreply.github.com> --- .../v2_2/internal/Aws2BedrockRuntimeTest.java | 937 +++++----- .../v2_2/AbstractAws2BedrockRuntimeTest.java | 1639 ++++++++--------- .../instrumentation/openai/v1_1/ChatTest.java | 389 ++-- .../openai/v1_1/AbstractChatTest.java | 579 +++--- .../openai/v1_1/AbstractEmbeddingsTest.java | 125 +- .../ai/v1_0/AbstractOpenAiChatModelTest.java | 69 +- .../spring/ai/v1_0/ChatModelTest.java | 93 +- 7 files changed, 1750 insertions(+), 2081 deletions(-) diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/library/src/testBedrockRuntime/java/io/opentelemetry/instrumentation/awssdk/v2_2/internal/Aws2BedrockRuntimeTest.java b/instrumentation/aws-sdk/aws-sdk-2.2/library/src/testBedrockRuntime/java/io/opentelemetry/instrumentation/awssdk/v2_2/internal/Aws2BedrockRuntimeTest.java index fb7b6825931c..318348fef89d 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/library/src/testBedrockRuntime/java/io/opentelemetry/instrumentation/awssdk/v2_2/internal/Aws2BedrockRuntimeTest.java +++ b/instrumentation/aws-sdk/aws-sdk-2.2/library/src/testBedrockRuntime/java/io/opentelemetry/instrumentation/awssdk/v2_2/internal/Aws2BedrockRuntimeTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.instrumentation.awssdk.v2_2.internal; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.histogram; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.incubating.EventIncubatingAttributes.EVENT_NAME; import static io.opentelemetry.semconv.incubating.GenAiIncubatingAttributes.GEN_AI_OPERATION_NAME; @@ -174,47 +175,43 @@ void testConverseToolCallNoMessageContent() { getTesting() .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.token.usage") - .hasUnit("{token}") - .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(415) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(162) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .hasUnit("s") - .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + histogram( + metric -> + metric + .hasName("gen_ai.client.token.usage") + .hasUnit("{token}") + .hasDescription("Measures number of input and output tokens used."), + point -> + point + .hasSum(415) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(162) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))), + histogram( + metric -> + metric + .hasName("gen_ai.client.operation.duration") + .hasUnit("s") + .hasDescription("GenAI operation duration."), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))); SpanContext spanCtx0 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -310,47 +307,43 @@ void testConverseToolCallNoMessageContent() { getTesting() .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.token.usage") - .hasUnit("{token}") - .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(554) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(57) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .hasUnit("s") - .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + histogram( + metric -> + metric + .hasName("gen_ai.client.token.usage") + .hasUnit("{token}") + .hasDescription("Measures number of input and output tokens used."), + point -> + point + .hasSum(554) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(57) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))), + histogram( + metric -> + metric + .hasName("gen_ai.client.operation.duration") + .hasUnit("s") + .hasDescription("GenAI operation duration."), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))); SpanContext spanCtx1 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -520,47 +513,43 @@ void testConverseToolCallStreamNoMessageContent() { getTesting() .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.token.usage") - .hasUnit("{token}") - .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(415) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(162) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .hasUnit("s") - .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + histogram( + metric -> + metric + .hasName("gen_ai.client.token.usage") + .hasUnit("{token}") + .hasDescription("Measures number of input and output tokens used."), + point -> + point + .hasSum(415) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(162) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))), + histogram( + metric -> + metric + .hasName("gen_ai.client.operation.duration") + .hasUnit("s") + .hasDescription("GenAI operation duration."), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))); SpanContext spanCtx0 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -676,47 +665,43 @@ void testConverseToolCallStreamNoMessageContent() { getTesting() .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.token.usage") - .hasUnit("{token}") - .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(554) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(59) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .hasUnit("s") - .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + histogram( + metric -> + metric + .hasName("gen_ai.client.token.usage") + .hasUnit("{token}") + .hasDescription("Measures number of input and output tokens used."), + point -> + point + .hasSum(554) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(59) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))), + histogram( + metric -> + metric + .hasName("gen_ai.client.operation.duration") + .hasUnit("s") + .hasDescription("GenAI operation duration."), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))); SpanContext spanCtx1 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -934,47 +919,43 @@ void testInvokeModelToolCallAmazonNovaNoMessageContent() { getTesting() .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.token.usage") - .hasUnit("{token}") - .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(416) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(166) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .hasUnit("s") - .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + histogram( + metric -> + metric + .hasName("gen_ai.client.token.usage") + .hasUnit("{token}") + .hasDescription("Measures number of input and output tokens used."), + point -> + point + .hasSum(416) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(166) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))), + histogram( + metric -> + metric + .hasName("gen_ai.client.operation.duration") + .hasUnit("s") + .hasDescription("GenAI operation duration."), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))); SpanContext spanCtx0 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); getTesting() @@ -1098,47 +1079,43 @@ void testInvokeModelToolCallAmazonNovaNoMessageContent() { getTesting() .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.token.usage") - .hasUnit("{token}") - .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(559) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(59) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .hasUnit("s") - .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + histogram( + metric -> + metric + .hasName("gen_ai.client.token.usage") + .hasUnit("{token}") + .hasDescription("Measures number of input and output tokens used."), + point -> + point + .hasSum(559) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(59) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))), + histogram( + metric -> + metric + .hasName("gen_ai.client.operation.duration") + .hasUnit("s") + .hasDescription("GenAI operation duration."), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))); SpanContext spanCtx1 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -1376,47 +1353,43 @@ public void accept(PayloadPart chunk) { getTesting() .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.token.usage") - .hasUnit("{token}") - .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(416) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(165) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .hasUnit("s") - .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + histogram( + metric -> + metric + .hasName("gen_ai.client.token.usage") + .hasUnit("{token}") + .hasDescription("Measures number of input and output tokens used."), + point -> + point + .hasSum(416) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(165) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))), + histogram( + metric -> + metric + .hasName("gen_ai.client.operation.duration") + .hasUnit("s") + .hasDescription("GenAI operation duration."), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))); SpanContext spanCtx0 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); getTesting() @@ -1584,47 +1557,43 @@ public void accept(PayloadPart chunk) { getTesting() .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.token.usage") - .hasUnit("{token}") - .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(558) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(58) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .hasUnit("s") - .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + histogram( + metric -> + metric + .hasName("gen_ai.client.token.usage") + .hasUnit("{token}") + .hasDescription("Measures number of input and output tokens used."), + point -> + point + .hasSum(558) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(58) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))), + histogram( + metric -> + metric + .hasName("gen_ai.client.operation.duration") + .hasUnit("s") + .hasDescription("GenAI operation duration."), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))); SpanContext spanCtx1 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -1793,47 +1762,43 @@ void testInvokeModelToolCallAnthropicClaudeNoMessageContent() { getTesting() .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.token.usage") - .hasUnit("{token}") - .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(380) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(133) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .hasUnit("s") - .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + histogram( + metric -> + metric + .hasName("gen_ai.client.token.usage") + .hasUnit("{token}") + .hasDescription("Measures number of input and output tokens used."), + point -> + point + .hasSum(380) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(133) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))), + histogram( + metric -> + metric + .hasName("gen_ai.client.operation.duration") + .hasUnit("s") + .hasDescription("GenAI operation duration."), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))); SpanContext spanCtx0 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); getTesting() @@ -1935,47 +1900,43 @@ void testInvokeModelToolCallAnthropicClaudeNoMessageContent() { getTesting() .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.token.usage") - .hasUnit("{token}") - .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(590) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(132) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .hasUnit("s") - .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + histogram( + metric -> + metric + .hasName("gen_ai.client.token.usage") + .hasUnit("{token}") + .hasDescription("Measures number of input and output tokens used."), + point -> + point + .hasSum(590) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(132) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))), + histogram( + metric -> + metric + .hasName("gen_ai.client.operation.duration") + .hasUnit("s") + .hasDescription("GenAI operation duration."), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))); SpanContext spanCtx1 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -2216,47 +2177,43 @@ public void accept(PayloadPart chunk) { getTesting() .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.token.usage") - .hasUnit("{token}") - .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(380) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(144) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .hasUnit("s") - .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + histogram( + metric -> + metric + .hasName("gen_ai.client.token.usage") + .hasUnit("{token}") + .hasDescription("Measures number of input and output tokens used."), + point -> + point + .hasSum(380) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(144) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))), + histogram( + metric -> + metric + .hasName("gen_ai.client.operation.duration") + .hasUnit("s") + .hasDescription("GenAI operation duration."), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))); SpanContext spanCtx0 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); getTesting() @@ -2399,47 +2356,43 @@ public void accept(PayloadPart chunk) { getTesting() .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.token.usage") - .hasUnit("{token}") - .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(601) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(145) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .hasUnit("s") - .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + histogram( + metric -> + metric + .hasName("gen_ai.client.token.usage") + .hasUnit("{token}") + .hasDescription("Measures number of input and output tokens used."), + point -> + point + .hasSum(601) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(145) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))), + histogram( + metric -> + metric + .hasName("gen_ai.client.operation.duration") + .hasUnit("s") + .hasDescription("GenAI operation duration."), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))); SpanContext spanCtx1 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); diff --git a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2BedrockRuntimeTest.java b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2BedrockRuntimeTest.java index be6981eeaa87..ebe065deb4e4 100644 --- a/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2BedrockRuntimeTest.java +++ b/instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2BedrockRuntimeTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.instrumentation.awssdk.v2_2; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.histogram; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; import static io.opentelemetry.semconv.incubating.AwsIncubatingAttributes.AWS_BEDROCK_GUARDRAIL_ID; @@ -161,47 +162,43 @@ void testConverseBasic() { getTesting() .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.token.usage") - .hasUnit("{token}") - .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(8) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(14) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .hasUnit("s") - .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + histogram( + metric -> + metric + .hasName("gen_ai.client.token.usage") + .hasUnit("{token}") + .hasDescription("Measures number of input and output tokens used."), + point -> + point + .hasSum(8) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(14) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))), + histogram( + metric -> + metric + .hasName("gen_ai.client.operation.duration") + .hasUnit("s") + .hasDescription("GenAI operation duration."), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -283,47 +280,43 @@ void testConverseOptions() { getTesting() .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.token.usage") - .hasUnit("{token}") - .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(8) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(10) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .hasUnit("s") - .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + histogram( + metric -> + metric + .hasName("gen_ai.client.token.usage") + .hasUnit("{token}") + .hasDescription("Measures number of input and output tokens used."), + point -> + point + .hasSum(8) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(10) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))), + histogram( + metric -> + metric + .hasName("gen_ai.client.operation.duration") + .hasUnit("s") + .hasDescription("GenAI operation duration."), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -414,47 +407,43 @@ void testConverseToolCall() { getTesting() .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.token.usage") - .hasUnit("{token}") - .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(415) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(162) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .hasUnit("s") - .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + histogram( + metric -> + metric + .hasName("gen_ai.client.token.usage") + .hasUnit("{token}") + .hasDescription("Measures number of input and output tokens used."), + point -> + point + .hasSum(415) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(162) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))), + histogram( + metric -> + metric + .hasName("gen_ai.client.operation.duration") + .hasUnit("s") + .hasDescription("GenAI operation duration."), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))); SpanContext spanCtx0 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -572,47 +561,43 @@ void testConverseToolCall() { getTesting() .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.token.usage") - .hasUnit("{token}") - .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(554) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(57) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .hasUnit("s") - .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + histogram( + metric -> + metric + .hasName("gen_ai.client.token.usage") + .hasUnit("{token}") + .hasDescription("Measures number of input and output tokens used."), + point -> + point + .hasSum(554) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(57) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))), + histogram( + metric -> + metric + .hasName("gen_ai.client.operation.duration") + .hasUnit("s") + .hasDescription("GenAI operation duration."), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))); SpanContext spanCtx1 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -883,47 +868,43 @@ void testConverseToolCallStream() { getTesting() .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.token.usage") - .hasUnit("{token}") - .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(415) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(162) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .hasUnit("s") - .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + histogram( + metric -> + metric + .hasName("gen_ai.client.token.usage") + .hasUnit("{token}") + .hasDescription("Measures number of input and output tokens used."), + point -> + point + .hasSum(415) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(162) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))), + histogram( + metric -> + metric + .hasName("gen_ai.client.operation.duration") + .hasUnit("s") + .hasDescription("GenAI operation duration."), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))); SpanContext spanCtx0 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -1061,47 +1042,43 @@ void testConverseToolCallStream() { getTesting() .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.token.usage") - .hasUnit("{token}") - .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(554) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(59) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .hasUnit("s") - .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + histogram( + metric -> + metric + .hasName("gen_ai.client.token.usage") + .hasUnit("{token}") + .hasDescription("Measures number of input and output tokens used."), + point -> + point + .hasSum(554) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(59) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))), + histogram( + metric -> + metric + .hasName("gen_ai.client.operation.duration") + .hasUnit("s") + .hasDescription("GenAI operation duration."), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))); SpanContext spanCtx1 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -1307,47 +1284,43 @@ void testConverseStream() { getTesting() .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.token.usage") - .hasUnit("{token}") - .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(8) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(10) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .hasUnit("s") - .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + histogram( + metric -> + metric + .hasName("gen_ai.client.token.usage") + .hasUnit("{token}") + .hasDescription("Measures number of input and output tokens used."), + point -> + point + .hasSum(8) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(10) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))), + histogram( + metric -> + metric + .hasName("gen_ai.client.operation.duration") + .hasUnit("s") + .hasDescription("GenAI operation duration."), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -1536,47 +1509,43 @@ void testInvokeModelAmazonTitan() { getTesting() .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.token.usage") - .hasUnit("{token}") - .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(5) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, TEXT_COMPLETION), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(10) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, TEXT_COMPLETION), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .hasUnit("s") - .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, TEXT_COMPLETION), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + histogram( + metric -> + metric + .hasName("gen_ai.client.token.usage") + .hasUnit("{token}") + .hasDescription("Measures number of input and output tokens used."), + point -> + point + .hasSum(5) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, TEXT_COMPLETION), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(10) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, TEXT_COMPLETION), + equalTo(GEN_AI_REQUEST_MODEL, modelId))), + histogram( + metric -> + metric + .hasName("gen_ai.client.operation.duration") + .hasUnit("s") + .hasDescription("GenAI operation duration."), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, TEXT_COMPLETION), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -1685,47 +1654,43 @@ void testInvokeModelWithResponseStreamAmazonTitan() { getTesting() .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.token.usage") - .hasUnit("{token}") - .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(7) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, TEXT_COMPLETION), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(100) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, TEXT_COMPLETION), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .hasUnit("s") - .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, TEXT_COMPLETION), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + histogram( + metric -> + metric + .hasName("gen_ai.client.token.usage") + .hasUnit("{token}") + .hasDescription("Measures number of input and output tokens used."), + point -> + point + .hasSum(7) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, TEXT_COMPLETION), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(100) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, TEXT_COMPLETION), + equalTo(GEN_AI_REQUEST_MODEL, modelId))), + histogram( + metric -> + metric + .hasName("gen_ai.client.operation.duration") + .hasUnit("s") + .hasDescription("GenAI operation duration."), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, TEXT_COMPLETION), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -1842,47 +1807,43 @@ void testInvokeModelAmazonNova() { getTesting() .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.token.usage") - .hasUnit("{token}") - .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(5) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(10) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .hasUnit("s") - .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + histogram( + metric -> + metric + .hasName("gen_ai.client.token.usage") + .hasUnit("{token}") + .hasDescription("Measures number of input and output tokens used."), + point -> + point + .hasSum(5) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(10) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))), + histogram( + metric -> + metric + .hasName("gen_ai.client.operation.duration") + .hasUnit("s") + .hasDescription("GenAI operation duration."), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -2011,47 +1972,43 @@ void testInvokeModelWithResponseStreamAmazonNova() { getTesting() .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.token.usage") - .hasUnit("{token}") - .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(7) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(100) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .hasUnit("s") - .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + histogram( + metric -> + metric + .hasName("gen_ai.client.token.usage") + .hasUnit("{token}") + .hasDescription("Measures number of input and output tokens used."), + point -> + point + .hasSum(7) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(100) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))), + histogram( + metric -> + metric + .hasName("gen_ai.client.operation.duration") + .hasUnit("s") + .hasDescription("GenAI operation duration."), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -2154,47 +2111,43 @@ void testInvokeModelAnthropicClaude(String modelId) { getTesting() .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.token.usage") - .hasUnit("{token}") - .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(14) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(10) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .hasUnit("s") - .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + histogram( + metric -> + metric + .hasName("gen_ai.client.token.usage") + .hasUnit("{token}") + .hasDescription("Measures number of input and output tokens used."), + point -> + point + .hasSum(14) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(10) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))), + histogram( + metric -> + metric + .hasName("gen_ai.client.operation.duration") + .hasUnit("s") + .hasDescription("GenAI operation duration."), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -2555,47 +2508,43 @@ void testInvokeModelWithResponseStreamAnthropicClaude() { getTesting() .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.token.usage") - .hasUnit("{token}") - .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(16) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(10) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .hasUnit("s") - .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + histogram( + metric -> + metric + .hasName("gen_ai.client.token.usage") + .hasUnit("{token}") + .hasDescription("Measures number of input and output tokens used."), + point -> + point + .hasSum(16) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(10) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))), + histogram( + metric -> + metric + .hasName("gen_ai.client.operation.duration") + .hasUnit("s") + .hasDescription("GenAI operation duration."), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -2751,47 +2700,43 @@ void testInvokeModelToolCallAmazonNova() { getTesting() .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.token.usage") - .hasUnit("{token}") - .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(416) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(166) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .hasUnit("s") - .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + histogram( + metric -> + metric + .hasName("gen_ai.client.token.usage") + .hasUnit("{token}") + .hasDescription("Measures number of input and output tokens used."), + point -> + point + .hasSum(416) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(166) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))), + histogram( + metric -> + metric + .hasName("gen_ai.client.operation.duration") + .hasUnit("s") + .hasDescription("GenAI operation duration."), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))); SpanContext spanCtx0 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); getTesting() @@ -2937,47 +2882,43 @@ void testInvokeModelToolCallAmazonNova() { getTesting() .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.token.usage") - .hasUnit("{token}") - .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(559) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(59) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .hasUnit("s") - .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + histogram( + metric -> + metric + .hasName("gen_ai.client.token.usage") + .hasUnit("{token}") + .hasDescription("Measures number of input and output tokens used."), + point -> + point + .hasSum(559) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(59) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))), + histogram( + metric -> + metric + .hasName("gen_ai.client.operation.duration") + .hasUnit("s") + .hasDescription("GenAI operation duration."), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))); SpanContext spanCtx1 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -3250,47 +3191,43 @@ public void accept(PayloadPart chunk) { getTesting() .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.token.usage") - .hasUnit("{token}") - .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(416) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(165) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .hasUnit("s") - .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + histogram( + metric -> + metric + .hasName("gen_ai.client.token.usage") + .hasUnit("{token}") + .hasDescription("Measures number of input and output tokens used."), + point -> + point + .hasSum(416) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(165) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))), + histogram( + metric -> + metric + .hasName("gen_ai.client.operation.duration") + .hasUnit("s") + .hasDescription("GenAI operation duration."), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))); SpanContext spanCtx0 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); getTesting() @@ -3480,47 +3417,43 @@ public void accept(PayloadPart chunk) { getTesting() .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.token.usage") - .hasUnit("{token}") - .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(558) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(58) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .hasUnit("s") - .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + histogram( + metric -> + metric + .hasName("gen_ai.client.token.usage") + .hasUnit("{token}") + .hasDescription("Measures number of input and output tokens used."), + point -> + point + .hasSum(558) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(58) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))), + histogram( + metric -> + metric + .hasName("gen_ai.client.operation.duration") + .hasUnit("s") + .hasDescription("GenAI operation duration."), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))); SpanContext spanCtx1 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -3725,47 +3658,43 @@ void testInvokeModelToolCallAnthropicClaude() { getTesting() .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.token.usage") - .hasUnit("{token}") - .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(380) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(133) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .hasUnit("s") - .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + histogram( + metric -> + metric + .hasName("gen_ai.client.token.usage") + .hasUnit("{token}") + .hasDescription("Measures number of input and output tokens used."), + point -> + point + .hasSum(380) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(133) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))), + histogram( + metric -> + metric + .hasName("gen_ai.client.operation.duration") + .hasUnit("s") + .hasDescription("GenAI operation duration."), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))); SpanContext spanCtx0 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); getTesting() @@ -3889,47 +3818,43 @@ void testInvokeModelToolCallAnthropicClaude() { getTesting() .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.token.usage") - .hasUnit("{token}") - .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(590) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(132) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .hasUnit("s") - .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + histogram( + metric -> + metric + .hasName("gen_ai.client.token.usage") + .hasUnit("{token}") + .hasDescription("Measures number of input and output tokens used."), + point -> + point + .hasSum(590) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(132) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))), + histogram( + metric -> + metric + .hasName("gen_ai.client.operation.duration") + .hasUnit("s") + .hasDescription("GenAI operation duration."), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))); SpanContext spanCtx1 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -4208,47 +4133,43 @@ public void accept(PayloadPart chunk) { getTesting() .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.token.usage") - .hasUnit("{token}") - .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(380) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(144) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .hasUnit("s") - .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + histogram( + metric -> + metric + .hasName("gen_ai.client.token.usage") + .hasUnit("{token}") + .hasDescription("Measures number of input and output tokens used."), + point -> + point + .hasSum(380) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(144) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))), + histogram( + metric -> + metric + .hasName("gen_ai.client.operation.duration") + .hasUnit("s") + .hasDescription("GenAI operation duration."), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))); SpanContext spanCtx0 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); getTesting() @@ -4413,47 +4334,43 @@ public void accept(PayloadPart chunk) { getTesting() .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.token.usage") - .hasUnit("{token}") - .hasDescription("Measures number of input and output tokens used.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(601) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, INPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)), - point -> - point - .hasSum(145) - .hasCount(1) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId)))), - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .hasUnit("s") - .hasDescription("GenAI operation duration.") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, modelId))))); + histogram( + metric -> + metric + .hasName("gen_ai.client.token.usage") + .hasUnit("{token}") + .hasDescription("Measures number of input and output tokens used."), + point -> + point + .hasSum(601) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, INPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)), + point -> + point + .hasSum(145) + .hasCount(1) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId))), + histogram( + metric -> + metric + .hasName("gen_ai.client.operation.duration") + .hasUnit("s") + .hasDescription("GenAI operation duration."), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, AWS_BEDROCK), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, modelId)))); SpanContext spanCtx1 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); diff --git a/instrumentation/openai/openai-java-1.1/library/src/test/java/io/opentelemetry/instrumentation/openai/v1_1/ChatTest.java b/instrumentation/openai/openai-java-1.1/library/src/test/java/io/opentelemetry/instrumentation/openai/v1_1/ChatTest.java index 82e4dad279e6..af8682febb6b 100644 --- a/instrumentation/openai/openai-java-1.1/library/src/test/java/io/opentelemetry/instrumentation/openai/v1_1/ChatTest.java +++ b/instrumentation/openai/openai-java-1.1/library/src/test/java/io/opentelemetry/instrumentation/openai/v1_1/ChatTest.java @@ -5,6 +5,7 @@ package io.opentelemetry.instrumentation.openai.v1_1; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.histogram; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; import static io.opentelemetry.semconv.incubating.EventIncubatingAttributes.EVENT_NAME; @@ -128,47 +129,36 @@ void basicNoCaptureContent() { getTesting() .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL)))), - metric -> - metric - .hasName("gen_ai.client.token.usage") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(22.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, INPUT)), - point -> - point - .hasSum(2.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT))))); + histogram( + metric -> metric.hasName("gen_ai.client.operation.duration"), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL))), + histogram( + metric -> metric.hasName("gen_ai.client.token.usage"), + point -> + point + .hasSum(22.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, INPUT)), + point -> + point + .hasSum(2.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT)))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -231,47 +221,36 @@ void multipleChoicesNoCaptureContent() { getTesting() .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL)))), - metric -> - metric - .hasName("gen_ai.client.token.usage") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(22.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, INPUT)), - point -> - point - .hasSum(7.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT))))); + histogram( + metric -> metric.hasName("gen_ai.client.operation.duration"), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL))), + histogram( + metric -> metric.hasName("gen_ai.client.token.usage"), + point -> + point + .hasSum(22.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, INPUT)), + point -> + point + .hasSum(7.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT)))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -363,47 +342,36 @@ void toolCallsNoCaptureContent() { getTesting() .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL)))), - metric -> - metric - .hasName("gen_ai.client.token.usage") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(67) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, INPUT)), - point -> - point - .hasSum(46.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT))))); + histogram( + metric -> metric.hasName("gen_ai.client.operation.duration"), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL))), + histogram( + metric -> metric.hasName("gen_ai.client.token.usage"), + point -> + point + .hasSum(67) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, INPUT)), + point -> + point + .hasSum(46.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT)))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -488,47 +456,36 @@ void toolCallsNoCaptureContent() { getTesting() .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL)))), - metric -> - metric - .hasName("gen_ai.client.token.usage") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(99) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, INPUT)), - point -> - point - .hasSum(25.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT))))); + histogram( + metric -> metric.hasName("gen_ai.client.operation.duration"), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL))), + histogram( + metric -> metric.hasName("gen_ai.client.token.usage"), + point -> + point + .hasSum(99) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, INPUT)), + point -> + point + .hasSum(25.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT)))); SpanContext spanCtx1 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -640,22 +597,16 @@ void streamNoCaptureContent() { getTesting() .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, - TEST_CHAT_RESPONSE_MODEL))))); + histogram( + metric -> metric.hasName("gen_ai.client.operation.duration"), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL)))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -737,22 +688,16 @@ void streamMultipleChoicesNoCaptureContent() { getTesting() .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, - TEST_CHAT_RESPONSE_MODEL))))); + histogram( + metric -> metric.hasName("gen_ai.client.operation.duration"), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL)))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -840,22 +785,16 @@ void streamToolCallsNoCaptureContent() { getTesting() .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, - TEST_CHAT_RESPONSE_MODEL))))); + histogram( + metric -> metric.hasName("gen_ai.client.operation.duration"), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL)))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -943,22 +882,16 @@ void streamToolCallsNoCaptureContent() { getTesting() .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, - TEST_CHAT_RESPONSE_MODEL))))); + histogram( + metric -> metric.hasName("gen_ai.client.operation.duration"), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL)))); SpanContext spanCtx1 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); diff --git a/instrumentation/openai/openai-java-1.1/testing/src/main/java/io/opentelemetry/instrumentation/openai/v1_1/AbstractChatTest.java b/instrumentation/openai/openai-java-1.1/testing/src/main/java/io/opentelemetry/instrumentation/openai/v1_1/AbstractChatTest.java index b75537bff09c..4ae793b131a3 100644 --- a/instrumentation/openai/openai-java-1.1/testing/src/main/java/io/opentelemetry/instrumentation/openai/v1_1/AbstractChatTest.java +++ b/instrumentation/openai/openai-java-1.1/testing/src/main/java/io/opentelemetry/instrumentation/openai/v1_1/AbstractChatTest.java @@ -6,6 +6,7 @@ package io.opentelemetry.instrumentation.openai.v1_1; import static io.opentelemetry.instrumentation.api.internal.SemconvExceptionSignal.emitExceptionAsSpanEvents; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.histogram; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; import static io.opentelemetry.semconv.ErrorAttributes.ERROR_TYPE; @@ -207,47 +208,36 @@ void basic() { getTesting() .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL)))), - metric -> - metric - .hasName("gen_ai.client.token.usage") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(22.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, INPUT)), - point -> - point - .hasSum(2.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT))))); + histogram( + metric -> metric.hasName("gen_ai.client.operation.duration"), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL))), + histogram( + metric -> metric.hasName("gen_ai.client.token.usage"), + point -> + point + .hasSum(22.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, INPUT)), + point -> + point + .hasSum(2.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT)))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -375,47 +365,36 @@ void allTheClientOptions() { getTesting() .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL)))), - metric -> - metric - .hasName("gen_ai.client.token.usage") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(22.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, INPUT)), - point -> - point - .hasSum(3.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT))))); + histogram( + metric -> metric.hasName("gen_ai.client.operation.duration"), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL))), + histogram( + metric -> metric.hasName("gen_ai.client.token.usage"), + point -> + point + .hasSum(22.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, INPUT)), + point -> + point + .hasSum(3.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT)))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -480,47 +459,36 @@ void multipleChoices() { getTesting() .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL)))), - metric -> - metric - .hasName("gen_ai.client.token.usage") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(22.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, INPUT)), - point -> - point - .hasSum(7.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT))))); + histogram( + metric -> metric.hasName("gen_ai.client.operation.duration"), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL))), + histogram( + metric -> metric.hasName("gen_ai.client.token.usage"), + point -> + point + .hasSum(22.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, INPUT)), + point -> + point + .hasSum(7.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT)))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -615,47 +583,36 @@ void toolCalls() { getTesting() .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL)))), - metric -> - metric - .hasName("gen_ai.client.token.usage") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(67) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, INPUT)), - point -> - point - .hasSum(46.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT))))); + histogram( + metric -> metric.hasName("gen_ai.client.operation.duration"), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL))), + histogram( + metric -> metric.hasName("gen_ai.client.token.usage"), + point -> + point + .hasSum(67) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, INPUT)), + point -> + point + .hasSum(46.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT)))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -767,47 +724,36 @@ void toolCalls() { getTesting() .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL)))), - metric -> - metric - .hasName("gen_ai.client.token.usage") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(99) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, INPUT)), - point -> - point - .hasSum(25.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT))))); + histogram( + metric -> metric.hasName("gen_ai.client.operation.duration"), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL))), + histogram( + metric -> metric.hasName("gen_ai.client.token.usage"), + point -> + point + .hasSum(99) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, INPUT)), + point -> + point + .hasSum(25.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT)))); SpanContext spanCtx1 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -941,20 +887,16 @@ void connectionError() { getTesting() .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(ERROR_TYPE, OpenAIIoException.class.getName()), - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL))))); + histogram( + metric -> metric.hasName("gen_ai.client.operation.duration"), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(ERROR_TYPE, OpenAIIoException.class.getName()), + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL)))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -1009,22 +951,16 @@ void stream() { getTesting() .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, - TEST_CHAT_RESPONSE_MODEL))))); + histogram( + metric -> metric.hasName("gen_ai.client.operation.duration"), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL)))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -1136,47 +1072,36 @@ void streamIncludeUsage() { getTesting() .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL)))), - metric -> - metric - .hasName("gen_ai.client.token.usage") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(22.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, INPUT)), - point -> - point - .hasSum(3.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT))))); + histogram( + metric -> metric.hasName("gen_ai.client.operation.duration"), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL))), + histogram( + metric -> metric.hasName("gen_ai.client.token.usage"), + point -> + point + .hasSum(22.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, INPUT)), + point -> + point + .hasSum(3.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT)))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -1258,22 +1183,16 @@ void streamMultipleChoices() { getTesting() .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, - TEST_CHAT_RESPONSE_MODEL))))); + histogram( + metric -> metric.hasName("gen_ai.client.operation.duration"), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL)))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -1413,22 +1332,16 @@ void streamToolCalls() { getTesting() .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, - TEST_CHAT_RESPONSE_MODEL))))); + histogram( + metric -> metric.hasName("gen_ai.client.operation.duration"), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL)))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -1546,22 +1459,16 @@ void streamToolCalls() { getTesting() .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), - equalTo( - GEN_AI_RESPONSE_MODEL, - TEST_CHAT_RESPONSE_MODEL))))); + histogram( + metric -> metric.hasName("gen_ai.client.operation.duration"), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, TEST_CHAT_RESPONSE_MODEL)))); SpanContext spanCtx1 = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); @@ -1696,20 +1603,16 @@ void streamConnectionError() { getTesting() .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(ERROR_TYPE, OpenAIIoException.class.getName()), - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL))))); + histogram( + metric -> metric.hasName("gen_ai.client.operation.duration"), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(ERROR_TYPE, OpenAIIoException.class.getName()), + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, TEST_CHAT_MODEL)))); SpanContext spanCtx = getTesting().waitForTraces(1).get(0).get(0).getSpanContext(); diff --git a/instrumentation/openai/openai-java-1.1/testing/src/main/java/io/opentelemetry/instrumentation/openai/v1_1/AbstractEmbeddingsTest.java b/instrumentation/openai/openai-java-1.1/testing/src/main/java/io/opentelemetry/instrumentation/openai/v1_1/AbstractEmbeddingsTest.java index 9b582b08d45c..28324a798b53 100644 --- a/instrumentation/openai/openai-java-1.1/testing/src/main/java/io/opentelemetry/instrumentation/openai/v1_1/AbstractEmbeddingsTest.java +++ b/instrumentation/openai/openai-java-1.1/testing/src/main/java/io/opentelemetry/instrumentation/openai/v1_1/AbstractEmbeddingsTest.java @@ -6,6 +6,7 @@ package io.opentelemetry.instrumentation.openai.v1_1; import static io.opentelemetry.instrumentation.api.internal.SemconvExceptionSignal.emitExceptionAsSpanEvents; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.histogram; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; @@ -114,35 +115,27 @@ void basic() { getTesting() .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, EMBEDDINGS), - equalTo(GEN_AI_REQUEST_MODEL, MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, MODEL)))), - metric -> - metric - .hasName("gen_ai.client.token.usage") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(4.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, EMBEDDINGS), - equalTo(GEN_AI_REQUEST_MODEL, MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, MODEL), - equalTo(GEN_AI_TOKEN_TYPE, INPUT))))); + histogram( + metric -> metric.hasName("gen_ai.client.operation.duration"), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, EMBEDDINGS), + equalTo(GEN_AI_REQUEST_MODEL, MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, MODEL))), + histogram( + metric -> metric.hasName("gen_ai.client.token.usage"), + point -> + point + .hasSum(4.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, EMBEDDINGS), + equalTo(GEN_AI_REQUEST_MODEL, MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, MODEL), + equalTo(GEN_AI_TOKEN_TYPE, INPUT)))); } @Test @@ -179,35 +172,27 @@ GEN_AI_REQUEST_ENCODING_FORMATS, singletonList("base64")), getTesting() .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, EMBEDDINGS), - equalTo(GEN_AI_REQUEST_MODEL, MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, MODEL)))), - metric -> - metric - .hasName("gen_ai.client.token.usage") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(4.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, EMBEDDINGS), - equalTo(GEN_AI_REQUEST_MODEL, MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, MODEL), - equalTo(GEN_AI_TOKEN_TYPE, INPUT))))); + histogram( + metric -> metric.hasName("gen_ai.client.operation.duration"), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, EMBEDDINGS), + equalTo(GEN_AI_REQUEST_MODEL, MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, MODEL))), + histogram( + metric -> metric.hasName("gen_ai.client.token.usage"), + point -> + point + .hasSum(4.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, EMBEDDINGS), + equalTo(GEN_AI_REQUEST_MODEL, MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, MODEL), + equalTo(GEN_AI_TOKEN_TYPE, INPUT)))); } @Test @@ -263,19 +248,15 @@ void connectionError() { getTesting() .waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(ERROR_TYPE, OpenAIIoException.class.getName()), - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, EMBEDDINGS), - equalTo(GEN_AI_REQUEST_MODEL, MODEL))))); + histogram( + metric -> metric.hasName("gen_ai.client.operation.duration"), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(ERROR_TYPE, OpenAIIoException.class.getName()), + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, EMBEDDINGS), + equalTo(GEN_AI_REQUEST_MODEL, MODEL)))); } } diff --git a/instrumentation/spring/spring-ai-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/ai/v1_0/AbstractOpenAiChatModelTest.java b/instrumentation/spring/spring-ai-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/ai/v1_0/AbstractOpenAiChatModelTest.java index 696caecba404..878d5581afe6 100644 --- a/instrumentation/spring/spring-ai-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/ai/v1_0/AbstractOpenAiChatModelTest.java +++ b/instrumentation/spring/spring-ai-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/ai/v1_0/AbstractOpenAiChatModelTest.java @@ -11,6 +11,7 @@ import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.api.trace.SpanKind.CLIENT; import static io.opentelemetry.api.trace.SpanKind.INTERNAL; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.histogram; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.incubating.GenAiIncubatingAttributes.GEN_AI_OPERATION_NAME; import static io.opentelemetry.semconv.incubating.GenAiIncubatingAttributes.GEN_AI_PROVIDER_NAME; @@ -106,44 +107,36 @@ void callRecordsOpenAiSpringAiResponse() { private static void assertMetrics() { testing.waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, RESPONSE_MODEL)))), - metric -> - metric - .hasName("gen_ai.client.token.usage") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(22.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, INPUT)), - point -> - point - .hasSum(2.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, OPENAI), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, RESPONSE_MODEL), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT))))); + histogram( + metric -> metric.hasName("gen_ai.client.operation.duration"), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, RESPONSE_MODEL))), + histogram( + metric -> metric.hasName("gen_ai.client.token.usage"), + point -> + point + .hasSum(22.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, INPUT)), + point -> + point + .hasSum(2.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, OPENAI), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, RESPONSE_MODEL), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT)))); } private static void assertMessageEvents(SpanContext spanContext) { diff --git a/instrumentation/spring/spring-ai-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/ai/v1_0/ChatModelTest.java b/instrumentation/spring/spring-ai-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/ai/v1_0/ChatModelTest.java index d0b464413f4f..a69e124f88c4 100644 --- a/instrumentation/spring/spring-ai-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/ai/v1_0/ChatModelTest.java +++ b/instrumentation/spring/spring-ai-1.0/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/spring/ai/v1_0/ChatModelTest.java @@ -8,6 +8,7 @@ import static io.opentelemetry.api.common.AttributeKey.stringKey; import static io.opentelemetry.api.trace.SpanKind.CLIENT; import static io.opentelemetry.api.trace.SpanKind.INTERNAL; +import static io.opentelemetry.instrumentation.testing.util.MetricAssertions.histogram; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.semconv.ErrorAttributes.ERROR_TYPE; @@ -857,63 +858,51 @@ private static void assertErrorTrace(IllegalStateException error, boolean stream private static void assertMetrics() { testing.waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, "test"), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, MODEL)))), - metric -> - metric - .hasName("gen_ai.client.token.usage") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSum(3.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, "test"), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, MODEL), - equalTo(GEN_AI_TOKEN_TYPE, INPUT)), - point -> - point - .hasSum(2.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, "test"), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, MODEL), - equalTo(GEN_AI_TOKEN_TYPE, OUTPUT))))); + histogram( + metric -> metric.hasName("gen_ai.client.operation.duration"), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, "test"), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, MODEL))), + histogram( + metric -> metric.hasName("gen_ai.client.token.usage"), + point -> + point + .hasSum(3.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, "test"), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, MODEL), + equalTo(GEN_AI_TOKEN_TYPE, INPUT)), + point -> + point + .hasSum(2.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, "test"), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, MODEL), + equalTo(GEN_AI_TOKEN_TYPE, OUTPUT)))); } private static void assertMetricsWithoutTokenUsage() { testing.waitAndAssertMetricsExactly( INSTRUMENTATION_NAME, - metric -> - metric - .hasName("gen_ai.client.operation.duration") - .hasHistogramSatisfying( - histogram -> - histogram.hasPointsSatisfying( - point -> - point - .hasSumGreaterThan(0.0) - .hasAttributesSatisfyingExactly( - equalTo(GEN_AI_PROVIDER_NAME, "test"), - equalTo(GEN_AI_OPERATION_NAME, CHAT), - equalTo(GEN_AI_REQUEST_MODEL, MODEL), - equalTo(GEN_AI_RESPONSE_MODEL, MODEL))))); + histogram( + metric -> metric.hasName("gen_ai.client.operation.duration"), + point -> + point + .hasSumGreaterThan(0.0) + .hasAttributesSatisfyingExactly( + equalTo(GEN_AI_PROVIDER_NAME, "test"), + equalTo(GEN_AI_OPERATION_NAME, CHAT), + equalTo(GEN_AI_REQUEST_MODEL, MODEL), + equalTo(GEN_AI_RESPONSE_MODEL, MODEL)))); testing.waitAndAssertMetrics( INSTRUMENTATION_NAME, "gen_ai.client.token.usage", metrics -> metrics.isEmpty()); } From a07d46f8062a732d9abbf0226b12280a70ed642a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 20 Oct 2026 22:52:58 +0000 Subject: [PATCH 12/14] Count distinct metric identities in exhaustive assertions Co-authored-by: trask <218610+trask@users.noreply.github.com> --- .../instrumentation/MetricAssertionsTest.java | 38 ++++++++++ .../testing/InstrumentationTestRunner.java | 70 +++++++++++++++++-- .../InstrumentationTestRunnerTest.java | 15 ++++ 3 files changed, 116 insertions(+), 7 deletions(-) create mode 100644 testing-common/integration-tests/src/test/java/instrumentation/MetricAssertionsTest.java diff --git a/testing-common/integration-tests/src/test/java/instrumentation/MetricAssertionsTest.java b/testing-common/integration-tests/src/test/java/instrumentation/MetricAssertionsTest.java new file mode 100644 index 000000000000..9d217c7a768b --- /dev/null +++ b/testing-common/integration-tests/src/test/java/instrumentation/MetricAssertionsTest.java @@ -0,0 +1,38 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package instrumentation; + +import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension; +import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; +import java.util.concurrent.atomic.AtomicBoolean; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; + +class MetricAssertionsTest { + + @RegisterExtension + static final InstrumentationExtension testing = AgentInstrumentationExtension.create(); + + @Test + void retriesAssertionsAcrossRepeatedObservableGaugeExports() { + AtomicBoolean emitExpectedValue = new AtomicBoolean(); + testing + .getOpenTelemetry() + .getMeter("test-exhaustive-metric") + .gaugeBuilder("retry.gauge") + .ofLongs() + .buildWithCallback(measurement -> measurement.record(emitExpectedValue.get() ? 1 : 0)); + + testing.waitAndAssertMetricsExactly( + "test-exhaustive-metric", + metric -> { + metric.hasName("retry.gauge"); + emitExpectedValue.set(true); + metric.hasLongGaugeSatisfying( + gauge -> gauge.hasPointsSatisfying(point -> point.hasValue(1))); + }); + } +} diff --git a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/InstrumentationTestRunner.java b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/InstrumentationTestRunner.java index 7da23a81e74a..b687bf9c0ac1 100644 --- a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/InstrumentationTestRunner.java +++ b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/InstrumentationTestRunner.java @@ -25,6 +25,8 @@ import io.opentelemetry.sdk.common.InstrumentationScopeInfo; import io.opentelemetry.sdk.logs.data.LogRecordData; import io.opentelemetry.sdk.metrics.data.MetricData; +import io.opentelemetry.sdk.metrics.data.MetricDataType; +import io.opentelemetry.sdk.resources.Resource; import io.opentelemetry.sdk.testing.assertj.LogRecordDataAssert; import io.opentelemetry.sdk.testing.assertj.MetricAssert; import io.opentelemetry.sdk.testing.assertj.TraceAssert; @@ -40,6 +42,7 @@ import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Set; import java.util.concurrent.TimeoutException; import java.util.function.Consumer; @@ -254,8 +257,10 @@ public final void waitAndAssertMetricsExactly( String instrumentationName, Consumer... assertions) { awaitUntilAsserted( () -> { - List metrics = instrumentationMetrics(instrumentationName); - assertThat(metrics).satisfiesExactlyInAnyOrder(toMetricAssertions(assertions)); + List> metricGroups = + groupMetricSnapshots(instrumentationMetrics(instrumentationName)); + assertThat(metricGroups) + .satisfiesExactlyInAnyOrder(toMetricGroupAssertions(assertions)); }); TelemetryDataUtil.assertMetricScopeVersion(metricsForScope(instrumentationName)); @@ -265,18 +270,69 @@ public final void waitAndAssertMetricsExactly( } } - // The runtime array type is Consumer and every element is a Consumer. + private static List> groupMetricSnapshots(List metrics) { + Map> metricGroups = new HashMap<>(); + for (MetricData metric : metrics) { + metricGroups + .computeIfAbsent(new MetricIdentity(metric), ignored -> new ArrayList<>()) + .add(metric); + } + return new ArrayList<>(metricGroups.values()); + } + + // The runtime array type is Consumer and every element is a Consumer>. @SuppressWarnings("unchecked") - private static Consumer[] toMetricAssertions(Consumer[] assertions) { - Consumer[] metricAssertions = - (Consumer[]) new Consumer[assertions.length]; + private static Consumer>[] toMetricGroupAssertions( + Consumer[] assertions) { + Consumer>[] metricAssertions = + (Consumer>[]) new Consumer[assertions.length]; for (int i = 0; i < assertions.length; i++) { Consumer assertion = assertions[i]; - metricAssertions[i] = metric -> assertion.accept(assertThat(metric)); + metricAssertions[i] = + metrics -> + assertThat(metrics) + .anySatisfy(metric -> assertion.accept(assertThat(metric))); } return metricAssertions; } + private static final class MetricIdentity { + private final Resource resource; + private final InstrumentationScopeInfo instrumentationScope; + private final String name; + private final String description; + private final String unit; + private final MetricDataType type; + + private MetricIdentity(MetricData metric) { + resource = metric.getResource(); + instrumentationScope = metric.getInstrumentationScopeInfo(); + name = metric.getName(); + description = metric.getDescription(); + unit = metric.getUnit(); + type = metric.getType(); + } + + @Override + public boolean equals(Object other) { + if (!(other instanceof MetricIdentity)) { + return false; + } + MetricIdentity that = (MetricIdentity) other; + return resource.equals(that.resource) + && instrumentationScope.equals(that.instrumentationScope) + && name.equals(that.name) + && description.equals(that.description) + && unit.equals(that.unit) + && type == that.type; + } + + @Override + public int hashCode() { + return Objects.hash(resource, instrumentationScope, name, description, unit, type); + } + } + private List metricsForScope(String instrumentationName) { return getExportedMetrics().stream() .filter(m -> m.getInstrumentationScopeInfo().getName().equals(instrumentationName)) diff --git a/testing-common/src/test/java/io/opentelemetry/instrumentation/testing/InstrumentationTestRunnerTest.java b/testing-common/src/test/java/io/opentelemetry/instrumentation/testing/InstrumentationTestRunnerTest.java index 52afcbb37f80..f90864e458a4 100644 --- a/testing-common/src/test/java/io/opentelemetry/instrumentation/testing/InstrumentationTestRunnerTest.java +++ b/testing-common/src/test/java/io/opentelemetry/instrumentation/testing/InstrumentationTestRunnerTest.java @@ -70,6 +70,21 @@ void matchesAllMetricsInScopeInAnyOrderAndIgnoresOtherScopes() { pointAssert -> pointAssert.hasCount(1).hasSum(2))); } + @Test + void repeatedSnapshotsOfOneMetricIdentityCanMatchAnyHistoricalValue() { + InstrumentationTestRunner runner = + runner( + asList( + histogramData("test", "duration", "s", point(1)), + histogramData("test", "duration", "s", point(2)))); + + runner.waitAndAssertMetricsExactly( + "test", + histogram( + metric -> metric.hasName("duration").hasUnit("s"), + pointAssert -> pointAssert.hasCount(1).hasSum(1))); + } + @Test void rejectsMissingMetrics() { InstrumentationTestRunner runner = From 0c10a6d2f5998c03be78ac13bb1731b482036bc2 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 20 Oct 2026 22:58:18 +0000 Subject: [PATCH 13/14] Format metric identity assertions Co-authored-by: trask <218610+trask@users.noreply.github.com> --- .../instrumentation/testing/InstrumentationTestRunner.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/InstrumentationTestRunner.java b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/InstrumentationTestRunner.java index b687bf9c0ac1..e401d5e15135 100644 --- a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/InstrumentationTestRunner.java +++ b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/InstrumentationTestRunner.java @@ -259,8 +259,7 @@ public final void waitAndAssertMetricsExactly( () -> { List> metricGroups = groupMetricSnapshots(instrumentationMetrics(instrumentationName)); - assertThat(metricGroups) - .satisfiesExactlyInAnyOrder(toMetricGroupAssertions(assertions)); + assertThat(metricGroups).satisfiesExactlyInAnyOrder(toMetricGroupAssertions(assertions)); }); TelemetryDataUtil.assertMetricScopeVersion(metricsForScope(instrumentationName)); @@ -289,9 +288,7 @@ private static Consumer>[] toMetricGroupAssertions( for (int i = 0; i < assertions.length; i++) { Consumer assertion = assertions[i]; metricAssertions[i] = - metrics -> - assertThat(metrics) - .anySatisfy(metric -> assertion.accept(assertThat(metric))); + metrics -> assertThat(metrics).anySatisfy(metric -> assertion.accept(assertThat(metric))); } return metricAssertions; } From 72bfb6452e8caa66b12bf9ee1a23c82cc9bf7767 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 21 Oct 2026 01:50:11 +0000 Subject: [PATCH 14/14] Document exhaustive metric snapshot matching Co-authored-by: trask <218610+trask@users.noreply.github.com> --- .../instrumentation/MetricAssertionsTest.java | 20 ++++++++++++++++++ .../testing/InstrumentationTestRunner.java | 7 +++++-- .../junit/InstrumentationExtension.java | 7 +++++-- .../InstrumentationTestRunnerTest.java | 21 +++++++++++++++++++ 4 files changed, 51 insertions(+), 4 deletions(-) diff --git a/testing-common/integration-tests/src/test/java/instrumentation/MetricAssertionsTest.java b/testing-common/integration-tests/src/test/java/instrumentation/MetricAssertionsTest.java index 9d217c7a768b..675fa656b6e6 100644 --- a/testing-common/integration-tests/src/test/java/instrumentation/MetricAssertionsTest.java +++ b/testing-common/integration-tests/src/test/java/instrumentation/MetricAssertionsTest.java @@ -16,6 +16,26 @@ class MetricAssertionsTest { @RegisterExtension static final InstrumentationExtension testing = AgentInstrumentationExtension.create(); + @Test + void repeatedObservableGaugeExportsHaveOneMetricIdentity() { + testing + .getOpenTelemetry() + .getMeter("test-exhaustive-metric-pre-read") + .gaugeBuilder("repeated.gauge") + .ofLongs() + .buildWithCallback(measurement -> measurement.record(1)); + + testing.metrics(); + + testing.waitAndAssertMetricsExactly( + "test-exhaustive-metric-pre-read", + metric -> + metric + .hasName("repeated.gauge") + .hasLongGaugeSatisfying( + gauge -> gauge.hasPointsSatisfying(point -> point.hasValue(1)))); + } + @Test void retriesAssertionsAcrossRepeatedObservableGaugeExports() { AtomicBoolean emitExpectedValue = new AtomicBoolean(); diff --git a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/InstrumentationTestRunner.java b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/InstrumentationTestRunner.java index e401d5e15135..6268eece2ec1 100644 --- a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/InstrumentationTestRunner.java +++ b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/InstrumentationTestRunner.java @@ -248,8 +248,11 @@ public final void waitAndAssertMetrics( } /** - * Waits for all metrics from the given instrumentation to satisfy the supplied assertions, - * matching each assertion to a distinct metric in any order. + * Waits for the supplied assertions to match all distinct metric identities from the given + * instrumentation exactly once, in any order. A metric identity consists of its resource, full + * instrumentation scope, name, description, unit, and data type. Each assertion may match any + * historical snapshot for its identity, including snapshots from different collections; it need + * not match the latest value, and measurements are not aggregated across snapshots. */ @SafeVarargs @SuppressWarnings("varargs") diff --git a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/InstrumentationExtension.java b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/InstrumentationExtension.java index 14723332f2ff..ec7fdc1804cc 100644 --- a/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/InstrumentationExtension.java +++ b/testing-common/src/main/java/io/opentelemetry/instrumentation/testing/junit/InstrumentationExtension.java @@ -116,8 +116,11 @@ public final void waitAndAssertMetrics( } /** - * Waits for all metrics from the given instrumentation to satisfy the supplied assertions, - * matching each assertion to a distinct metric in any order. + * Waits for the supplied assertions to match all distinct metric identities from the given + * instrumentation exactly once, in any order. A metric identity consists of its resource, full + * instrumentation scope, name, description, unit, and data type. Each assertion may match any + * historical snapshot for its identity, including snapshots from different collections; it need + * not match the latest value, and measurements are not aggregated across snapshots. */ @SafeVarargs @SuppressWarnings("varargs") diff --git a/testing-common/src/test/java/io/opentelemetry/instrumentation/testing/InstrumentationTestRunnerTest.java b/testing-common/src/test/java/io/opentelemetry/instrumentation/testing/InstrumentationTestRunnerTest.java index f90864e458a4..029f0b9ff165 100644 --- a/testing-common/src/test/java/io/opentelemetry/instrumentation/testing/InstrumentationTestRunnerTest.java +++ b/testing-common/src/test/java/io/opentelemetry/instrumentation/testing/InstrumentationTestRunnerTest.java @@ -85,6 +85,27 @@ void repeatedSnapshotsOfOneMetricIdentityCanMatchAnyHistoricalValue() { pointAssert -> pointAssert.hasCount(1).hasSum(1))); } + @Test + void repeatedSnapshotsOfOneMetricIdentityCannotSatisfyMultipleAssertions() { + InstrumentationTestRunner runner = + runner( + asList( + histogramData("test", "duration", "s", point(1)), + histogramData("test", "duration", "s", point(2)))); + + assertThatThrownBy( + () -> + runner.waitAndAssertMetricsExactly( + "test", + histogram( + metric -> metric.hasName("duration").hasUnit("s"), + pointAssert -> pointAssert.hasCount(1).hasSum(1)), + histogram( + metric -> metric.hasName("duration").hasUnit("s"), + pointAssert -> pointAssert.hasCount(1).hasSum(2)))) + .isInstanceOf(AssertionError.class); + } + @Test void rejectsMissingMetrics() { InstrumentationTestRunner runner =