From b12dea91bbc2cc3f59488b3d598c6e6ed59db5c4 Mon Sep 17 00:00:00 2001 From: Ben Russell Date: Mon, 22 Sep 2025 17:31:10 -0500 Subject: [PATCH 1/2] Reactivate: OpeningConnectionWithGoodCertificateTest, OpeningConnectionWithHnicTest --- .../CertificateTest.cs | 30 +++++++++---------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ConnectionTestWithSSLCert/CertificateTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ConnectionTestWithSSLCert/CertificateTest.cs index 1a177c5c39..86f59ded3f 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ConnectionTestWithSSLCert/CertificateTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ConnectionTestWithSSLCert/CertificateTest.cs @@ -18,6 +18,7 @@ namespace Microsoft.Data.SqlClient.ManualTesting.Tests { + [PlatformSpecific(TestPlatforms.Windows)] public class CertificateTest : IDisposable { #region Private Fields @@ -75,10 +76,11 @@ public CertificateTest() SlashInstanceName = $"\\{InstanceName}"; } - Assert.True(DataTestUtility.IsAdmin, "CertificateTest class needs to be run in Admin mode."); - - CreateValidCertificate(s_fullPathToPowershellScript); - _thumbprint = Environment.GetEnvironmentVariable(ThumbPrintEnvName, EnvironmentVariableTarget.Machine); + if (IsAdmin()) + { + CreateValidCertificate(s_fullPathToPowershellScript); + _thumbprint = Environment.GetEnvironmentVariable(ThumbPrintEnvName, EnvironmentVariableTarget.Machine); + } } private static bool IsLocalHost() @@ -89,19 +91,18 @@ private static bool IsLocalHost() } private static bool AreConnStringsSetup() => DataTestUtility.AreConnStringsSetup(); + private static bool IsAdmin() => DataTestUtility.IsAdmin; private static bool IsNotAzureServer() => DataTestUtility.IsNotAzureServer(); private static bool UseManagedSNIOnWindows() => DataTestUtility.UseManagedSNIOnWindows; - [ActiveIssue("31754")] - [ConditionalFact(nameof(AreConnStringsSetup), nameof(IsNotAzureServer), nameof(IsLocalHost))] - [PlatformSpecific(TestPlatforms.Windows)] - public void OpenningConnectionWithGoodCertificateTest() + [ConditionalFact(nameof(AreConnStringsSetup), nameof(IsNotAzureServer), nameof(IsLocalHost), nameof(IsAdmin))] + public void OpeningConnectionWithGoodCertificateTest() { SqlConnectionStringBuilder builder = new(DataTestUtility.TCPConnectionString); // confirm that ForceEncryption is enabled - using SqlConnection notEncryptedConnection = new(builder.ConnectionString); builder.Encrypt = SqlConnectionEncryptOption.Optional; + using SqlConnection notEncryptedConnection = new(builder.ConnectionString); notEncryptedConnection.Open(); Assert.Equal(ConnectionState.Open, notEncryptedConnection.State); @@ -122,10 +123,8 @@ public void OpenningConnectionWithGoodCertificateTest() // Provided hostname in certificate are: // localhost, FQDN, Loopback IPv4: 127.0.0.1, IPv6: ::1 - [ActiveIssue("31754")] - [ConditionalFact(nameof(AreConnStringsSetup), nameof(IsNotAzureServer), nameof(IsLocalHost))] - [PlatformSpecific(TestPlatforms.Windows)] - public void OpeningConnectionWitHNICTest() + [ConditionalFact(nameof(AreConnStringsSetup), nameof(IsNotAzureServer), nameof(IsLocalHost), nameof(IsAdmin))] + public void OpeningConnectionWitHnicTest() { // Mandatory SqlConnectionStringBuilder builder = new(DataTestUtility.TCPConnectionString) @@ -143,7 +142,7 @@ public void OpeningConnectionWitHNICTest() Assert.Equal(ConnectionState.Open, connection.State); // Ipv6 however causes name mistmatch error - // In net6 Manged SNI does not check for SAN. Therefore Application using Net6 have to use FQDN as HNIC + // In net6 Manged SNI does not check for SAN. Therefore, Application using Net6 have to use FQDN as HNIC // According to above no other hostname in certificate than FQDN will work in net6 which is same as SubjectName in case of RemoteCertificateNameMismatch // Net7.0 the new API added by dotnet runtime will check SANS and then SubjectName @@ -166,8 +165,7 @@ public void OpeningConnectionWitHNICTest() } } - [ConditionalFact(nameof(AreConnStringsSetup), nameof(UseManagedSNIOnWindows), nameof(IsNotAzureServer), nameof(IsLocalHost))] - [PlatformSpecific(TestPlatforms.Windows)] + [ConditionalFact(nameof(AreConnStringsSetup), nameof(UseManagedSNIOnWindows), nameof(IsNotAzureServer), nameof(IsLocalHost), nameof(IsAdmin))] public void RemoteCertificateNameMismatchErrorTest() { SqlConnectionStringBuilder builder = new(DataTestUtility.TCPConnectionString) From 71364e3a89063b815fd445f6be8e03728feaf5e2 Mon Sep 17 00:00:00 2001 From: Ben Russell Date: Mon, 22 Sep 2025 17:35:24 -0500 Subject: [PATCH 2/2] Fix name --- .../SQL/ConnectionTestWithSSLCert/CertificateTest.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ConnectionTestWithSSLCert/CertificateTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ConnectionTestWithSSLCert/CertificateTest.cs index 86f59ded3f..fbc7cd222a 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ConnectionTestWithSSLCert/CertificateTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ConnectionTestWithSSLCert/CertificateTest.cs @@ -124,7 +124,7 @@ public void OpeningConnectionWithGoodCertificateTest() // Provided hostname in certificate are: // localhost, FQDN, Loopback IPv4: 127.0.0.1, IPv6: ::1 [ConditionalFact(nameof(AreConnStringsSetup), nameof(IsNotAzureServer), nameof(IsLocalHost), nameof(IsAdmin))] - public void OpeningConnectionWitHnicTest() + public void OpeningConnectionWithNicTest() { // Mandatory SqlConnectionStringBuilder builder = new(DataTestUtility.TCPConnectionString)