|
39 | 39 | import static org.junit.jupiter.api.Assertions.assertTrue;
|
40 | 40 | import static org.mockito.Mockito.times;
|
41 | 41 | import static org.mockito.Mockito.verify;
|
| 42 | +import static org.mockito.Mockito.when; |
42 | 43 |
|
43 | 44 | import com.google.api.core.ApiClock;
|
44 | 45 | import com.google.api.gax.core.BackgroundResource;
|
|
53 | 54 | import com.google.api.gax.rpc.testing.FakeStubSettings;
|
54 | 55 | import com.google.api.gax.rpc.testing.FakeTransportChannel;
|
55 | 56 | import com.google.auth.ApiKeyCredentials;
|
| 57 | +import com.google.auth.CredentialTypeForMetrics; |
56 | 58 | import com.google.auth.Credentials;
|
57 | 59 | import com.google.auth.oauth2.ComputeEngineCredentials;
|
58 | 60 | import com.google.auth.oauth2.GdchCredentials;
|
@@ -677,6 +679,86 @@ void testUserAgentConcat() throws Exception {
|
677 | 679 | .containsEntry("user-agent", "user-supplied-agent internal-agent");
|
678 | 680 | }
|
679 | 681 |
|
| 682 | + @Test |
| 683 | + void testApiClientHeaderAppendsCredType() throws Exception { |
| 684 | + GoogleCredentials googleCredentials = Mockito.mock(GoogleCredentials.class); |
| 685 | + when(googleCredentials.getMetricsCredentialType()) |
| 686 | + .thenReturn(CredentialTypeForMetrics.USER_CREDENTIALS); |
| 687 | + |
| 688 | + Map<String, String> headers = |
| 689 | + setupTestForCredentialTokenUsageMetricsAndGetTransportChannelHeaders( |
| 690 | + FixedCredentialsProvider.create(googleCredentials), |
| 691 | + FixedHeaderProvider.create("x-goog-api-client", "internal-agent")); |
| 692 | + |
| 693 | + assertThat(headers).containsEntry("x-goog-api-client", "internal-agent cred-type/u"); |
| 694 | + } |
| 695 | + |
| 696 | + @Test |
| 697 | + void testApiClientHeaderDoNotAppendsCredType_whenNoApiClientHeader() throws Exception { |
| 698 | + GoogleCredentials googleCredentials = Mockito.mock(GoogleCredentials.class); |
| 699 | + when(googleCredentials.getMetricsCredentialType()) |
| 700 | + .thenReturn(CredentialTypeForMetrics.USER_CREDENTIALS); |
| 701 | + |
| 702 | + Map<String, String> headers = |
| 703 | + setupTestForCredentialTokenUsageMetricsAndGetTransportChannelHeaders( |
| 704 | + FixedCredentialsProvider.create(googleCredentials), |
| 705 | + FixedHeaderProvider.create("some-other-header", "internal-agent")); |
| 706 | + |
| 707 | + assertThat(headers).doesNotContainKey("x-goog-api-client"); |
| 708 | + assertThat(headers).containsEntry("some-other-header", "internal-agent"); |
| 709 | + } |
| 710 | + |
| 711 | + @Test |
| 712 | + void testApiClientHeaderDoNotAppendsCredType_whenNullCredentials() throws IOException { |
| 713 | + Map<String, String> headers = |
| 714 | + setupTestForCredentialTokenUsageMetricsAndGetTransportChannelHeaders( |
| 715 | + NoCredentialsProvider.create(), |
| 716 | + FixedHeaderProvider.create("x-goog-api-client", "internal-agent")); |
| 717 | + |
| 718 | + assertThat(headers).containsKey("x-goog-api-client"); |
| 719 | + assertThat(headers.get("x-goog-api-client")).doesNotContain("cred-type/"); |
| 720 | + } |
| 721 | + |
| 722 | + @Test |
| 723 | + void testApiClientHeaderDoNotAppendsCredType_whenCredTypeDoNotSend() throws Exception { |
| 724 | + GoogleCredentials googleCredentials = Mockito.mock(GoogleCredentials.class); |
| 725 | + when(googleCredentials.getMetricsCredentialType()) |
| 726 | + .thenReturn(CredentialTypeForMetrics.DO_NOT_SEND); |
| 727 | + |
| 728 | + Map<String, String> headers = |
| 729 | + setupTestForCredentialTokenUsageMetricsAndGetTransportChannelHeaders( |
| 730 | + FixedCredentialsProvider.create(googleCredentials), |
| 731 | + FixedHeaderProvider.create("x-goog-api-client", "internal-agent")); |
| 732 | + |
| 733 | + assertThat(headers).containsKey("x-goog-api-client"); |
| 734 | + assertThat(headers.get("x-goog-api-client")).doesNotContain("cred-type/"); |
| 735 | + } |
| 736 | + |
| 737 | + private Map<String, String> setupTestForCredentialTokenUsageMetricsAndGetTransportChannelHeaders( |
| 738 | + CredentialsProvider credentialsProvider, HeaderProvider headerProvider) throws IOException { |
| 739 | + TransportChannelProvider transportChannelProvider = |
| 740 | + new FakeTransportProvider( |
| 741 | + FakeTransportChannel.create(new FakeChannel()), |
| 742 | + null, |
| 743 | + true, |
| 744 | + null, |
| 745 | + null, |
| 746 | + DEFAULT_ENDPOINT); |
| 747 | + |
| 748 | + ClientSettings.Builder builder = |
| 749 | + new FakeClientSettings.Builder() |
| 750 | + .setExecutorProvider( |
| 751 | + FixedExecutorProvider.create(Mockito.mock(ScheduledExecutorService.class))) |
| 752 | + .setTransportChannelProvider(transportChannelProvider) |
| 753 | + .setCredentialsProvider(credentialsProvider) |
| 754 | + .setInternalHeaderProvider(headerProvider); |
| 755 | + |
| 756 | + ClientContext clientContext = ClientContext.create(builder.build()); |
| 757 | + FakeTransportChannel transportChannel = |
| 758 | + (FakeTransportChannel) clientContext.getTransportChannel(); |
| 759 | + return transportChannel.getHeaders(); |
| 760 | + } |
| 761 | + |
680 | 762 | private static String endpoint = "https://foo.googleapis.com";
|
681 | 763 | private static String mtlsEndpoint = "https://foo.mtls.googleapis.com";
|
682 | 764 |
|
|
0 commit comments