Skip to content

Commit 3bb221f

Browse files
authored
add hasAttributesSatisfying overload to AbstractPointAssert (#6048)
1 parent f1fc1c7 commit 3bb221f

File tree

3 files changed

+54
-7
lines changed

3 files changed

+54
-7
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,5 @@
11
Comparing source compatibility of against
2-
No changes.
2+
*** MODIFIED CLASS: PUBLIC ABSTRACT io.opentelemetry.sdk.testing.assertj.AbstractPointAssert (not serializable)
3+
=== CLASS FILE FORMAT VERSION: 52.0 <- 52.0
4+
GENERIC TEMPLATES: === PointAssertT:io.opentelemetry.sdk.testing.assertj.AbstractPointAssert<PointAssertT,PointT><PointAssertT,PointT>, === PointT:io.opentelemetry.sdk.metrics.data.PointData
5+
+++ NEW METHOD: PUBLIC(+) FINAL(+) io.opentelemetry.sdk.testing.assertj.AbstractPointAssert hasAttributesSatisfying(java.util.function.Consumer<io.opentelemetry.api.common.Attributes>)

sdk/testing/src/main/java/io/opentelemetry/sdk/testing/assertj/AbstractPointAssert.java

+8
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import java.util.Arrays;
1515
import java.util.Map;
1616
import java.util.Set;
17+
import java.util.function.Consumer;
1718
import javax.annotation.Nullable;
1819
import org.assertj.core.api.AbstractAssert;
1920
import org.assertj.core.api.Assertions;
@@ -111,6 +112,13 @@ public final PointAssertT hasAttributesSatisfying(Iterable<AttributeAssertion> a
111112
return myself;
112113
}
113114

115+
/** Asserts the point has attributes satisfying the given condition. */
116+
public final PointAssertT hasAttributesSatisfying(Consumer<Attributes> attributes) {
117+
isNotNull();
118+
assertThat(actual.getAttributes()).as("attributes").satisfies(attributes);
119+
return myself;
120+
}
121+
114122
/**
115123
* Asserts the point has attributes matching all {@code assertions} and no more. Assertions can be
116124
* created using methods like {@link OpenTelemetryAssertions#satisfies(AttributeKey,

sdk/testing/src/test/java/io/opentelemetry/sdk/testing/assertj/MetricAssertionsTest.java

+42-6
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
package io.opentelemetry.sdk.testing.assertj;
77

8+
import static io.opentelemetry.api.common.AttributeKey.stringKey;
89
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat;
910
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.attributeEntry;
1011
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo;
@@ -60,9 +61,9 @@ class MetricAssertionsTest {
6061
private static final InstrumentationScopeInfo INSTRUMENTATION_SCOPE_INFO =
6162
InstrumentationScopeInfo.builder("opentelemetry").setVersion("1.0").build();
6263

63-
private static final AttributeKey<String> DOG = AttributeKey.stringKey("dog");
64-
private static final AttributeKey<String> BEAR = AttributeKey.stringKey("bear");
65-
private static final AttributeKey<String> CAT = AttributeKey.stringKey("cat");
64+
private static final AttributeKey<String> DOG = stringKey("dog");
65+
private static final AttributeKey<String> BEAR = stringKey("bear");
66+
private static final AttributeKey<String> CAT = stringKey("cat");
6667
private static final AttributeKey<Boolean> WARM = AttributeKey.booleanKey("warm");
6768
private static final AttributeKey<Long> TEMPERATURE = AttributeKey.longKey("temperature");
6869
private static final AttributeKey<Double> LENGTH = AttributeKey.doubleKey("length");
@@ -317,7 +318,7 @@ void doubleGauge() {
317318
attributes ->
318319
assertThat(attributes)
319320
.hasSize(2)
320-
.containsEntry(AttributeKey.stringKey("dog"), "bark")
321+
.containsEntry(stringKey("dog"), "bark")
321322
.hasEntrySatisfying(DOG, value -> assertThat(value).hasSize(4))
322323
.hasEntrySatisfying(
323324
AttributeKey.booleanKey("dog is cute"),
@@ -454,7 +455,19 @@ void doubleGauge() {
454455
equalTo(CONDITIONS, Arrays.asList(false, true)),
455456
equalTo(SCORES, Arrays.asList(0L, 1L)),
456457
equalTo(COINS, Arrays.asList(0.01, 0.05, 0.1)),
457-
satisfies(LENGTH, val -> val.isCloseTo(1, offset(0.3))))));
458+
satisfies(LENGTH, val -> val.isCloseTo(1, offset(0.3))))
459+
.hasAttributesSatisfying(
460+
attributes ->
461+
assertThat(attributes)
462+
.hasSize(8)
463+
.containsEntry(stringKey("bear"), "mya")
464+
.containsEntry("warm", true)
465+
.containsEntry("temperature", 30L)
466+
.containsEntry("colors", "red", "blue")
467+
.containsEntry("conditions", false, true)
468+
.containsEntry("scores", 0L, 1L)
469+
.containsEntry("coins", 0.01, 0.05, 0.1)
470+
.containsEntry("length", 1.2))));
458471
}
459472

460473
@Test
@@ -500,7 +513,7 @@ void doubleGaugeFailure() {
500513
resource.hasAttributesSatisfying(
501514
attributes ->
502515
assertThat(attributes)
503-
.containsEntry(AttributeKey.stringKey("dog"), "meow"))))
516+
.containsEntry(stringKey("dog"), "meow"))))
504517
.isInstanceOf(AssertionError.class);
505518
assertThatThrownBy(
506519
() ->
@@ -774,6 +787,29 @@ void doubleGaugeFailure() {
774787
satisfies(
775788
COINS, val -> val.containsExactly(0.01, 0.05, 0.1))))))
776789
.isInstanceOf(AssertionError.class);
790+
assertThatThrownBy(
791+
() ->
792+
assertThat(DOUBLE_GAUGE_METRIC)
793+
.hasDoubleGaugeSatisfying(
794+
gauge ->
795+
gauge.hasPointsSatisfying(
796+
point -> point.hasAttributes(Attributes.empty()),
797+
point ->
798+
point.hasAttributesSatisfying(
799+
attributes ->
800+
assertThat(attributes)
801+
.hasSize(8)
802+
.containsEntry(
803+
stringKey("bear"),
804+
"WRONG BEAR NAME") // Failed here
805+
.containsEntry("warm", true)
806+
.containsEntry("temperature", 30L)
807+
.containsEntry("colors", "red", "blue")
808+
.containsEntry("conditions", false, true)
809+
.containsEntry("scores", 0L, 1L)
810+
.containsEntry("coins", 0.01, 0.05, 0.1)
811+
.containsEntry("length", 1.2)))))
812+
.isInstanceOf(AssertionError.class);
777813
}
778814

779815
// The above tests verify shared behavior in AbstractPointDataAssert and MetricDataAssert so we

0 commit comments

Comments
 (0)