Skip to content

Commit 74b6399

Browse files
committed
span tests
1 parent 5786ef7 commit 74b6399

21 files changed

Lines changed: 1392 additions & 1251 deletions

File tree

instrumentation/armeria/armeria-grpc-1.14/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/armeria/grpc/v1_14/ArmeriaGrpcTest.java

Lines changed: 30 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,12 @@
55

66
package io.opentelemetry.javaagent.instrumentation.armeria.grpc.v1_14;
77

8+
import static io.opentelemetry.instrumentation.testing.junit.rpc.RpcSemconvStabilityUtil.rpcMethodAssertions;
9+
import static io.opentelemetry.instrumentation.testing.junit.rpc.RpcSemconvStabilityUtil.rpcSystemAssertion;
810
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo;
911
import static io.opentelemetry.semconv.ServerAttributes.SERVER_ADDRESS;
1012
import static io.opentelemetry.semconv.ServerAttributes.SERVER_PORT;
1113
import static io.opentelemetry.semconv.incubating.RpcIncubatingAttributes.RPC_GRPC_STATUS_CODE;
12-
import static io.opentelemetry.semconv.incubating.RpcIncubatingAttributes.RPC_METHOD;
13-
import static io.opentelemetry.semconv.incubating.RpcIncubatingAttributes.RPC_SERVICE;
14-
import static io.opentelemetry.semconv.incubating.RpcIncubatingAttributes.RPC_SYSTEM;
1514
import static org.assertj.core.api.Assertions.assertThat;
1615

1716
import com.linecorp.armeria.client.grpc.GrpcClients;
@@ -24,7 +23,10 @@
2423
import io.grpc.stub.StreamObserver;
2524
import io.opentelemetry.api.trace.SpanKind;
2625
import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension;
26+
import io.opentelemetry.sdk.testing.assertj.AttributeAssertion;
2727
import io.opentelemetry.semconv.incubating.MessageIncubatingAttributes;
28+
import java.util.ArrayList;
29+
import java.util.List;
2830
import org.junit.jupiter.api.Test;
2931
import org.junit.jupiter.api.extension.RegisterExtension;
3032

@@ -57,6 +59,17 @@ public void sayHello(
5759
}
5860
};
5961

62+
private static List<AttributeAssertion> buildGrpcSpanAttributes(
63+
String service, String method, long statusCode, String serverAddress, long serverPort) {
64+
List<AttributeAssertion> attrs = new ArrayList<>();
65+
attrs.add(rpcSystemAssertion("grpc"));
66+
attrs.addAll(rpcMethodAssertions(service, method));
67+
attrs.add(equalTo(RPC_GRPC_STATUS_CODE, statusCode));
68+
attrs.add(equalTo(SERVER_ADDRESS, serverAddress));
69+
attrs.add(equalTo(SERVER_PORT, serverPort));
70+
return attrs;
71+
}
72+
6073
@SuppressWarnings("deprecation") // using deprecated semconv
6174
@Test
6275
void grpcInstrumentation() {
@@ -76,13 +89,13 @@ void grpcInstrumentation() {
7689
span.hasName("example.Greeter/SayHello")
7790
.hasKind(SpanKind.CLIENT)
7891
.hasParent(trace.getSpan(0))
79-
.hasAttributesSatisfyingExactly(
80-
equalTo(RPC_SYSTEM, "grpc"),
81-
equalTo(RPC_SERVICE, "example.Greeter"),
82-
equalTo(RPC_METHOD, "SayHello"),
83-
equalTo(RPC_GRPC_STATUS_CODE, (long) Status.Code.OK.value()),
84-
equalTo(SERVER_ADDRESS, "127.0.0.1"),
85-
equalTo(SERVER_PORT, (long) server.httpPort()))
92+
.hasAttributesSatisfying(
93+
buildGrpcSpanAttributes(
94+
"example.Greeter",
95+
"SayHello",
96+
Status.Code.OK.value(),
97+
"127.0.0.1",
98+
server.httpPort()))
8699
.hasEventsSatisfyingExactly(
87100
event ->
88101
event
@@ -101,13 +114,13 @@ void grpcInstrumentation() {
101114
span.hasName("example.Greeter/SayHello")
102115
.hasKind(SpanKind.SERVER)
103116
.hasParent(trace.getSpan(1))
104-
.hasAttributesSatisfyingExactly(
105-
equalTo(RPC_SYSTEM, "grpc"),
106-
equalTo(RPC_SERVICE, "example.Greeter"),
107-
equalTo(RPC_METHOD, "SayHello"),
108-
equalTo(RPC_GRPC_STATUS_CODE, (long) Status.Code.OK.value()),
109-
equalTo(SERVER_ADDRESS, "127.0.0.1"),
110-
equalTo(SERVER_PORT, server.httpPort()))
117+
.hasAttributesSatisfying(
118+
buildGrpcSpanAttributes(
119+
"example.Greeter",
120+
"SayHello",
121+
Status.Code.OK.value(),
122+
"127.0.0.1",
123+
server.httpPort()))
111124
.hasEventsSatisfyingExactly(
112125
event ->
113126
event

instrumentation/aws-sdk/aws-sdk-1.11/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/awssdk/v1_11/AwsSpanAssertions.java

Lines changed: 73 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
package io.opentelemetry.javaagent.instrumentation.awssdk.v1_11;
77

88
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;
911
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo;
1012
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.satisfies;
1113
import static io.opentelemetry.semconv.HttpAttributes.HTTP_REQUEST_METHOD;
@@ -19,95 +21,108 @@
1921
import static io.opentelemetry.semconv.incubating.AwsIncubatingAttributes.AWS_SNS_TOPIC_ARN;
2022
import static io.opentelemetry.semconv.incubating.AwsIncubatingAttributes.AWS_SQS_QUEUE_URL;
2123
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;
2524
import static org.assertj.core.api.Assertions.assertThat;
2625

2726
import io.opentelemetry.api.trace.SpanKind;
27+
import io.opentelemetry.sdk.testing.assertj.AttributeAssertion;
2828
import io.opentelemetry.sdk.testing.assertj.SpanDataAssert;
29+
import java.util.ArrayList;
30+
import java.util.List;
2931

3032
class AwsSpanAssertions {
3133
private AwsSpanAssertions() {}
3234

35+
@SuppressWarnings("deprecation") // using deprecated semconv
3336
static SpanDataAssert sqs(
3437
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+
3562
return span.hasName("SQS." + rpcMethod)
3663
.hasKind(SpanKind.CLIENT)
3764
.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);
5766
}
5867

68+
@SuppressWarnings("deprecation") // using deprecated semconv
5969
static SpanDataAssert s3(
6070
SpanDataAssert span,
6171
String bucketName,
6272
String rpcMethod,
6373
String requestMethod,
6474
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))));
6592

6693
return span.hasName("S3." + rpcMethod)
6794
.hasKind(SpanKind.CLIENT)
6895
.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);
8697
}
8798

99+
@SuppressWarnings("deprecation") // using deprecated semconv
88100
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))));
89122

90123
return span.hasName("SNS." + rpcMethod)
91124
.hasKind(SpanKind.CLIENT)
92125
.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);
112127
}
113128
}

instrumentation/aws-sdk/aws-sdk-1.11/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/awssdk/v1_11/S3ClientTest.java

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,14 @@
77

88
import static io.opentelemetry.api.common.AttributeKey.stringKey;
99
import static io.opentelemetry.api.trace.SpanKind.CLIENT;
10+
import static io.opentelemetry.instrumentation.testing.junit.rpc.RpcSemconvStabilityUtil.rpcMethodAssertions;
11+
import static io.opentelemetry.instrumentation.testing.junit.rpc.RpcSemconvStabilityUtil.rpcSystemAssertion;
1012
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.equalTo;
1113
import static io.opentelemetry.semconv.ErrorAttributes.ERROR_TYPE;
1214
import static io.opentelemetry.semconv.HttpAttributes.HTTP_REQUEST_METHOD;
1315
import static io.opentelemetry.semconv.ServerAttributes.SERVER_ADDRESS;
1416
import static io.opentelemetry.semconv.UrlAttributes.URL_FULL;
1517
import static io.opentelemetry.semconv.incubating.AwsIncubatingAttributes.AWS_S3_BUCKET;
16-
import static io.opentelemetry.semconv.incubating.RpcIncubatingAttributes.RPC_METHOD;
17-
import static io.opentelemetry.semconv.incubating.RpcIncubatingAttributes.RPC_SERVICE;
18-
import static io.opentelemetry.semconv.incubating.RpcIncubatingAttributes.RPC_SYSTEM;
1918
import static org.assertj.core.api.Assertions.assertThat;
2019
import static org.assertj.core.api.Assertions.catchThrowable;
2120

@@ -33,7 +32,9 @@
3332
import io.opentelemetry.instrumentation.awssdk.v1_11.AbstractS3ClientTest;
3433
import io.opentelemetry.instrumentation.testing.junit.AgentInstrumentationExtension;
3534
import io.opentelemetry.instrumentation.testing.junit.InstrumentationExtension;
35+
import io.opentelemetry.sdk.testing.assertj.AttributeAssertion;
3636
import io.opentelemetry.sdk.trace.data.StatusData;
37+
import java.util.ArrayList;
3738
import java.util.Date;
3839
import java.util.List;
3940
import java.util.stream.Stream;
@@ -119,22 +120,24 @@ public void beforeRequest(Request<?> request) {
119120
.waitAndAssertTraces(
120121
trace ->
121122
trace.hasSpansSatisfyingExactly(
122-
span ->
123-
span.hasName("S3.HeadBucket")
124-
.hasKind(CLIENT)
125-
.hasStatus(StatusData.error())
126-
.hasException(caught)
127-
.hasNoParent()
128-
.hasAttributesSatisfyingExactly(
129-
equalTo(URL_FULL, "https://s3.amazonaws.com"),
130-
equalTo(HTTP_REQUEST_METHOD, "HEAD"),
131-
equalTo(SERVER_ADDRESS, "s3.amazonaws.com"),
132-
equalTo(RPC_SYSTEM, "aws-api"),
133-
equalTo(RPC_SERVICE, "Amazon S3"),
134-
equalTo(RPC_METHOD, "HeadBucket"),
135-
equalTo(stringKey("aws.agent"), "java-aws-sdk"),
136-
equalTo(AWS_S3_BUCKET, "someBucket"),
137-
equalTo(ERROR_TYPE, IllegalStateException.class.getName()))));
123+
span -> {
124+
List<AttributeAssertion> attributes = new ArrayList<>();
125+
attributes.add(equalTo(URL_FULL, "https://s3.amazonaws.com"));
126+
attributes.add(equalTo(HTTP_REQUEST_METHOD, "HEAD"));
127+
attributes.add(equalTo(SERVER_ADDRESS, "s3.amazonaws.com"));
128+
attributes.add(rpcSystemAssertion("aws-api"));
129+
attributes.addAll(rpcMethodAssertions("Amazon S3", "HeadBucket"));
130+
attributes.add(equalTo(stringKey("aws.agent"), "java-aws-sdk"));
131+
attributes.add(equalTo(AWS_S3_BUCKET, "someBucket"));
132+
attributes.add(equalTo(ERROR_TYPE, IllegalStateException.class.getName()));
133+
134+
span.hasName("S3.HeadBucket")
135+
.hasKind(CLIENT)
136+
.hasStatus(StatusData.error())
137+
.hasException(caught)
138+
.hasNoParent()
139+
.hasAttributesSatisfyingExactly(attributes);
140+
}));
138141
}
139142

140143
@Test

0 commit comments

Comments
 (0)