From 8127a92a28c13e295d6ad618f707c1e817aa92b2 Mon Sep 17 00:00:00 2001 From: Vaughan Knight Date: Tue, 18 Jun 2024 17:48:20 +1000 Subject: [PATCH] Updated to add authentication client to the service builder for the tests Updated to add authentication client to the service builder for the tests. All tests now passing. --- .../src/Client/WattTimeClient.cs | 2 +- .../ServiceCollectionExtensions.cs | 20 +++++++++++------- .../ServiceCollectionExtensionTests.cs | 21 +++++++++++-------- 3 files changed, 25 insertions(+), 18 deletions(-) diff --git a/src/CarbonAware.DataSources/CarbonAware.DataSources.WattTime/src/Client/WattTimeClient.cs b/src/CarbonAware.DataSources/CarbonAware.DataSources.WattTime/src/Client/WattTimeClient.cs index 670b34a4f..d602828c8 100644 --- a/src/CarbonAware.DataSources/CarbonAware.DataSources.WattTime/src/Client/WattTimeClient.cs +++ b/src/CarbonAware.DataSources/CarbonAware.DataSources.WattTime/src/Client/WattTimeClient.cs @@ -215,7 +215,7 @@ private async Task GetStreamWithAuthRetryAsync(string uriPath) private async Task EnsureTokenAsync() { - if (this._authenticationClient.DefaultRequestHeaders.Authorization == null) + if (this._client.DefaultRequestHeaders.Authorization == null) { await this.UpdateAuthTokenAsync(); } diff --git a/src/CarbonAware.DataSources/CarbonAware.DataSources.WattTime/src/Configuration/ServiceCollectionExtensions.cs b/src/CarbonAware.DataSources/CarbonAware.DataSources.WattTime/src/Configuration/ServiceCollectionExtensions.cs index b3ba9d358..d05f1a33a 100644 --- a/src/CarbonAware.DataSources/CarbonAware.DataSources.WattTime/src/Configuration/ServiceCollectionExtensions.cs +++ b/src/CarbonAware.DataSources/CarbonAware.DataSources.WattTime/src/Configuration/ServiceCollectionExtensions.cs @@ -39,6 +39,7 @@ private static void AddWattTimeClient(IServiceCollection services, IConfiguratio }); var httpClientBuilder = services.AddHttpClient(IWattTimeClient.NamedClient); + var authenticationClientBuilder = services.AddHttpClient(IWattTimeClient.NamedAuthenticationClient); var Proxy = configSection.GetSection("Proxy").Get(); if (Proxy != null && Proxy.UseProxy == true) @@ -47,15 +48,18 @@ private static void AddWattTimeClient(IServiceCollection services, IConfiguratio { throw new Exceptions.ConfigurationException("Proxy Url is not configured."); } - httpClientBuilder.ConfigurePrimaryHttpMessageHandler(() => - new HttpClientHandler() { - Proxy = new WebProxy { - Address = new Uri(Proxy.Url), - Credentials = new NetworkCredential(Proxy.Username, Proxy.Password), - BypassProxyOnLocal = true - } + var handler = new HttpClientHandler() + { + Proxy = new WebProxy + { + Address = new Uri(Proxy.Url), + Credentials = new NetworkCredential(Proxy.Username, Proxy.Password), + BypassProxyOnLocal = true } - ); + }; + + httpClientBuilder.ConfigurePrimaryHttpMessageHandler(() => handler ); + authenticationClientBuilder.ConfigurePrimaryHttpMessageHandler(() => handler ); } services.TryAddSingleton(); } diff --git a/src/CarbonAware.DataSources/CarbonAware.DataSources.WattTime/test/Configuration/ServiceCollectionExtensionTests.cs b/src/CarbonAware.DataSources/CarbonAware.DataSources.WattTime/test/Configuration/ServiceCollectionExtensionTests.cs index 653b2f18e..f6ee78614 100644 --- a/src/CarbonAware.DataSources/CarbonAware.DataSources.WattTime/test/Configuration/ServiceCollectionExtensionTests.cs +++ b/src/CarbonAware.DataSources/CarbonAware.DataSources.WattTime/test/Configuration/ServiceCollectionExtensionTests.cs @@ -26,8 +26,10 @@ class ServiceCollectionExtensionTests private readonly string ProxyPassword = $"DataSources:Configurations:WattTimeTest:Proxy:Password"; private readonly string UseProxyKey = $"DataSources:Configurations:WattTimeTest:Proxy:UseProxy"; + + [Test] - public void ClientProxyTest_With_Invalid_ProxyURL_ThrowsException() + public void ClientProxyTest_With_Missing_ProxyURL_ThrowsException() { // Arrange var settings = new Dictionary { @@ -35,7 +37,6 @@ public void ClientProxyTest_With_Invalid_ProxyURL_ThrowsException() { EmissionsDataSourceKey, EmissionsDataSourceValue }, { UsernameKey, Username }, { PasswordKey, Password }, - { ProxyUrl, "http://fakeproxy:8080" }, { UseProxyKey, "true" }, }; @@ -44,16 +45,14 @@ public void ClientProxyTest_With_Invalid_ProxyURL_ThrowsException() .AddEnvironmentVariables() .Build(); var serviceCollection = new ServiceCollection(); - serviceCollection.AddWattTimeForecastDataSource(configuration.DataSources()); - var serviceProvider = serviceCollection.BuildServiceProvider(); - var client = serviceProvider.GetRequiredService(); // Act & Assert - Assert.ThrowsAsync(async () => await client.GetRegionAsync("lat", "long")); + Assert.Throws(() => serviceCollection.AddWattTimeForecastDataSource(configuration.DataSources())); + Assert.Throws(() => serviceCollection.AddWattTimeEmissionsDataSource(configuration.DataSources())); } [Test] - public void ClientProxyTest_With_Missing_ProxyURL_ThrowsException() + public void ClientProxyTest_With_Invalid_ProxyURL_ThrowsException() { // Arrange var settings = new Dictionary { @@ -61,6 +60,7 @@ public void ClientProxyTest_With_Missing_ProxyURL_ThrowsException() { EmissionsDataSourceKey, EmissionsDataSourceValue }, { UsernameKey, Username }, { PasswordKey, Password }, + { ProxyUrl, "http://fakeproxy:8080" }, { UseProxyKey, "true" }, }; @@ -69,10 +69,13 @@ public void ClientProxyTest_With_Missing_ProxyURL_ThrowsException() .AddEnvironmentVariables() .Build(); var serviceCollection = new ServiceCollection(); + serviceCollection.AddWattTimeForecastDataSource(configuration.DataSources()); + + var serviceProvider = serviceCollection.BuildServiceProvider(); + var client = serviceProvider.GetRequiredService(); // Act & Assert - Assert.Throws(() => serviceCollection.AddWattTimeForecastDataSource(configuration.DataSources())); - Assert.Throws(() => serviceCollection.AddWattTimeEmissionsDataSource(configuration.DataSources())); + Assert.ThrowsAsync(async () => await client.GetRegionAsync("lat", "long")); } [TestCase(true, TestName = "ClientProxyTest, successful: denotes adding WattTime data sources using proxy.")]