add hasAttributesSatisfying overload to AbstractPointAssert (#6048)

This commit is contained in:
Chung Nguyen 2023-12-08 15:24:09 +01:00 committed by GitHub
parent f1fc1c75b8
commit 3bb221fb5d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 54 additions and 7 deletions

View File

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

View File

@ -14,6 +14,7 @@ import io.opentelemetry.sdk.metrics.data.PointData;
import java.util.Arrays; import java.util.Arrays;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.function.Consumer;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import org.assertj.core.api.AbstractAssert; import org.assertj.core.api.AbstractAssert;
import org.assertj.core.api.Assertions; import org.assertj.core.api.Assertions;
@ -111,6 +112,13 @@ public abstract class AbstractPointAssert<
return myself; return myself;
} }
/** Asserts the point has attributes satisfying the given condition. */
public final PointAssertT hasAttributesSatisfying(Consumer<Attributes> attributes) {
isNotNull();
assertThat(actual.getAttributes()).as("attributes").satisfies(attributes);
return myself;
}
/** /**
* Asserts the point has attributes matching all {@code assertions} and no more. Assertions can be * Asserts the point has attributes matching all {@code assertions} and no more. Assertions can be
* created using methods like {@link OpenTelemetryAssertions#satisfies(AttributeKey, * created using methods like {@link OpenTelemetryAssertions#satisfies(AttributeKey,

View File

@ -5,6 +5,7 @@
package io.opentelemetry.sdk.testing.assertj; package io.opentelemetry.sdk.testing.assertj;
import static io.opentelemetry.api.common.AttributeKey.stringKey;
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat;
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.attributeEntry; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.attributeEntry;
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo;
@ -60,9 +61,9 @@ class MetricAssertionsTest {
private static final InstrumentationScopeInfo INSTRUMENTATION_SCOPE_INFO = private static final InstrumentationScopeInfo INSTRUMENTATION_SCOPE_INFO =
InstrumentationScopeInfo.builder("opentelemetry").setVersion("1.0").build(); InstrumentationScopeInfo.builder("opentelemetry").setVersion("1.0").build();
private static final AttributeKey<String> DOG = AttributeKey.stringKey("dog"); private static final AttributeKey<String> DOG = stringKey("dog");
private static final AttributeKey<String> BEAR = AttributeKey.stringKey("bear"); private static final AttributeKey<String> BEAR = stringKey("bear");
private static final AttributeKey<String> CAT = AttributeKey.stringKey("cat"); private static final AttributeKey<String> CAT = stringKey("cat");
private static final AttributeKey<Boolean> WARM = AttributeKey.booleanKey("warm"); private static final AttributeKey<Boolean> WARM = AttributeKey.booleanKey("warm");
private static final AttributeKey<Long> TEMPERATURE = AttributeKey.longKey("temperature"); private static final AttributeKey<Long> TEMPERATURE = AttributeKey.longKey("temperature");
private static final AttributeKey<Double> LENGTH = AttributeKey.doubleKey("length"); private static final AttributeKey<Double> LENGTH = AttributeKey.doubleKey("length");
@ -317,7 +318,7 @@ class MetricAssertionsTest {
attributes -> attributes ->
assertThat(attributes) assertThat(attributes)
.hasSize(2) .hasSize(2)
.containsEntry(AttributeKey.stringKey("dog"), "bark") .containsEntry(stringKey("dog"), "bark")
.hasEntrySatisfying(DOG, value -> assertThat(value).hasSize(4)) .hasEntrySatisfying(DOG, value -> assertThat(value).hasSize(4))
.hasEntrySatisfying( .hasEntrySatisfying(
AttributeKey.booleanKey("dog is cute"), AttributeKey.booleanKey("dog is cute"),
@ -454,7 +455,19 @@ class MetricAssertionsTest {
equalTo(CONDITIONS, Arrays.asList(false, true)), equalTo(CONDITIONS, Arrays.asList(false, true)),
equalTo(SCORES, Arrays.asList(0L, 1L)), equalTo(SCORES, Arrays.asList(0L, 1L)),
equalTo(COINS, Arrays.asList(0.01, 0.05, 0.1)), equalTo(COINS, Arrays.asList(0.01, 0.05, 0.1)),
satisfies(LENGTH, val -> val.isCloseTo(1, offset(0.3)))))); satisfies(LENGTH, val -> val.isCloseTo(1, offset(0.3))))
.hasAttributesSatisfying(
attributes ->
assertThat(attributes)
.hasSize(8)
.containsEntry(stringKey("bear"), "mya")
.containsEntry("warm", true)
.containsEntry("temperature", 30L)
.containsEntry("colors", "red", "blue")
.containsEntry("conditions", false, true)
.containsEntry("scores", 0L, 1L)
.containsEntry("coins", 0.01, 0.05, 0.1)
.containsEntry("length", 1.2))));
} }
@Test @Test
@ -500,7 +513,7 @@ class MetricAssertionsTest {
resource.hasAttributesSatisfying( resource.hasAttributesSatisfying(
attributes -> attributes ->
assertThat(attributes) assertThat(attributes)
.containsEntry(AttributeKey.stringKey("dog"), "meow")))) .containsEntry(stringKey("dog"), "meow"))))
.isInstanceOf(AssertionError.class); .isInstanceOf(AssertionError.class);
assertThatThrownBy( assertThatThrownBy(
() -> () ->
@ -774,6 +787,29 @@ class MetricAssertionsTest {
satisfies( satisfies(
COINS, val -> val.containsExactly(0.01, 0.05, 0.1)))))) COINS, val -> val.containsExactly(0.01, 0.05, 0.1))))))
.isInstanceOf(AssertionError.class); .isInstanceOf(AssertionError.class);
assertThatThrownBy(
() ->
assertThat(DOUBLE_GAUGE_METRIC)
.hasDoubleGaugeSatisfying(
gauge ->
gauge.hasPointsSatisfying(
point -> point.hasAttributes(Attributes.empty()),
point ->
point.hasAttributesSatisfying(
attributes ->
assertThat(attributes)
.hasSize(8)
.containsEntry(
stringKey("bear"),
"WRONG BEAR NAME") // Failed here
.containsEntry("warm", true)
.containsEntry("temperature", 30L)
.containsEntry("colors", "red", "blue")
.containsEntry("conditions", false, true)
.containsEntry("scores", 0L, 1L)
.containsEntry("coins", 0.01, 0.05, 0.1)
.containsEntry("length", 1.2)))))
.isInstanceOf(AssertionError.class);
} }
// The above tests verify shared behavior in AbstractPointDataAssert and MetricDataAssert so we // The above tests verify shared behavior in AbstractPointDataAssert and MetricDataAssert so we