From aef7d061c8e0d22a266f908c459191a6a531c0b4 Mon Sep 17 00:00:00 2001 From: Michel Zehnder Date: Mon, 18 Nov 2024 13:26:59 +0100 Subject: [PATCH 01/30] Use Assert.Throws instead of home-grown --- .../ExceptionTest/ConnectionExceptionTest.cs | 25 ++++++++----------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ExceptionTest/ConnectionExceptionTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ExceptionTest/ConnectionExceptionTest.cs index b1ba557562..aaa92beb0b 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ExceptionTest/ConnectionExceptionTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ExceptionTest/ConnectionExceptionTest.cs @@ -34,21 +34,16 @@ public void TestConnectionStateWithErrorClass20() Assert.Equal(System.Data.ConnectionState.Open, conn.State); server.Dispose(); - try - { - int result2 = cmd.ExecuteNonQuery(); - } - catch (SqlException ex) - { - Assert.Equal(11, ex.Class); - Assert.NotNull(ex.InnerException); - SqlException innerEx = Assert.IsType(ex.InnerException); - Assert.Equal(20, innerEx.Class); - Assert.StartsWith("A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible.", innerEx.Message); - // Since the server is not accessible driver can close the close the connection - // It is user responsibilty to maintain the connection. - Assert.Equal(System.Data.ConnectionState.Closed, conn.State); - } + + var exception = Assert.Throws(() => cmd.ExecuteNonQuery()); + Assert.Equal(11, exception.Class); + Assert.NotNull(exception.InnerException); + SqlException innerEx = Assert.IsType(exception.InnerException); + Assert.Equal(20, innerEx.Class); + Assert.StartsWith("A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible.", innerEx.Message); + // Since the server is not accessible driver can close the close the connection + // It is user responsibilty to maintain the connection. + Assert.Equal(System.Data.ConnectionState.Closed, conn.State); } [Fact] From d14975e99c77ecba76b4c84ce41674989714ec4a Mon Sep 17 00:00:00 2001 From: Michel Zehnder Date: Mon, 18 Nov 2024 13:28:52 +0100 Subject: [PATCH 02/30] TestConnectionStateWithErrorClass20 on NET8 fails on Debug build with "incorrect initial ParseSynonyms size" --- .../src/Microsoft/Data/SqlClient/SqlConnectionStringBuilder.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionStringBuilder.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionStringBuilder.cs index bffe8cba5e..6035cded69 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionStringBuilder.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionStringBuilder.cs @@ -132,7 +132,7 @@ private enum Keywords private bool _transparentNetworkIPResolution = DbConnectionStringDefaults.TransparentNetworkIPResolution; private string _networkLibrary = DbConnectionStringDefaults.NetworkLibrary; #else - internal const int DeprecatedKeywordsCount = 5; + internal const int DeprecatedKeywordsCount = 4; #endif #endregion //Fields From 0cd7a6313d029df600aea63cd2b83cf5d4b72f59 Mon Sep 17 00:00:00 2001 From: Michel Zehnder Date: Mon, 18 Nov 2024 13:29:22 +0100 Subject: [PATCH 03/30] Activate SqlExceptionTest, they seem to work fine now on Linux --- .../tests/FunctionalTests/SqlExceptionTest.cs | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/Microsoft.Data.SqlClient/tests/FunctionalTests/SqlExceptionTest.cs b/src/Microsoft.Data.SqlClient/tests/FunctionalTests/SqlExceptionTest.cs index 85d3a02fb1..2c5327435f 100644 --- a/src/Microsoft.Data.SqlClient/tests/FunctionalTests/SqlExceptionTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/FunctionalTests/SqlExceptionTest.cs @@ -15,7 +15,6 @@ public class SqlExceptionTest private const string badServer = "92B96911A0BD43E8ADA4451031F7E7CF"; [Fact] - [ActiveIssue("12161", TestPlatforms.AnyUnix)] public void SerializationTest() { SqlException e = CreateException(); @@ -26,7 +25,6 @@ public void SerializationTest() TypeNameHandling = TypeNameHandling.All, }; - // TODO: Deserialization fails on Unix with "Member 'ClassName' was not found." var sqlEx = JsonConvert.DeserializeObject(json, settings); Assert.Equal(e.ClientConnectionId, sqlEx.ClientConnectionId); @@ -35,7 +33,6 @@ public void SerializationTest() #if NETFRAMEWORK [Fact] - [ActiveIssue("12161", TestPlatforms.AnyUnix)] public static void SqlExcpetionSerializationTest() { var formatter = new BinaryFormatter(); From 86bcc0c7a86dc4350ddef55c81afe8c153f3eb3e Mon Sep 17 00:00:00 2001 From: Michel Zehnder Date: Mon, 18 Nov 2024 13:30:26 +0100 Subject: [PATCH 04/30] Activate WeakRefTestYukonSpecific, it runs fine on Linux --- .../SQL/WeakRefTestYukonSpecific/WeakRefTestYukonSpecific.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/WeakRefTestYukonSpecific/WeakRefTestYukonSpecific.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/WeakRefTestYukonSpecific/WeakRefTestYukonSpecific.cs index 493f7e0035..9683e474a1 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/WeakRefTestYukonSpecific/WeakRefTestYukonSpecific.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/WeakRefTestYukonSpecific/WeakRefTestYukonSpecific.cs @@ -17,7 +17,6 @@ public static class WeakRefTestYukonSpecific private const int CONCURRENT_COMMANDS = 5; // TODO Synapse: Remove dependency on Northwind database - [ActiveIssue("6643", TestPlatforms.AnyUnix)] [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void TestReaderMars() { From 6f3f107be687298342eec1dd1f42781cfbe91637 Mon Sep 17 00:00:00 2001 From: Michel Zehnder Date: Mon, 18 Nov 2024 13:31:41 +0100 Subject: [PATCH 05/30] Activate IntegratedAuthenticationTest, it runs fine --- .../IntegratedAuthenticationTest/IntegratedAuthenticationTest.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/IntegratedAuthenticationTest/IntegratedAuthenticationTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/IntegratedAuthenticationTest/IntegratedAuthenticationTest.cs index e043b2253c..c6ef21bc5a 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/IntegratedAuthenticationTest/IntegratedAuthenticationTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/IntegratedAuthenticationTest/IntegratedAuthenticationTest.cs @@ -30,7 +30,6 @@ public static void IntegratedAuthenticationTestWithOutConnectionPooling() TryOpenConnectionWithIntegratedAuthentication(builder.ConnectionString); } - [ActiveIssue("21707")] [ConditionalFact(nameof(IsIntegratedSecurityEnvironmentSet), nameof(AreConnectionStringsSetup))] public static void IntegratedAuthenticationTest_InvalidServerSPN() { From d614b58d2c20aba2eb4845ec95674ce1f54733c7 Mon Sep 17 00:00:00 2001 From: Michel Zehnder Date: Mon, 18 Nov 2024 13:32:20 +0100 Subject: [PATCH 06/30] Activate LocalDBTest, make sure Local DB is present. They run fine --- .../tests/ManualTests/SQL/LocalDBTest/LocalDBTest.cs | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/LocalDBTest/LocalDBTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/LocalDBTest/LocalDBTest.cs index 29ff71270c..4896a20e20 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/LocalDBTest/LocalDBTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/LocalDBTest/LocalDBTest.cs @@ -92,15 +92,13 @@ public static void SqlLocalDbSharedInstanceConnectionTest() #region NamedPipeTests - [Fact] - [ActiveIssue("20245")] //pending pipeline configuration + [ConditionalFact(nameof(IsLocalDBEnvironmentSet))] public static void SqlLocalDbNamedPipeConnectionTest() { ConnectionTest(s_localDbNamedPipeConnectionString); } - [Fact] - [ActiveIssue("20245")] //pending pipeline configuration + [ConditionalFact(nameof(IsLocalDBEnvironmentSet))] public static void LocalDBNamedPipeEncryptionNotSupportedTest() { // Encryption is not supported by SQL Local DB. @@ -108,8 +106,7 @@ public static void LocalDBNamedPipeEncryptionNotSupportedTest() ConnectionWithEncryptionTest(s_localDbNamedPipeConnectionString); } - [Fact] - [ActiveIssue("20245")] //pending pipeline configuration + [ConditionalFact(nameof(IsLocalDBEnvironmentSet))] public static void LocalDBNamepipeMarsTest() { ConnectionWithMarsTest(s_localDbNamedPipeConnectionString); From c81073231d8e4a24cfca6ca6f5732c2e6511630c Mon Sep 17 00:00:00 2001 From: Michel Zehnder Date: Mon, 18 Nov 2024 13:33:04 +0100 Subject: [PATCH 07/30] Activate reliability tests, they run fine --- .../ManualTests/SQL/RetryLogic/SqlCommandReliabilityTest.cs | 6 ++---- .../SQL/RetryLogic/SqlConnectionReliabilityTest.cs | 4 +--- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/RetryLogic/SqlCommandReliabilityTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/RetryLogic/SqlCommandReliabilityTest.cs index 7c590ebe05..0f4234dae9 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/RetryLogic/SqlCommandReliabilityTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/RetryLogic/SqlCommandReliabilityTest.cs @@ -135,7 +135,6 @@ public void RetryExecuteCancel(string cnnString, SqlRetryLogicBaseProvider provi } } - [ActiveIssue("14588")] [ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.IsNotAzureSynapse), nameof(DataTestUtility.AreConnStringsSetup))] [MemberData(nameof(RetryLogicTestHelper.GetConnectionAndRetryStrategyInvalidCommand), parameters: new object[] { 5 }, MemberType = typeof(RetryLogicTestHelper), DisableDiscoveryEnumeration = true)] public void RetryExecuteWithTransScope(string cnnString, SqlRetryLogicBaseProvider provider) @@ -261,7 +260,6 @@ public void RetryExecuteUnauthorizedSqlStatementDML(string cnnString, SqlRetryLo } } - [ActiveIssue("14325")] // avoid creating a new database in Azure [ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.IsNotAzureServer), nameof(DataTestUtility.IsNotAzureSynapse), nameof(DataTestUtility.AreConnStringsSetup))] [MemberData(nameof(RetryLogicTestHelper.GetConnectionAndRetryStrategyDropDB), parameters: new object[] { 5 }, MemberType = typeof(RetryLogicTestHelper), DisableDiscoveryEnumeration = true)] @@ -283,7 +281,7 @@ public void DropDatabaseWithActiveConnection(string cnnString, SqlRetryLogicBase cnn1.Open(); cmd.Connection = cnn1; // Create the database and wait until it is finalized. - cmd.CommandText = $"CREATE DATABASE [{database}]; \nWHILE(NOT EXISTS(SELECT 1 FROM sys.databases WHERE name = '{database}')) \nWAITFOR DELAY '00:00:10' "; + cmd.CommandText = $"CREATE DATABASE [{database}]; \nWHILE(NOT EXISTS(SELECT 1 FROM sys.databases WHERE name = '{database}')) \nWAITFOR DELAY '00:00:01' "; cmd.ExecuteNonQuery(); try @@ -292,7 +290,7 @@ public void DropDatabaseWithActiveConnection(string cnnString, SqlRetryLogicBase cnn2.Open(); cnn3.Open(); - // kill the active connection to the database after the first faliure. + // kill the active connection to the database after the first failure. provider.Retrying += (s, e) => { currentRetries = e.RetryCount; diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/RetryLogic/SqlConnectionReliabilityTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/RetryLogic/SqlConnectionReliabilityTest.cs index cfe01d38ca..43588e7ec2 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/RetryLogic/SqlConnectionReliabilityTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/RetryLogic/SqlConnectionReliabilityTest.cs @@ -51,7 +51,6 @@ public void ConnectionCancelRetryOpenInvalidCatalog(string cnnString, SqlRetryLo } } - [ActiveIssue("14590", TestPlatforms.Windows)] // avoid creating a new database in Azure [ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.IsNotAzureServer), nameof(DataTestUtility.IsNotAzureSynapse), nameof(DataTestUtility.AreConnStringsSetup))] [MemberData(nameof(RetryLogicTestHelper.GetConnectionAndRetryStrategyLongRunner), parameters: new object[] { 10 }, MemberType = typeof(RetryLogicTestHelper), DisableDiscoveryEnumeration = true)] @@ -76,7 +75,7 @@ public void CreateDatabaseWhileTryingToConnect(string cnnString, SqlRetryLogicBa provider.Retrying += (s, e) => { currentRetries = e.RetryCount; - // Try to create database just after first faliure. + // Try to create database just after first failure. if (createDBTask == null || createDBTask.Status == TaskStatus.Faulted) { cmd.CommandText = $"IF (NOT EXISTS(SELECT 1 FROM sys.databases WHERE name = '{database}')) CREATE DATABASE [{database}];"; @@ -100,7 +99,6 @@ public void CreateDatabaseWhileTryingToConnect(string cnnString, SqlRetryLogicBa Assert.True(currentRetries > 0); } - [ActiveIssue("25147")] [ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] [MemberData(nameof(RetryLogicTestHelper.GetConnectionAndRetryStrategyInvalidCatalog), parameters: new object[] { 2 }, MemberType = typeof(RetryLogicTestHelper), DisableDiscoveryEnumeration = true)] public void ConcurrentExecution(string cnnString, SqlRetryLogicBaseProvider provider) From 8ca44b9f74255dd827cd41a3863f285262ddc847 Mon Sep 17 00:00:00 2001 From: Michel Zehnder Date: Mon, 18 Nov 2024 13:40:45 +0100 Subject: [PATCH 08/30] Activate Credential Tests, they seem to work fine --- .../ManualTests/SQL/SqlCredentialTest/SqlCredentialTest.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/SqlCredentialTest/SqlCredentialTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/SqlCredentialTest/SqlCredentialTest.cs index ae656f11a4..5c345922c7 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/SqlCredentialTest/SqlCredentialTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/SqlCredentialTest/SqlCredentialTest.cs @@ -44,7 +44,6 @@ public static void CreateSqlConnectionWithCredential() } } - [ActiveIssue("9196")] [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureServer))] public static void SqlConnectionChangePasswordPlaintext() { @@ -78,7 +77,6 @@ public static void SqlConnectionChangePasswordPlaintext() } } - [ActiveIssue("9196")] [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureServer))] public static void SqlConnectionChangePasswordSecureString() { From f854d0e2b2f9ecaef44802ebae020701c6c1c35c Mon Sep 17 00:00:00 2001 From: Michel Zehnder Date: Mon, 18 Nov 2024 13:44:03 +0100 Subject: [PATCH 09/30] Activate CommandCancel tests, add Conditions to existing issue --- .../SQL/SqlCommand/SqlCommandCancelTest.cs | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/SqlCommand/SqlCommandCancelTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/SqlCommand/SqlCommandCancelTest.cs index 0928a71569..0ffb275b2c 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/SqlCommand/SqlCommandCancelTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/SqlCommand/SqlCommandCancelTest.cs @@ -157,7 +157,7 @@ public static void TimeoutCancel() TimeoutCancel(tcp_connStr); } - [ActiveIssue("12167")] + [ActiveIssue("12167", typeof(DataTestUtility), nameof(DataTestUtility.UseManagedSNIOnWindows))] // Managed SNI does not seem to work here [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureServer))] [PlatformSpecific(TestPlatforms.Windows)] public static void TimeoutCancelNP() @@ -178,15 +178,13 @@ public static void CancelAndDisposePreparedCommandNP() CancelAndDisposePreparedCommand(np_connStr); } - [ActiveIssue("5541")] - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureServer), nameof(DataTestUtility.IsNotNamedInstance))] public static void TimeOutDuringRead() { TimeOutDuringRead(tcp_connStr); } - [ActiveIssue("5541")] - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureServer))] + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureServer), nameof(DataTestUtility.IsNotNamedInstance))] [PlatformSpecific(TestPlatforms.Windows)] public static void TimeOutDuringReadNP() { @@ -357,7 +355,8 @@ private static void TimeoutCancel(string constr) cmd.CommandText = "WAITFOR DELAY '00:00:20';select * from Customers"; string errorMessage = SystemDataResourceManager.Instance.SQL_Timeout_Execution; - DataTestUtility.ExpectFailure(() => ExecuteReaderOnCmd(cmd), new string[] { errorMessage }); + var ex = Assert.Throws(() => ExecuteReaderOnCmd(cmd)); + Assert.Equal(errorMessage, ex.Message); VerifyConnection(cmd); } From 241a241671897b20c58eec61e75c0c9062dfbc77 Mon Sep 17 00:00:00 2001 From: Michel Zehnder Date: Mon, 18 Nov 2024 13:48:01 +0100 Subject: [PATCH 10/30] Activate Udt tests, they seem to work fine --- .../tests/ManualTests/SQL/UdtTest/SqlServerTypesTest.cs | 1 - .../tests/ManualTests/SQL/UdtTest/UdtBulkCopyTest.cs | 1 - .../tests/ManualTests/SQL/UdtTest/UdtTest2.cs | 1 - 3 files changed, 3 deletions(-) diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/UdtTest/SqlServerTypesTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/UdtTest/SqlServerTypesTest.cs index bdbd805e73..f939b42cc7 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/UdtTest/SqlServerTypesTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/UdtTest/SqlServerTypesTest.cs @@ -252,7 +252,6 @@ private static void TestUdtSqlDataReaderGetStream(CommandBehavior behavior) } // Synapse: Parse error at line: 1, column: 41: Incorrect syntax near 'hierarchyid'. - [ActiveIssue("25421", TargetFrameworkMonikers.NetFramework)] [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static void TestUdtSchemaMetadata() { diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/UdtTest/UdtBulkCopyTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/UdtTest/UdtBulkCopyTest.cs index 8adf6c7bb5..49e83ede43 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/UdtTest/UdtBulkCopyTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/UdtTest/UdtBulkCopyTest.cs @@ -11,7 +11,6 @@ public class UdtBulkCopyTest { private string _connStr; - [ActiveIssue("5535")] [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.IsUdtTestDatabasePresent), nameof(DataTestUtility.AreConnStringsSetup))] public void RunCopyTest() { diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/UdtTest/UdtTest2.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/UdtTest/UdtTest2.cs index 16d48d7c37..16d8195bd8 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/UdtTest/UdtTest2.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/UdtTest/UdtTest2.cs @@ -11,7 +11,6 @@ namespace Microsoft.Data.SqlClient.ManualTesting.Tests { - [ActiveIssue("5536")] // TODO Synapse: Remove dependency from UDTTest Database public class UdtTest2 { From f1765a2cbfdba01328b173f8d2705637c4c21ce0 Mon Sep 17 00:00:00 2001 From: Michel Zehnder Date: Mon, 18 Nov 2024 13:48:30 +0100 Subject: [PATCH 11/30] Activate PacketNumberWraparound test, it works fine --- .../tests/ManualTests/SQL/ParameterTest/TvpTest.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ParameterTest/TvpTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ParameterTest/TvpTest.cs index d1fe3bf6ac..b04af8f015 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ParameterTest/TvpTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ParameterTest/TvpTest.cs @@ -53,7 +53,6 @@ public void TestMain() } [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureServer))] - [ActiveIssue("5531")] public void TestPacketNumberWraparound() { // this test uses a specifically crafted sql record enumerator and data to put the TdsParserStateObject.WritePacket(byte,bool) From a0844a8409db29cdac859986b6800fbb749a8fbc Mon Sep 17 00:00:00 2001 From: Michel Zehnder Date: Mon, 18 Nov 2024 13:49:35 +0100 Subject: [PATCH 12/30] Improve certificate tests by checking IsAdmin outside the constructor --- .../AlwaysEncrypted/CspProviderExt.cs | 2 +- .../ManualTests/DataCommon/DataTestUtility.cs | 11 +++++-- .../CertificateTest.cs | 30 +++++++++---------- 3 files changed, 23 insertions(+), 20 deletions(-) diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/AlwaysEncrypted/CspProviderExt.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/AlwaysEncrypted/CspProviderExt.cs index f164dff220..53b906621e 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/AlwaysEncrypted/CspProviderExt.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/AlwaysEncrypted/CspProviderExt.cs @@ -25,7 +25,7 @@ namespace Microsoft.Data.SqlClient.ManualTesting.Tests.AlwaysEncrypted [PlatformSpecific(TestPlatforms.Windows)] public class CspProviderExt { - [ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringSetupForAE))] + [ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringSetupForAE), nameof(DataTestUtility.IsAdmin))] [ClassData(typeof(AEConnectionStringProvider))] public void TestKeysFromCertificatesCreatedWithMultipleCryptoProviders(string connectionString) { diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/DataCommon/DataTestUtility.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/DataCommon/DataTestUtility.cs index ffa0582279..91db5685cb 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/DataCommon/DataTestUtility.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/DataCommon/DataTestUtility.cs @@ -94,7 +94,7 @@ public static class DataTestUtility //SQL Server EngineEdition private static string s_sqlServerEngineEdition; - // JSON Coloumn type + // JSON Column type public static readonly bool IsJsonSupported = false; // Azure Synapse EngineEditionId == 6 @@ -107,8 +107,8 @@ public static bool IsAzureSynapse { s_sqlServerEngineEdition ??= GetSqlServerProperty(TCPConnectionString, "EngineEdition"); } - _ = int.TryParse(s_sqlServerEngineEdition, out int engineEditon); - return engineEditon == 6; + _ = int.TryParse(s_sqlServerEngineEdition, out int engineEdition); + return engineEdition == 6; } } @@ -455,6 +455,11 @@ public static bool IsNotAzureServer() return !AreConnStringsSetup() || !Utils.IsAzureSqlServer(new SqlConnectionStringBuilder((TCPConnectionString)).DataSource); } + public static bool IsNotNamedInstance() + { + return !AreConnStringsSetup() || !new SqlConnectionStringBuilder(TCPConnectionString).DataSource.Contains(@"\"); + } + // Synapse: Always Encrypted is not supported with Azure Synapse. // Ref: https://feedback.azure.com/forums/307516-azure-synapse-analytics/suggestions/17858869-support-always-encrypted-in-sql-data-warehouse public static bool IsAKVSetupAvailable() 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 d500391227..93569444ab 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() @@ -91,17 +93,16 @@ private static bool IsLocalHost() private static bool AreConnStringsSetup() => DataTestUtility.AreConnStringsSetup(); private static bool IsNotAzureServer() => DataTestUtility.IsNotAzureServer(); private static bool UseManagedSNIOnWindows() => DataTestUtility.UseManagedSNIOnWindows; + private static bool IsAdmin() => DataTestUtility.IsAdmin; - [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,9 +123,7 @@ 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)] + [ConditionalFact(nameof(AreConnStringsSetup), nameof(IsNotAzureServer), nameof(IsLocalHost), nameof(IsAdmin))] public void OpeningConnectionWitHNICTest() { // Mandatory @@ -142,8 +141,8 @@ public void OpeningConnectionWitHNICTest() connection.Open(); 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 + // Ipv6 however causes name mismatch error + // In net6 Manged SNI does not check for SAN. Therefor 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 @@ -167,8 +166,7 @@ public void OpeningConnectionWitHNICTest() } [ActiveIssue("31754")] - [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 8a83e20178f28305e9cda85d5c9d988db9321759 Mon Sep 17 00:00:00 2001 From: Michel Zehnder Date: Mon, 18 Nov 2024 13:51:13 +0100 Subject: [PATCH 13/30] - Remove AsyncTest (why would Async be faster than Sync?) - Move tests around to TestSet when necessary, consolidate AE test sets --- ....Data.SqlClient.ManualTesting.Tests.csproj | 57 +++++----- .../ManualTests/SQL/AsyncTest/AsyncTest.cs | 106 ------------------ 2 files changed, 27 insertions(+), 136 deletions(-) delete mode 100644 src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/AsyncTest/AsyncTest.cs diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/Microsoft.Data.SqlClient.ManualTesting.Tests.csproj b/src/Microsoft.Data.SqlClient/tests/ManualTests/Microsoft.Data.SqlClient.ManualTesting.Tests.csproj index 4ae4cba91c..52af5757a3 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/Microsoft.Data.SqlClient.ManualTesting.Tests.csproj +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/Microsoft.Data.SqlClient.ManualTesting.Tests.csproj @@ -15,31 +15,12 @@ true - - - - - - - - PreserveNewest - TCECryptoNativeBaseline.txt - - - PreserveNewest - TCECryptoNativeBaselineRsa.txt - - - - - - - - - + + + @@ -59,6 +40,8 @@ + + @@ -72,6 +55,21 @@ + + PreserveNewest + TCECryptoNativeBaseline.txt + + + PreserveNewest + TCECryptoNativeBaselineRsa.txt + + + + + + + + @@ -81,7 +79,6 @@ - @@ -175,15 +172,21 @@ + + + + + + @@ -195,6 +198,7 @@ + @@ -280,7 +284,6 @@ - @@ -292,12 +295,6 @@ - - - - - - diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/AsyncTest/AsyncTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/AsyncTest/AsyncTest.cs deleted file mode 100644 index 8208f7e496..0000000000 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/AsyncTest/AsyncTest.cs +++ /dev/null @@ -1,106 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - -using System.Diagnostics; -using System.Threading.Tasks; -using Xunit; - -namespace Microsoft.Data.SqlClient.ManualTesting.Tests -{ - public static class AsyncTest - { - [ActiveIssue("5533")] // Async Operations slower than Sync operations - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] - public static void TestReadAsyncTimeConsumed() - { - const string sql = "SET NOCOUNT ON" - + " SELECT 'a'" - + " DECLARE @t DATETIME = SYSDATETIME()" - + " WHILE DATEDIFF(s, @t, SYSDATETIME()) < 20 BEGIN" - + " SELECT 2 x INTO #y" - + " DROP TABLE #y" - + " END" - + " SELECT 'b'"; - Task t = RunReadAsync(sql); - double elapsedSync = RunReadSync(sql); - t.Wait(); - double elapsedAsync = t.Result; - Assert.True(elapsedAsync < elapsedSync, "Asynchronous operation should be finished quicker than synchronous one"); - int limit = 100; - Assert.True(elapsedAsync < limit, $"Asynchronous operation should be finished within {limit}ms"); - } - - private static async Task RunReadAsync(string sql) - { - double maxElapsedTimeMillisecond = 0; - using (SqlConnection connection = new SqlConnection(DataTestUtility.TCPConnectionString)) - { - await connection.OpenAsync(); - using (SqlCommand command = connection.CreateCommand()) - { - command.CommandText = sql; - using (SqlDataReader reader = await command.ExecuteReaderAsync()) - { - Task t; - Stopwatch stopwatch = new Stopwatch(); - do - { - do - { - stopwatch.Start(); - t = reader.ReadAsync(); - stopwatch.Stop(); - double elased = stopwatch.Elapsed.TotalMilliseconds; - if (maxElapsedTimeMillisecond < elased) - { - maxElapsedTimeMillisecond = elased; - } - } - while (await t); - } - while (reader.NextResult()); - } - } - } - - return maxElapsedTimeMillisecond; - } - - private static double RunReadSync(string sql) - { - double maxElapsedTimeMillisecond = 0; - using (SqlConnection connection = new SqlConnection(DataTestUtility.TCPConnectionString)) - { - connection.Open(); - using (SqlCommand command = connection.CreateCommand()) - { - command.CommandText = sql; - using (SqlDataReader reader = command.ExecuteReader()) - { - bool result; - Stopwatch stopwatch = new Stopwatch(); - do - { - do - { - stopwatch.Start(); - result = reader.Read(); - stopwatch.Stop(); - double elased = stopwatch.Elapsed.TotalMilliseconds; - if (maxElapsedTimeMillisecond < elased) - { - maxElapsedTimeMillisecond = elased; - } - } - while (result); - } - while (reader.NextResult()); - } - } - } - - return maxElapsedTimeMillisecond; - } - } -} From 4c0448b6683b5bd084bf9e3293dc89795ff11686 Mon Sep 17 00:00:00 2001 From: Michel Zehnder Date: Mon, 18 Nov 2024 16:12:46 +0100 Subject: [PATCH 14/30] Fix spelling Co-authored-by: Edward Neal <55035479+edwardneal@users.noreply.github.com> --- .../tests/FunctionalTests/SqlExceptionTest.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.Data.SqlClient/tests/FunctionalTests/SqlExceptionTest.cs b/src/Microsoft.Data.SqlClient/tests/FunctionalTests/SqlExceptionTest.cs index 2c5327435f..15e2c07adc 100644 --- a/src/Microsoft.Data.SqlClient/tests/FunctionalTests/SqlExceptionTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/FunctionalTests/SqlExceptionTest.cs @@ -33,7 +33,7 @@ public void SerializationTest() #if NETFRAMEWORK [Fact] - public static void SqlExcpetionSerializationTest() + public static void SqlExceptionSerializationTest() { var formatter = new BinaryFormatter(); SqlException e = CreateException(); From 8b9a806990f6d6887fcc7ab356408a3de7fe01e2 Mon Sep 17 00:00:00 2001 From: Michel Zehnder Date: Mon, 18 Nov 2024 16:25:39 +0100 Subject: [PATCH 15/30] Fix grammatical errors Co-authored-by: Edward Neal <55035479+edwardneal@users.noreply.github.com> --- .../ManualTests/SQL/ExceptionTest/ConnectionExceptionTest.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ExceptionTest/ConnectionExceptionTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ExceptionTest/ConnectionExceptionTest.cs index aaa92beb0b..1f7003e28c 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ExceptionTest/ConnectionExceptionTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ExceptionTest/ConnectionExceptionTest.cs @@ -41,8 +41,8 @@ public void TestConnectionStateWithErrorClass20() SqlException innerEx = Assert.IsType(exception.InnerException); Assert.Equal(20, innerEx.Class); Assert.StartsWith("A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible.", innerEx.Message); - // Since the server is not accessible driver can close the close the connection - // It is user responsibilty to maintain the connection. + // Since the server is not accessible, the driver can close the connection. + // It is the user's responsibility to maintain the connection. Assert.Equal(System.Data.ConnectionState.Closed, conn.State); } From 8fb9d0b883ed21a6628c77014e9246730e633a7a Mon Sep 17 00:00:00 2001 From: Michel Zehnder Date: Mon, 18 Nov 2024 20:34:09 +0100 Subject: [PATCH 16/30] Revert unintended change --- .../src/Microsoft/Data/SqlClient/SqlConnectionStringBuilder.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionStringBuilder.cs b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionStringBuilder.cs index 6035cded69..bffe8cba5e 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionStringBuilder.cs +++ b/src/Microsoft.Data.SqlClient/src/Microsoft/Data/SqlClient/SqlConnectionStringBuilder.cs @@ -132,7 +132,7 @@ private enum Keywords private bool _transparentNetworkIPResolution = DbConnectionStringDefaults.TransparentNetworkIPResolution; private string _networkLibrary = DbConnectionStringDefaults.NetworkLibrary; #else - internal const int DeprecatedKeywordsCount = 4; + internal const int DeprecatedKeywordsCount = 5; #endif #endregion //Fields From 55f88dd47a828a7557c50f279af761fd41d6ff45 Mon Sep 17 00:00:00 2001 From: Michel Zehnder Date: Sun, 24 Nov 2024 07:43:59 +0100 Subject: [PATCH 17/30] Use Close instead of Dispose, as Dispose swallows the exception --- .../tests/ManualTests/SQL/DataStreamTest/DataStreamTest.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataStreamTest/DataStreamTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataStreamTest/DataStreamTest.cs index 700659477d..c1252e11c1 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataStreamTest/DataStreamTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataStreamTest/DataStreamTest.cs @@ -31,7 +31,6 @@ public static void RunAllTestsForSingleServer_NP() } } - [ActiveIssue("5540")] [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] public static void RunAllTestsForSingleServer_TCP() { @@ -2074,7 +2073,7 @@ private static void NonFatalTimeoutDuringRead(string connectionString) // Close will now observe the stored timeout error string errorMessage = SystemDataResourceManager.Instance.SQL_Timeout_Execution; - DataTestUtility.AssertThrowsWrapper(reader.Dispose, errorMessage); + DataTestUtility.AssertThrowsWrapper(reader.Close, errorMessage); } } } From 1abcedb9e184b04a3e8c6dcb693c2f2f03c52ed7 Mon Sep 17 00:00:00 2001 From: Michel Zehnder Date: Sun, 24 Nov 2024 07:48:10 +0100 Subject: [PATCH 18/30] Remove comment about IPv6 & Cert as this now works in NET8+ --- .../SQL/ConnectionTestWithSSLCert/CertificateTest.cs | 5 ----- 1 file changed, 5 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 93569444ab..f30cdfa4d4 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ConnectionTestWithSSLCert/CertificateTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ConnectionTestWithSSLCert/CertificateTest.cs @@ -141,11 +141,6 @@ public void OpeningConnectionWitHNICTest() connection.Open(); Assert.Equal(ConnectionState.Open, connection.State); - // Ipv6 however causes name mismatch error - // In net6 Manged SNI does not check for SAN. Therefor 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 - builder.DataSource = IPV6 + SlashInstanceName; builder.HostNameInCertificate = Dns.GetHostEntry(Environment.MachineName).HostName; builder.Encrypt = SqlConnectionEncryptOption.Mandatory; From e4c7165737c873138d902723b81c23144aa9f9dc Mon Sep 17 00:00:00 2001 From: Michel Zehnder Date: Sun, 24 Nov 2024 08:36:43 +0100 Subject: [PATCH 19/30] Do not run XEvent test on azure --- .../ManualTests/SQL/DataStreamTest/DataStreamTest.cs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataStreamTest/DataStreamTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataStreamTest/DataStreamTest.cs index c1252e11c1..04b9ac5df8 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataStreamTest/DataStreamTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataStreamTest/DataStreamTest.cs @@ -12,6 +12,7 @@ using System.Threading; using System.Threading.Tasks; using System.Xml; +using Microsoft.Data.SqlClient.TestUtilities; using Xunit; namespace Microsoft.Data.SqlClient.ManualTesting.Tests @@ -31,7 +32,7 @@ public static void RunAllTestsForSingleServer_NP() } } - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureServer))] public static void RunAllTestsForSingleServer_TCP() { RunAllTestsForSingleServer(DataTestUtility.TCPConnectionString); @@ -177,7 +178,12 @@ private static void RunAllTestsForSingleServer(string connectionString, bool usi ReadTextReader(connectionString); StreamingBlobDataTypes(connectionString); OutOfOrderGetChars(connectionString); - TestXEventsStreaming(connectionString); + + // Azure Database does not support Server scoped XEvents + if (!Utils.IsAzureSqlServer(connectionString)) + { + TestXEventsStreaming(connectionString); + } // These tests fail with named pipes, since they try to do DNS lookups on named pipe paths. if (!usingNamePipes) @@ -186,6 +192,7 @@ private static void RunAllTestsForSingleServer(string connectionString, bool usi { TimeoutDuringReadAsyncWithClosedReaderTest(connectionString); } + NonFatalTimeoutDuringRead(connectionString); } } From 3317cbc6764c9a56c9dc1ef4a2c87ebbf0ffd9f1 Mon Sep 17 00:00:00 2001 From: Michel Zehnder Date: Sun, 24 Nov 2024 08:37:43 +0100 Subject: [PATCH 20/30] The rest of the tests run fine on Azure --- .../tests/ManualTests/SQL/DataStreamTest/DataStreamTest.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataStreamTest/DataStreamTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataStreamTest/DataStreamTest.cs index 04b9ac5df8..30101e05f4 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataStreamTest/DataStreamTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataStreamTest/DataStreamTest.cs @@ -32,7 +32,7 @@ public static void RunAllTestsForSingleServer_NP() } } - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureServer))] + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] public static void RunAllTestsForSingleServer_TCP() { RunAllTestsForSingleServer(DataTestUtility.TCPConnectionString); From 4a4f407c2405b71b2d53252621a57da2810cf779 Mon Sep 17 00:00:00 2001 From: Michel Zehnder Date: Sun, 24 Nov 2024 13:33:24 +0100 Subject: [PATCH 21/30] Fix azure check --- .../tests/ManualTests/SQL/DataStreamTest/DataStreamTest.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataStreamTest/DataStreamTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataStreamTest/DataStreamTest.cs index 30101e05f4..3a78106934 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataStreamTest/DataStreamTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataStreamTest/DataStreamTest.cs @@ -180,7 +180,7 @@ private static void RunAllTestsForSingleServer(string connectionString, bool usi OutOfOrderGetChars(connectionString); // Azure Database does not support Server scoped XEvents - if (!Utils.IsAzureSqlServer(connectionString)) + if (!Utils.IsAzureSqlServer(new SqlConnectionStringBuilder(connectionString).DataSource)) { TestXEventsStreaming(connectionString); } From 86eb7aabe54f25423fb6ec4f24f568b8f782793c Mon Sep 17 00:00:00 2001 From: Michel Zehnder Date: Mon, 25 Nov 2024 10:33:55 +0100 Subject: [PATCH 22/30] Disable more tests for Azure --- .../SQL/DataStreamTest/DataStreamTest.cs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataStreamTest/DataStreamTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataStreamTest/DataStreamTest.cs index 3a78106934..f5c196a8cb 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataStreamTest/DataStreamTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataStreamTest/DataStreamTest.cs @@ -179,12 +179,14 @@ private static void RunAllTestsForSingleServer(string connectionString, bool usi StreamingBlobDataTypes(connectionString); OutOfOrderGetChars(connectionString); - // Azure Database does not support Server scoped XEvents - if (!Utils.IsAzureSqlServer(new SqlConnectionStringBuilder(connectionString).DataSource)) + // Azure Database does not support Server scoped XEvents and the timeout tests use the ProxyServer which also does not work + if (IsAzureSqlServer(connectionString)) { - TestXEventsStreaming(connectionString); + return; } + TestXEventsStreaming(connectionString); + // These tests fail with named pipes, since they try to do DNS lookups on named pipe paths. if (!usingNamePipes) { @@ -263,6 +265,11 @@ private static void MultipleResults(string connectionString) } } + private static bool IsAzureSqlServer(string connectionString) + { + return Utils.IsAzureSqlServer(new SqlConnectionStringBuilder(connectionString).DataSource); + } + private static void InvalidRead(string connectionString) { using (SqlConnection c = new SqlConnection(connectionString)) From 8e3af029a264c53879fd7cc8283fef5e7dfe7096 Mon Sep 17 00:00:00 2001 From: Michel Zehnder Date: Mon, 25 Nov 2024 11:40:47 +0100 Subject: [PATCH 23/30] Also disable named instances --- .../ManualTests/SQL/DataStreamTest/DataStreamTest.cs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataStreamTest/DataStreamTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataStreamTest/DataStreamTest.cs index f5c196a8cb..114a0d81a4 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataStreamTest/DataStreamTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataStreamTest/DataStreamTest.cs @@ -179,8 +179,8 @@ private static void RunAllTestsForSingleServer(string connectionString, bool usi StreamingBlobDataTypes(connectionString); OutOfOrderGetChars(connectionString); - // Azure Database does not support Server scoped XEvents and the timeout tests use the ProxyServer which also does not work - if (IsAzureSqlServer(connectionString)) + // Azure Database does not support Server scoped XEvents and the timeout tests use the ProxyServer which also does not work on Azure and on named instances + if (IsAzureSqlServer(connectionString) || IsNamedInstance(connectionString)) { return; } @@ -269,6 +269,11 @@ private static bool IsAzureSqlServer(string connectionString) { return Utils.IsAzureSqlServer(new SqlConnectionStringBuilder(connectionString).DataSource); } + + private static bool IsNamedInstance(string connectionString) + { + return new SqlConnectionStringBuilder(connectionString).DataSource.Contains(@"\"); + } private static void InvalidRead(string connectionString) { From fcce0974cca4d7e70cf9517e2057413ae15c48b5 Mon Sep 17 00:00:00 2001 From: Michel Zehnder Date: Mon, 25 Nov 2024 14:03:57 +0100 Subject: [PATCH 24/30] Remove ExectueXmlReaderTest on ARM Factor out tests that have different conditions --- .../ManualTests/DataCommon/DataTestUtility.cs | 10 +++ .../SQL/DataStreamTest/DataStreamTest.cs | 68 ++++++++++--------- 2 files changed, 46 insertions(+), 32 deletions(-) diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/DataCommon/DataTestUtility.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/DataCommon/DataTestUtility.cs index 91db5685cb..32ba109e13 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/DataCommon/DataTestUtility.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/DataCommon/DataTestUtility.cs @@ -232,6 +232,16 @@ static DataTestUtility() } } + public static IEnumerable GetConnectionStringsWithEnclaveMemberData() + { + return GetConnectionStrings(true).Select(x => new object[] { x }); + } + + public static IEnumerable GetConnectionStringsWithoutEnclaveMemberData() + { + return GetConnectionStrings(false).Select(x => new object[] { x }); + } + public static IEnumerable ConnectionStrings => GetConnectionStrings(withEnclave: true); public static IEnumerable GetConnectionStrings(bool withEnclave) diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataStreamTest/DataStreamTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataStreamTest/DataStreamTest.cs index 114a0d81a4..77803c5c25 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataStreamTest/DataStreamTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataStreamTest/DataStreamTest.cs @@ -24,11 +24,11 @@ public static void RunAllTestsForSingleServer_NP() { if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { - DataTestUtility.AssertThrowsWrapper(() => RunAllTestsForSingleServer(DataTestUtility.NPConnectionString, true)); + DataTestUtility.AssertThrowsWrapper(() => RunAllTestsForSingleServer(DataTestUtility.NPConnectionString)); } else { - RunAllTestsForSingleServer(DataTestUtility.NPConnectionString, true); + RunAllTestsForSingleServer(DataTestUtility.NPConnectionString); } } @@ -37,7 +37,7 @@ public static void RunAllTestsForSingleServer_TCP() { RunAllTestsForSingleServer(DataTestUtility.TCPConnectionString); } - + // Synapse: The statement failed. Column 'foo' has a data type that cannot participate in a columnstore index. [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static async Task AsyncMultiPacketStreamRead() @@ -119,7 +119,35 @@ static async Task LocalCopyTo(Stream source, Stream destination, int bufferSize, Assert.Fail($"input and output differ at index {index}, input={inputData[index]}, output={outputData[index]}"); } } + } + + [ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureServer))] + [MemberData(nameof(DataTestUtility.GetConnectionStringsWithEnclaveMemberData), MemberType = typeof(DataTestUtility))] + public static void XEventsStreamingTest(string connectionString) + { + TestXEventsStreaming(connectionString); + } + + [ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsUsingNativeSNI), nameof(DataTestUtility.IsNotNamedInstance))] + [MemberData(nameof(DataTestUtility.GetConnectionStringsWithEnclaveMemberData), MemberType = typeof(DataTestUtility))] + public static void TestTimeoutDuringReadAsyncWithClosedReaderTest(string connectionString) + { + TimeoutDuringReadAsyncWithClosedReaderTest(connectionString); + } + [ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotNamedInstance))] + [MemberData(nameof(DataTestUtility.GetConnectionStringsWithEnclaveMemberData), MemberType = typeof(DataTestUtility))] + public static void NonFatalTimeoutDuringReadTest(string connectionString) + { + NonFatalTimeoutDuringRead(connectionString); + } + + [ActiveIssue("https://github.com/dotnet/SqlClient/issues/3035", typeof(DataStreamTest), nameof(IsArm))] + [ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] + [MemberData(nameof(DataTestUtility.GetConnectionStringsWithEnclaveMemberData), MemberType = typeof(DataTestUtility))] + public static void XmlReaderTest(string connectionString) + { + ExecuteXmlReaderTest(connectionString); } private static byte[] CreateBinaryTable(SqlConnection connection, string tableName, int packetSize) @@ -152,7 +180,7 @@ IF OBJECT_ID('dbo.{tableName}', 'U') IS NOT NULL return data; } - private static void RunAllTestsForSingleServer(string connectionString, bool usingNamePipes = false) + private static void RunAllTestsForSingleServer(string connectionString) { RowBuffer(connectionString); InvalidRead(connectionString); @@ -165,7 +193,6 @@ private static void RunAllTestsForSingleServer(string connectionString, bool usi TimestampRead(connectionString); OrphanReader(connectionString); BufferSize(connectionString); - ExecuteXmlReaderTest(connectionString); SequentialAccess(connectionString); HasRowsTest(connectionString); CloseConnection(connectionString); @@ -178,25 +205,6 @@ private static void RunAllTestsForSingleServer(string connectionString, bool usi ReadTextReader(connectionString); StreamingBlobDataTypes(connectionString); OutOfOrderGetChars(connectionString); - - // Azure Database does not support Server scoped XEvents and the timeout tests use the ProxyServer which also does not work on Azure and on named instances - if (IsAzureSqlServer(connectionString) || IsNamedInstance(connectionString)) - { - return; - } - - TestXEventsStreaming(connectionString); - - // These tests fail with named pipes, since they try to do DNS lookups on named pipe paths. - if (!usingNamePipes) - { - if (DataTestUtility.IsUsingNativeSNI()) - { - TimeoutDuringReadAsyncWithClosedReaderTest(connectionString); - } - - NonFatalTimeoutDuringRead(connectionString); - } } private static void MultipleResults(string connectionString) @@ -265,15 +273,11 @@ private static void MultipleResults(string connectionString) } } - private static bool IsAzureSqlServer(string connectionString) - { - return Utils.IsAzureSqlServer(new SqlConnectionStringBuilder(connectionString).DataSource); - } + private static bool IsAzureSqlServer(string connectionString) => Utils.IsAzureSqlServer(new SqlConnectionStringBuilder(connectionString).DataSource); - private static bool IsNamedInstance(string connectionString) - { - return new SqlConnectionStringBuilder(connectionString).DataSource.Contains(@"\"); - } + private static bool IsNamedInstance(string connectionString) => new SqlConnectionStringBuilder(connectionString).DataSource.Contains(@"\"); + + private static bool IsArm => RuntimeInformation.ProcessArchitecture == Architecture.Arm || RuntimeInformation.ProcessArchitecture == Architecture.Arm64; private static void InvalidRead(string connectionString) { From 968e884b943f4082abc42242fe721a7efd414bae Mon Sep 17 00:00:00 2001 From: Michel Zehnder Date: Mon, 25 Nov 2024 16:17:31 +0100 Subject: [PATCH 25/30] Disable tests with proxy for azure --- .../tests/ManualTests/SQL/DataStreamTest/DataStreamTest.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataStreamTest/DataStreamTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataStreamTest/DataStreamTest.cs index 77803c5c25..2e7c3ff823 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataStreamTest/DataStreamTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataStreamTest/DataStreamTest.cs @@ -128,14 +128,14 @@ public static void XEventsStreamingTest(string connectionString) TestXEventsStreaming(connectionString); } - [ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsUsingNativeSNI), nameof(DataTestUtility.IsNotNamedInstance))] + [ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsUsingNativeSNI), nameof(DataTestUtility.IsNotNamedInstance), nameof(DataTestUtility.IsNotAzureServer))] [MemberData(nameof(DataTestUtility.GetConnectionStringsWithEnclaveMemberData), MemberType = typeof(DataTestUtility))] public static void TestTimeoutDuringReadAsyncWithClosedReaderTest(string connectionString) { TimeoutDuringReadAsyncWithClosedReaderTest(connectionString); } - [ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotNamedInstance))] + [ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotNamedInstance), nameof(DataTestUtility.IsNotAzureServer))] [MemberData(nameof(DataTestUtility.GetConnectionStringsWithEnclaveMemberData), MemberType = typeof(DataTestUtility))] public static void NonFatalTimeoutDuringReadTest(string connectionString) { From 57d4a5e0bad462ab9607282718783480e71d911d Mon Sep 17 00:00:00 2001 From: Michel Zehnder Date: Wed, 27 Nov 2024 07:20:52 +0100 Subject: [PATCH 26/30] Add data ordering to queries --- .../ManualTests/SQL/DataStreamTest/DataStreamTest.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataStreamTest/DataStreamTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataStreamTest/DataStreamTest.cs index ad3cecaafd..2bd117df7f 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataStreamTest/DataStreamTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataStreamTest/DataStreamTest.cs @@ -701,7 +701,7 @@ private static void ExecuteXmlReaderTest(string connectionString) using (SqlConnection conn = new SqlConnection(connectionString)) { conn.Open(); - using (SqlCommand cmd = new SqlCommand("select employeeId, lastname, firstname from employees for xml auto", conn)) + using (SqlCommand cmd = new SqlCommand("select employeeId, lastname, firstname from employees order by employeeId asc for xml auto", conn)) { XmlReader xr; using (xr = cmd.ExecuteXmlReader()) @@ -730,7 +730,7 @@ private static void ExecuteXmlReaderTest(string connectionString) } // use a big result to fill up the pipe and do a partial read - cmd.CommandText = "select * from orders for xml auto"; + cmd.CommandText = "select * from orders order by orderid asc for xml auto"; string errorMessage; using (xr = cmd.ExecuteXmlReader()) { @@ -774,9 +774,9 @@ private static void ExecuteXmlReaderTest(string connectionString) // multiple results cmd.CommandText = - "select orderid from orders where orderid < 10253 for xml auto;" + - "select customerid from customers where customerid < 'ANTON' for xml auto;" + - "select employeeId from employees where employeeid < 3 for xml auto;"; + "select orderid from orders where orderid < 10253 order by orderid asc for xml auto;" + + "select customerid from customers where customerid < 'ANTON' order by customerid asc for xml auto;" + + "select employeeId from employees where employeeid < 3 order by employeeid asc for xml auto;"; using (xr = cmd.ExecuteXmlReader()) { string[] expectedResults = @@ -915,7 +915,7 @@ private static void SequentialAccess(string connectionString) } } - using (SqlCommand cmd = new SqlCommand("select * from employees", conn)) + using (SqlCommand cmd = new SqlCommand("select * from employees order by EmployeeID", conn)) { // test sequential access with partial reads using (reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess)) From caf6a5b4be5dcfab5c26c26efdc5dcf8058c25cf Mon Sep 17 00:00:00 2001 From: Michel Zehnder Date: Wed, 27 Nov 2024 09:12:37 +0100 Subject: [PATCH 27/30] Enable test on ARM --- .../tests/ManualTests/SQL/DataStreamTest/DataStreamTest.cs | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataStreamTest/DataStreamTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataStreamTest/DataStreamTest.cs index 2bd117df7f..b48930ca4b 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataStreamTest/DataStreamTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataStreamTest/DataStreamTest.cs @@ -142,7 +142,6 @@ public static void NonFatalTimeoutDuringReadTest(string connectionString) NonFatalTimeoutDuringRead(connectionString); } - [ActiveIssue("https://github.com/dotnet/SqlClient/issues/3035", typeof(DataStreamTest), nameof(IsArm))] [ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] [MemberData(nameof(DataTestUtility.GetConnectionStringsWithEnclaveMemberData), MemberType = typeof(DataTestUtility))] public static void XmlReaderTest(string connectionString) @@ -273,12 +272,6 @@ private static void MultipleResults(string connectionString) } } - private static bool IsAzureSqlServer(string connectionString) => Utils.IsAzureSqlServer(new SqlConnectionStringBuilder(connectionString).DataSource); - - private static bool IsNamedInstance(string connectionString) => new SqlConnectionStringBuilder(connectionString).DataSource.Contains(@"\"); - - private static bool IsArm => RuntimeInformation.ProcessArchitecture == Architecture.Arm || RuntimeInformation.ProcessArchitecture == Architecture.Arm64; - private static void InvalidRead(string connectionString) { using (SqlConnection c = new SqlConnection(connectionString)) From c66230cb1aa53d9ace8bc5b8a62ae515cb940b97 Mon Sep 17 00:00:00 2001 From: Michel Zehnder Date: Wed, 27 Nov 2024 09:14:45 +0100 Subject: [PATCH 28/30] Remove whitespace --- .../tests/ManualTests/SQL/DataStreamTest/DataStreamTest.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataStreamTest/DataStreamTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataStreamTest/DataStreamTest.cs index b48930ca4b..858cef0715 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataStreamTest/DataStreamTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataStreamTest/DataStreamTest.cs @@ -37,7 +37,7 @@ public static void RunAllTestsForSingleServer_TCP() { RunAllTestsForSingleServer(DataTestUtility.TCPConnectionString); } - + // Synapse: The statement failed. Column 'foo' has a data type that cannot participate in a columnstore index. [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))] public static async Task AsyncMultiPacketStreamRead() From b4d1a79d3bdd83cf948f910906ba712e9e983287 Mon Sep 17 00:00:00 2001 From: Michel Zehnder Date: Wed, 27 Nov 2024 21:03:55 +0100 Subject: [PATCH 29/30] Formatting --- .../src/Microsoft.Data.SqlClient.csproj | 23 +++++++++---------- 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft.Data.SqlClient.csproj b/src/Microsoft.Data.SqlClient/src/Microsoft.Data.SqlClient.csproj index 6f5595b591..bd58c9bc13 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft.Data.SqlClient.csproj +++ b/src/Microsoft.Data.SqlClient/src/Microsoft.Data.SqlClient.csproj @@ -1,17 +1,16 @@  - - net462;net8.0;net9.0 - true - - - - - - - - + + net462;net8.0;net9.0 + true + + + + + + + + - From 1034f9222c1ac5cfc586e91bc3b198b2542207e6 Mon Sep 17 00:00:00 2001 From: Michel Zehnder Date: Tue, 3 Dec 2024 06:43:52 +0100 Subject: [PATCH 30/30] Restore newline --- src/Microsoft.Data.SqlClient/src/Microsoft.Data.SqlClient.csproj | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Microsoft.Data.SqlClient/src/Microsoft.Data.SqlClient.csproj b/src/Microsoft.Data.SqlClient/src/Microsoft.Data.SqlClient.csproj index 4ab7a46958..c092b35a98 100644 --- a/src/Microsoft.Data.SqlClient/src/Microsoft.Data.SqlClient.csproj +++ b/src/Microsoft.Data.SqlClient/src/Microsoft.Data.SqlClient.csproj @@ -15,4 +15,5 @@ +