Skip to content

Commit 897b99e

Browse files
committed
test(o11y): expand coverage and cleanup of ITOtelTracing
1 parent 4b5e8af commit 897b99e

File tree

1 file changed

+159
-48
lines changed
  • sdk-platform-java/java-showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it

1 file changed

+159
-48
lines changed

sdk-platform-java/java-showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITOtelTracing.java

Lines changed: 159 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@
5252
import com.google.showcase.v1beta1.EchoRequest;
5353
import com.google.showcase.v1beta1.EchoResponse;
5454
import com.google.showcase.v1beta1.EchoSettings;
55+
import com.google.showcase.v1beta1.GetUserRequest;
56+
import com.google.showcase.v1beta1.IdentityClient;
5557
import com.google.showcase.v1beta1.it.util.TestClientInitializer;
5658
import com.google.showcase.v1beta1.stub.EchoStub;
5759
import com.google.showcase.v1beta1.stub.EchoStubSettings;
@@ -152,6 +154,16 @@ void testTracing_successfulEcho_grpc() throws Exception {
152154
assertThat(
153155
attemptSpan
154156
.getAttributes()
157+
.get(AttributeKey.stringKey(ObservabilityAttributes.RPC_SYSTEM_NAME_ATTRIBUTE)))
158+
.isEqualTo("grpc");
159+
assertThat(
160+
attemptSpan
161+
.getAttributes()
162+
.get(AttributeKey.stringKey(ObservabilityAttributes.RPC_RESPONSE_STATUS_ATTRIBUTE)))
163+
.isEqualTo("OK");
164+
assertThat(
165+
attemptSpan
166+
.getAttributes()
155167
.get(AttributeKey.stringKey(ObservabilityAttributes.REPO_ATTRIBUTE)))
156168
.isEqualTo(SHOWCASE_REPO);
157169
assertThat(
@@ -223,6 +235,16 @@ void testTracing_successfulEcho_httpjson() throws Exception {
223235
assertThat(
224236
attemptSpan
225237
.getAttributes()
238+
.get(AttributeKey.stringKey(ObservabilityAttributes.RPC_SYSTEM_NAME_ATTRIBUTE)))
239+
.isEqualTo("http");
240+
assertThat(
241+
attemptSpan
242+
.getAttributes()
243+
.get(AttributeKey.longKey(ObservabilityAttributes.HTTP_RESPONSE_STATUS_ATTRIBUTE)))
244+
.isEqualTo(200L);
245+
assertThat(
246+
attemptSpan
247+
.getAttributes()
226248
.get(AttributeKey.stringKey(ObservabilityAttributes.REPO_ATTRIBUTE)))
227249
.isEqualTo(SHOWCASE_REPO);
228250
assertThat(
@@ -274,6 +296,66 @@ private long computeExpectedHttpJsonResponseSize(Message message)
274296
return jsonPayload.getBytes(StandardCharsets.UTF_8).length;
275297
}
276298

299+
@Test
300+
void testTracing_successfulIdentityGetUser_grpc() throws Exception {
301+
SpanTracerFactory tracingFactory = new SpanTracerFactory(openTelemetrySdk);
302+
303+
try (IdentityClient client = TestClientInitializer.createGrpcIdentityClientOpentelemetry(tracingFactory)) {
304+
305+
try {
306+
client.getUser(GetUserRequest.newBuilder().setName("users/test-user").build());
307+
} catch (Exception e) {
308+
// Ignored, the showcase server may not have this user, but trace is still
309+
// generated.
310+
}
311+
312+
List<SpanData> spans = spanExporter.getFinishedSpanItems();
313+
assertThat(spans).isNotEmpty();
314+
315+
SpanData attemptSpan = spans.stream()
316+
.filter(span -> span.getName().equals("google.showcase.v1beta1.Identity/GetUser"))
317+
.findFirst()
318+
.orElseThrow(() -> new AssertionError("Incorrect span name"));
319+
assertThat(
320+
attemptSpan
321+
.getAttributes()
322+
.get(
323+
AttributeKey.stringKey(
324+
ObservabilityAttributes.DESTINATION_RESOURCE_ID_ATTRIBUTE)))
325+
.isEqualTo("users/test-user");
326+
}
327+
}
328+
329+
@Test
330+
void testTracing_successfulIdentityGetUser_httpjson() throws Exception {
331+
SpanTracerFactory tracingFactory = new SpanTracerFactory(openTelemetrySdk);
332+
333+
try (IdentityClient client = TestClientInitializer.createHttpJsonIdentityClientOpentelemetry(tracingFactory)) {
334+
335+
try {
336+
client.getUser(GetUserRequest.newBuilder().setName("users/test-user").build());
337+
} catch (Exception e) {
338+
// Ignored, the showcase server may not have this user, but trace is still
339+
// generated.
340+
}
341+
342+
List<SpanData> spans = spanExporter.getFinishedSpanItems();
343+
assertThat(spans).isNotEmpty();
344+
345+
SpanData attemptSpan = spans.stream()
346+
.filter(span -> span.getName().equals("GET v1beta1/{name=users/*}"))
347+
.findFirst()
348+
.orElseThrow(() -> new AssertionError("Incorrect span name"));
349+
assertThat(
350+
attemptSpan
351+
.getAttributes()
352+
.get(
353+
AttributeKey.stringKey(
354+
ObservabilityAttributes.DESTINATION_RESOURCE_ID_ATTRIBUTE)))
355+
.isEqualTo("users/test-user");
356+
}
357+
}
358+
277359
@Test
278360
void testTracing_retry_grpc() throws Exception {
279361
final int attempts = 5;
@@ -424,7 +506,7 @@ void testTracing_retry_httpjson() throws Exception {
424506
assertThat(resendCounts).containsExactlyElementsIn(expectedCounts).inOrder();
425507
}
426508

427-
private void verifyErrorTypeAttribute(String expectedErrorType) {
509+
private SpanData getErrorAttribute() {
428510
List<SpanData> spans = spanExporter.getFinishedSpanItems();
429511
assertThat(spans).isNotEmpty();
430512

@@ -439,16 +521,11 @@ private void verifyErrorTypeAttribute(String expectedErrorType) {
439521
!= null)
440522
.findFirst()
441523
.orElseThrow(() -> new AssertionError("Span with error.type not found"));
442-
443-
assertThat(
444-
errorSpan
445-
.getAttributes()
446-
.get(AttributeKey.stringKey(ObservabilityAttributes.ERROR_TYPE_ATTRIBUTE)))
447-
.isEqualTo(expectedErrorType);
524+
return errorSpan;
448525
}
449526

450527
@Test
451-
void testTracing_failedEcho_grpc_recordsErrorType() throws Exception {
528+
void testTracing_failedEcho_grpc_recordsErrorAttributes() throws Exception {
452529
SpanTracerFactory tracingFactory = new SpanTracerFactory(openTelemetrySdk);
453530

454531
ClientInterceptor interceptor =
@@ -490,52 +567,28 @@ public void sendMessage(ReqT message) {}
490567
EchoRequest echoRequest = EchoRequest.newBuilder().build();
491568

492569
assertThrows(UnavailableException.class, () -> client.echo(echoRequest));
493-
verifyErrorTypeAttribute("UNAVAILABLE");
494-
}
495-
}
496-
@Test
497-
void testTracing_statusCodes_grpc() throws Exception {
498-
SpanTracerFactory tracingFactory = new SpanTracerFactory(openTelemetrySdk);
499-
EchoRequest errorRequest =
500-
EchoRequest.newBuilder()
501-
.setError(
502-
Status.newBuilder().setCode(StatusCode.Code.INVALID_ARGUMENT.ordinal()).build())
503-
.build();
504-
EchoRequest successRequest = EchoRequest.newBuilder().setContent("tracing-test").build();
505-
506-
try (EchoClient grpcClient =
507-
TestClientInitializer.createGrpcEchoClientOpentelemetry(tracingFactory)) {
508-
509-
grpcClient.echo(successRequest);
510-
assertThrows(
511-
com.google.api.gax.rpc.InvalidArgumentException.class,
512-
() -> grpcClient.echo(errorRequest));
513-
514-
List<SpanData> spans = spanExporter.getFinishedSpanItems();
515-
assertThat(spans).hasSize(2);
516-
517-
SpanData grpcSuccessSpan = spans.get(0);
570+
SpanData errorSpan = getErrorAttribute();
571+
assertThat(
572+
errorSpan
573+
.getAttributes()
574+
.get(AttributeKey.stringKey(ObservabilityAttributes.ERROR_TYPE_ATTRIBUTE)))
575+
.isEqualTo("UNAVAILABLE");
518576
assertThat(
519-
grpcSuccessSpan
577+
errorSpan
520578
.getAttributes()
521579
.get(
522-
AttributeKey.stringKey(
523-
ObservabilityAttributes.RPC_RESPONSE_STATUS_ATTRIBUTE)))
524-
.isEqualTo("OK");
525-
526-
SpanData grpcErrorSpan = spans.get(1);
580+
AttributeKey.stringKey(ObservabilityAttributes.EXCEPTION_TYPE_ATTRIBUTE)))
581+
.isEqualTo("com.google.api.gax.rpc.UnavailableException");
527582
assertThat(
528-
grpcErrorSpan
583+
errorSpan
529584
.getAttributes()
530585
.get(
531-
AttributeKey.stringKey(
532-
ObservabilityAttributes.RPC_RESPONSE_STATUS_ATTRIBUTE)))
533-
.isEqualTo("INVALID_ARGUMENT");
534-
}
535-
}
536-
586+
AttributeKey.stringKey(ObservabilityAttributes.STATUS_MESSAGE_ATTRIBUTE)))
587+
.isEqualTo("io.grpc.StatusRuntimeException: UNAVAILABLE");
588+
}
589+
}
537590
@Test
538-
void testTracing_failedEcho_httpjson_recordsErrorType() throws Exception {
591+
void testTracing_failedEcho_httpjson_recordsErrorAttributes() throws Exception {
539592
SpanTracerFactory tracingFactory = new SpanTracerFactory(openTelemetrySdk);
540593

541594
HttpTransport mockTransport =
@@ -625,9 +678,67 @@ public String getHeaderValue(int index) {
625678
EchoRequest echoRequest = EchoRequest.newBuilder().build();
626679

627680
assertThrows(UnavailableException.class, () -> client.echo(echoRequest));
628-
verifyErrorTypeAttribute("503");
681+
SpanData errorSpan = getErrorAttribute();
682+
assertThat(
683+
errorSpan
684+
.getAttributes()
685+
.get(AttributeKey.stringKey(ObservabilityAttributes.ERROR_TYPE_ATTRIBUTE)))
686+
.isEqualTo("503");
687+
assertThat(
688+
errorSpan
689+
.getAttributes()
690+
.get(
691+
AttributeKey.stringKey(ObservabilityAttributes.EXCEPTION_TYPE_ATTRIBUTE)))
692+
.isEqualTo("com.google.api.gax.rpc.UnavailableException");
693+
assertThat(
694+
errorSpan
695+
.getAttributes()
696+
.get(
697+
AttributeKey.stringKey(ObservabilityAttributes.STATUS_MESSAGE_ATTRIBUTE)))
698+
.isEqualTo("Service Unavailable");
629699
}
630700
}
701+
702+
@Test
703+
void testTracing_statusCodes_grpc() throws Exception {
704+
SpanTracerFactory tracingFactory = new SpanTracerFactory(openTelemetrySdk);
705+
EchoRequest errorRequest = EchoRequest.newBuilder()
706+
.setError(
707+
Status.newBuilder().setCode(StatusCode.Code.INVALID_ARGUMENT.ordinal()).build())
708+
.build();
709+
EchoRequest successRequest = EchoRequest.newBuilder().setContent("tracing-test").build();
710+
711+
try (EchoClient grpcClient = TestClientInitializer.createGrpcEchoClientOpentelemetry(tracingFactory)) {
712+
713+
grpcClient.echo(successRequest);
714+
assertThrows(
715+
com.google.api.gax.rpc.InvalidArgumentException.class,
716+
() -> grpcClient.echo(errorRequest));
717+
718+
List<SpanData> spans = spanExporter.getFinishedSpanItems();
719+
assertThat(spans).hasSize(2);
720+
721+
SpanData grpcSuccessSpan = spans.get(0);
722+
assertThat(
723+
grpcSuccessSpan
724+
.getAttributes()
725+
.get(
726+
AttributeKey.stringKey(
727+
ObservabilityAttributes.RPC_RESPONSE_STATUS_ATTRIBUTE)))
728+
.isEqualTo("OK");
729+
730+
SpanData grpcErrorSpan = spans.get(1);
731+
assertThat(
732+
grpcErrorSpan
733+
.getAttributes()
734+
.get(
735+
AttributeKey.stringKey(
736+
ObservabilityAttributes.RPC_RESPONSE_STATUS_ATTRIBUTE)))
737+
.isEqualTo("INVALID_ARGUMENT");
738+
}
739+
}
740+
741+
@Test
631742
void testTracing_statusCodes_httpjson() throws Exception {
632743
SpanTracerFactory tracingFactory = new SpanTracerFactory(openTelemetrySdk);
633744
EchoRequest errorRequest =

0 commit comments

Comments
 (0)