|
6 | 6 | package io.opentelemetry.javaagent.instrumentation.awssdk.v1_11; |
7 | 7 |
|
8 | 8 | import static io.opentelemetry.api.common.AttributeKey.stringKey; |
| 9 | +import static io.opentelemetry.instrumentation.testing.junit.rpc.RpcSemconvStabilityUtil.rpcMethodAssertions; |
| 10 | +import static io.opentelemetry.instrumentation.testing.junit.rpc.RpcSemconvStabilityUtil.rpcSystemAssertion; |
9 | 11 | import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo; |
10 | 12 | import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies; |
11 | 13 | import static io.opentelemetry.semconv.HttpAttributes.HTTP_REQUEST_METHOD; |
|
19 | 21 | import static io.opentelemetry.semconv.incubating.AwsIncubatingAttributes.AWS_SNS_TOPIC_ARN; |
20 | 22 | import static io.opentelemetry.semconv.incubating.AwsIncubatingAttributes.AWS_SQS_QUEUE_URL; |
21 | 23 | import static io.opentelemetry.semconv.incubating.MessagingIncubatingAttributes.MESSAGING_DESTINATION_NAME; |
22 | | -import static io.opentelemetry.semconv.incubating.RpcIncubatingAttributes.RPC_METHOD; |
23 | | -import static io.opentelemetry.semconv.incubating.RpcIncubatingAttributes.RPC_SERVICE; |
24 | | -import static io.opentelemetry.semconv.incubating.RpcIncubatingAttributes.RPC_SYSTEM; |
25 | 24 | import static org.assertj.core.api.Assertions.assertThat; |
26 | 25 |
|
27 | 26 | import io.opentelemetry.api.trace.SpanKind; |
| 27 | +import io.opentelemetry.sdk.testing.assertj.AttributeAssertion; |
28 | 28 | import io.opentelemetry.sdk.testing.assertj.SpanDataAssert; |
| 29 | +import java.util.ArrayList; |
| 30 | +import java.util.List; |
29 | 31 |
|
30 | 32 | class AwsSpanAssertions { |
31 | 33 | private AwsSpanAssertions() {} |
32 | 34 |
|
| 35 | + @SuppressWarnings("deprecation") // using deprecated semconv |
33 | 36 | static SpanDataAssert sqs( |
34 | 37 | SpanDataAssert span, String queueName, String queueUrl, String rpcMethod) { |
| 38 | + List<AttributeAssertion> attributes = new ArrayList<>(); |
| 39 | + attributes.add(equalTo(stringKey("aws.agent"), "java-aws-sdk")); |
| 40 | + if (queueName != null) { |
| 41 | + attributes.add(equalTo(stringKey("aws.queue.name"), queueName)); |
| 42 | + } |
| 43 | + if (queueUrl != null) { |
| 44 | + attributes.add(equalTo(AWS_SQS_QUEUE_URL, queueUrl)); |
| 45 | + } |
| 46 | + attributes.add(satisfies(AWS_REQUEST_ID, v -> v.isInstanceOf(String.class))); |
| 47 | + attributes.add(rpcSystemAssertion("aws-api")); |
| 48 | + attributes.addAll(rpcMethodAssertions("AmazonSQS", rpcMethod)); |
| 49 | + attributes.add(equalTo(HTTP_REQUEST_METHOD, "POST")); |
| 50 | + attributes.add(equalTo(HTTP_RESPONSE_STATUS_CODE, 200)); |
| 51 | + attributes.add(satisfies(URL_FULL, val -> val.startsWith("http://"))); |
| 52 | + attributes.add(satisfies(SERVER_ADDRESS, v -> v.isInstanceOf(String.class))); |
| 53 | + attributes.add(equalTo(NETWORK_PROTOCOL_VERSION, "1.1")); |
| 54 | + attributes.add( |
| 55 | + satisfies( |
| 56 | + SERVER_PORT, |
| 57 | + val -> |
| 58 | + val.satisfiesAnyOf( |
| 59 | + v -> assertThat(v).isNull(), |
| 60 | + v -> assertThat(v).isInstanceOf(Number.class)))); |
| 61 | + |
35 | 62 | return span.hasName("SQS." + rpcMethod) |
36 | 63 | .hasKind(SpanKind.CLIENT) |
37 | 64 | .hasNoParent() |
38 | | - .hasAttributesSatisfyingExactly( |
39 | | - equalTo(stringKey("aws.agent"), "java-aws-sdk"), |
40 | | - equalTo(stringKey("aws.queue.name"), queueName), |
41 | | - equalTo(AWS_SQS_QUEUE_URL, queueUrl), |
42 | | - satisfies(AWS_REQUEST_ID, v -> v.isInstanceOf(String.class)), |
43 | | - equalTo(RPC_METHOD, rpcMethod), |
44 | | - equalTo(RPC_SYSTEM, "aws-api"), |
45 | | - equalTo(RPC_SERVICE, "AmazonSQS"), |
46 | | - equalTo(HTTP_REQUEST_METHOD, "POST"), |
47 | | - equalTo(HTTP_RESPONSE_STATUS_CODE, 200), |
48 | | - satisfies(URL_FULL, val -> val.startsWith("http://")), |
49 | | - satisfies(SERVER_ADDRESS, v -> v.isInstanceOf(String.class)), |
50 | | - equalTo(NETWORK_PROTOCOL_VERSION, "1.1"), |
51 | | - satisfies( |
52 | | - SERVER_PORT, |
53 | | - val -> |
54 | | - val.satisfiesAnyOf( |
55 | | - v -> assertThat(v).isNull(), |
56 | | - v -> assertThat(v).isInstanceOf(Number.class)))); |
| 65 | + .hasAttributesSatisfyingExactly(attributes); |
57 | 66 | } |
58 | 67 |
|
| 68 | + @SuppressWarnings("deprecation") // using deprecated semconv |
59 | 69 | static SpanDataAssert s3( |
60 | 70 | SpanDataAssert span, |
61 | 71 | String bucketName, |
62 | 72 | String rpcMethod, |
63 | 73 | String requestMethod, |
64 | 74 | int responseStatusCode) { |
| 75 | + List<AttributeAssertion> attributes = new ArrayList<>(); |
| 76 | + attributes.add(equalTo(stringKey("aws.agent"), "java-aws-sdk")); |
| 77 | + attributes.add(equalTo(AWS_S3_BUCKET, bucketName)); |
| 78 | + attributes.add(rpcSystemAssertion("aws-api")); |
| 79 | + attributes.addAll(rpcMethodAssertions("Amazon S3", rpcMethod)); |
| 80 | + attributes.add(equalTo(HTTP_REQUEST_METHOD, requestMethod)); |
| 81 | + attributes.add(equalTo(HTTP_RESPONSE_STATUS_CODE, responseStatusCode)); |
| 82 | + attributes.add(satisfies(URL_FULL, val -> val.startsWith("http://"))); |
| 83 | + attributes.add(satisfies(SERVER_ADDRESS, v -> v.isInstanceOf(String.class))); |
| 84 | + attributes.add(equalTo(NETWORK_PROTOCOL_VERSION, "1.1")); |
| 85 | + attributes.add( |
| 86 | + satisfies( |
| 87 | + SERVER_PORT, |
| 88 | + val -> |
| 89 | + val.satisfiesAnyOf( |
| 90 | + v -> assertThat(v).isNull(), |
| 91 | + v -> assertThat(v).isInstanceOf(Number.class)))); |
65 | 92 |
|
66 | 93 | return span.hasName("S3." + rpcMethod) |
67 | 94 | .hasKind(SpanKind.CLIENT) |
68 | 95 | .hasNoParent() |
69 | | - .hasAttributesSatisfyingExactly( |
70 | | - equalTo(stringKey("aws.agent"), "java-aws-sdk"), |
71 | | - equalTo(AWS_S3_BUCKET, bucketName), |
72 | | - equalTo(RPC_METHOD, rpcMethod), |
73 | | - equalTo(RPC_SYSTEM, "aws-api"), |
74 | | - equalTo(RPC_SERVICE, "Amazon S3"), |
75 | | - equalTo(HTTP_REQUEST_METHOD, requestMethod), |
76 | | - equalTo(HTTP_RESPONSE_STATUS_CODE, responseStatusCode), |
77 | | - satisfies(URL_FULL, val -> val.startsWith("http://")), |
78 | | - satisfies(SERVER_ADDRESS, v -> v.isInstanceOf(String.class)), |
79 | | - equalTo(NETWORK_PROTOCOL_VERSION, "1.1"), |
80 | | - satisfies( |
81 | | - SERVER_PORT, |
82 | | - val -> |
83 | | - val.satisfiesAnyOf( |
84 | | - v -> assertThat(v).isNull(), |
85 | | - v -> assertThat(v).isInstanceOf(Number.class)))); |
| 96 | + .hasAttributesSatisfyingExactly(attributes); |
86 | 97 | } |
87 | 98 |
|
| 99 | + @SuppressWarnings("deprecation") // using deprecated semconv |
88 | 100 | static SpanDataAssert sns(SpanDataAssert span, String topicArn, String rpcMethod) { |
| 101 | + List<AttributeAssertion> attributes = new ArrayList<>(); |
| 102 | + attributes.add(equalTo(stringKey("aws.agent"), "java-aws-sdk")); |
| 103 | + if (topicArn != null) { |
| 104 | + attributes.add(equalTo(MESSAGING_DESTINATION_NAME, topicArn)); |
| 105 | + } |
| 106 | + attributes.add(satisfies(AWS_SNS_TOPIC_ARN, v -> v.isInstanceOf(String.class))); |
| 107 | + attributes.add(satisfies(AWS_REQUEST_ID, v -> v.isInstanceOf(String.class))); |
| 108 | + attributes.add(rpcSystemAssertion("aws-api")); |
| 109 | + attributes.addAll(rpcMethodAssertions("AmazonSNS", rpcMethod)); |
| 110 | + attributes.add(equalTo(HTTP_REQUEST_METHOD, "POST")); |
| 111 | + attributes.add(equalTo(HTTP_RESPONSE_STATUS_CODE, 200)); |
| 112 | + attributes.add(satisfies(URL_FULL, val -> val.startsWith("http://"))); |
| 113 | + attributes.add(satisfies(SERVER_ADDRESS, v -> v.isInstanceOf(String.class))); |
| 114 | + attributes.add(equalTo(NETWORK_PROTOCOL_VERSION, "1.1")); |
| 115 | + attributes.add( |
| 116 | + satisfies( |
| 117 | + SERVER_PORT, |
| 118 | + val -> |
| 119 | + val.satisfiesAnyOf( |
| 120 | + v -> assertThat(v).isNull(), |
| 121 | + v -> assertThat(v).isInstanceOf(Number.class)))); |
89 | 122 |
|
90 | 123 | return span.hasName("SNS." + rpcMethod) |
91 | 124 | .hasKind(SpanKind.CLIENT) |
92 | 125 | .hasNoParent() |
93 | | - .hasAttributesSatisfyingExactly( |
94 | | - equalTo(stringKey("aws.agent"), "java-aws-sdk"), |
95 | | - equalTo(MESSAGING_DESTINATION_NAME, topicArn), |
96 | | - satisfies(AWS_SNS_TOPIC_ARN, v -> v.isInstanceOf(String.class)), |
97 | | - satisfies(AWS_REQUEST_ID, v -> v.isInstanceOf(String.class)), |
98 | | - equalTo(RPC_METHOD, rpcMethod), |
99 | | - equalTo(RPC_SYSTEM, "aws-api"), |
100 | | - equalTo(RPC_SERVICE, "AmazonSNS"), |
101 | | - equalTo(HTTP_REQUEST_METHOD, "POST"), |
102 | | - equalTo(HTTP_RESPONSE_STATUS_CODE, 200), |
103 | | - satisfies(URL_FULL, val -> val.startsWith("http://")), |
104 | | - satisfies(SERVER_ADDRESS, v -> v.isInstanceOf(String.class)), |
105 | | - equalTo(NETWORK_PROTOCOL_VERSION, "1.1"), |
106 | | - satisfies( |
107 | | - SERVER_PORT, |
108 | | - val -> |
109 | | - val.satisfiesAnyOf( |
110 | | - v -> assertThat(v).isNull(), |
111 | | - v -> assertThat(v).isInstanceOf(Number.class)))); |
| 126 | + .hasAttributesSatisfyingExactly(attributes); |
112 | 127 | } |
113 | 128 | } |
0 commit comments