From 91d3a547b75cd27b72786aa8f062981552330055 Mon Sep 17 00:00:00 2001 From: Javad Date: Mon, 3 Apr 2023 09:47:03 -0700 Subject: [PATCH] Fix | Dropping reference to Microsoft.Win32.Registry in netcore. (#1974) --- .../src/Microsoft.Data.SqlClient.csproj | 3 - .../ManualTests/DataCommon/DataTestUtility.cs | 6 ++ .../SQL/ConnectivityTests/ConnectivityTest.cs | 74 +++---------------- .../Config.cs | 2 +- .../config.default.json | 3 +- 5 files changed, 20 insertions(+), 68 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 b6e633f20a..1fca19aac8 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 @@ - - - diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/DataCommon/DataTestUtility.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/DataCommon/DataTestUtility.cs index b6a7cff18f..6b4aa16792 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; @@ -300,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 489a414ce9..15aa818c37 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ConnectivityTests/ConnectivityTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ConnectivityTests/ConnectivityTest.cs @@ -4,11 +4,9 @@ using System; 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 @@ -369,7 +367,7 @@ public static void ConnectionOpenDisableRetry() { InitialCatalog = "DoesNotExist0982532435423", Pooling = false, - ConnectTimeout=15 + ConnectTimeout = 15 }; using SqlConnection sqlConnection = new(connectionStringBuilder.ConnectionString); Stopwatch timer = new(); @@ -387,74 +385,24 @@ 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), nameof(DataTestUtility.IsSQLAliasSetup))] public static void ConnectionAliasTest() { - if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) - { - 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)) + SqlConnectionStringBuilder builder = new(DataTestUtility.TCPConnectionString) { - // 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."); - } - - 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)); + DataSource = DataTestUtility.AliasName + }; + using SqlConnection sqlConnection = new(builder.ConnectionString); + Assert.Equal(DataTestUtility.AliasName, builder.DataSource); try { - using SqlConnection sqlConnection = new(b.ConnectionString); 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": "" }