From 97b73e77356f91fb0a5389fa923ac859b4ff043b Mon Sep 17 00:00:00 2001 From: mpeddada1 Date: Mon, 30 Sep 2024 22:23:19 +0000 Subject: [PATCH 1/3] fix: address incorrect universe domain validation when quota project id is set --- .../rpc/internal/QuotaProjectIdHidingCredentials.java | 5 +++++ .../internal/QuotaProjectIdHidingCredentialsTest.java | 11 +++++++++++ 2 files changed, 16 insertions(+) diff --git a/gax-java/gax/src/main/java/com/google/api/gax/rpc/internal/QuotaProjectIdHidingCredentials.java b/gax-java/gax/src/main/java/com/google/api/gax/rpc/internal/QuotaProjectIdHidingCredentials.java index 51bbade9a0..8c9d2c5799 100644 --- a/gax-java/gax/src/main/java/com/google/api/gax/rpc/internal/QuotaProjectIdHidingCredentials.java +++ b/gax-java/gax/src/main/java/com/google/api/gax/rpc/internal/QuotaProjectIdHidingCredentials.java @@ -89,4 +89,9 @@ public boolean hasRequestMetadataOnly() { public void refresh() throws IOException { this.wrappedCredentials.refresh(); } + + @Override + public String getUniverseDomain() throws IOException { + return this.wrappedCredentials.getUniverseDomain(); + } } diff --git a/gax-java/gax/src/test/java/com/google/api/gax/rpc/internal/QuotaProjectIdHidingCredentialsTest.java b/gax-java/gax/src/test/java/com/google/api/gax/rpc/internal/QuotaProjectIdHidingCredentialsTest.java index 9a02bd13dd..0d9d357115 100644 --- a/gax-java/gax/src/test/java/com/google/api/gax/rpc/internal/QuotaProjectIdHidingCredentialsTest.java +++ b/gax-java/gax/src/test/java/com/google/api/gax/rpc/internal/QuotaProjectIdHidingCredentialsTest.java @@ -101,4 +101,15 @@ void quotaProjectIdHidingCredentials_getAuthenticationType() throws IOException Mockito.verify(credentials, Mockito.atLeastOnce()).refresh(); } + + @Test + void quotaProjectIdHidingCredentials_getUniverseDomain() throws IOException { + Credentials credentials = Mockito.mock(GoogleCredentials.class); + Mockito.when(credentials.getUniverseDomain()).thenReturn("example.com"); + + QuotaProjectIdHidingCredentials quotaProjectIdHidingCredentials = + new QuotaProjectIdHidingCredentials(credentials); + + assertEquals(quotaProjectIdHidingCredentials.getUniverseDomain(), "example.com"); + } } From c9c70e57de85478233a59b79f287a39a498f038b Mon Sep 17 00:00:00 2001 From: mpeddada1 Date: Wed, 2 Oct 2024 18:57:24 +0000 Subject: [PATCH 2/3] add verification to reproduce exception --- .../QuotaProjectIdHidingCredentials.java | 8 +++--- .../v1beta1/it/ITEndpointContext.java | 25 +++++++++++++++++++ 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/gax-java/gax/src/main/java/com/google/api/gax/rpc/internal/QuotaProjectIdHidingCredentials.java b/gax-java/gax/src/main/java/com/google/api/gax/rpc/internal/QuotaProjectIdHidingCredentials.java index 8c9d2c5799..f0f1b33f2d 100644 --- a/gax-java/gax/src/main/java/com/google/api/gax/rpc/internal/QuotaProjectIdHidingCredentials.java +++ b/gax-java/gax/src/main/java/com/google/api/gax/rpc/internal/QuotaProjectIdHidingCredentials.java @@ -90,8 +90,8 @@ public void refresh() throws IOException { this.wrappedCredentials.refresh(); } - @Override - public String getUniverseDomain() throws IOException { - return this.wrappedCredentials.getUniverseDomain(); - } + // @Override + // public String getUniverseDomain() throws IOException { + // return this.wrappedCredentials.getUniverseDomain(); + // } } diff --git a/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITEndpointContext.java b/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITEndpointContext.java index abf3844a6f..370c188d54 100644 --- a/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITEndpointContext.java +++ b/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITEndpointContext.java @@ -444,4 +444,29 @@ void endpointResolution_builderBuilderBackToBuilder() throws IOException { echoStubSettingsBuilder = echoStubSettings.toBuilder(); Truth.assertThat(echoStubSettingsBuilder.getEndpoint()).isEqualTo(customEndpoint); } + + @Test + void universeDomainValidation_quotaProjectId_credentialsNonGDUMatchesUserConfiguration() + throws IOException { + String universeDomain = "random.com"; + EchoSettings echoSettings = + ExtendedEchoSettings.newBuilder() + .setQuotaProjectId("exampleProject") + .setCredentialsProvider(UniverseDomainCredentialsProvider.create(universeDomain)) + .setEndpoint(TestClientInitializer.DEFAULT_GRPC_ENDPOINT) + .setUniverseDomain(universeDomain) + .setTransportChannelProvider( + EchoSettings.defaultGrpcTransportProviderBuilder() + .setChannelConfigurator(ManagedChannelBuilder::usePlaintext) + .build()) + .build(); + echoClient = EchoClient.create(echoSettings); + + UnauthenticatedException exception = + assertThrows(UnauthenticatedException.class, () -> echoClient.echo(DEFAULT_REQUEST)); + Truth.assertThat(exception.getMessage()) + .contains( + "The configured universe domain (random.com) does not match the universe domain found in the credentials (googleapis.com)."); + // Truth.assertThat(echoClient.echo(DEFAULT_REQUEST).getContent()).isEqualTo("echo"); + } } From bf0f65395d1f26d24a006cce848bc439ecd51061 Mon Sep 17 00:00:00 2001 From: mpeddada1 Date: Wed, 2 Oct 2024 19:21:30 +0000 Subject: [PATCH 3/3] bring back fix and showcase test --- .../gax/rpc/internal/QuotaProjectIdHidingCredentials.java | 8 ++++---- .../com/google/showcase/v1beta1/it/ITEndpointContext.java | 8 +------- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/gax-java/gax/src/main/java/com/google/api/gax/rpc/internal/QuotaProjectIdHidingCredentials.java b/gax-java/gax/src/main/java/com/google/api/gax/rpc/internal/QuotaProjectIdHidingCredentials.java index f0f1b33f2d..8c9d2c5799 100644 --- a/gax-java/gax/src/main/java/com/google/api/gax/rpc/internal/QuotaProjectIdHidingCredentials.java +++ b/gax-java/gax/src/main/java/com/google/api/gax/rpc/internal/QuotaProjectIdHidingCredentials.java @@ -90,8 +90,8 @@ public void refresh() throws IOException { this.wrappedCredentials.refresh(); } - // @Override - // public String getUniverseDomain() throws IOException { - // return this.wrappedCredentials.getUniverseDomain(); - // } + @Override + public String getUniverseDomain() throws IOException { + return this.wrappedCredentials.getUniverseDomain(); + } } diff --git a/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITEndpointContext.java b/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITEndpointContext.java index 370c188d54..55fdd350b8 100644 --- a/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITEndpointContext.java +++ b/showcase/gapic-showcase/src/test/java/com/google/showcase/v1beta1/it/ITEndpointContext.java @@ -461,12 +461,6 @@ void universeDomainValidation_quotaProjectId_credentialsNonGDUMatchesUserConfigu .build()) .build(); echoClient = EchoClient.create(echoSettings); - - UnauthenticatedException exception = - assertThrows(UnauthenticatedException.class, () -> echoClient.echo(DEFAULT_REQUEST)); - Truth.assertThat(exception.getMessage()) - .contains( - "The configured universe domain (random.com) does not match the universe domain found in the credentials (googleapis.com)."); - // Truth.assertThat(echoClient.echo(DEFAULT_REQUEST).getContent()).isEqualTo("echo"); + Truth.assertThat(echoClient.echo(DEFAULT_REQUEST).getContent()).isEqualTo("echo"); } }