1919import static org .junit .jupiter .api .Assertions .assertEquals ;
2020import static org .junit .jupiter .api .Assertions .assertFalse ;
2121import static org .junit .jupiter .api .Assertions .assertNotNull ;
22+ import static org .junit .jupiter .api .Assertions .assertNull ;
2223import static org .junit .jupiter .api .Assertions .assertTrue ;
2324import static org .junit .jupiter .api .Assertions .fail ;
2425
3031import com .google .cloud .bigquery .testing .RemoteBigQueryHelper ;
3132import io .opentelemetry .api .OpenTelemetry ;
3233import io .opentelemetry .api .common .AttributeKey ;
34+ import io .opentelemetry .api .trace .SpanKind ;
3335import io .opentelemetry .api .trace .Tracer ;
3436import io .opentelemetry .sdk .OpenTelemetrySdk ;
3537import io .opentelemetry .sdk .testing .exporter .InMemorySpanExporter ;
3638import io .opentelemetry .sdk .trace .SdkTracerProvider ;
3739import io .opentelemetry .sdk .trace .data .SpanData ;
40+ import io .opentelemetry .sdk .trace .data .StatusData ;
3841import io .opentelemetry .sdk .trace .export .SimpleSpanProcessor ;
3942import java .io .IOException ;
4043import java .util .List ;
@@ -86,12 +89,15 @@ public void testListDatasetsTraced() {
8689 for (SpanData span : spans ) {
8790 if (span .getName ().equals ("com.google.cloud.bigquery.BigQueryRpc.listDatasets" )) {
8891 foundRpcSpan = true ;
92+ assertEquals (SpanKind .CLIENT , span .getKind ());
93+ assertEquals (StatusData .unset (), span .getStatus ());
8994 Map <AttributeKey <?>, Object > attrs = span .getAttributes ().asMap ();
9095 checkGeneralAttributes (attrs );
9196 assertEquals ("GET" , attrs .get (HttpTracingRequestInitializer .HTTP_REQUEST_METHOD ));
9297 assertEquals ("DatasetService" , attrs .get (AttributeKey .stringKey ("bq.rpc.service" )));
9398 assertEquals ("ListDatasets" , attrs .get (AttributeKey .stringKey ("bq.rpc.method" )));
94- assertEquals ("bigquery.googleapis.com" , attrs .get (BigQueryTelemetryTracer .SERVER_ADDRESS ));
99+ assertEquals (
100+ "bigquery.googleapis.com" , attrs .get (HttpTracingRequestInitializer .SERVER_ADDRESS ));
95101 assertEquals (200L , attrs .get (HttpTracingRequestInitializer .HTTP_RESPONSE_STATUS_CODE ));
96102 assertEquals ("bigquery.googleapis.com" , attrs .get (BigQueryTelemetryTracer .URL_DOMAIN ));
97103 assertEquals (
@@ -102,6 +108,10 @@ public void testListDatasetsTraced() {
102108 attrs .get (BigQueryTelemetryTracer .GCP_RESOURCE_DESTINATION_ID ));
103109 assertEquals (
104110 "projects/{+projectId}/datasets" , attrs .get (BigQueryTelemetryTracer .URL_TEMPLATE ));
111+ assertNull (attrs .get (BigQueryTelemetryTracer .STATUS_MESSAGE ));
112+ assertNull (attrs .get (BigQueryTelemetryTracer .ERROR_TYPE ));
113+ assertNull (attrs .get (BigQueryTelemetryTracer .EXCEPTION_TYPE ));
114+ assertNull (attrs .get (HttpTracingRequestInitializer .HTTP_REQUEST_RESEND_COUNT ));
105115 }
106116 }
107117 assertTrue (foundRpcSpan , "Expected to find BigQueryRpc.listDatasets span" );
@@ -126,6 +136,8 @@ public void testGetDatasetNotFoundTraced() {
126136 for (SpanData span : spans ) {
127137 if (span .getName ().equals ("com.google.cloud.bigquery.BigQueryRpc.getDataset" )) {
128138 foundRpcSpan = true ;
139+ assertEquals (SpanKind .CLIENT , span .getKind ());
140+ assertEquals (StatusData .error (), span .getStatus ());
129141 Map <AttributeKey <?>, Object > attrs = span .getAttributes ().asMap ();
130142 checkGeneralAttributes (attrs );
131143 assertEquals ("GET" , attrs .get (HttpTracingRequestInitializer .HTTP_REQUEST_METHOD ));
@@ -138,7 +150,8 @@ public void testGetDatasetNotFoundTraced() {
138150 assertEquals (
139151 "https://bigquery.googleapis.com/bigquery/v2/projects/gcloud-devel/datasets/non_existent_dataset?prettyPrint=false" ,
140152 attrs .get (HttpTracingRequestInitializer .URL_FULL ));
141- assertEquals ("bigquery.googleapis.com" , attrs .get (BigQueryTelemetryTracer .SERVER_ADDRESS ));
153+ assertEquals (
154+ "bigquery.googleapis.com" , attrs .get (HttpTracingRequestInitializer .SERVER_ADDRESS ));
142155 assertEquals ("bigquery.googleapis.com" , attrs .get (BigQueryTelemetryTracer .URL_DOMAIN ));
143156 assertEquals (
144157 "//bigquery.googleapis.com/projects/gcloud-devel/datasets/non_existent_dataset" ,
@@ -155,7 +168,7 @@ public void testGetDatasetNotFoundTraced() {
155168 }
156169
157170 @ Test
158- public void testConnectionErrorRetriesTraced () {
171+ public void testClientErrorAndRetriesTraced () {
159172 // Pass invalid host to force connection error and retries
160173 BigQuery bq =
161174 bigqueryHelper .getOptions ().toBuilder ()
@@ -181,14 +194,16 @@ public void testConnectionErrorRetriesTraced() {
181194 for (SpanData span : spans ) {
182195 if (span .getName ().equals ("com.google.cloud.bigquery.BigQueryRpc.listDatasets" )) {
183196 rpcSpanCount ++;
197+ assertEquals (SpanKind .CLIENT , span .getKind ());
198+ assertEquals (StatusData .error ().getStatusCode (), span .getStatus ().getStatusCode ());
184199 Map <AttributeKey <?>, Object > attrs = span .getAttributes ().asMap ();
185200 checkGeneralAttributes (attrs );
186201 assertEquals (
187202 "https://invalid-host-name-12345.com:8080/bigquery/v2/projects/gcloud-devel/datasets?prettyPrint=false" ,
188203 (String ) attrs .get (HttpTracingRequestInitializer .URL_FULL ));
189204 assertEquals (
190- "invalid-host-name-12345.com" , attrs .get (BigQueryTelemetryTracer .SERVER_ADDRESS ));
191- assertEquals (8080L , attrs .get (BigQueryTelemetryTracer .SERVER_PORT ));
205+ "invalid-host-name-12345.com" , attrs .get (HttpTracingRequestInitializer .SERVER_ADDRESS ));
206+ assertEquals (8080L , attrs .get (HttpTracingRequestInitializer .SERVER_PORT ));
192207 assertEquals ("invalid-host-name-12345.com" , attrs .get (BigQueryTelemetryTracer .URL_DOMAIN ));
193208 assertEquals (
194209 "projects/{+projectId}/datasets" , attrs .get (BigQueryTelemetryTracer .URL_TEMPLATE ));
@@ -254,11 +269,26 @@ public void testSimultaneousCallsDoNotAffectResendCountForEachother() {
254269 assertEquals (5 , cancelJobSpanCount , "Expected 5 attempts total for cancelJob call" );
255270 }
256271
272+ @ Test
273+ public void testTracingDisabledNoSpansCollected () {
274+ BigQuery bq =
275+ bigqueryHelper .getOptions ().toBuilder ()
276+ .setEnableOpenTelemetryTracing (false )
277+ .setOpenTelemetryTracer (tracer )
278+ .build ()
279+ .getService ();
280+
281+ bq .listDatasets ();
282+
283+ List <SpanData > spans = memoryExporter .getFinishedSpanItems ();
284+ assertTrue (spans .isEmpty (), "Expected no spans to be collected when tracing is disabled" );
285+ }
286+
257287 private static void checkRetryAttribute (SpanData span , int listDataSpanCount ) {
258288 Map <AttributeKey <?>, Object > attrs = span .getAttributes ().asMap ();
259289 Long resendCount = (Long ) attrs .get (HttpTracingRequestInitializer .HTTP_REQUEST_RESEND_COUNT );
260290 if (listDataSpanCount == 1 ) {
261- assertTrue (resendCount == null || resendCount == 0 );
291+ assertNull (resendCount , "Expected no resend count for first attempt" );
262292 } else {
263293 assertNotNull (resendCount , "Expected resend count for retry attempt " + listDataSpanCount );
264294 assertEquals ((long ) (listDataSpanCount - 1 ), resendCount .longValue ());
@@ -275,9 +305,6 @@ private void checkGeneralAttributes(Map<AttributeKey<?>, Object> attrs) {
275305 assertEquals (
276306 BigQueryTelemetryTracer .BQ_GCP_CLIENT_REPO ,
277307 attrs .get (BigQueryTelemetryTracer .GCP_CLIENT_REPO ));
278- assertEquals (
279- BigQueryTelemetryTracer .BQ_GCP_CLIENT_LANGUAGE ,
280- attrs .get (BigQueryTelemetryTracer .GCP_CLIENT_LANGUAGE ));
281308 assertEquals (
282309 BigQueryTelemetryTracer .BQ_GCP_CLIENT_ARTIFACT ,
283310 attrs .get (BigQueryTelemetryTracer .GCP_CLIENT_ARTIFACT ));
0 commit comments