From 1044a7c7c9b56625cf8bc8215f5af533f03aa5de Mon Sep 17 00:00:00 2001 From: Lawrence Qiu Date: Mon, 13 Apr 2026 13:48:00 -0400 Subject: [PATCH 1/5] chore: Fix GDCH tests referencing obsolete GDCH audience methods --- .../java/com/google/api/gax/rpc/ClientContext.java | 2 +- .../com/google/api/gax/rpc/ClientContextTest.java | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/ClientContext.java b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/ClientContext.java index 96e31312016c..7d0994872c32 100644 --- a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/ClientContext.java +++ b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/ClientContext.java @@ -362,7 +362,7 @@ static GdchCredentials getGdchCredentials( } catch (IllegalArgumentException ex) { // thrown when passing a malformed uri string throw new IllegalArgumentException("The GDC-H API audience string is not a valid URI", ex); } - return ((GdchCredentials) credentials).createWithGdchAudience(gdchAudienceUri); + return ((GdchCredentials) credentials).createWithGdchAudience(audienceString); } /** diff --git a/sdk-platform-java/gax-java/gax/src/test/java/com/google/api/gax/rpc/ClientContextTest.java b/sdk-platform-java/gax-java/gax/src/test/java/com/google/api/gax/rpc/ClientContextTest.java index 9852f04cdbde..eb3ada796e08 100644 --- a/sdk-platform-java/gax-java/gax/src/test/java/com/google/api/gax/rpc/ClientContextTest.java +++ b/sdk-platform-java/gax-java/gax/src/test/java/com/google/api/gax/rpc/ClientContextTest.java @@ -890,16 +890,16 @@ void testExecutorSettings() throws Exception { assertThat(transportChannel.getExecutor()).isSameInstanceAs(executorProvider.getExecutor()); } - private GdchCredentials getMockGdchCredentials() throws IOException { + private GdchCredentials getMockGdchCredentials() { GdchCredentials creds = Mockito.mock(GdchCredentials.class); // GdchCredentials builder is mocked to accept a well-formed uri GdchCredentials.Builder gdchCredsBuilder = Mockito.mock(GdchCredentials.Builder.class); - Mockito.when(gdchCredsBuilder.setGdchAudience(Mockito.any(URI.class))) + Mockito.when(gdchCredsBuilder.setGdchAudience(Mockito.anyString())) .thenReturn(gdchCredsBuilder); Mockito.when(gdchCredsBuilder.build()).thenReturn(creds); Mockito.when(creds.toBuilder()).thenReturn(gdchCredsBuilder); - Mockito.when(creds.createWithGdchAudience(Mockito.any())) + Mockito.when(creds.createWithGdchAudience(Mockito.anyString())) .thenAnswer((uri) -> getMockGdchCredentials()); return creds; } @@ -939,7 +939,7 @@ void testCreateClientContext_withGdchCredentialNoAudienceNoEndpoint() throws IOE assertThat(fromProvider).isInstanceOf(GdchCredentials.class); assertNotSame(fromContext, fromProvider); verify((GdchCredentials) fromProvider, times(1)) - .createWithGdchAudience(URI.create("test.googleapis.com:443")); + .createWithGdchAudience("test.googleapis.com:443"); } @Test @@ -995,7 +995,7 @@ void testCreateClientContext_withGdchCredentialWithoutAudienceWithEndpoint_corre assertThat(fromProvider).isInstanceOf(GdchCredentials.class); assertNotSame(fromContext, fromProvider); verify((GdchCredentials) fromProvider, times(1)) - .createWithGdchAudience(URI.create("test-endpoint")); + .createWithGdchAudience("test-endpoint"); } @Test @@ -1022,9 +1022,9 @@ void testCreateClientContext_withGdchCredentialAndValidAudience() throws IOExcep // using an audience should have made the context to recreate the credentials assertNotSame(fromContext, fromProvider); verify((GdchCredentials) fromProvider, times(1)) - .createWithGdchAudience(URI.create("valid-uri")); + .createWithGdchAudience("valid-uri"); verify((GdchCredentials) fromProvider, times(0)) - .createWithGdchAudience(URI.create("test-endpoint")); + .createWithGdchAudience("test-endpoint"); } @Test From 10b89c0a5cc293c4cac2601ce313a754cb899650 Mon Sep 17 00:00:00 2001 From: Lawrence Qiu Date: Mon, 13 Apr 2026 13:55:27 -0400 Subject: [PATCH 2/5] chore: Fix lint issues --- .../java/com/google/api/gax/rpc/ClientContextTest.java | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/sdk-platform-java/gax-java/gax/src/test/java/com/google/api/gax/rpc/ClientContextTest.java b/sdk-platform-java/gax-java/gax/src/test/java/com/google/api/gax/rpc/ClientContextTest.java index eb3ada796e08..212fe1f57423 100644 --- a/sdk-platform-java/gax-java/gax/src/test/java/com/google/api/gax/rpc/ClientContextTest.java +++ b/sdk-platform-java/gax-java/gax/src/test/java/com/google/api/gax/rpc/ClientContextTest.java @@ -994,8 +994,7 @@ void testCreateClientContext_withGdchCredentialWithoutAudienceWithEndpoint_corre assertThat(fromContext).isInstanceOf(GdchCredentials.class); assertThat(fromProvider).isInstanceOf(GdchCredentials.class); assertNotSame(fromContext, fromProvider); - verify((GdchCredentials) fromProvider, times(1)) - .createWithGdchAudience("test-endpoint"); + verify((GdchCredentials) fromProvider, times(1)).createWithGdchAudience("test-endpoint"); } @Test @@ -1021,10 +1020,8 @@ void testCreateClientContext_withGdchCredentialAndValidAudience() throws IOExcep assertNotNull(fromContext); // using an audience should have made the context to recreate the credentials assertNotSame(fromContext, fromProvider); - verify((GdchCredentials) fromProvider, times(1)) - .createWithGdchAudience("valid-uri"); - verify((GdchCredentials) fromProvider, times(0)) - .createWithGdchAudience("test-endpoint"); + verify((GdchCredentials) fromProvider, times(1)).createWithGdchAudience("valid-uri"); + verify((GdchCredentials) fromProvider, times(0)).createWithGdchAudience("test-endpoint"); } @Test From b7867f44ffa8eac57e107b8756c44c56ab0f910a Mon Sep 17 00:00:00 2001 From: Lawrence Qiu Date: Mon, 13 Apr 2026 14:20:01 -0400 Subject: [PATCH 3/5] chore: Update showcase to support GDCH --- .../test/resources/test_gdch_credential.json | 2 +- .../test/resources/test_gdch_credential.json | 2 +- .../v1beta1/it/ITCompositeTracer.java | 8 +- .../google/showcase/v1beta1/it/ITGdch.java | 6 +- .../v1beta1/it/ITOtelGoldenMetrics.java | 128 +++++++++++------- .../v1beta1/it/ITOtelTracePropagation.java | 22 +-- .../InterceptingMockTokenServerTransport.java | 7 +- .../it/util/TestClientInitializer.java | 6 +- .../test/resources/test_gdch_credential.json | 2 +- 9 files changed, 111 insertions(+), 72 deletions(-) diff --git a/sdk-platform-java/java-showcase-3.21.0/gapic-showcase/src/test/resources/test_gdch_credential.json b/sdk-platform-java/java-showcase-3.21.0/gapic-showcase/src/test/resources/test_gdch_credential.json index 16c2582cdc02..7583b857f925 100644 --- a/sdk-platform-java/java-showcase-3.21.0/gapic-showcase/src/test/resources/test_gdch_credential.json +++ b/sdk-platform-java/java-showcase-3.21.0/gapic-showcase/src/test/resources/test_gdch_credential.json @@ -3,7 +3,7 @@ "format_version": "1", "project": "project-id", "private_key_id": "d84a4fefcf50791d4a90f2d7af17469d6282df9d", - "private_key": "-----BEGIN PRIVATE KEY-----\nMIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALX0PQoe1igW12i\nkv1bN/r9lN749y2ijmbc/mFHPyS3hNTyOCjDvBbXYbDhQJzWVUikh4mvGBA07qTj79Xc3yBDfKP2IeyYQIFe0t0\nzkd7R9Zdn98Y2rIQC47aAbDfubtkU1U72t4zL11kHvoa0/RuFZjncvlr42X7be7lYh4p3NAgMBAAECgYASk5wDw\n4Az2ZkmeuN6Fk/y9H+Lcb2pskJIXjrL533vrDWGOC48LrsThMQPv8cxBky8HFSEklPpkfTF95tpD43iVwJRB/Gr\nCtGTw65IfJ4/tI09h6zGc4yqvIo1cHX/LQ+SxKLGyir/dQM925rGt/VojxY5ryJR7GLbCzxPnJm/oQJBANwOCO6\nD2hy1LQYJhXh7O+RLtA/tSnT1xyMQsGT+uUCMiKS2bSKx2wxo9k7h3OegNJIu1q6nZ6AbxDK8H3+d0dUCQQDTrP\nSXagBxzp8PecbaCHjzNRSQE2in81qYnrAFNB4o3DpHyMMY6s5ALLeHKscEWnqP8Ur6X4PvzZecCWU9BKAZAkAut\nLPknAuxSCsUOvUfS1i87ex77Ot+w6POp34pEX+UWb+u5iFn2cQacDTHLV1LtE80L8jVLSbrbrlH43H0DjU5AkEA\ngidhycxS86dxpEljnOMCw8CKoUBd5I880IUahEiUltk7OLJYS/Ts1wbn3kPOVX3wyJs8WBDtBkFrDHW2ezth2QJ\nADj3e1YhMVdjJW5jqwlD/VNddGjgzyunmiZg0uOXsHXbytYmsA545S8KRQFaJKFXYYFo2kOjqOiC1T2cAzMDjCQ\n==\n-----END PRIVATE KEY-----\n", + "private_key": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIK+G0KyJyJPDK/tyYsF0RyFW+X1GMsWbrlWn8TbLAI0doAoGCCqGSM49\nAwEHoUQDQgAEmGMJNcYyb9IfS4ngfvSf+c0sxOdcRfPNnZajry4bLgs++2VpQn8e\nl27zuFvF8jrM2/XyG5y9heE8YSjfLMy0Rw==\n-----END EC PRIVATE KEY-----\n", "name": "service-identity-name", "ca_cert_path": "fake-cert-path", "token_uri": "https://service-identity.fake-domain/authenticate" diff --git a/sdk-platform-java/java-showcase-3.25.8/gapic-showcase/src/test/resources/test_gdch_credential.json b/sdk-platform-java/java-showcase-3.25.8/gapic-showcase/src/test/resources/test_gdch_credential.json index 16c2582cdc02..7583b857f925 100644 --- a/sdk-platform-java/java-showcase-3.25.8/gapic-showcase/src/test/resources/test_gdch_credential.json +++ b/sdk-platform-java/java-showcase-3.25.8/gapic-showcase/src/test/resources/test_gdch_credential.json @@ -3,7 +3,7 @@ "format_version": "1", "project": "project-id", "private_key_id": "d84a4fefcf50791d4a90f2d7af17469d6282df9d", - "private_key": "-----BEGIN PRIVATE KEY-----\nMIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALX0PQoe1igW12i\nkv1bN/r9lN749y2ijmbc/mFHPyS3hNTyOCjDvBbXYbDhQJzWVUikh4mvGBA07qTj79Xc3yBDfKP2IeyYQIFe0t0\nzkd7R9Zdn98Y2rIQC47aAbDfubtkU1U72t4zL11kHvoa0/RuFZjncvlr42X7be7lYh4p3NAgMBAAECgYASk5wDw\n4Az2ZkmeuN6Fk/y9H+Lcb2pskJIXjrL533vrDWGOC48LrsThMQPv8cxBky8HFSEklPpkfTF95tpD43iVwJRB/Gr\nCtGTw65IfJ4/tI09h6zGc4yqvIo1cHX/LQ+SxKLGyir/dQM925rGt/VojxY5ryJR7GLbCzxPnJm/oQJBANwOCO6\nD2hy1LQYJhXh7O+RLtA/tSnT1xyMQsGT+uUCMiKS2bSKx2wxo9k7h3OegNJIu1q6nZ6AbxDK8H3+d0dUCQQDTrP\nSXagBxzp8PecbaCHjzNRSQE2in81qYnrAFNB4o3DpHyMMY6s5ALLeHKscEWnqP8Ur6X4PvzZecCWU9BKAZAkAut\nLPknAuxSCsUOvUfS1i87ex77Ot+w6POp34pEX+UWb+u5iFn2cQacDTHLV1LtE80L8jVLSbrbrlH43H0DjU5AkEA\ngidhycxS86dxpEljnOMCw8CKoUBd5I880IUahEiUltk7OLJYS/Ts1wbn3kPOVX3wyJs8WBDtBkFrDHW2ezth2QJ\nADj3e1YhMVdjJW5jqwlD/VNddGjgzyunmiZg0uOXsHXbytYmsA545S8KRQFaJKFXYYFo2kOjqOiC1T2cAzMDjCQ\n==\n-----END PRIVATE KEY-----\n", + "private_key": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIK+G0KyJyJPDK/tyYsF0RyFW+X1GMsWbrlWn8TbLAI0doAoGCCqGSM49\nAwEHoUQDQgAEmGMJNcYyb9IfS4ngfvSf+c0sxOdcRfPNnZajry4bLgs++2VpQn8e\nl27zuFvF8jrM2/XyG5y9heE8YSjfLMy0Rw==\n-----END EC PRIVATE KEY-----\n", "name": "service-identity-name", "ca_cert_path": "fake-cert-path", "token_uri": "https://service-identity.fake-domain/authenticate" diff --git a/sdk-platform-java/java-showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITCompositeTracer.java b/sdk-platform-java/java-showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITCompositeTracer.java index d79d469dda01..8f386f03f2d5 100644 --- a/sdk-platform-java/java-showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITCompositeTracer.java +++ b/sdk-platform-java/java-showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITCompositeTracer.java @@ -33,8 +33,8 @@ import static com.google.common.truth.Truth.assertThat; import com.google.api.gax.tracing.CompositeTracerFactory; -import com.google.api.gax.tracing.OpenTelemetryMetricsFactory; import com.google.api.gax.tracing.ObservabilityAttributes; +import com.google.api.gax.tracing.OpenTelemetryMetricsFactory; import com.google.api.gax.tracing.OpenTelemetryTracingFactory; import com.google.showcase.v1beta1.EchoClient; import com.google.showcase.v1beta1.EchoRequest; @@ -92,11 +92,13 @@ void tearDown() { } private CompositeTracerFactory createCompositeTracerFactory() { - OpenTelemetryTracingFactory openTelemetryTracingFactory = new OpenTelemetryTracingFactory(openTelemetrySdk); + OpenTelemetryTracingFactory openTelemetryTracingFactory = + new OpenTelemetryTracingFactory(openTelemetrySdk); OpenTelemetryMetricsFactory metricsTracerFactory = new OpenTelemetryMetricsFactory(openTelemetrySdk); - return new CompositeTracerFactory(Arrays.asList(openTelemetryTracingFactory, metricsTracerFactory)); + return new CompositeTracerFactory( + Arrays.asList(openTelemetryTracingFactory, metricsTracerFactory)); } @Test diff --git a/sdk-platform-java/java-showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITGdch.java b/sdk-platform-java/java-showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITGdch.java index f043d45cfcb9..37c3a9f6b8e7 100644 --- a/sdk-platform-java/java-showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITGdch.java +++ b/sdk-platform-java/java-showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITGdch.java @@ -156,7 +156,9 @@ void testCreateClient_withGdchCredentialAndNoAudience_defaultsToEndpointBasedAud NullPointerException expectedEx = assertThrows(NullPointerException.class, () -> initialCredentials.refresh()); assertTrue( - expectedEx.getMessage().contains("Audience are not configured for GDCH service account")); + expectedEx + .getMessage() + .contains("Audience cannot be null or empty for GDCH service account credentials")); // However, the credentials prepared in ClientContext should be able to refresh since the // audience would be @@ -201,7 +203,7 @@ void testCreateClient_withGdchCredentialWithValidAudience_usesCredentialWithPass assertTrue( thrownByClientCreds .getMessage() - .contains("Audience are not configured for GDCH service account")); + .contains("Audience cannot be null or empty for GDCH service account credentials")); // But the credentials prepared in ClientContext should be able to refresh since the audience // would be internally diff --git a/sdk-platform-java/java-showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITOtelGoldenMetrics.java b/sdk-platform-java/java-showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITOtelGoldenMetrics.java index 8f352abf80da..5385ecc67774 100644 --- a/sdk-platform-java/java-showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITOtelGoldenMetrics.java +++ b/sdk-platform-java/java-showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITOtelGoldenMetrics.java @@ -30,14 +30,18 @@ package com.google.showcase.v1beta1.it; +import static com.google.common.truth.Truth.assertThat; +import static java.nio.charset.StandardCharsets.UTF_8; +import static org.junit.Assert.assertThrows; + import com.google.api.client.http.HttpTransport; import com.google.api.gax.core.NoCredentialsProvider; import com.google.api.gax.retrying.RetrySettings; import com.google.api.gax.rpc.StatusCode; import com.google.api.gax.rpc.TransportChannelProvider; import com.google.api.gax.rpc.UnavailableException; -import com.google.api.gax.tracing.OpenTelemetryMetricsFactory; import com.google.api.gax.tracing.ObservabilityAttributes; +import com.google.api.gax.tracing.OpenTelemetryMetricsFactory; import com.google.common.collect.ImmutableList; import com.google.showcase.v1beta1.EchoClient; import com.google.showcase.v1beta1.EchoRequest; @@ -55,18 +59,13 @@ import io.opentelemetry.sdk.metrics.SdkMeterProvider; import io.opentelemetry.sdk.metrics.data.MetricData; import io.opentelemetry.sdk.testing.exporter.InMemoryMetricReader; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; - import java.io.ByteArrayInputStream; import java.io.InputStream; import java.time.Duration; import java.util.Collection; - -import static com.google.common.truth.Truth.assertThat; -import static java.nio.charset.StandardCharsets.UTF_8; -import static org.junit.Assert.assertThrows; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; class ITOtelGoldenMetrics { private static final String SHOWCASE_SERVER_ADDRESS = "localhost"; @@ -95,8 +94,7 @@ void tearDown() { @Test void testMetrics_successfulEcho_grpc() throws Exception { - OpenTelemetryMetricsFactory tracerFactory = - new OpenTelemetryMetricsFactory(openTelemetrySdk); + OpenTelemetryMetricsFactory tracerFactory = new OpenTelemetryMetricsFactory(openTelemetrySdk); try (EchoClient client = TestClientInitializer.createGrpcEchoClientOpentelemetry(tracerFactory)) { @@ -152,8 +150,7 @@ void testMetrics_successfulEcho_grpc() throws Exception { @Test void testMetrics_failedEcho_grpc_recordsErrorType() throws Exception { - OpenTelemetryMetricsFactory tracerFactory = - new OpenTelemetryMetricsFactory(openTelemetrySdk); + OpenTelemetryMetricsFactory tracerFactory = new OpenTelemetryMetricsFactory(openTelemetrySdk); ClientInterceptor interceptor = new ClientInterceptor() { @@ -220,8 +217,7 @@ public void sendMessage(ReqT message) {} @Test void testMetrics_successfulEcho_httpjson() throws Exception { - OpenTelemetryMetricsFactory tracerFactory = - new OpenTelemetryMetricsFactory(openTelemetrySdk); + OpenTelemetryMetricsFactory tracerFactory = new OpenTelemetryMetricsFactory(openTelemetrySdk); try (EchoClient client = TestClientInitializer.createHttpJsonEchoClientOpentelemetry(tracerFactory)) { @@ -280,8 +276,7 @@ void testMetrics_successfulEcho_httpjson() throws Exception { @Test void testMetrics_failedEcho_httpjson_recordsErrorType() throws Exception { - OpenTelemetryMetricsFactory tracerFactory = - new OpenTelemetryMetricsFactory(openTelemetrySdk); + OpenTelemetryMetricsFactory tracerFactory = new OpenTelemetryMetricsFactory(openTelemetrySdk); HttpTransport mockTransport = new HttpTransport() { @@ -400,8 +395,7 @@ public String getHeaderValue(int index) { @Test void testMetrics_clientTimeout_grpc() throws Exception { - OpenTelemetryMetricsFactory tracerFactory = - new OpenTelemetryMetricsFactory(openTelemetrySdk); + OpenTelemetryMetricsFactory tracerFactory = new OpenTelemetryMetricsFactory(openTelemetrySdk); // Using 1ms as 0ms might be rejected by some validation or trigger immediate failure before // metrics @@ -446,8 +440,7 @@ void testMetrics_clientTimeout_grpc() throws Exception { @Test void testMetrics_clientTimeout_httpjson() throws Exception { - OpenTelemetryMetricsFactory tracerFactory = - new OpenTelemetryMetricsFactory(openTelemetrySdk); + OpenTelemetryMetricsFactory tracerFactory = new OpenTelemetryMetricsFactory(openTelemetrySdk); RetrySettings zeroRetrySettings = RetrySettings.newBuilder() @@ -490,8 +483,7 @@ void testMetrics_clientTimeout_httpjson() throws Exception { @Test void testMetrics_retryShouldResultInOneMetric_grpc() throws Exception { - OpenTelemetryMetricsFactory tracerFactory = - new OpenTelemetryMetricsFactory(openTelemetrySdk); + OpenTelemetryMetricsFactory tracerFactory = new OpenTelemetryMetricsFactory(openTelemetrySdk); RetrySettings retrySettings = RetrySettings.newBuilder() @@ -501,7 +493,8 @@ void testMetrics_retryShouldResultInOneMetric_grpc() throws Exception { .setMaxAttempts(3) .build(); - java.util.concurrent.atomic.AtomicInteger attemptCount = new java.util.concurrent.atomic.AtomicInteger(0); + java.util.concurrent.atomic.AtomicInteger attemptCount = + new java.util.concurrent.atomic.AtomicInteger(0); ClientInterceptor interceptor = new ClientInterceptor() { @@ -534,7 +527,8 @@ public void sendMessage(ReqT message) {} } }; - java.util.Set retryableCodes = java.util.Collections.singleton(StatusCode.Code.UNAVAILABLE); + java.util.Set retryableCodes = + java.util.Collections.singleton(StatusCode.Code.UNAVAILABLE); try (EchoClient client = TestClientInitializer.createGrpcEchoClientOpentelemetry( @@ -568,8 +562,7 @@ public void sendMessage(ReqT message) {} @Test void testMetrics_retryShouldResultInOneMetric_httpjson() throws Exception { - OpenTelemetryMetricsFactory tracerFactory = - new OpenTelemetryMetricsFactory(openTelemetrySdk); + OpenTelemetryMetricsFactory tracerFactory = new OpenTelemetryMetricsFactory(openTelemetrySdk); RetrySettings retrySettings = RetrySettings.newBuilder() @@ -579,7 +572,8 @@ void testMetrics_retryShouldResultInOneMetric_httpjson() throws Exception { .setMaxAttempts(3) .build(); - java.util.concurrent.atomic.AtomicInteger requestCount = new java.util.concurrent.atomic.AtomicInteger(0); + java.util.concurrent.atomic.AtomicInteger requestCount = + new java.util.concurrent.atomic.AtomicInteger(0); HttpTransport mockTransport = new HttpTransport() { @@ -601,65 +595,102 @@ public InputStream getContent() { } @Override - public String getContentEncoding() { return null; } + public String getContentEncoding() { + return null; + } @Override - public long getContentLength() { return 2; } + public long getContentLength() { + return 2; + } @Override - public String getContentType() { return "application/json"; } + public String getContentType() { + return "application/json"; + } @Override - public String getStatusLine() { return "HTTP/1.1 503 Service Unavailable"; } + public String getStatusLine() { + return "HTTP/1.1 503 Service Unavailable"; + } @Override - public int getStatusCode() { return 503; } + public int getStatusCode() { + return 503; + } @Override - public String getReasonPhrase() { return "Service Unavailable"; } + public String getReasonPhrase() { + return "Service Unavailable"; + } @Override - public int getHeaderCount() { return 0; } + public int getHeaderCount() { + return 0; + } @Override - public String getHeaderName(int index) { return null; } + public String getHeaderName(int index) { + return null; + } @Override - public String getHeaderValue(int index) { return null; } + public String getHeaderValue(int index) { + return null; + } }; } else { return new com.google.api.client.http.LowLevelHttpResponse() { @Override public InputStream getContent() { - return new ByteArrayInputStream("{\"content\":\"metrics-test\"}".getBytes(UTF_8)); + return new ByteArrayInputStream( + "{\"content\":\"metrics-test\"}".getBytes(UTF_8)); } @Override - public String getContentEncoding() { return null; } + public String getContentEncoding() { + return null; + } @Override - public long getContentLength() { return 24; } + public long getContentLength() { + return 24; + } @Override - public String getContentType() { return "application/json"; } + public String getContentType() { + return "application/json"; + } @Override - public String getStatusLine() { return "HTTP/1.1 200 OK"; } + public String getStatusLine() { + return "HTTP/1.1 200 OK"; + } @Override - public int getStatusCode() { return 200; } + public int getStatusCode() { + return 200; + } @Override - public String getReasonPhrase() { return "OK"; } + public String getReasonPhrase() { + return "OK"; + } @Override - public int getHeaderCount() { return 0; } + public int getHeaderCount() { + return 0; + } @Override - public String getHeaderName(int index) { return null; } + public String getHeaderName(int index) { + return null; + } @Override - public String getHeaderValue(int index) { return null; } + public String getHeaderValue(int index) { + return null; + } }; } } @@ -667,7 +698,8 @@ public InputStream getContent() { } }; - java.util.Set retryableCodes = java.util.Collections.singleton(StatusCode.Code.UNAVAILABLE); + java.util.Set retryableCodes = + java.util.Collections.singleton(StatusCode.Code.UNAVAILABLE); try (EchoClient client = TestClientInitializer.createHttpJsonEchoClientOpentelemetry( diff --git a/sdk-platform-java/java-showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITOtelTracePropagation.java b/sdk-platform-java/java-showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITOtelTracePropagation.java index a9da2ca08a9a..2d68ee0d6f4f 100644 --- a/sdk-platform-java/java-showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITOtelTracePropagation.java +++ b/sdk-platform-java/java-showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITOtelTracePropagation.java @@ -76,7 +76,8 @@ public ClientCall interceptCall( public void start(ClientCall.Listener responseListener, Metadata headers) { requestHeaders = headers; ClientCall.Listener forwardingResponseListener = - new ForwardingClientCallListener.SimpleForwardingClientCallListener(responseListener) { + new ForwardingClientCallListener.SimpleForwardingClientCallListener( + responseListener) { @Override public void onClose(io.grpc.Status status, Metadata trailers) { responseTrailers = trailers; @@ -89,7 +90,8 @@ public void onClose(io.grpc.Status status, Metadata trailers) { } } - private static class HttpJsonResponseCapturingClientInterceptor implements HttpJsonClientInterceptor { + private static class HttpJsonResponseCapturingClientInterceptor + implements HttpJsonClientInterceptor { private HttpJsonMetadata requestHeaders; @Override @@ -202,7 +204,8 @@ void testTracePropagation_grpc() { String expectedTraceId = attemptSpan.getSpanContext().getTraceId(); String expectedSpanId = attemptSpan.getSpanContext().getSpanId(); String expectedTraceFlags = attemptSpan.getSpanContext().getTraceFlags().asHex(); - String expectedTraceparent = "00-" + expectedTraceId + "-" + expectedSpanId + "-" + expectedTraceFlags; + String expectedTraceparent = + "00-" + expectedTraceId + "-" + expectedSpanId + "-" + expectedTraceFlags; String headerValue = grpcInterceptor.requestHeaders.get(TRACEPARENT_GRPC_HEADER_KEY); assertThat(headerValue).isNotNull(); @@ -227,7 +230,8 @@ void testTracePropagation_httpjson() { String expectedTraceId = attemptSpan.getSpanContext().getTraceId(); String expectedSpanId = attemptSpan.getSpanContext().getSpanId(); String expectedTraceFlags = attemptSpan.getSpanContext().getTraceFlags().asHex(); - String expectedTraceparent = "00-" + expectedTraceId + "-" + expectedSpanId + "-" + expectedTraceFlags; + String expectedTraceparent = + "00-" + expectedTraceId + "-" + expectedSpanId + "-" + expectedTraceFlags; assertThat(httpJsonInterceptor.requestHeaders).isNotNull(); Map headers = httpJsonInterceptor.requestHeaders.getHeaders(); @@ -236,12 +240,12 @@ void testTracePropagation_httpjson() { Object headerVal = headers.get(expectedHttpHeaderKey); if (headerVal instanceof List) { - @SuppressWarnings("unchecked") - List traceparentHeaders = (List) headerVal; - assertThat(traceparentHeaders).hasSize(1); - assertThat(traceparentHeaders.get(0)).isEqualTo(expectedTraceparent); + @SuppressWarnings("unchecked") + List traceparentHeaders = (List) headerVal; + assertThat(traceparentHeaders).hasSize(1); + assertThat(traceparentHeaders.get(0)).isEqualTo(expectedTraceparent); } else { - assertThat(String.valueOf(headerVal)).isEqualTo(expectedTraceparent); + assertThat(String.valueOf(headerVal)).isEqualTo(expectedTraceparent); } } } diff --git a/sdk-platform-java/java-showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/util/InterceptingMockTokenServerTransport.java b/sdk-platform-java/java-showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/util/InterceptingMockTokenServerTransport.java index 4545d87f20d4..42df4ddfd7fb 100644 --- a/sdk-platform-java/java-showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/util/InterceptingMockTokenServerTransport.java +++ b/sdk-platform-java/java-showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/util/InterceptingMockTokenServerTransport.java @@ -39,10 +39,7 @@ public LowLevelHttpRequest buildRequest(String method, String url) throws IOExce public String getLastAudienceSent() throws IOException { String contentString = lastRequest.getContentAsString(); - Map query = TestUtils.parseQuery(contentString); - String assertion = query.get("assertion"); - JsonWebSignature signature = JsonWebSignature.parse(JSON_FACTORY, assertion); - String foundTargetAudience = (String) signature.getPayload().get("api_audience"); - return foundTargetAudience; + Map json = JSON_FACTORY.createJsonParser(contentString).parse(Map.class); + return (String) json.get("audience"); } } diff --git a/sdk-platform-java/java-showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/util/TestClientInitializer.java b/sdk-platform-java/java-showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/util/TestClientInitializer.java index adb2d9a80646..d9f65674bd77 100644 --- a/sdk-platform-java/java-showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/util/TestClientInitializer.java +++ b/sdk-platform-java/java-showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/util/TestClientInitializer.java @@ -369,7 +369,8 @@ public static EchoClient createGrpcEchoClientOpentelemetry( ApiTracerFactory metricsTracerFactory, RetrySettings retrySettings, Set retryableCodes, - List interceptorList) throws Exception { + List interceptorList) + throws Exception { EchoStubSettings.Builder grpcEchoSettingsBuilder = EchoStubSettings.newBuilder(); grpcEchoSettingsBuilder .echoSettings() @@ -394,7 +395,8 @@ public static EchoClient createHttpJsonEchoClientOpentelemetry( ApiTracerFactory metricsTracerFactory, RetrySettings retrySettings, Set retryableCodes, - com.google.api.client.http.HttpTransport transport) throws Exception { + com.google.api.client.http.HttpTransport transport) + throws Exception { EchoStubSettings.Builder httpJsonEchoSettingsBuilder = EchoStubSettings.newHttpJsonBuilder(); httpJsonEchoSettingsBuilder .echoSettings() diff --git a/sdk-platform-java/java-showcase/gapic-showcase/src/test/resources/test_gdch_credential.json b/sdk-platform-java/java-showcase/gapic-showcase/src/test/resources/test_gdch_credential.json index 16c2582cdc02..7583b857f925 100644 --- a/sdk-platform-java/java-showcase/gapic-showcase/src/test/resources/test_gdch_credential.json +++ b/sdk-platform-java/java-showcase/gapic-showcase/src/test/resources/test_gdch_credential.json @@ -3,7 +3,7 @@ "format_version": "1", "project": "project-id", "private_key_id": "d84a4fefcf50791d4a90f2d7af17469d6282df9d", - "private_key": "-----BEGIN PRIVATE KEY-----\nMIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALX0PQoe1igW12i\nkv1bN/r9lN749y2ijmbc/mFHPyS3hNTyOCjDvBbXYbDhQJzWVUikh4mvGBA07qTj79Xc3yBDfKP2IeyYQIFe0t0\nzkd7R9Zdn98Y2rIQC47aAbDfubtkU1U72t4zL11kHvoa0/RuFZjncvlr42X7be7lYh4p3NAgMBAAECgYASk5wDw\n4Az2ZkmeuN6Fk/y9H+Lcb2pskJIXjrL533vrDWGOC48LrsThMQPv8cxBky8HFSEklPpkfTF95tpD43iVwJRB/Gr\nCtGTw65IfJ4/tI09h6zGc4yqvIo1cHX/LQ+SxKLGyir/dQM925rGt/VojxY5ryJR7GLbCzxPnJm/oQJBANwOCO6\nD2hy1LQYJhXh7O+RLtA/tSnT1xyMQsGT+uUCMiKS2bSKx2wxo9k7h3OegNJIu1q6nZ6AbxDK8H3+d0dUCQQDTrP\nSXagBxzp8PecbaCHjzNRSQE2in81qYnrAFNB4o3DpHyMMY6s5ALLeHKscEWnqP8Ur6X4PvzZecCWU9BKAZAkAut\nLPknAuxSCsUOvUfS1i87ex77Ot+w6POp34pEX+UWb+u5iFn2cQacDTHLV1LtE80L8jVLSbrbrlH43H0DjU5AkEA\ngidhycxS86dxpEljnOMCw8CKoUBd5I880IUahEiUltk7OLJYS/Ts1wbn3kPOVX3wyJs8WBDtBkFrDHW2ezth2QJ\nADj3e1YhMVdjJW5jqwlD/VNddGjgzyunmiZg0uOXsHXbytYmsA545S8KRQFaJKFXYYFo2kOjqOiC1T2cAzMDjCQ\n==\n-----END PRIVATE KEY-----\n", + "private_key": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIK+G0KyJyJPDK/tyYsF0RyFW+X1GMsWbrlWn8TbLAI0doAoGCCqGSM49\nAwEHoUQDQgAEmGMJNcYyb9IfS4ngfvSf+c0sxOdcRfPNnZajry4bLgs++2VpQn8e\nl27zuFvF8jrM2/XyG5y9heE8YSjfLMy0Rw==\n-----END EC PRIVATE KEY-----\n", "name": "service-identity-name", "ca_cert_path": "fake-cert-path", "token_uri": "https://service-identity.fake-domain/authenticate" From af57081e4557950e4752ac93081c8b5b080bd470 Mon Sep 17 00:00:00 2001 From: Lawrence Qiu Date: Mon, 13 Apr 2026 15:02:42 -0400 Subject: [PATCH 4/5] chore: Fix tests to not validate the URI --- .../com/google/api/gax/rpc/ClientContext.java | 8 -------- .../google/api/gax/rpc/ClientContextTest.java | 20 +++++++++---------- 2 files changed, 9 insertions(+), 19 deletions(-) diff --git a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/ClientContext.java b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/ClientContext.java index 7d0994872c32..fe448dd64a1b 100644 --- a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/ClientContext.java +++ b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/ClientContext.java @@ -57,7 +57,6 @@ import com.google.common.collect.ImmutableMap; import com.google.common.collect.Sets; import java.io.IOException; -import java.net.URI; import java.util.Collections; import java.util.HashMap; import java.util.List; @@ -355,13 +354,6 @@ static GdchCredentials getGdchCredentials( } else { throw new IllegalArgumentException("Could not infer GDCH api audience from settings"); } - - URI gdchAudienceUri; - try { - gdchAudienceUri = URI.create(audienceString); - } catch (IllegalArgumentException ex) { // thrown when passing a malformed uri string - throw new IllegalArgumentException("The GDC-H API audience string is not a valid URI", ex); - } return ((GdchCredentials) credentials).createWithGdchAudience(audienceString); } diff --git a/sdk-platform-java/gax-java/gax/src/test/java/com/google/api/gax/rpc/ClientContextTest.java b/sdk-platform-java/gax-java/gax/src/test/java/com/google/api/gax/rpc/ClientContextTest.java index 212fe1f57423..bcf0849f31b3 100644 --- a/sdk-platform-java/gax-java/gax/src/test/java/com/google/api/gax/rpc/ClientContextTest.java +++ b/sdk-platform-java/gax-java/gax/src/test/java/com/google/api/gax/rpc/ClientContextTest.java @@ -33,6 +33,7 @@ import static com.google.common.truth.Truth.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertInstanceOf; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNotSame; import static org.junit.jupiter.api.Assertions.assertThrows; @@ -63,7 +64,6 @@ import com.google.common.collect.ImmutableMap; import com.google.common.truth.Truth; import java.io.IOException; -import java.net.URI; import java.util.Collections; import java.util.List; import java.util.Map; @@ -1025,7 +1025,8 @@ void testCreateClientContext_withGdchCredentialAndValidAudience() throws IOExcep } @Test - void testCreateClientContext_withGdchCredentialAndInvalidAudience_throws() throws IOException { + void testCreateClientContext_withGdchCredentialAndInvalidAudience_doesNotThrow() + throws IOException { TransportChannelProvider transportChannelProvider = getFakeTransportChannelProvider(); Credentials creds = getMockGdchCredentials(); CredentialsProvider provider = FixedCredentialsProvider.create(creds); @@ -1041,17 +1042,14 @@ void testCreateClientContext_withGdchCredentialAndInvalidAudience_throws() throw clientSettingsBuilder.setCredentialsProvider(provider); clientSettingsBuilder.setTransportChannelProvider(transportChannelProvider); final ClientSettings withGdchCredentialsAndMalformedApiAudience = clientSettingsBuilder.build(); - // should throw - String exMessage = - assertThrows( - IllegalArgumentException.class, - () -> ClientContext.create(withGdchCredentialsAndMalformedApiAudience)) - .getMessage(); - assertThat(exMessage).contains("The GDC-H API audience string is not a valid URI"); + + // There is an invalid URI for the GDCH audience, but we do not validate the URI + // There are some use cases where there the GDCH audience is not a URI. + ClientContext clientContext = ClientContext.create(withGdchCredentialsAndMalformedApiAudience); + assertInstanceOf(GdchCredentials.class, clientContext.getCredentials()); Credentials fromProvider = provider.getCredentials(); - verify((GdchCredentials) fromProvider, times(0)) - .createWithGdchAudience(URI.create("test-endpoint")); + verify((GdchCredentials) fromProvider, times(0)).createWithGdchAudience("test-endpoint"); } @Test From 40ee3ae9e9f64001a51ff65d0aa00fed66518e34 Mon Sep 17 00:00:00 2001 From: Lawrence Qiu Date: Mon, 13 Apr 2026 15:27:14 -0400 Subject: [PATCH 5/5] chore: Fix ITGdch tests --- .../java/com/google/showcase/v1beta1/it/ITGdch.java | 6 ++++-- .../it/util/InterceptingMockTokenServerTransport.java | 11 ++++------- .../java/com/google/showcase/v1beta1/it/ITGdch.java | 6 ++++-- .../it/util/InterceptingMockTokenServerTransport.java | 9 ++++----- .../it/util/InterceptingMockTokenServerTransport.java | 4 +++- 5 files changed, 19 insertions(+), 17 deletions(-) diff --git a/sdk-platform-java/java-showcase-3.21.0/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITGdch.java b/sdk-platform-java/java-showcase-3.21.0/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITGdch.java index f043d45cfcb9..37c3a9f6b8e7 100644 --- a/sdk-platform-java/java-showcase-3.21.0/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITGdch.java +++ b/sdk-platform-java/java-showcase-3.21.0/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITGdch.java @@ -156,7 +156,9 @@ void testCreateClient_withGdchCredentialAndNoAudience_defaultsToEndpointBasedAud NullPointerException expectedEx = assertThrows(NullPointerException.class, () -> initialCredentials.refresh()); assertTrue( - expectedEx.getMessage().contains("Audience are not configured for GDCH service account")); + expectedEx + .getMessage() + .contains("Audience cannot be null or empty for GDCH service account credentials")); // However, the credentials prepared in ClientContext should be able to refresh since the // audience would be @@ -201,7 +203,7 @@ void testCreateClient_withGdchCredentialWithValidAudience_usesCredentialWithPass assertTrue( thrownByClientCreds .getMessage() - .contains("Audience are not configured for GDCH service account")); + .contains("Audience cannot be null or empty for GDCH service account credentials")); // But the credentials prepared in ClientContext should be able to refresh since the audience // would be internally diff --git a/sdk-platform-java/java-showcase-3.21.0/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/util/InterceptingMockTokenServerTransport.java b/sdk-platform-java/java-showcase-3.21.0/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/util/InterceptingMockTokenServerTransport.java index 4545d87f20d4..0099667b8a8b 100644 --- a/sdk-platform-java/java-showcase-3.21.0/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/util/InterceptingMockTokenServerTransport.java +++ b/sdk-platform-java/java-showcase-3.21.0/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/util/InterceptingMockTokenServerTransport.java @@ -18,10 +18,9 @@ import com.google.api.client.http.LowLevelHttpRequest; import com.google.api.client.json.JsonFactory; +import com.google.api.client.json.JsonParser; import com.google.api.client.json.gson.GsonFactory; -import com.google.api.client.json.webtoken.JsonWebSignature; import com.google.api.client.testing.http.MockLowLevelHttpRequest; -import com.google.auth.TestUtils; import com.google.auth.oauth2.MockTokenServerTransport; import java.io.IOException; import java.util.Map; @@ -39,10 +38,8 @@ public LowLevelHttpRequest buildRequest(String method, String url) throws IOExce public String getLastAudienceSent() throws IOException { String contentString = lastRequest.getContentAsString(); - Map query = TestUtils.parseQuery(contentString); - String assertion = query.get("assertion"); - JsonWebSignature signature = JsonWebSignature.parse(JSON_FACTORY, assertion); - String foundTargetAudience = (String) signature.getPayload().get("api_audience"); - return foundTargetAudience; + JsonParser jsonParser = JSON_FACTORY.createJsonParser(contentString); + Map json = jsonParser.parseAndClose(Map.class); + return (String) json.get("audience"); } } diff --git a/sdk-platform-java/java-showcase-3.25.8/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITGdch.java b/sdk-platform-java/java-showcase-3.25.8/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITGdch.java index f043d45cfcb9..37c3a9f6b8e7 100644 --- a/sdk-platform-java/java-showcase-3.25.8/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITGdch.java +++ b/sdk-platform-java/java-showcase-3.25.8/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITGdch.java @@ -156,7 +156,9 @@ void testCreateClient_withGdchCredentialAndNoAudience_defaultsToEndpointBasedAud NullPointerException expectedEx = assertThrows(NullPointerException.class, () -> initialCredentials.refresh()); assertTrue( - expectedEx.getMessage().contains("Audience are not configured for GDCH service account")); + expectedEx + .getMessage() + .contains("Audience cannot be null or empty for GDCH service account credentials")); // However, the credentials prepared in ClientContext should be able to refresh since the // audience would be @@ -201,7 +203,7 @@ void testCreateClient_withGdchCredentialWithValidAudience_usesCredentialWithPass assertTrue( thrownByClientCreds .getMessage() - .contains("Audience are not configured for GDCH service account")); + .contains("Audience cannot be null or empty for GDCH service account credentials")); // But the credentials prepared in ClientContext should be able to refresh since the audience // would be internally diff --git a/sdk-platform-java/java-showcase-3.25.8/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/util/InterceptingMockTokenServerTransport.java b/sdk-platform-java/java-showcase-3.25.8/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/util/InterceptingMockTokenServerTransport.java index 4545d87f20d4..1237e52fd02e 100644 --- a/sdk-platform-java/java-showcase-3.25.8/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/util/InterceptingMockTokenServerTransport.java +++ b/sdk-platform-java/java-showcase-3.25.8/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/util/InterceptingMockTokenServerTransport.java @@ -18,6 +18,7 @@ import com.google.api.client.http.LowLevelHttpRequest; import com.google.api.client.json.JsonFactory; +import com.google.api.client.json.JsonParser; import com.google.api.client.json.gson.GsonFactory; import com.google.api.client.json.webtoken.JsonWebSignature; import com.google.api.client.testing.http.MockLowLevelHttpRequest; @@ -39,10 +40,8 @@ public LowLevelHttpRequest buildRequest(String method, String url) throws IOExce public String getLastAudienceSent() throws IOException { String contentString = lastRequest.getContentAsString(); - Map query = TestUtils.parseQuery(contentString); - String assertion = query.get("assertion"); - JsonWebSignature signature = JsonWebSignature.parse(JSON_FACTORY, assertion); - String foundTargetAudience = (String) signature.getPayload().get("api_audience"); - return foundTargetAudience; + JsonParser jsonParser = JSON_FACTORY.createJsonParser(contentString); + Map json = jsonParser.parseAndClose(Map.class); + return (String) json.get("audience"); } } diff --git a/sdk-platform-java/java-showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/util/InterceptingMockTokenServerTransport.java b/sdk-platform-java/java-showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/util/InterceptingMockTokenServerTransport.java index 42df4ddfd7fb..1237e52fd02e 100644 --- a/sdk-platform-java/java-showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/util/InterceptingMockTokenServerTransport.java +++ b/sdk-platform-java/java-showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/util/InterceptingMockTokenServerTransport.java @@ -18,6 +18,7 @@ import com.google.api.client.http.LowLevelHttpRequest; import com.google.api.client.json.JsonFactory; +import com.google.api.client.json.JsonParser; import com.google.api.client.json.gson.GsonFactory; import com.google.api.client.json.webtoken.JsonWebSignature; import com.google.api.client.testing.http.MockLowLevelHttpRequest; @@ -39,7 +40,8 @@ public LowLevelHttpRequest buildRequest(String method, String url) throws IOExce public String getLastAudienceSent() throws IOException { String contentString = lastRequest.getContentAsString(); - Map json = JSON_FACTORY.createJsonParser(contentString).parse(Map.class); + JsonParser jsonParser = JSON_FACTORY.createJsonParser(contentString); + Map json = jsonParser.parseAndClose(Map.class); return (String) json.get("audience"); } }