Skip to content

Commit 71e79cc

Browse files
committed
Move trace details propagated when message attributes are readonly to SnsInterceptorTest
1 parent 2121265 commit 71e79cc

2 files changed

Lines changed: 36 additions & 35 deletions

File tree

dd-java-agent/instrumentation/aws-java/aws-java-sns-2.0/src/test/groovy/SnsClientTest.groovy

Lines changed: 9 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import software.amazon.awssdk.auth.credentials.AwsBasicCredentials
1313
import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider
1414
import software.amazon.awssdk.regions.Region
1515
import software.amazon.awssdk.services.sns.SnsClient
16-
import software.amazon.awssdk.services.sns.model.MessageAttributeValue
1716
import software.amazon.awssdk.services.sns.model.PublishResponse
1817
import software.amazon.awssdk.services.sqs.SqsClient
1918
import software.amazon.awssdk.services.sqs.model.QueueAttributeName
@@ -41,15 +40,15 @@ abstract class SnsClientTest extends VersionedNamingTestBase {
4140
LOCALSTACK.start()
4241
def endPoint = "http://" + LOCALSTACK.getHost() + ":" + LOCALSTACK.getMappedPort(4566)
4342
snsClient = SnsClient.builder()
44-
.endpointOverride(URI.create(endPoint))
45-
.region(Region.of("us-east-1"))
46-
.credentialsProvider(StaticCredentialsProvider.create(AwsBasicCredentials.create("test", "test")))
47-
.build()
43+
.endpointOverride(URI.create(endPoint))
44+
.region(Region.of("us-east-1"))
45+
.credentialsProvider(StaticCredentialsProvider.create(AwsBasicCredentials.create("test", "test")))
46+
.build()
4847
sqsClient = SqsClient.builder()
49-
.endpointOverride(URI.create(endPoint))
50-
.region(Region.of("us-east-1"))
51-
.credentialsProvider(StaticCredentialsProvider.create(AwsBasicCredentials.create("test", "test")))
52-
.build()
48+
.endpointOverride(URI.create(endPoint))
49+
.region(Region.of("us-east-1"))
50+
.credentialsProvider(StaticCredentialsProvider.create(AwsBasicCredentials.create("test", "test")))
51+
.build()
5352
testQueueURL = sqsClient.createQueue { it.queueName("testqueue") }.queueUrl()
5453
testQueueARN = sqsClient.getQueueAttributes {it.queueUrl(testQueueURL).attributeNames(QueueAttributeName.QUEUE_ARN)}.attributes().get(QueueAttributeName.QUEUE_ARN)
5554
testTopicARN = snsClient.createTopic { it.name("testtopic") }.topicArn()
@@ -82,30 +81,6 @@ abstract class SnsClientTest extends VersionedNamingTestBase {
8281
abstract String expectedOperation(String awsService, String awsOperation)
8382
abstract String expectedService(String awsService, String awsOperation)
8483

85-
def "trace details propagated when message attributes are readonly"() {
86-
when:
87-
TEST_WRITER.clear()
88-
89-
def headers = new HashMap<String, MessageAttributeValue>()
90-
headers.put("mykey", MessageAttributeValue.builder().stringValue("myvalue").dataType("String").build())
91-
def readonlyHeaders = Collections.unmodifiableMap(headers)
92-
snsClient.publish(b -> b.message("sometext").topicArn(testTopicARN).messageAttributes(readonlyHeaders))
93-
94-
def message = sqsClient.receiveMessage {
95-
it.queueUrl(testQueueURL).waitTimeSeconds(3)
96-
}.messages().get(0)
97-
98-
def messageBody = new JsonSlurper().parseText(message.body())
99-
100-
then:
101-
// injected value is here
102-
String injectedValue = messageBody["MessageAttributes"]["_datadog"]["Value"]
103-
injectedValue.length() > 0
104-
105-
// original header value is still present
106-
messageBody["MessageAttributes"]["mykey"] != null
107-
}
108-
10984
def "trace details propagated via SNS system message attributes"() {
11085
when:
11186
TEST_WRITER.clear()
@@ -214,7 +189,7 @@ abstract class SnsClientTest extends VersionedNamingTestBase {
214189
TEST_WRITER.clear()
215190
snsClient.publish { req ->
216191
req.message("test message")
217-
.topicArn(testTopicARN)
192+
.topicArn(testTopicARN)
218193
}
219194

220195
def message = sqsClient.receiveMessage { it.queueUrl(testQueueURL).waitTimeSeconds(3) }.messages().get(0)
@@ -339,4 +314,3 @@ class SnsClientV1DataStreamsForkedTest extends SnsClientTest {
339314
1
340315
}
341316
}
342-

dd-java-agent/instrumentation/aws-java/aws-java-sns-2.0/src/test/java/datadog/trace/instrumentation/aws/v2/sns/SnsInterceptorTest.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,13 @@
22

33
import static org.junit.jupiter.api.Assertions.assertEquals;
44
import static org.junit.jupiter.api.Assertions.assertFalse;
5+
import static org.junit.jupiter.api.Assertions.assertNotSame;
56
import static org.junit.jupiter.api.Assertions.assertTrue;
67

78
import datadog.context.Context;
89
import java.util.Arrays;
10+
import java.util.Collections;
11+
import java.util.HashMap;
912
import java.util.LinkedHashMap;
1013
import java.util.Map;
1114
import java.util.stream.Collectors;
@@ -14,6 +17,7 @@
1417
import software.amazon.awssdk.services.sns.model.MessageAttributeValue;
1518
import software.amazon.awssdk.services.sns.model.PublishBatchRequest;
1619
import software.amazon.awssdk.services.sns.model.PublishBatchRequestEntry;
20+
import software.amazon.awssdk.services.sns.model.PublishRequest;
1721

1822
public class SnsInterceptorTest {
1923

@@ -65,4 +69,27 @@ private static Map<String, MessageAttributeValue> stringAttributes(int count) {
6569
}
6670
return attributes;
6771
}
72+
73+
@Test
74+
void publishPreservesReadonlyAttributesWhileAddingDatadogContext() {
75+
Map<String, MessageAttributeValue> headers = new HashMap<>();
76+
headers.put(
77+
"mykey", MessageAttributeValue.builder().dataType("String").stringValue("myvalue").build());
78+
Map<String, MessageAttributeValue> readonlyHeaders = Collections.unmodifiableMap(headers);
79+
80+
PublishRequest request =
81+
PublishRequest.builder()
82+
.topicArn("arn:aws:sns:us-east-1:123456789012:test-topic")
83+
.message("sometext")
84+
.messageAttributes(readonlyHeaders)
85+
.build();
86+
87+
PublishRequest modified =
88+
(PublishRequest) new SnsInterceptor().modifyRequest(() -> request, executionAttributes());
89+
90+
assertNotSame(readonlyHeaders, modified.messageAttributes());
91+
assertEquals("myvalue", modified.messageAttributes().get("mykey").stringValue());
92+
assertTrue(modified.messageAttributes().containsKey("_datadog"));
93+
assertFalse(readonlyHeaders.containsKey("_datadog"));
94+
}
6895
}

0 commit comments

Comments
 (0)