4848import com .google .showcase .v1beta1 .EchoRequest ;
4949import com .google .showcase .v1beta1 .EchoResponse ;
5050import com .google .showcase .v1beta1 .EchoSettings ;
51- import com .google .showcase .v1beta1 .it .util .TestClientInitializer ;
5251import com .google .showcase .v1beta1 .stub .EchoStub ;
5352import com .google .showcase .v1beta1 .stub .EchoStubSettings ;
53+ import io .grpc .ManagedChannelBuilder ;
5454import io .opentelemetry .api .GlobalOpenTelemetry ;
5555import io .opentelemetry .api .common .AttributeKey ;
5656import io .opentelemetry .api .trace .SpanKind ;
5959import io .opentelemetry .sdk .trace .SdkTracerProvider ;
6060import io .opentelemetry .sdk .trace .data .SpanData ;
6161import io .opentelemetry .sdk .trace .export .SimpleSpanProcessor ;
62+ import java .io .IOException ;
6263import java .nio .charset .StandardCharsets ;
6364import java .util .List ;
6465import org .junit .jupiter .api .AfterEach ;
6869class ITOtelTracing {
6970 private static final String SHOWCASE_SERVER_ADDRESS = "localhost" ;
7071 private static final long SHOWCASE_SERVER_PORT = 7469 ;
72+ private static final String SHOWCASE_GRPC_ENDPOINT =
73+ String .format ("%s:%s" , SHOWCASE_SERVER_ADDRESS , SHOWCASE_SERVER_PORT );
74+ private static final String SHOWCASE_HTTPJSON_ENDPOINT =
75+ String .format ("http://%s:%s" , SHOWCASE_SERVER_ADDRESS , SHOWCASE_SERVER_PORT );
7176 private static final String SHOWCASE_REPO = "googleapis/sdk-platform-java" ;
7277 private static final String SHOWCASE_ARTIFACT = "com.google.cloud:gapic-showcase" ;
7378 private static final String SHOWCASE_USER_URL = "http://localhost:7469/v1beta1/echo:echo" ;
@@ -100,8 +105,11 @@ void tearDown() {
100105 void testTracing_successfulEcho_grpc () throws Exception {
101106 SpanTracerFactory tracingFactory = new SpanTracerFactory (openTelemetrySdk );
102107
103- try (EchoClient client =
104- TestClientInitializer .createGrpcEchoClientOpentelemetry (tracingFactory )) {
108+ EchoSettings grpcEchoSettings = createEchoSettings (false );
109+
110+ EchoStub stub = createStubWithServiceName (grpcEchoSettings , tracingFactory );
111+
112+ try (EchoClient client = EchoClient .create (stub )) {
105113
106114 client .echo (EchoRequest .newBuilder ().setContent ("tracing-test" ).build ());
107115
@@ -144,6 +152,12 @@ void testTracing_successfulEcho_grpc() throws Exception {
144152 .getAttributes ()
145153 .get (AttributeKey .stringKey (ObservabilityAttributes .RPC_SYSTEM_NAME_ATTRIBUTE )))
146154 .isEqualTo ("grpc" );
155+ assertThat (
156+ attemptSpan
157+ .getAttributes ()
158+ .get (
159+ AttributeKey .stringKey (ObservabilityAttributes .GCP_CLIENT_SERVICE_ATTRIBUTE )))
160+ .isEqualTo ("showcase" );
147161 assertThat (
148162 attemptSpan
149163 .getAttributes ()
@@ -158,8 +172,11 @@ void testTracing_successfulEcho_grpc() throws Exception {
158172 void testTracing_successfulEcho_httpjson () throws Exception {
159173 SpanTracerFactory tracingFactory = new SpanTracerFactory (openTelemetrySdk );
160174
161- try (EchoClient client =
162- TestClientInitializer .createHttpJsonEchoClientOpentelemetry (tracingFactory )) {
175+ EchoSettings httpJsonEchoSettings = createEchoSettings (true );
176+
177+ EchoStub stub = createStubWithServiceName (httpJsonEchoSettings , tracingFactory );
178+
179+ try (EchoClient client = EchoClient .create (stub )) {
163180
164181 client .echo (EchoRequest .newBuilder ().setContent ("tracing-test" ).build ());
165182
@@ -198,6 +215,12 @@ void testTracing_successfulEcho_httpjson() throws Exception {
198215 .getAttributes ()
199216 .get (AttributeKey .stringKey (ObservabilityAttributes .ARTIFACT_ATTRIBUTE )))
200217 .isEqualTo (SHOWCASE_ARTIFACT );
218+ assertThat (
219+ attemptSpan
220+ .getAttributes ()
221+ .get (
222+ AttributeKey .stringKey (ObservabilityAttributes .GCP_CLIENT_SERVICE_ATTRIBUTE )))
223+ .isEqualTo ("showcase" );
201224 assertThat (
202225 attemptSpan
203226 .getAttributes ()
@@ -257,7 +280,7 @@ void testTracing_retry_grpc() throws Exception {
257280 grpcEchoSettings .toBuilder ()
258281 .setCredentialsProvider (NoCredentialsProvider .create ())
259282 .setTransportChannelProvider (EchoSettings .defaultGrpcTransportProviderBuilder ().build ())
260- .setEndpoint ("localhost:7469" )
283+ .setEndpoint (SHOWCASE_GRPC_ENDPOINT )
261284 .build ();
262285
263286 SpanTracerFactory tracingFactory = new SpanTracerFactory (openTelemetrySdk );
@@ -332,7 +355,7 @@ void testTracing_retry_httpjson() throws Exception {
332355 EchoSettings .defaultHttpJsonTransportProviderBuilder ()
333356 .setHttpTransport (
334357 new NetHttpTransport .Builder ().doNotValidateCertificate ().build ())
335- .setEndpoint ("http://localhost:7469" )
358+ .setEndpoint (SHOWCASE_HTTPJSON_ENDPOINT )
336359 .build ())
337360 .build ();
338361
@@ -380,4 +403,47 @@ void testTracing_retry_httpjson() throws Exception {
380403 .collect (java .util .stream .Collectors .toList ());
381404 assertThat (resendCounts ).containsExactlyElementsIn (expectedCounts ).inOrder ();
382405 }
406+
407+ private EchoSettings createEchoSettings (boolean isHttpJson ) throws Exception {
408+ if (isHttpJson ) {
409+ return EchoSettings .newHttpJsonBuilder ()
410+ .setCredentialsProvider (NoCredentialsProvider .create ())
411+ .setTransportChannelProvider (
412+ EchoSettings .defaultHttpJsonTransportProviderBuilder ()
413+ .setHttpTransport (
414+ new NetHttpTransport .Builder ().doNotValidateCertificate ().build ())
415+ .build ())
416+ .setEndpoint (SHOWCASE_HTTPJSON_ENDPOINT )
417+ .build ();
418+ } else {
419+ return EchoSettings .newBuilder ()
420+ .setCredentialsProvider (NoCredentialsProvider .create ())
421+ .setTransportChannelProvider (
422+ EchoSettings .defaultGrpcTransportProviderBuilder ()
423+ .setChannelConfigurator (ManagedChannelBuilder ::usePlaintext )
424+ .build ())
425+ .setEndpoint (SHOWCASE_GRPC_ENDPOINT )
426+ .build ();
427+ }
428+ }
429+
430+ private EchoStub createStubWithServiceName (
431+ EchoSettings settings , SpanTracerFactory tracingFactory ) throws IOException {
432+ EchoStubSettings .Builder builder =
433+ (EchoStubSettings .Builder ) settings .getStubSettings ().toBuilder ();
434+ builder .setTracerFactory (tracingFactory );
435+ return new ExtendedEchoStubSettings (builder ).createStub ();
436+ }
437+
438+ /** Custom wrapper to set a service name for showcase clients, which lack one by default. */
439+ private static class ExtendedEchoStubSettings extends EchoStubSettings {
440+ protected ExtendedEchoStubSettings (EchoStubSettings .Builder builder ) throws IOException {
441+ super (builder );
442+ }
443+
444+ @ Override
445+ public String getServiceName () {
446+ return "showcase" ;
447+ }
448+ }
383449}
0 commit comments