From 88e04276dab0f5e941be85db9360d09cfe71f151 Mon Sep 17 00:00:00 2001 From: Javad Rahnama Date: Wed, 29 Mar 2023 11:42:44 -0700 Subject: [PATCH 1/5] Dropping reference to Microsoft.Win32.Registry in netcore as the package is shipped with net6. --- .../netcore/src/Microsoft.Data.SqlClient.csproj | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj index 759858f7e6..250dec5be3 100644 --- a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj +++ b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj @@ -939,9 +939,6 @@ - - - From 4e5bbacb7ec7541d89899d08a2410edf8b870096 Mon Sep 17 00:00:00 2001 From: Javad Rahnama Date: Thu, 30 Mar 2023 15:40:12 -0700 Subject: [PATCH 2/5] Enabling related tests --- .../ManualTests/DataCommon/DataTestUtility.cs | 2 ++ .../SQL/ConnectivityTests/ConnectivityTest.cs | 16 ++++++---------- .../Config.cs | 2 +- .../config.default.json | 3 ++- 4 files changed, 11 insertions(+), 12 deletions(-) diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/DataCommon/DataTestUtility.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/DataCommon/DataTestUtility.cs index b6a7cff18f..ca61fb0fb9 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/DataCommon/DataTestUtility.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/DataCommon/DataTestUtility.cs @@ -60,6 +60,7 @@ public static class DataTestUtility public static readonly bool IsDNSCachingSupportedCR = false; // this is for the control ring public static readonly bool IsDNSCachingSupportedTR = false; // this is for the tenant ring public static readonly string UserManagedIdentityClientId = null; + public static readonly string AliasName = null; public static readonly string EnclaveAzureDatabaseConnString = null; @@ -117,6 +118,7 @@ static DataTestUtility() KerberosDomainUser = c.KerberosDomainUser; ManagedIdentitySupported = c.ManagedIdentitySupported; IsManagedInstance = c.IsManagedInstance; + AliasName = c.AliasName; System.Net.ServicePointManager.SecurityProtocol |= System.Net.SecurityProtocolType.Tls12; diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ConnectivityTests/ConnectivityTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ConnectivityTests/ConnectivityTest.cs index 489a414ce9..eff6e373cb 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ConnectivityTests/ConnectivityTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ConnectivityTests/ConnectivityTest.cs @@ -4,6 +4,7 @@ using System; using System.Collections.Generic; +using System.Data; using System.Diagnostics; using System.Runtime.InteropServices; using System.Security.Principal; @@ -431,11 +432,6 @@ public static void ConnectionAliasTest() throw new Exception("Alias test only valid on Windows"); } - if (!CanCreateAliases()) - { - throw new Exception("Unable to create aliases in this environment. Windows + Admin + non-instance data source required."); - } - SqlConnectionStringBuilder b = new(DataTestUtility.TCPConnectionString); if (!DataTestUtility.ParseDataSource(b.DataSource, out string hostname, out int port, out string instanceName) || !string.IsNullOrEmpty(instanceName)) @@ -444,17 +440,17 @@ public static void ConnectionAliasTest() throw new Exception("Unable to create aliases in this configuration. Parsable data source without instance required."); } - b.DataSource = "TESTALIAS-" + Guid.NewGuid().ToString().Replace("-", ""); - using RegistryKey key = Registry.LocalMachine.OpenSubKey(ConnectToPath, true); - key.SetValue(b.DataSource, "DBMSSOCN," + hostname + "," + (port == -1 ? 1433 : port)); try { + b.DataSource = DataTestUtility.AliasName; using SqlConnection sqlConnection = new(b.ConnectionString); + Assert.Equal(DataTestUtility.AliasName, b.DataSource); sqlConnection.Open(); + Assert.Equal(ConnectionState.Open, sqlConnection.State); } - finally + catch(SqlException ex) { - key.DeleteValue(b.DataSource); + Assert.Fail(ex.Message); } } diff --git a/src/Microsoft.Data.SqlClient/tests/tools/Microsoft.Data.SqlClient.TestUtilities/Config.cs b/src/Microsoft.Data.SqlClient/tests/tools/Microsoft.Data.SqlClient.TestUtilities/Config.cs index 47aad75eec..49c368c790 100644 --- a/src/Microsoft.Data.SqlClient/tests/tools/Microsoft.Data.SqlClient.TestUtilities/Config.cs +++ b/src/Microsoft.Data.SqlClient/tests/tools/Microsoft.Data.SqlClient.TestUtilities/Config.cs @@ -44,7 +44,7 @@ public class Config public string KerberosDomainPassword = null; public string KerberosDomainUser = null; public bool IsManagedInstance = false; - + public string AliasName = null; public static Config Load(string configPath = @"config.json") { try diff --git a/src/Microsoft.Data.SqlClient/tests/tools/Microsoft.Data.SqlClient.TestUtilities/config.default.json b/src/Microsoft.Data.SqlClient/tests/tools/Microsoft.Data.SqlClient.TestUtilities/config.default.json index 37f7c9184d..411f4ad88f 100644 --- a/src/Microsoft.Data.SqlClient/tests/tools/Microsoft.Data.SqlClient.TestUtilities/config.default.json +++ b/src/Microsoft.Data.SqlClient/tests/tools/Microsoft.Data.SqlClient.TestUtilities/config.default.json @@ -30,5 +30,6 @@ "EnclaveAzureDatabaseConnString": "", "ManagedIdentitySupported": true, "UserManagedIdentityClientId": "", - "PowerShellPath": "" + "PowerShellPath": "", + "AliasName": "" } From 86cf553f7e1cce9d87ed3ddbbcdca653c0fe4fc7 Mon Sep 17 00:00:00 2001 From: Javad Rahnama Date: Thu, 30 Mar 2023 20:12:40 -0700 Subject: [PATCH 3/5] commit --- .../SQL/ConnectivityTests/ConnectivityTest.cs | 48 ++----------------- 1 file changed, 3 insertions(+), 45 deletions(-) diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ConnectivityTests/ConnectivityTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ConnectivityTests/ConnectivityTest.cs index eff6e373cb..5c8c8a734f 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ConnectivityTests/ConnectivityTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ConnectivityTests/ConnectivityTest.cs @@ -370,7 +370,7 @@ public static void ConnectionOpenDisableRetry() { InitialCatalog = "DoesNotExist0982532435423", Pooling = false, - ConnectTimeout=15 + ConnectTimeout = 15 }; using SqlConnection sqlConnection = new(connectionStringBuilder.ConnectionString); Stopwatch timer = new(); @@ -388,43 +388,8 @@ public static void ConnectionOpenDisableRetry() Assert.True(duration.Seconds > 5, $"Connection Open() with retries took less time than expected. Expect > 5 sec with transient fault handling. Took {duration.Seconds} sec."); // sqlConnection.Open(); } - private const string ConnectToPath = "SOFTWARE\\Microsoft\\MSSQLServer\\Client\\ConnectTo"; - private static bool CanCreateAliases() - { - if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows) || - !DataTestUtility.IsTCPConnStringSetup()) - { - return false; - } - - using (WindowsIdentity identity = WindowsIdentity.GetCurrent()) - { - WindowsPrincipal principal = new(identity); - if (!principal.IsInRole(WindowsBuiltInRole.Administrator)) - { - return false; - } - } - - using RegistryKey key = Registry.LocalMachine.OpenSubKey(ConnectToPath, true); - if (key == null) - { - // Registry not writable - return false; - } - - SqlConnectionStringBuilder b = new(DataTestUtility.TCPConnectionString); - if (!DataTestUtility.ParseDataSource(b.DataSource, out string hostname, out int port, out string instanceName) || - !string.IsNullOrEmpty(instanceName)) - { - return false; - } - - return true; - } - [PlatformSpecific(TestPlatforms.Windows)] - [ConditionalFact(nameof(CanCreateAliases))] + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] public static void ConnectionAliasTest() { if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) @@ -433,13 +398,6 @@ public static void ConnectionAliasTest() } SqlConnectionStringBuilder b = new(DataTestUtility.TCPConnectionString); - if (!DataTestUtility.ParseDataSource(b.DataSource, out string hostname, out int port, out string instanceName) || - !string.IsNullOrEmpty(instanceName)) - { - // Only works with connection strings that parse successfully and don't include an instance name - throw new Exception("Unable to create aliases in this configuration. Parsable data source without instance required."); - } - try { b.DataSource = DataTestUtility.AliasName; @@ -448,7 +406,7 @@ public static void ConnectionAliasTest() sqlConnection.Open(); Assert.Equal(ConnectionState.Open, sqlConnection.State); } - catch(SqlException ex) + catch (SqlException ex) { Assert.Fail(ex.Message); } From 59442bb32f1045fa70e0e1afd9879cb874fbdb03 Mon Sep 17 00:00:00 2001 From: Javad Rahnama Date: Fri, 31 Mar 2023 11:36:16 -0700 Subject: [PATCH 4/5] commit --- .../ManualTests/DataCommon/DataTestUtility.cs | 4 ++++ .../SQL/ConnectivityTests/ConnectivityTest.cs | 15 ++++++--------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/DataCommon/DataTestUtility.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/DataCommon/DataTestUtility.cs index ca61fb0fb9..6b4aa16792 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/DataCommon/DataTestUtility.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/DataCommon/DataTestUtility.cs @@ -302,6 +302,10 @@ public static bool AreConnStringsSetup() return !string.IsNullOrEmpty(NPConnectionString) && !string.IsNullOrEmpty(TCPConnectionString); } + public static bool IsSQLAliasSetup() + { + return !string.IsNullOrEmpty(AliasName); + } public static bool IsTCPConnStringSetup() { return !string.IsNullOrEmpty(TCPConnectionString); diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ConnectivityTests/ConnectivityTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ConnectivityTests/ConnectivityTest.cs index 5c8c8a734f..ea0f183206 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ConnectivityTests/ConnectivityTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ConnectivityTests/ConnectivityTest.cs @@ -389,20 +389,17 @@ public static void ConnectionOpenDisableRetry() } [PlatformSpecific(TestPlatforms.Windows)] - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsSQLAliasSetup))] public static void ConnectionAliasTest() { - if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + SqlConnectionStringBuilder builder = new(DataTestUtility.TCPConnectionString) { - throw new Exception("Alias test only valid on Windows"); - } - - SqlConnectionStringBuilder b = new(DataTestUtility.TCPConnectionString); + DataSource = DataTestUtility.AliasName + }; + using SqlConnection sqlConnection = new(builder.ConnectionString); + Assert.Equal(DataTestUtility.AliasName, builder.DataSource); try { - b.DataSource = DataTestUtility.AliasName; - using SqlConnection sqlConnection = new(b.ConnectionString); - Assert.Equal(DataTestUtility.AliasName, b.DataSource); sqlConnection.Open(); Assert.Equal(ConnectionState.Open, sqlConnection.State); } From 20e3860aeffab9161496883d411c68a4bfa9f2b5 Mon Sep 17 00:00:00 2001 From: Javad Rahnama Date: Fri, 31 Mar 2023 21:57:07 -0700 Subject: [PATCH 5/5] commit --- .../ManualTests/SQL/ConnectivityTests/ConnectivityTest.cs | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ConnectivityTests/ConnectivityTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ConnectivityTests/ConnectivityTest.cs index ea0f183206..15aa818c37 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ConnectivityTests/ConnectivityTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ConnectivityTests/ConnectivityTest.cs @@ -6,10 +6,7 @@ using System.Collections.Generic; using System.Data; using System.Diagnostics; -using System.Runtime.InteropServices; -using System.Security.Principal; using System.Threading; -using Microsoft.Win32; using Xunit; namespace Microsoft.Data.SqlClient.ManualTesting.Tests