Skip to content

Commit 1c338aa

Browse files
committed
fix(java-showcase): Fix ITActionableErrorsLogging environment variable and classpath
1 parent c958a7f commit 1c338aa

File tree

2 files changed

+85
-29
lines changed

2 files changed

+85
-29
lines changed

sdk-platform-java/java-showcase/gapic-showcase/pom.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -452,6 +452,13 @@
452452
<additionalClasspathElements>
453453
<additionalClasspathElement>${project.basedir}/src/test/slf4j-test-provider</additionalClasspathElement>
454454
</additionalClasspathElements>
455+
<classpathDependencyExcludes>
456+
<classpathDependencyExclude>ch.qos.logback:logback-classic</classpathDependencyExclude>
457+
<classpathDependencyExclude>ch.qos.logback:logback-core</classpathDependencyExclude>
458+
</classpathDependencyExcludes>
459+
<environmentVariables>
460+
<GOOGLE_SDK_JAVA_LOGGING>true</GOOGLE_SDK_JAVA_LOGGING>
461+
</environmentVariables>
455462
</configuration>
456463
</plugin>
457464
</plugins>

sdk-platform-java/java-showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/logging/ITActionableErrorsLogging.java

Lines changed: 78 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -92,32 +92,7 @@ private EchoRequest buildErrorRequest() {
9292
}
9393

9494
@Test
95-
void testGrpc_actionableErrorLogged() {
96-
EchoRequest request = buildErrorRequest();
97-
98-
assertThrows(ApiException.class, () -> grpcClient.echo(request));
99-
100-
assertThat(testLogger.getMessageList().size()).isAtLeast(1);
101-
String loggedMessage = testLogger.getMessageList().get(testLogger.getMessageList().size() - 1);
102-
103-
assertThat(loggedMessage).contains("This is a test error");
104-
105-
Map<String, Object> kvps = testLogger.getKeyValuePairsMap();
106-
assertThat(kvps).containsEntry("rpc.system.name", "grpc");
107-
assertThat(kvps).containsEntry("rpc.method", "google.showcase.v1beta1.Echo/Echo");
108-
assertThat(kvps).containsEntry("rpc.response.status_code", "INVALID_ARGUMENT");
109-
assertThat(kvps).containsEntry("error.type", "TEST_REASON");
110-
assertThat(kvps).containsEntry("gcp.errors.domain", "test.googleapis.com");
111-
assertThat(kvps).containsEntry("gcp.errors.metadata.test_metadata", "test_value");
112-
}
113-
114-
@Test
115-
void testHttpJson_actionableErrorLogged() throws Exception {
116-
// The gapic-showcase server currently returns text/plain for failEchoWithDetails instead of
117-
// JSON.
118-
// Additionally, sending an ErrorInfo in a request over REST fails serialization.
119-
// To test HTTP JSON actionable errors logic, we use a MockHttpTransport that simulates the
120-
// correct JSON format.
95+
void testHttpJson_logEmittedForLowLevelRequestFailure() throws Exception {
12196
MockHttpTransport mockTransport =
12297
new MockHttpTransport() {
12398
@Override
@@ -170,7 +145,6 @@ public LowLevelHttpResponse execute() throws IOException {
170145
EchoClient mockHttpJsonClient = EchoClient.create(stub);
171146

172147
EchoRequest request = EchoRequest.newBuilder().build();
173-
174148
assertThrows(ApiException.class, () -> mockHttpJsonClient.echo(request));
175149

176150
assertThat(testLogger.getMessageList().size()).isAtLeast(1);
@@ -188,7 +162,82 @@ public LowLevelHttpResponse execute() throws IOException {
188162
assertThat(kvps).containsEntry("gcp.errors.metadata.mock_key", "mock_value");
189163

190164
mockHttpJsonClient.close();
191-
mockHttpJsonClient.awaitTermination(
192-
TestClientInitializer.AWAIT_TERMINATION_SECONDS, TimeUnit.SECONDS);
165+
mockHttpJsonClient.awaitTermination(TestClientInitializer.AWAIT_TERMINATION_SECONDS, TimeUnit.SECONDS);
166+
}
167+
168+
@Test
169+
void testHttpJson_noLogEmittedForSuccess() {
170+
EchoRequest request = EchoRequest.newBuilder().setContent("Success").build();
171+
httpjsonClient.echo(request);
172+
assertThat(testLogger.getMessageList().size()).isEqualTo(0);
173+
}
174+
175+
@Test
176+
void testHttpJson_clientLevelFailureAttributes() throws Exception {
177+
com.google.showcase.v1beta1.stub.EchoStubSettings.Builder stubSettingsBuilder =
178+
com.google.showcase.v1beta1.stub.EchoStubSettings.newHttpJsonBuilder();
179+
stubSettingsBuilder.echoSettings().setRetrySettings(
180+
com.google.api.gax.retrying.RetrySettings.newBuilder()
181+
.setInitialRpcTimeoutDuration(java.time.Duration.ofMillis(0))
182+
.setTotalTimeoutDuration(java.time.Duration.ofMillis(0))
183+
.setMaxAttempts(1)
184+
.build());
185+
stubSettingsBuilder.setTracerFactory(new LoggingTracerFactory());
186+
stubSettingsBuilder.setEndpoint(TestClientInitializer.DEFAULT_HTTPJSON_ENDPOINT);
187+
188+
try (com.google.showcase.v1beta1.stub.EchoStub stub = stubSettingsBuilder.build().createStub();
189+
EchoClient client = EchoClient.create(stub)) {
190+
assertThrows(ApiException.class, () -> client.echo(EchoRequest.newBuilder().build()));
191+
assertThat(testLogger.getMessageList().size()).isAtLeast(1);
192+
Map<String, Object> kvps = testLogger.getKeyValuePairsMap();
193+
assertThat(kvps).containsEntry("rpc.system.name", "http");
194+
}
195+
}
196+
197+
@Test
198+
void testGrpc_logEmittedForLowLevelRequestFailure() {
199+
EchoRequest request = buildErrorRequest();
200+
assertThrows(ApiException.class, () -> grpcClient.echo(request));
201+
202+
assertThat(testLogger.getMessageList().size()).isAtLeast(1);
203+
String loggedMessage = testLogger.getMessageList().get(testLogger.getMessageList().size() - 1);
204+
assertThat(loggedMessage).contains("This is a test error");
205+
206+
Map<String, Object> kvps = testLogger.getKeyValuePairsMap();
207+
assertThat(kvps).containsEntry("rpc.system.name", "grpc");
208+
assertThat(kvps).containsEntry("rpc.method", "google.showcase.v1beta1.Echo/Echo");
209+
assertThat(kvps).containsEntry("rpc.response.status_code", "INVALID_ARGUMENT");
210+
assertThat(kvps).containsEntry("error.type", "TEST_REASON");
211+
assertThat(kvps).containsEntry("gcp.errors.domain", "test.googleapis.com");
212+
assertThat(kvps).containsEntry("gcp.errors.metadata.test_metadata", "test_value");
213+
}
214+
215+
@Test
216+
void testGrpc_noLogEmittedForSuccess() {
217+
EchoRequest request = EchoRequest.newBuilder().setContent("Success").build();
218+
grpcClient.echo(request);
219+
assertThat(testLogger.getMessageList().size()).isEqualTo(0);
220+
}
221+
222+
@Test
223+
void testGrpc_clientLevelFailureAttributes() throws Exception {
224+
com.google.showcase.v1beta1.stub.EchoStubSettings.Builder stubSettingsBuilder =
225+
com.google.showcase.v1beta1.stub.EchoStubSettings.newBuilder();
226+
stubSettingsBuilder.echoSettings().setRetrySettings(
227+
com.google.api.gax.retrying.RetrySettings.newBuilder()
228+
.setInitialRpcTimeoutDuration(java.time.Duration.ofMillis(0))
229+
.setTotalTimeoutDuration(java.time.Duration.ofMillis(0))
230+
.setMaxAttempts(1)
231+
.build());
232+
stubSettingsBuilder.setTracerFactory(new LoggingTracerFactory());
233+
stubSettingsBuilder.setEndpoint(TestClientInitializer.DEFAULT_GRPC_ENDPOINT);
234+
235+
try (com.google.showcase.v1beta1.stub.EchoStub stub = stubSettingsBuilder.build().createStub();
236+
EchoClient client = EchoClient.create(stub)) {
237+
assertThrows(ApiException.class, () -> client.echo(EchoRequest.newBuilder().build()));
238+
assertThat(testLogger.getMessageList().size()).isAtLeast(1);
239+
Map<String, Object> kvps = testLogger.getKeyValuePairsMap();
240+
assertThat(kvps).containsEntry("rpc.system.name", "grpc");
241+
}
193242
}
194243
}

0 commit comments

Comments
 (0)