Skip to content

Commit 91d3a54

Browse files
Javadkant2002
Javad
authored andcommitted
Fix | Dropping reference to Microsoft.Win32.Registry in netcore. (dotnet#1974)
1 parent 02c1472 commit 91d3a54

File tree

5 files changed

+20
-68
lines changed

5 files changed

+20
-68
lines changed

src/Microsoft.Data.SqlClient/netcore/src/Microsoft.Data.SqlClient.csproj

-3
Original file line numberDiff line numberDiff line change
@@ -939,9 +939,6 @@
939939
<Compile Include="Microsoft\Data\SqlClient\TdsParserStateObjectFactory.Managed.cs" />
940940
<Compile Include="Microsoft\Data\SqlClient\TdsParser.Unix.cs" />
941941
</ItemGroup>
942-
<ItemGroup Condition="'$(TargetsWindows)' == 'true' and '$(IsUAPAssembly)' != 'true'">
943-
<Reference Include="Microsoft.Win32.Registry" />
944-
</ItemGroup>
945942
<ItemGroup Condition="'$(OSGroup)' != 'AnyOS' AND '$(IsUAPAssembly)' == 'true'">
946943
<Reference Include="System.Collections.NonGeneric" />
947944
<Reference Include="System.Memory" />

src/Microsoft.Data.SqlClient/tests/ManualTests/DataCommon/DataTestUtility.cs

+6
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ public static class DataTestUtility
6060
public static readonly bool IsDNSCachingSupportedCR = false; // this is for the control ring
6161
public static readonly bool IsDNSCachingSupportedTR = false; // this is for the tenant ring
6262
public static readonly string UserManagedIdentityClientId = null;
63+
public static readonly string AliasName = null;
6364

6465

6566
public static readonly string EnclaveAzureDatabaseConnString = null;
@@ -117,6 +118,7 @@ static DataTestUtility()
117118
KerberosDomainUser = c.KerberosDomainUser;
118119
ManagedIdentitySupported = c.ManagedIdentitySupported;
119120
IsManagedInstance = c.IsManagedInstance;
121+
AliasName = c.AliasName;
120122

121123
System.Net.ServicePointManager.SecurityProtocol |= System.Net.SecurityProtocolType.Tls12;
122124

@@ -300,6 +302,10 @@ public static bool AreConnStringsSetup()
300302
return !string.IsNullOrEmpty(NPConnectionString) && !string.IsNullOrEmpty(TCPConnectionString);
301303
}
302304

305+
public static bool IsSQLAliasSetup()
306+
{
307+
return !string.IsNullOrEmpty(AliasName);
308+
}
303309
public static bool IsTCPConnStringSetup()
304310
{
305311
return !string.IsNullOrEmpty(TCPConnectionString);

src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ConnectivityTests/ConnectivityTest.cs

+11-63
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,9 @@
44

55
using System;
66
using System.Collections.Generic;
7+
using System.Data;
78
using System.Diagnostics;
8-
using System.Runtime.InteropServices;
9-
using System.Security.Principal;
109
using System.Threading;
11-
using Microsoft.Win32;
1210
using Xunit;
1311

1412
namespace Microsoft.Data.SqlClient.ManualTesting.Tests
@@ -369,7 +367,7 @@ public static void ConnectionOpenDisableRetry()
369367
{
370368
InitialCatalog = "DoesNotExist0982532435423",
371369
Pooling = false,
372-
ConnectTimeout=15
370+
ConnectTimeout = 15
373371
};
374372
using SqlConnection sqlConnection = new(connectionStringBuilder.ConnectionString);
375373
Stopwatch timer = new();
@@ -387,74 +385,24 @@ public static void ConnectionOpenDisableRetry()
387385
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();
388386
}
389387

390-
private const string ConnectToPath = "SOFTWARE\\Microsoft\\MSSQLServer\\Client\\ConnectTo";
391-
private static bool CanCreateAliases()
392-
{
393-
if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ||
394-
!DataTestUtility.IsTCPConnStringSetup())
395-
{
396-
return false;
397-
}
398-
399-
using (WindowsIdentity identity = WindowsIdentity.GetCurrent())
400-
{
401-
WindowsPrincipal principal = new(identity);
402-
if (!principal.IsInRole(WindowsBuiltInRole.Administrator))
403-
{
404-
return false;
405-
}
406-
}
407-
408-
using RegistryKey key = Registry.LocalMachine.OpenSubKey(ConnectToPath, true);
409-
if (key == null)
410-
{
411-
// Registry not writable
412-
return false;
413-
}
414-
415-
SqlConnectionStringBuilder b = new(DataTestUtility.TCPConnectionString);
416-
if (!DataTestUtility.ParseDataSource(b.DataSource, out string hostname, out int port, out string instanceName) ||
417-
!string.IsNullOrEmpty(instanceName))
418-
{
419-
return false;
420-
}
421-
422-
return true;
423-
}
424-
425388
[PlatformSpecific(TestPlatforms.Windows)]
426-
[ConditionalFact(nameof(CanCreateAliases))]
389+
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsSQLAliasSetup))]
427390
public static void ConnectionAliasTest()
428391
{
429-
if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
430-
{
431-
throw new Exception("Alias test only valid on Windows");
432-
}
433-
434-
if (!CanCreateAliases())
435-
{
436-
throw new Exception("Unable to create aliases in this environment. Windows + Admin + non-instance data source required.");
437-
}
438-
439-
SqlConnectionStringBuilder b = new(DataTestUtility.TCPConnectionString);
440-
if (!DataTestUtility.ParseDataSource(b.DataSource, out string hostname, out int port, out string instanceName) ||
441-
!string.IsNullOrEmpty(instanceName))
392+
SqlConnectionStringBuilder builder = new(DataTestUtility.TCPConnectionString)
442393
{
443-
// Only works with connection strings that parse successfully and don't include an instance name
444-
throw new Exception("Unable to create aliases in this configuration. Parsable data source without instance required.");
445-
}
446-
447-
b.DataSource = "TESTALIAS-" + Guid.NewGuid().ToString().Replace("-", "");
448-
using RegistryKey key = Registry.LocalMachine.OpenSubKey(ConnectToPath, true);
449-
key.SetValue(b.DataSource, "DBMSSOCN," + hostname + "," + (port == -1 ? 1433 : port));
394+
DataSource = DataTestUtility.AliasName
395+
};
396+
using SqlConnection sqlConnection = new(builder.ConnectionString);
397+
Assert.Equal(DataTestUtility.AliasName, builder.DataSource);
450398
try
451399
{
452-
using SqlConnection sqlConnection = new(b.ConnectionString);
453400
sqlConnection.Open();
401+
Assert.Equal(ConnectionState.Open, sqlConnection.State);
454402
}
455-
finally
403+
catch (SqlException ex)
456404
{
457-
key.DeleteValue(b.DataSource);
405+
Assert.Fail(ex.Message);
458406
}
459407
}
460408

src/Microsoft.Data.SqlClient/tests/tools/Microsoft.Data.SqlClient.TestUtilities/Config.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public class Config
4444
public string KerberosDomainPassword = null;
4545
public string KerberosDomainUser = null;
4646
public bool IsManagedInstance = false;
47-
47+
public string AliasName = null;
4848
public static Config Load(string configPath = @"config.json")
4949
{
5050
try

src/Microsoft.Data.SqlClient/tests/tools/Microsoft.Data.SqlClient.TestUtilities/config.default.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -30,5 +30,6 @@
3030
"EnclaveAzureDatabaseConnString": "",
3131
"ManagedIdentitySupported": true,
3232
"UserManagedIdentityClientId": "",
33-
"PowerShellPath": ""
33+
"PowerShellPath": "",
34+
"AliasName": ""
3435
}

0 commit comments

Comments
 (0)