From d95bcba2d0509a3c12da118ba6f242ede9de1bbc Mon Sep 17 00:00:00 2001 From: Eunbin Son Date: Mon, 22 Jun 2026 11:30:45 +0900 Subject: [PATCH] Fix LongExemplarAssert hasFilteredAttributesSatisfyingExactly to enforce exact attribute matching --- CHANGELOG.md | 8 ++++++++ .../testing/assertj/LongExemplarAssert.java | 2 +- .../testing/assertj/MetricAssertionsTest.java | 20 +++++++++++++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c399e74acfa..5f30419121e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,14 @@ ## Unreleased +### SDK + +#### Testing + +* Fix `LongExemplarAssert.hasFilteredAttributesSatisfyingExactly` to reject extra filtered + attributes, matching `DoubleExemplarAssert` + ([#8518](https://github.com/open-telemetry/opentelemetry-java/pull/8518)) + ## Version 1.63.0 (2026-06-05) ### API diff --git a/sdk/testing/src/main/java/io/opentelemetry/sdk/testing/assertj/LongExemplarAssert.java b/sdk/testing/src/main/java/io/opentelemetry/sdk/testing/assertj/LongExemplarAssert.java index 9e93250544e..b8c304b451f 100644 --- a/sdk/testing/src/main/java/io/opentelemetry/sdk/testing/assertj/LongExemplarAssert.java +++ b/sdk/testing/src/main/java/io/opentelemetry/sdk/testing/assertj/LongExemplarAssert.java @@ -125,7 +125,7 @@ public LongExemplarAssert hasFilteredAttributesSatisfying( */ public LongExemplarAssert hasFilteredAttributesSatisfyingExactly( AttributeAssertion... assertions) { - return hasFilteredAttributesSatisfying(Arrays.asList(assertions)); + return hasFilteredAttributesSatisfyingExactly(Arrays.asList(assertions)); } /** diff --git a/sdk/testing/src/test/java/io/opentelemetry/sdk/testing/assertj/MetricAssertionsTest.java b/sdk/testing/src/test/java/io/opentelemetry/sdk/testing/assertj/MetricAssertionsTest.java index 2cd6207f655..6312941599b 100644 --- a/sdk/testing/src/test/java/io/opentelemetry/sdk/testing/assertj/MetricAssertionsTest.java +++ b/sdk/testing/src/test/java/io/opentelemetry/sdk/testing/assertj/MetricAssertionsTest.java @@ -962,6 +962,26 @@ void longGaugeFailure() { LENGTH, val -> val.isCloseTo(1, offset(0.3)))))))) .isInstanceOf(AssertionError.class); + // hasFilteredAttributesSatisfyingExactly must reject extra filtered attributes. The exemplar + // has nine filtered attributes but only one is asserted, so the exact assertion must fail. + assertThatThrownBy( + () -> + assertThat(LONG_GAUGE_METRIC) + .hasLongGaugeSatisfying( + gauge -> + gauge.hasPointsSatisfying( + point -> + point + .hasValue(Long.MAX_VALUE) + .hasExemplarsSatisfying( + exemplar -> exemplar.hasValue(2), + exemplar -> + exemplar + .hasValue(1) + .hasFilteredAttributesSatisfyingExactly( + equalTo(BEAR, "mya"))), + point -> point.hasValue(1)))) + .isInstanceOf(AssertionError.class); } @Test