Skip to content

Commit 4b3dbe2

Browse files
fix: add null checks for ApiTracerFactory in ClientContext (googleapis#4122)
1 parent 4206e6e commit 4b3dbe2

File tree

2 files changed

+25
-1
lines changed

2 files changed

+25
-1
lines changed

gax-java/gax/src/main/java/com/google/api/gax/rpc/ClientContext.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
import com.google.api.gax.tracing.ApiTracerContext;
4545
import com.google.api.gax.tracing.ApiTracerFactory;
4646
import com.google.api.gax.tracing.BaseApiTracerFactory;
47+
import com.google.api.gax.tracing.SpanTracerFactory;
4748
import com.google.auth.ApiKeyCredentials;
4849
import com.google.auth.CredentialTypeForMetrics;
4950
import com.google.auth.Credentials;
@@ -275,7 +276,10 @@ public static ClientContext create(StubSettings settings) throws IOException {
275276
.setServerAddress(endpointContext.resolvedServerAddress())
276277
.setLibraryMetadata(settings.getLibraryMetadata())
277278
.build();
278-
ApiTracerFactory apiTracerFactory = settings.getTracerFactory().withContext(apiTracerContext);
279+
ApiTracerFactory apiTracerFactory = settings.getTracerFactory();
280+
if (apiTracerFactory instanceof SpanTracerFactory) {
281+
apiTracerFactory = apiTracerFactory.withContext(apiTracerContext);
282+
}
279283

280284
return newBuilder()
281285
.setBackgroundResources(backgroundResources.build())

gax-java/gax/src/test/java/com/google/api/gax/rpc/ClientContextTest.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@
5353
import com.google.api.gax.rpc.testing.FakeClientSettings;
5454
import com.google.api.gax.rpc.testing.FakeStubSettings;
5555
import com.google.api.gax.rpc.testing.FakeTransportChannel;
56+
import com.google.api.gax.tracing.ApiTracerFactory;
57+
import com.google.api.gax.tracing.SpanTracerFactory;
5658
import com.google.auth.ApiKeyCredentials;
5759
import com.google.auth.CredentialTypeForMetrics;
5860
import com.google.auth.Credentials;
@@ -1287,4 +1289,22 @@ void test_nullMtlsEndpointIsNotPassedToTransportChannel() throws IOException {
12871289
// is not passed to the TransportChannelProvider
12881290
ClientContext.create(clientSettings);
12891291
}
1292+
1293+
@Test
1294+
void testCreate_withTracerFactoryReturningNullWithContext() throws IOException {
1295+
FakeStubSettings.Builder builder = FakeStubSettings.newBuilder();
1296+
builder.setTransportChannelProvider(getFakeTransportChannelProvider());
1297+
builder.setCredentialsProvider(
1298+
FixedCredentialsProvider.create(Mockito.mock(Credentials.class)));
1299+
1300+
ApiTracerFactory apiTracerFactory = Mockito.mock(SpanTracerFactory.class);
1301+
Mockito.doReturn(apiTracerFactory).when(apiTracerFactory).withContext(Mockito.any());
1302+
1303+
FakeStubSettings settings = Mockito.spy(builder.build());
1304+
Mockito.doReturn(apiTracerFactory).when(settings).getTracerFactory();
1305+
1306+
ClientContext context = ClientContext.create(settings);
1307+
assertThat(context.getTracerFactory()).isSameInstanceAs(apiTracerFactory);
1308+
verify(apiTracerFactory, times(1)).withContext(Mockito.any());
1309+
}
12901310
}

0 commit comments

Comments
 (0)