From 7779d26fea0051280ec0e732ad2bfb447418b6b5 Mon Sep 17 00:00:00 2001 From: Lauri Tulmin Date: Fri, 8 Mar 2024 18:47:33 +0200 Subject: [PATCH] Fix flaky aws sqs test (#10782) --- .../awssdk/v1_11/AbstractSqsTracingTest.java | 61 +++++++++++-------- 1 file changed, 34 insertions(+), 27 deletions(-) diff --git a/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AbstractSqsTracingTest.java b/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AbstractSqsTracingTest.java index 9d88a40d3c..4eafdb4a1d 100644 --- a/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AbstractSqsTracingTest.java +++ b/instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AbstractSqsTracingTest.java @@ -28,6 +28,7 @@ import io.opentelemetry.api.trace.SpanKind; import io.opentelemetry.instrumentation.test.utils.PortUtils; import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension; import io.opentelemetry.sdk.testing.assertj.AttributeAssertion; +import io.opentelemetry.sdk.trace.data.SpanData; import io.opentelemetry.semconv.SemanticAttributes; import java.util.ArrayList; import java.util.Arrays; @@ -324,7 +325,7 @@ public abstract class AbstractSqsTracingTest { val -> val.isInstanceOf(String.class)), equalTo(SemanticAttributes.NETWORK_PROTOCOL_VERSION, "1.1"))), trace -> - trace.hasSpansSatisfyingExactly( + trace.hasSpansSatisfyingExactlyInAnyOrder( span -> span.hasName("parent").hasNoParent().hasAttributes(Attributes.empty()), span -> span.hasName("SQS.ReceiveMessage") @@ -369,32 +370,38 @@ public abstract class AbstractSqsTracingTest { equalTo(SemanticAttributes.MESSAGING_OPERATION, "receive"), equalTo(SemanticAttributes.MESSAGING_BATCH_MESSAGE_COUNT, 1), equalTo(SemanticAttributes.NETWORK_PROTOCOL_VERSION, "1.1")), - span -> - span.hasName("testSdkSqs process") - .hasKind(SpanKind.CONSUMER) - .hasParent(trace.getSpan(2)) - .hasAttributesSatisfyingExactly( - equalTo(stringKey("aws.agent"), "java-aws-sdk"), - equalTo(stringKey("aws.endpoint"), "http://localhost:" + sqsPort), - equalTo( - stringKey("aws.queue.url"), - "http://localhost:" + sqsPort + "/000000000000/testSdkSqs"), - equalTo(SemanticAttributes.RPC_SYSTEM, "aws-api"), - equalTo(SemanticAttributes.RPC_SERVICE, "AmazonSQS"), - equalTo(SemanticAttributes.RPC_METHOD, "ReceiveMessage"), - equalTo(SemanticAttributes.HTTP_REQUEST_METHOD, "POST"), - equalTo(SemanticAttributes.HTTP_RESPONSE_STATUS_CODE, 200), - equalTo(SemanticAttributes.URL_FULL, "http://localhost:" + sqsPort), - equalTo(SemanticAttributes.SERVER_ADDRESS, "localhost"), - equalTo(SemanticAttributes.SERVER_PORT, sqsPort), - equalTo(SemanticAttributes.MESSAGING_SYSTEM, "AmazonSQS"), - equalTo( - SemanticAttributes.MESSAGING_DESTINATION_NAME, "testSdkSqs"), - equalTo(SemanticAttributes.MESSAGING_OPERATION, "process"), - satisfies( - SemanticAttributes.MESSAGING_MESSAGE_ID, - val -> val.isInstanceOf(String.class)), - equalTo(SemanticAttributes.NETWORK_PROTOCOL_VERSION, "1.1")), + span -> { + // on jdk8 the order of the "SQS.ReceiveMessage" and "testSdkSqs receive" + // spans can vary + SpanData parent = + "testSdkSqs receive".equals(trace.getSpan(2).getName()) + ? trace.getSpan(2) + : trace.getSpan(1); + span.hasName("testSdkSqs process") + .hasKind(SpanKind.CONSUMER) + .hasParent(parent) + .hasAttributesSatisfyingExactly( + equalTo(stringKey("aws.agent"), "java-aws-sdk"), + equalTo(stringKey("aws.endpoint"), "http://localhost:" + sqsPort), + equalTo( + stringKey("aws.queue.url"), + "http://localhost:" + sqsPort + "/000000000000/testSdkSqs"), + equalTo(SemanticAttributes.RPC_SYSTEM, "aws-api"), + equalTo(SemanticAttributes.RPC_SERVICE, "AmazonSQS"), + equalTo(SemanticAttributes.RPC_METHOD, "ReceiveMessage"), + equalTo(SemanticAttributes.HTTP_REQUEST_METHOD, "POST"), + equalTo(SemanticAttributes.HTTP_RESPONSE_STATUS_CODE, 200), + equalTo(SemanticAttributes.URL_FULL, "http://localhost:" + sqsPort), + equalTo(SemanticAttributes.SERVER_ADDRESS, "localhost"), + equalTo(SemanticAttributes.SERVER_PORT, sqsPort), + equalTo(SemanticAttributes.MESSAGING_SYSTEM, "AmazonSQS"), + equalTo(SemanticAttributes.MESSAGING_DESTINATION_NAME, "testSdkSqs"), + equalTo(SemanticAttributes.MESSAGING_OPERATION, "process"), + satisfies( + SemanticAttributes.MESSAGING_MESSAGE_ID, + val -> val.isInstanceOf(String.class)), + equalTo(SemanticAttributes.NETWORK_PROTOCOL_VERSION, "1.1")); + }, span -> span.hasName("process child") .hasParent(trace.getSpan(3))