From 29969b46457ceff0e8df34990fecd854b8698ffe Mon Sep 17 00:00:00 2001 From: Anton Firszov Date: Fri, 26 Feb 2021 15:03:16 +0100 Subject: [PATCH 1/3] HttpClientHandlerTestBase.AllowAllCertificates should not be static --- .../tests/System/Net/Http/HttpClientHandlerTestBase.cs | 2 +- .../HttpClientHandlerTestBase.WinHttpHandler.cs | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/libraries/Common/tests/System/Net/Http/HttpClientHandlerTestBase.cs b/src/libraries/Common/tests/System/Net/Http/HttpClientHandlerTestBase.cs index 26a084b969f20..8e6425c7c1dde 100644 --- a/src/libraries/Common/tests/System/Net/Http/HttpClientHandlerTestBase.cs +++ b/src/libraries/Common/tests/System/Net/Http/HttpClientHandlerTestBase.cs @@ -40,7 +40,7 @@ public HttpClientHandlerTestBase(ITestOutputHelper output) #endif }; - protected static HttpClient CreateHttpClient(string useVersionString) => + protected HttpClient CreateHttpClient(string useVersionString) => CreateHttpClient(CreateHttpClientHandler(useVersionString), useVersionString); protected static HttpClient CreateHttpClient(HttpMessageHandler handler, string useVersionString) => diff --git a/src/libraries/System.Net.Http.WinHttpHandler/tests/FunctionalTests/HttpClientHandlerTestBase.WinHttpHandler.cs b/src/libraries/System.Net.Http.WinHttpHandler/tests/FunctionalTests/HttpClientHandlerTestBase.WinHttpHandler.cs index 5db2752855044..02e4d349374f8 100644 --- a/src/libraries/System.Net.Http.WinHttpHandler/tests/FunctionalTests/HttpClientHandlerTestBase.WinHttpHandler.cs +++ b/src/libraries/System.Net.Http.WinHttpHandler/tests/FunctionalTests/HttpClientHandlerTestBase.WinHttpHandler.cs @@ -10,9 +10,9 @@ public abstract partial class HttpClientHandlerTestBase : FileCleanupTestBase { protected static bool IsWinHttpHandler => true; - protected static bool AllowAllCertificates { get; set; } = true; + protected bool AllowAllCertificates { get; set; } = true; - protected static WinHttpClientHandler CreateHttpClientHandler(Version useVersion = null) + protected WinHttpClientHandler CreateHttpClientHandler(Version useVersion = null) { useVersion ??= HttpVersion.Version11; @@ -28,7 +28,7 @@ protected static WinHttpClientHandler CreateHttpClientHandler(Version useVersion protected WinHttpClientHandler CreateHttpClientHandler() => CreateHttpClientHandler(UseVersion); - protected static WinHttpClientHandler CreateHttpClientHandler(string useVersionString) => + protected WinHttpClientHandler CreateHttpClientHandler(string useVersionString) => CreateHttpClientHandler(Version.Parse(useVersionString)); protected static HttpRequestMessage CreateRequest(HttpMethod method, Uri uri, Version version, bool exactVersion = false) => From 0332b0e3d8a904218b0fdda135b15980ad738434 Mon Sep 17 00:00:00 2001 From: Anton Firszov Date: Fri, 26 Feb 2021 17:25:55 +0100 Subject: [PATCH 2/3] revert previous attempt --- .../tests/System/Net/Http/HttpClientHandlerTestBase.cs | 2 +- .../HttpClientHandlerTestBase.WinHttpHandler.cs | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/libraries/Common/tests/System/Net/Http/HttpClientHandlerTestBase.cs b/src/libraries/Common/tests/System/Net/Http/HttpClientHandlerTestBase.cs index 8e6425c7c1dde..26a084b969f20 100644 --- a/src/libraries/Common/tests/System/Net/Http/HttpClientHandlerTestBase.cs +++ b/src/libraries/Common/tests/System/Net/Http/HttpClientHandlerTestBase.cs @@ -40,7 +40,7 @@ public HttpClientHandlerTestBase(ITestOutputHelper output) #endif }; - protected HttpClient CreateHttpClient(string useVersionString) => + protected static HttpClient CreateHttpClient(string useVersionString) => CreateHttpClient(CreateHttpClientHandler(useVersionString), useVersionString); protected static HttpClient CreateHttpClient(HttpMessageHandler handler, string useVersionString) => diff --git a/src/libraries/System.Net.Http.WinHttpHandler/tests/FunctionalTests/HttpClientHandlerTestBase.WinHttpHandler.cs b/src/libraries/System.Net.Http.WinHttpHandler/tests/FunctionalTests/HttpClientHandlerTestBase.WinHttpHandler.cs index 02e4d349374f8..5db2752855044 100644 --- a/src/libraries/System.Net.Http.WinHttpHandler/tests/FunctionalTests/HttpClientHandlerTestBase.WinHttpHandler.cs +++ b/src/libraries/System.Net.Http.WinHttpHandler/tests/FunctionalTests/HttpClientHandlerTestBase.WinHttpHandler.cs @@ -10,9 +10,9 @@ public abstract partial class HttpClientHandlerTestBase : FileCleanupTestBase { protected static bool IsWinHttpHandler => true; - protected bool AllowAllCertificates { get; set; } = true; + protected static bool AllowAllCertificates { get; set; } = true; - protected WinHttpClientHandler CreateHttpClientHandler(Version useVersion = null) + protected static WinHttpClientHandler CreateHttpClientHandler(Version useVersion = null) { useVersion ??= HttpVersion.Version11; @@ -28,7 +28,7 @@ protected WinHttpClientHandler CreateHttpClientHandler(Version useVersion = null protected WinHttpClientHandler CreateHttpClientHandler() => CreateHttpClientHandler(UseVersion); - protected WinHttpClientHandler CreateHttpClientHandler(string useVersionString) => + protected static WinHttpClientHandler CreateHttpClientHandler(string useVersionString) => CreateHttpClientHandler(Version.Parse(useVersionString)); protected static HttpRequestMessage CreateRequest(HttpMethod method, Uri uri, Version version, bool exactVersion = false) => From 05b85ab1e5236c2344893df647404adf333b30c8 Mon Sep 17 00:00:00 2001 From: Anton Firszov Date: Mon, 1 Mar 2021 12:25:42 +0100 Subject: [PATCH 3/3] AllowAllCertificates: use parameter instead of static property --- .../HttpClientHandlerTest.ServerCertificates.cs | 14 +++++++++++--- .../HttpClientHandlerTestBase.WinHttpHandler.cs | 6 ++---- .../tests/FunctionalTests/PlatformHandlerTest.cs | 2 +- ...HttpClientHandlerTestBase.SocketsHttpHandler.cs | 4 ++-- 4 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/libraries/Common/tests/System/Net/Http/HttpClientHandlerTest.ServerCertificates.cs b/src/libraries/Common/tests/System/Net/Http/HttpClientHandlerTest.ServerCertificates.cs index 973a10967a452..64e0017d18fdd 100644 --- a/src/libraries/Common/tests/System/Net/Http/HttpClientHandlerTest.ServerCertificates.cs +++ b/src/libraries/Common/tests/System/Net/Http/HttpClientHandlerTest.ServerCertificates.cs @@ -30,6 +30,10 @@ public abstract partial class HttpClientHandler_ServerCertificates_Test : HttpCl public HttpClientHandler_ServerCertificates_Test(ITestOutputHelper output) : base(output) { } + // This enables customizing ServerCertificateCustomValidationCallback in WinHttpHandler variants: + protected bool AllowAllHttp2Certificates { get; set; } = true; + protected new HttpClientHandler CreateHttpClientHandler() => CreateHttpClientHandler(UseVersion, allowAllHttp2Certificates: AllowAllHttp2Certificates); + [Fact] public void Ctor_ExpectedDefaultValues() { @@ -451,15 +455,19 @@ public void HttpClientUsesSslCertEnvironmentVariables() File.WriteAllText(sslCertFile, ""); psi.Environment.Add("SSL_CERT_FILE", sslCertFile); - RemoteExecutor.Invoke(async (useVersionString) => + RemoteExecutor.Invoke(async (useVersionString, allowAllHttp2CertificatesString) => { const string Url = "https://www.microsoft.com"; - using (HttpClient client = CreateHttpClient(useVersionString)) + HttpClientHandler handler = CreateHttpClientHandler( + Version.Parse(useVersionString), + allowAllHttp2Certificates: bool.Parse(allowAllHttp2CertificatesString)); + + using (HttpClient client = CreateHttpClient(handler, useVersionString)) { await Assert.ThrowsAsync(() => client.GetAsync(Url)); } - }, UseVersion.ToString(), new RemoteInvokeOptions { StartInfo = psi }).Dispose(); + }, UseVersion.ToString(), AllowAllHttp2Certificates.ToString(), new RemoteInvokeOptions { StartInfo = psi }).Dispose(); } } } diff --git a/src/libraries/System.Net.Http.WinHttpHandler/tests/FunctionalTests/HttpClientHandlerTestBase.WinHttpHandler.cs b/src/libraries/System.Net.Http.WinHttpHandler/tests/FunctionalTests/HttpClientHandlerTestBase.WinHttpHandler.cs index 5db2752855044..9c8289ec78934 100644 --- a/src/libraries/System.Net.Http.WinHttpHandler/tests/FunctionalTests/HttpClientHandlerTestBase.WinHttpHandler.cs +++ b/src/libraries/System.Net.Http.WinHttpHandler/tests/FunctionalTests/HttpClientHandlerTestBase.WinHttpHandler.cs @@ -10,15 +10,13 @@ public abstract partial class HttpClientHandlerTestBase : FileCleanupTestBase { protected static bool IsWinHttpHandler => true; - protected static bool AllowAllCertificates { get; set; } = true; - - protected static WinHttpClientHandler CreateHttpClientHandler(Version useVersion = null) + protected static WinHttpClientHandler CreateHttpClientHandler(Version useVersion = null, bool allowAllHttp2Certificates = true) { useVersion ??= HttpVersion.Version11; WinHttpClientHandler handler = new WinHttpClientHandler(useVersion); - if (useVersion >= HttpVersion20.Value && AllowAllCertificates) + if (useVersion >= HttpVersion20.Value && allowAllHttp2Certificates) { handler.ServerCertificateCustomValidationCallback = TestHelper.AllowAllCertificates; } diff --git a/src/libraries/System.Net.Http.WinHttpHandler/tests/FunctionalTests/PlatformHandlerTest.cs b/src/libraries/System.Net.Http.WinHttpHandler/tests/FunctionalTests/PlatformHandlerTest.cs index 058bfaee00fc4..6a53fbc9c0d42 100644 --- a/src/libraries/System.Net.Http.WinHttpHandler/tests/FunctionalTests/PlatformHandlerTest.cs +++ b/src/libraries/System.Net.Http.WinHttpHandler/tests/FunctionalTests/PlatformHandlerTest.cs @@ -277,7 +277,7 @@ public sealed class PlatformHandler_HttpClientHandler_ServerCertificates_Http2_T protected override Version UseVersion => HttpVersion20.Value; public PlatformHandler_HttpClientHandler_ServerCertificates_Http2_Test(ITestOutputHelper output) : base(output) { - AllowAllCertificates = false; + AllowAllHttp2Certificates = false; } } diff --git a/src/libraries/System.Net.Http/tests/FunctionalTests/HttpClientHandlerTestBase.SocketsHttpHandler.cs b/src/libraries/System.Net.Http/tests/FunctionalTests/HttpClientHandlerTestBase.SocketsHttpHandler.cs index d7c377cde7ad1..3ea69bb51bb03 100644 --- a/src/libraries/System.Net.Http/tests/FunctionalTests/HttpClientHandlerTestBase.SocketsHttpHandler.cs +++ b/src/libraries/System.Net.Http/tests/FunctionalTests/HttpClientHandlerTestBase.SocketsHttpHandler.cs @@ -18,13 +18,13 @@ public abstract partial class HttpClientHandlerTestBase : FileCleanupTestBase public static bool IsMsQuicSupported => QuicImplementationProviders.MsQuic.IsSupported; - protected static HttpClientHandler CreateHttpClientHandler(Version useVersion = null, QuicImplementationProvider quicImplementationProvider = null) + protected static HttpClientHandler CreateHttpClientHandler(Version useVersion = null, QuicImplementationProvider quicImplementationProvider = null, bool allowAllHttp2Certificates = true) { useVersion ??= HttpVersion.Version11; HttpClientHandler handler = (PlatformDetection.SupportsAlpn && useVersion != HttpVersion.Version30) ? new HttpClientHandler() : new VersionHttpClientHandler(useVersion); - if (useVersion >= HttpVersion.Version20) + if (useVersion >= HttpVersion.Version20 && allowAllHttp2Certificates) { handler.ServerCertificateCustomValidationCallback = TestHelper.AllowAllCertificates; }