Skip to content

Commit 3b6cd92

Browse files
committed
fix: add null checks for ApiTracerFactory in ClientContext
1 parent d9b39ed commit 3b6cd92

2 files changed

Lines changed: 40 additions & 1 deletion

File tree

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,13 @@ public static ClientContext create(StubSettings settings) throws IOException {
274274
ApiTracerContext.newBuilder()
275275
.setServerAddress(endpointContext.resolvedServerAddress())
276276
.build();
277-
ApiTracerFactory apiTracerFactory = settings.getTracerFactory().withContext(apiTracerContext);
277+
ApiTracerFactory apiTracerFactory = settings.getTracerFactory();
278+
if (apiTracerFactory != null) {
279+
apiTracerFactory = apiTracerFactory.withContext(apiTracerContext);
280+
}
281+
if (apiTracerFactory == null) {
282+
apiTracerFactory = BaseApiTracerFactory.getInstance();
283+
}
278284

279285
return newBuilder()
280286
.setBackgroundResources(backgroundResources.build())

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

Lines changed: 33 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.BaseApiTracerFactory;
5658
import com.google.auth.ApiKeyCredentials;
5759
import com.google.auth.CredentialTypeForMetrics;
5860
import com.google.auth.Credentials;
@@ -1287,4 +1289,35 @@ void test_nullMtlsEndpointIsNotPassedToTransportChannel() throws IOException {
12871289
// is not passed to the TransportChannelProvider
12881290
ClientContext.create(clientSettings);
12891291
}
1292+
1293+
@Test
1294+
void testCreate_withNullTracerFactory() throws IOException {
1295+
FakeStubSettings.Builder builder = FakeStubSettings.newBuilder();
1296+
builder.setTransportChannelProvider(getFakeTransportChannelProvider());
1297+
builder.setCredentialsProvider(
1298+
FixedCredentialsProvider.create(Mockito.mock(Credentials.class)));
1299+
1300+
FakeStubSettings settings = Mockito.spy(builder.build());
1301+
Mockito.doReturn(null).when(settings).getTracerFactory();
1302+
1303+
ClientContext context = ClientContext.create(settings);
1304+
assertThat(context.getTracerFactory()).isSameInstanceAs(BaseApiTracerFactory.getInstance());
1305+
}
1306+
1307+
@Test
1308+
void testCreate_withTracerFactoryReturningNullWithContext() throws IOException {
1309+
FakeStubSettings.Builder builder = FakeStubSettings.newBuilder();
1310+
builder.setTransportChannelProvider(getFakeTransportChannelProvider());
1311+
builder.setCredentialsProvider(
1312+
FixedCredentialsProvider.create(Mockito.mock(Credentials.class)));
1313+
1314+
ApiTracerFactory apiTracerFactory = Mockito.mock(ApiTracerFactory.class);
1315+
Mockito.doReturn(null).when(apiTracerFactory).withContext(Mockito.any());
1316+
1317+
FakeStubSettings settings = Mockito.spy(builder.build());
1318+
Mockito.doReturn(apiTracerFactory).when(settings).getTracerFactory();
1319+
1320+
ClientContext context = ClientContext.create(settings);
1321+
assertThat(context.getTracerFactory()).isSameInstanceAs(BaseApiTracerFactory.getInstance());
1322+
}
12901323
}

0 commit comments

Comments
 (0)