Skip to content

Commit ac5eac2

Browse files
committed
test: add unit tests for TracedUnaryCallable extraction
1 parent 8cd6296 commit ac5eac2

2 files changed

Lines changed: 39 additions & 7 deletions

File tree

gax-java/gax/src/main/java/com/google/api/gax/tracing/TracedUnaryCallable.java

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import com.google.api.gax.rpc.ResourceNameExtractor;
3838
import com.google.api.gax.rpc.UnaryCallable;
3939
import com.google.api.gax.tracing.ApiTracerFactory.OperationType;
40+
import com.google.common.annotations.VisibleForTesting;
4041
import com.google.common.base.Strings;
4142
import com.google.common.util.concurrent.MoreExecutors;
4243
import javax.annotation.Nullable;
@@ -96,13 +97,7 @@ public TracedUnaryCallable(
9697
public ApiFuture<ResponseT> futureCall(RequestT request, ApiCallContext context) {
9798
ApiTracer tracer;
9899
if (apiTracerContext != null) {
99-
ApiTracerContext finalContext = apiTracerContext;
100-
// Extract the resource name early
101-
String resourceName =
102-
resourceNameExtractor != null ? resourceNameExtractor.extract(request) : null;
103-
if (!Strings.isNullOrEmpty(resourceName)) {
104-
finalContext = finalContext.toBuilder().setDestinationResourceId(resourceName).build();
105-
}
100+
ApiTracerContext finalContext = extractResourceNameToApiTracerContext(request);
106101
tracer = tracerFactory.newTracer(context.getTracer(), finalContext);
107102
} else {
108103
tracer = tracerFactory.newTracer(context.getTracer(), spanName, OperationType.Unary);
@@ -120,4 +115,16 @@ public ApiFuture<ResponseT> futureCall(RequestT request, ApiCallContext context)
120115
throw e;
121116
}
122117
}
118+
119+
@VisibleForTesting
120+
ApiTracerContext extractResourceNameToApiTracerContext(RequestT request) {
121+
ApiTracerContext finalContext = apiTracerContext;
122+
// Extract the resource name early
123+
String resourceName =
124+
resourceNameExtractor != null ? resourceNameExtractor.extract(request) : null;
125+
if (!Strings.isNullOrEmpty(resourceName)) {
126+
finalContext = finalContext.toBuilder().setDestinationResourceId(resourceName).build();
127+
}
128+
return finalContext;
129+
}
123130
}

gax-java/gax/src/test/java/com/google/api/gax/tracing/TracedUnaryCallableTest.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,4 +206,29 @@ void testResourceNameExtractorUsed() {
206206
assertThat(contextCaptor.getValue().destinationResourceId())
207207
.isEqualTo("extracted-resource-name");
208208
}
209+
210+
@Test
211+
void testExtractResourceNameToApiTracerContext_nullExtractor() {
212+
tracedUnaryCallable = new TracedUnaryCallable<>(innerCallable, tracerFactory, TRACER_CONTEXT);
213+
ApiTracerContext context = tracedUnaryCallable.extractResourceNameToApiTracerContext("request");
214+
assertThat(context).isEqualTo(TRACER_CONTEXT);
215+
}
216+
217+
@Test
218+
void testExtractResourceNameToApiTracerContext_extractorReturnsNull() {
219+
tracedUnaryCallable =
220+
new TracedUnaryCallable<>(innerCallable, tracerFactory, TRACER_CONTEXT, request -> null);
221+
ApiTracerContext context = tracedUnaryCallable.extractResourceNameToApiTracerContext("request");
222+
assertThat(context).isEqualTo(TRACER_CONTEXT);
223+
}
224+
225+
@Test
226+
void testExtractResourceNameToApiTracerContext_extractorReturnsResourceId() {
227+
tracedUnaryCallable =
228+
new TracedUnaryCallable<>(
229+
innerCallable, tracerFactory, TRACER_CONTEXT, request -> "extracted-id");
230+
ApiTracerContext context = tracedUnaryCallable.extractResourceNameToApiTracerContext("request");
231+
assertThat(context).isNotSameInstanceAs(TRACER_CONTEXT);
232+
assertThat(context.destinationResourceId()).isEqualTo("extracted-id");
233+
}
209234
}

0 commit comments

Comments
 (0)