From 853eb4296a49cfff9b91402a31e35404c06440d6 Mon Sep 17 00:00:00 2001 From: Wraith2 Date: Sun, 21 Apr 2019 01:26:02 +0100 Subject: [PATCH] propogate and detect socket errors in managed connections --- .../Data/SqlClient/SNI/SNIMarsConnection.cs | 16 ++-- .../Data/SqlClient/SNI/SNIMarsHandle.cs | 22 +++-- .../SqlClient/SNI/SNIPacket.NetCoreApp.cs | 26 +++--- .../SqlClient/SNI/SNIPacket.NetStandard.cs | 23 ++++-- .../src/System/Data/SqlClient/TdsEnums.cs | 2 +- .../SqlClient/TdsParserStateObjectManaged.cs | 6 +- .../ConnectionPoolTest/ConnectionPoolTest.cs | 4 +- .../PoolBlockPeriodTest.netcoreapp.cs | 6 +- .../SQL/DataStreamTest/DataStreamTest.cs | 81 +++++++++++-------- .../ManualTests/SQL/MARSTest/MARSTest.cs | 18 ++--- .../SqlCredentialTest/SqlCredentialTest.cs | 8 +- 11 files changed, 126 insertions(+), 86 deletions(-) diff --git a/src/System.Data.SqlClient/src/System/Data/SqlClient/SNI/SNIMarsConnection.cs b/src/System.Data.SqlClient/src/System/Data/SqlClient/SNI/SNIMarsConnection.cs index 989e9a2b94a9..33e139e3048f 100644 --- a/src/System.Data.SqlClient/src/System/Data/SqlClient/SNI/SNIMarsConnection.cs +++ b/src/System.Data.SqlClient/src/System/Data/SqlClient/SNI/SNIMarsConnection.cs @@ -44,7 +44,7 @@ public SNIMarsConnection(SNIHandle lowerHandle) _lowerHandle.SetAsyncCallbacks(HandleReceiveComplete, HandleSendComplete); } - public SNIMarsHandle CreateMarsSession(object callbackObject, bool async) + public SNIMarsHandle CreateMarsSession(TdsParserStateObject callbackObject, bool async) { lock (this) { @@ -126,12 +126,12 @@ public uint CheckConnection() /// /// Process a receive error /// - public void HandleReceiveError(SNIPacket packet) + public void HandleReceiveError(SNIPacket packet, uint sniErrorCode) { Debug.Assert(Monitor.IsEntered(this), "HandleReceiveError was called without being locked."); foreach (SNIMarsHandle handle in _sessions.Values) { - handle.HandleReceiveError(packet); + handle.HandleReceiveError(packet, sniErrorCode); } packet?.Dispose(); } @@ -161,7 +161,7 @@ public void HandleReceiveComplete(SNIPacket packet, uint sniErrorCode) { lock (this) { - HandleReceiveError(packet); + HandleReceiveError(packet, sniErrorCode); return; } } @@ -192,7 +192,7 @@ public void HandleReceiveComplete(SNIPacket packet, uint sniErrorCode) return; } - HandleReceiveError(packet); + HandleReceiveError(packet, sniErrorCode); return; } } @@ -223,7 +223,7 @@ public void HandleReceiveComplete(SNIPacket packet, uint sniErrorCode) return; } - HandleReceiveError(packet); + HandleReceiveError(packet, sniErrorCode); return; } } @@ -234,7 +234,7 @@ public void HandleReceiveComplete(SNIPacket packet, uint sniErrorCode) if (!_sessions.ContainsKey(_currentHeader.sessionId)) { SNILoadHandle.SingletonInstance.LastError = new SNIError(SNIProviders.SMUX_PROV, 0, SNICommon.InvalidParameterError, string.Empty); - HandleReceiveError(packet); + HandleReceiveError(packet, sniErrorCode); _lowerHandle.Dispose(); _lowerHandle = null; return; @@ -280,7 +280,7 @@ public void HandleReceiveComplete(SNIPacket packet, uint sniErrorCode) return; } - HandleReceiveError(packet); + HandleReceiveError(packet, sniErrorCode); return; } } diff --git a/src/System.Data.SqlClient/src/System/Data/SqlClient/SNI/SNIMarsHandle.cs b/src/System.Data.SqlClient/src/System/Data/SqlClient/SNI/SNIMarsHandle.cs index 6ba903947386..2eb37f5bea0c 100644 --- a/src/System.Data.SqlClient/src/System/Data/SqlClient/SNI/SNIMarsHandle.cs +++ b/src/System.Data.SqlClient/src/System/Data/SqlClient/SNI/SNIMarsHandle.cs @@ -19,7 +19,7 @@ internal class SNIMarsHandle : SNIHandle private readonly uint _status = TdsEnums.SNI_UNINITIALIZED; private readonly Queue _receivedPacketQueue = new Queue(); private readonly Queue _sendPacketQueue = new Queue(); - private readonly object _callbackObject; + private readonly TdsParserStateObject _callbackObject; private readonly Guid _connectionId = Guid.NewGuid(); private readonly ushort _sessionId; private readonly ManualResetEventSlim _packetEvent = new ManualResetEventSlim(false); @@ -78,7 +78,7 @@ public override void Dispose() /// MARS session ID /// Callback object /// true if connection is asynchronous - public SNIMarsHandle(SNIMarsConnection connection, ushort sessionId, object callbackObject, bool async) + public SNIMarsHandle(SNIMarsConnection connection, ushort sessionId, TdsParserStateObject callbackObject, bool async) { _sessionId = sessionId; _connection = connection; @@ -101,7 +101,7 @@ private void SendControlPacket(SNISMUXFlags flags) SNIPacket packet = new SNIPacket(SNISMUXHeader.HEADER_LENGTH); packet.AppendData(headerBytes); - + _connection.Send(packet); } @@ -295,15 +295,23 @@ public override uint ReceiveAsync(ref SNIPacket packet) /// /// Handle receive error /// - public void HandleReceiveError(SNIPacket packet) + public void HandleReceiveError(SNIPacket packet, uint sniErrorCode) { lock (_receivedPacketQueue) { _connectionError = SNILoadHandle.SingletonInstance.LastError; _packetEvent.Set(); } - - ((TdsParserStateObject)_callbackObject).ReadAsyncCallback(PacketHandle.FromManagedPacket(packet), 1); + if (sniErrorCode == TdsEnums.SNI_WSAECONNRESET || sniErrorCode == TdsEnums.SNI_ERROR) + { + TdsParser parser = _callbackObject.Parser; + parser.State = TdsParserState.Broken; + parser.Connection.BreakConnection(); + } + else + { + _callbackObject.ReadAsyncCallback(PacketHandle.FromManagedPacket(packet), sniErrorCode); + } } /// @@ -317,7 +325,7 @@ public void HandleSendComplete(SNIPacket packet, uint sniErrorCode) { Debug.Assert(_callbackObject != null); - ((TdsParserStateObject)_callbackObject).WriteAsyncCallback(PacketHandle.FromManagedPacket(packet), sniErrorCode); + _callbackObject.WriteAsyncCallback(PacketHandle.FromManagedPacket(packet), sniErrorCode); } } diff --git a/src/System.Data.SqlClient/src/System/Data/SqlClient/SNI/SNIPacket.NetCoreApp.cs b/src/System.Data.SqlClient/src/System/Data/SqlClient/SNI/SNIPacket.NetCoreApp.cs index 6e5cab47e390..753bb30ca5d0 100644 --- a/src/System.Data.SqlClient/src/System/Data/SqlClient/SNI/SNIPacket.NetCoreApp.cs +++ b/src/System.Data.SqlClient/src/System/Data/SqlClient/SNI/SNIPacket.NetCoreApp.cs @@ -4,6 +4,7 @@ using System.Buffers; using System.IO; +using System.Net.Sockets; using System.Threading; using System.Threading.Tasks; @@ -18,31 +19,39 @@ internal partial class SNIPacket /// Completion callback public void ReadFromStreamAsync(Stream stream, SNIAsyncCallback callback) { - // Treat local function as a static and pass all params otherwise as async will allocate - async Task ReadFromStreamAsync(SNIPacket packet, SNIAsyncCallback cb, ValueTask valueTask) + static async Task ReadFromStreamAsync(SNIPacket packet, SNIAsyncCallback cb, ValueTask valueTask) { - bool error = false; + uint errorCode = TdsEnums.SNI_SUCCESS; try { packet._length = await valueTask.ConfigureAwait(false); if (packet._length == 0) { SNILoadHandle.SingletonInstance.LastError = new SNIError(SNIProviders.TCP_PROV, 0, SNICommon.ConnTerminatedError, string.Empty); - error = true; + errorCode = TdsEnums.SNI_WSAECONNRESET; } } + catch (IOException ioException) when ( + ioException?.InnerException is SocketException socketException && + socketException != null && + socketException.SocketErrorCode == SocketError.OperationAborted + ) + { + SNILoadHandle.SingletonInstance.LastError = new SNIError(SNIProviders.TCP_PROV, SNICommon.InternalExceptionError, socketException); + errorCode = TdsEnums.SNI_WSAECONNRESET; + } catch (Exception ex) { SNILoadHandle.SingletonInstance.LastError = new SNIError(SNIProviders.TCP_PROV, SNICommon.InternalExceptionError, ex); - error = true; + errorCode = TdsEnums.SNI_ERROR; } - if (error) + if (errorCode != TdsEnums.SNI_SUCCESS) { packet.Release(); } - cb(packet, error ? TdsEnums.SNI_ERROR : TdsEnums.SNI_SUCCESS); + cb(packet, errorCode); } ValueTask vt = stream.ReadAsync(new Memory(_data, 0, _capacity), CancellationToken.None); @@ -70,8 +79,7 @@ async Task ReadFromStreamAsync(SNIPacket packet, SNIAsyncCallback cb, ValueTask< /// Stream to write to public void WriteToStreamAsync(Stream stream, SNIAsyncCallback callback, SNIProviders provider, bool disposeAfterWriteAsync = false) { - // Treat local function as a static and pass all params otherwise as async will allocate - async Task WriteToStreamAsync(SNIPacket packet, SNIAsyncCallback cb, SNIProviders providers, bool disposeAfter, ValueTask valueTask) + static async Task WriteToStreamAsync(SNIPacket packet, SNIAsyncCallback cb, SNIProviders providers, bool disposeAfter, ValueTask valueTask) { uint status = TdsEnums.SNI_SUCCESS; try diff --git a/src/System.Data.SqlClient/src/System/Data/SqlClient/SNI/SNIPacket.NetStandard.cs b/src/System.Data.SqlClient/src/System/Data/SqlClient/SNI/SNIPacket.NetStandard.cs index bfa48ac17b61..106613099233 100644 --- a/src/System.Data.SqlClient/src/System/Data/SqlClient/SNI/SNIPacket.NetStandard.cs +++ b/src/System.Data.SqlClient/src/System/Data/SqlClient/SNI/SNIPacket.NetStandard.cs @@ -4,6 +4,7 @@ using System.Buffers; using System.IO; +using System.Net.Sockets; using System.Threading; using System.Threading.Tasks; @@ -18,31 +19,39 @@ internal partial class SNIPacket /// Completion callback public void ReadFromStreamAsync(Stream stream, SNIAsyncCallback callback) { - // Treat local function as a static and pass all params otherwise as async will allocate - async Task ReadFromStreamAsync(SNIPacket packet, SNIAsyncCallback cb, Task task) + static async Task ReadFromStreamAsync(SNIPacket packet, SNIAsyncCallback cb, Task task) { - bool error = false; + uint errorCode = TdsEnums.SNI_SUCCESS; try { packet._length = await task.ConfigureAwait(false); if (packet._length == 0) { SNILoadHandle.SingletonInstance.LastError = new SNIError(SNIProviders.TCP_PROV, 0, SNICommon.ConnTerminatedError, string.Empty); - error = true; + errorCode = TdsEnums.SNI_WSAECONNRESET; } } + catch (IOException ioException) when ( + ioException?.InnerException is SocketException socketException && + socketException != null && + socketException.SocketErrorCode == SocketError.OperationAborted + ) + { + SNILoadHandle.SingletonInstance.LastError = new SNIError(SNIProviders.TCP_PROV, SNICommon.InternalExceptionError, socketException); + errorCode = TdsEnums.SNI_WSAECONNRESET; + } catch (Exception ex) { SNILoadHandle.SingletonInstance.LastError = new SNIError(SNIProviders.TCP_PROV, SNICommon.InternalExceptionError, ex); - error = true; + errorCode = TdsEnums.SNI_ERROR; } - if (error) + if (errorCode != TdsEnums.SNI_SUCCESS) { packet.Release(); } - cb(packet, error ? TdsEnums.SNI_ERROR : TdsEnums.SNI_SUCCESS); + cb(packet, errorCode); } Task t = stream.ReadAsync(_data, 0, _capacity, CancellationToken.None); diff --git a/src/System.Data.SqlClient/src/System/Data/SqlClient/TdsEnums.cs b/src/System.Data.SqlClient/src/System/Data/SqlClient/TdsEnums.cs index 41e557bb95f7..11c17522ee01 100644 --- a/src/System.Data.SqlClient/src/System/Data/SqlClient/TdsEnums.cs +++ b/src/System.Data.SqlClient/src/System/Data/SqlClient/TdsEnums.cs @@ -538,7 +538,7 @@ public enum FedAuthLibrary : byte public const uint SNI_SUCCESS_IO_PENDING = 997; // Overlapped I/O operation is in progress. // Windows Sockets Error Codes - public const short SNI_WSAECONNRESET = 10054; // An existing connection was forcibly closed by the remote host. + public const uint SNI_WSAECONNRESET = 10054; // An existing connection was forcibly closed by the remote host. // SNI internal errors (shouldn't overlap with Win32 / socket errors) public const uint SNI_QUEUE_FULL = 1048576; // Packet queue is full diff --git a/src/System.Data.SqlClient/src/System/Data/SqlClient/TdsParserStateObjectManaged.cs b/src/System.Data.SqlClient/src/System/Data/SqlClient/TdsParserStateObjectManaged.cs index 151d4e554aa0..68dc8890a724 100644 --- a/src/System.Data.SqlClient/src/System/Data/SqlClient/TdsParserStateObjectManaged.cs +++ b/src/System.Data.SqlClient/src/System/Data/SqlClient/TdsParserStateObjectManaged.cs @@ -47,7 +47,7 @@ protected override void CreateSessionHandle(TdsParserStateObject physicalConnect _sessionHandle = managedSNIObject.CreateMarsSession(this, async); } - internal SNIMarsHandle CreateMarsSession(object callbackObject, bool async) + internal SNIMarsHandle CreateMarsSession(TdsParserStateObject callbackObject, bool async) { return _marsConnection.CreateMarsSession(callbackObject, async); } @@ -96,7 +96,7 @@ internal override void Dispose() { packetHandle?.Dispose(); asyncAttnPacket?.Dispose(); - + if (sessionHandle != null) { sessionHandle.Dispose(); @@ -239,7 +239,7 @@ internal override uint EnableMars(ref uint info) return TdsEnums.SNI_ERROR; } - internal override uint EnableSsl(ref uint info)=> SNIProxy.Singleton.EnableSsl(Handle, info); + internal override uint EnableSsl(ref uint info) => SNIProxy.Singleton.EnableSsl(Handle, info); internal override uint SetConnectionBufferSize(ref uint unsignedPacketSize) => SNIProxy.Singleton.SetConnectionBufferSize(Handle, unsignedPacketSize); diff --git a/src/System.Data.SqlClient/tests/ManualTests/SQL/ConnectionPoolTest/ConnectionPoolTest.cs b/src/System.Data.SqlClient/tests/ManualTests/SQL/ConnectionPoolTest/ConnectionPoolTest.cs index abdcff397891..7224f001a7c2 100644 --- a/src/System.Data.SqlClient/tests/ManualTests/SQL/ConnectionPoolTest/ConnectionPoolTest.cs +++ b/src/System.Data.SqlClient/tests/ManualTests/SQL/ConnectionPoolTest/ConnectionPoolTest.cs @@ -15,13 +15,13 @@ public static class ConnectionPoolTest private static readonly string _tcpMarsConnStr = (new SqlConnectionStringBuilder(DataTestUtility.TcpConnStr) { MultipleActiveResultSets = true, Pooling = true }).ConnectionString; - [ConditionalFact(typeof(DataTestUtility),nameof(DataTestUtility.AreConnStringsSetup), /* [ActiveIssue(33930)]: */ nameof(DataTestUtility.IsUsingNativeSNI))] + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] public static void ConnectionPool_NonMars() { RunDataTestForSingleConnString(_tcpConnStr); } - [ConditionalFact(typeof(DataTestUtility),nameof(DataTestUtility.AreConnStringsSetup), /* [ActiveIssue(33930)] */ nameof(DataTestUtility.IsUsingNativeSNI))] + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] public static void ConnectionPool_Mars() { RunDataTestForSingleConnString(_tcpMarsConnStr); diff --git a/src/System.Data.SqlClient/tests/ManualTests/SQL/ConnectionPoolTest/PoolBlockPeriodTest.netcoreapp.cs b/src/System.Data.SqlClient/tests/ManualTests/SQL/ConnectionPoolTest/PoolBlockPeriodTest.netcoreapp.cs index 45e0793e176e..1bd3db41a19f 100644 --- a/src/System.Data.SqlClient/tests/ManualTests/SQL/ConnectionPoolTest/PoolBlockPeriodTest.netcoreapp.cs +++ b/src/System.Data.SqlClient/tests/ManualTests/SQL/ConnectionPoolTest/PoolBlockPeriodTest.netcoreapp.cs @@ -21,7 +21,7 @@ public class PoolBlockPeriodTest private const int ConnectionTimeout = 15; private const int CompareMargin = 2; - [ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), /* [ActiveIssue(33930)] */ nameof(DataTestUtility.IsUsingNativeSNI))] + [ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] [InlineData("Azure with Default Policy must Disable blocking (*.database.windows.net)", new object[] { AzureEndpointSample })] [InlineData("Azure with Default Policy must Disable blocking (*.database.chinacloudapi.cn)", new object[] { AzureChinaEnpointSample })] [InlineData("Azure with Default Policy must Disable blocking (*.database.usgovcloudapi.net)", new object[] { AzureUSGovernmentEndpointSample })] @@ -45,7 +45,7 @@ public void TestAzureBlockingPeriod(string description, object[] Params) PoolBlockingPeriodAzureTest(connString, policy); } - [ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), /* [ActiveIssue(33930)] */ nameof(DataTestUtility.IsUsingNativeSNI))] + [ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] [InlineData("NonAzure with Default Policy must Enable blocking", new object[] { NonExistentServer })] [InlineData("NonAzure with Auto Policy must Enable Blocking", new object[] { NonExistentServer, PoolBlockingPeriod.Auto })] [InlineData("NonAzure with Always Policy must Enable Blocking", new object[] { NonExistentServer, PoolBlockingPeriod.AlwaysBlock })] @@ -66,7 +66,7 @@ public void TestNonAzureBlockingPeriod(string description, object[] Params) PoolBlockingPeriodNonAzureTest(connString, policy); } - [ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), /* [ActiveIssue(33930)] */ nameof(DataTestUtility.IsUsingNativeSNI))] + [ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] [InlineData("Test policy with Auto (lowercase)", "auto")] [InlineData("Test policy with Auto (PascalCase)", "Auto")] [InlineData("Test policy with Always (lowercase)", "alwaysblock")] diff --git a/src/System.Data.SqlClient/tests/ManualTests/SQL/DataStreamTest/DataStreamTest.cs b/src/System.Data.SqlClient/tests/ManualTests/SQL/DataStreamTest/DataStreamTest.cs index 5e160fbf52b0..afe69cbf1f62 100644 --- a/src/System.Data.SqlClient/tests/ManualTests/SQL/DataStreamTest/DataStreamTest.cs +++ b/src/System.Data.SqlClient/tests/ManualTests/SQL/DataStreamTest/DataStreamTest.cs @@ -15,7 +15,7 @@ namespace System.Data.SqlClient.ManualTesting.Tests { public static class DataStreamTest { - [ConditionalFact(typeof(DataTestUtility),nameof(DataTestUtility.AreConnStringsSetup))] + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] public static void RunAllTestsForSingleServer_NP() { if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) @@ -28,7 +28,7 @@ public static void RunAllTestsForSingleServer_NP() } } - [ConditionalFact(typeof(DataTestUtility),nameof(DataTestUtility.AreConnStringsSetup))] + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] public static void RunAllTestsForSingleServer_TCP() { RunAllTestsForSingleServer(DataTestUtility.TcpConnStr); @@ -64,10 +64,10 @@ private static void RunAllTestsForSingleServer(string connectionString, bool usi // These tests fail with named pipes, since they try to do DNS lookups on named pipe paths. if (!usingNamePipes) { - //if (DataTestUtility.IsUsingNativeSNI()) /* [ActiveIssue(33930)] */ - //{ - // TimeoutDuringReadAsyncWithClosedReaderTest(connectionString); - //} + if (DataTestUtility.IsUsingNativeSNI()) + { + TimeoutDuringReadAsyncWithClosedReaderTest(connectionString); + } NonFatalTimeoutDuringRead(connectionString); } } @@ -171,20 +171,34 @@ private static void VariantRead(string connectionString) int i; // read data out of buffer - v = rdr.GetValue(0); i = (int)v; - v = rdr.GetValue(1); s = v is DBNull ? null : (string)v; - v = rdr.GetValue(2); i = (int)v; - v = rdr.GetValue(3); d = (DateTime)v; - v = rdr.GetValue(4); d = (DateTime)v; - v = rdr.GetValue(5); d = (DateTime)v; - v = rdr.GetValue(6); i = (int)v; - v = rdr.GetValue(7); m = (decimal)v; - v = rdr.GetValue(8); s = v is DBNull ? null : (string)v; - v = rdr.GetValue(9); s = v is DBNull ? null : (string)v; - v = rdr.GetValue(10); s = v is DBNull ? null : (string)v; - v = rdr.GetValue(11); s = v is DBNull ? null : (string)v; - v = rdr.GetValue(12); s = v is DBNull ? null : (string)v; - v = rdr.GetValue(13); s = v is DBNull ? null : (string)v; + v = rdr.GetValue(0); + i = (int)v; + v = rdr.GetValue(1); + s = v is DBNull ? null : (string)v; + v = rdr.GetValue(2); + i = (int)v; + v = rdr.GetValue(3); + d = (DateTime)v; + v = rdr.GetValue(4); + d = (DateTime)v; + v = rdr.GetValue(5); + d = (DateTime)v; + v = rdr.GetValue(6); + i = (int)v; + v = rdr.GetValue(7); + m = (decimal)v; + v = rdr.GetValue(8); + s = v is DBNull ? null : (string)v; + v = rdr.GetValue(9); + s = v is DBNull ? null : (string)v; + v = rdr.GetValue(10); + s = v is DBNull ? null : (string)v; + v = rdr.GetValue(11); + s = v is DBNull ? null : (string)v; + v = rdr.GetValue(12); + s = v is DBNull ? null : (string)v; + v = rdr.GetValue(13); + s = v is DBNull ? null : (string)v; DataTestUtility.AssertEqualsWithDescription("France", s.ToString(), "FAILED: Received incorrect last value."); } @@ -1752,8 +1766,8 @@ private static void VariantCollationsTest(string connectionString) } } - private static void TestXEventsStreaming(string connectionString) - { + private static void TestXEventsStreaming(string connectionString) + { string sessionName = "xeventStreamTest"; //Create XEvent SetupXevent(connectionString, sessionName); @@ -1764,7 +1778,7 @@ private static void TestXEventsStreaming(string connectionString) using (SqlConnection xEventsReadConnection = new SqlConnection(connectionString)) { xEventsReadConnection.Open(); - string xEventDataStreamCommand ="USE master; " + @"select [type], [data] from sys.fn_MSxe_read_event_stream ('" + sessionName + "',0)"; + string xEventDataStreamCommand = "USE master; " + @"select [type], [data] from sys.fn_MSxe_read_event_stream ('" + sessionName + "',0)"; using (SqlCommand cmd = new SqlCommand(xEventDataStreamCommand, xEventsReadConnection)) { SqlDataReader reader = cmd.ExecuteReader(System.Data.CommandBehavior.SequentialAccess); @@ -1772,13 +1786,14 @@ private static void TestXEventsStreaming(string connectionString) { Int32 colType = reader.GetInt32(0); int cb = (int)reader.GetBytes(1, 0, null, 0, 0); - + byte[] bytes = new byte[cb]; - long read = reader.GetBytes(1, 0, bytes, 0, cb); + long read = reader.GetBytes(1, 0, bytes, 0, cb); // Don't send data on the first read because there is already data in the buffer. // Don't send data on the last iteration. We will not be reading that data. - if (i == 0 || i == streamXeventCount - 1) continue; + if (i == 0 || i == streamXeventCount - 1) + continue; using (SqlConnection xEventWriteConnection = new SqlConnection(connectionString)) { @@ -1798,7 +1813,7 @@ private static void TestXEventsStreaming(string connectionString) } private static void SetupXevent(string connectionString, string sessionName) - { + { string xEventCreateAndStartCommandText = @"CREATE EVENT SESSION [" + sessionName + @"] ON SERVER ADD EVENT sqlserver.user_event(ACTION(package0.event_sequence)) ADD TARGET package0.ring_buffer @@ -1812,21 +1827,21 @@ ADD TARGET package0.ring_buffer STARTUP_STATE=OFF) ALTER EVENT SESSION [" + sessionName + "] ON SERVER STATE = START "; - + using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); using (SqlCommand createXeventSession = new SqlCommand(xEventCreateAndStartCommandText, connection)) { - createXeventSession.ExecuteNonQuery(); + createXeventSession.ExecuteNonQuery(); } } } private static void DeleteXevent(string connectionString, string sessionName) - { + { string deleteXeventSessionCommand = @"IF EXISTS (select * from sys.server_event_sessions where name ='" + sessionName + "') DROP EVENT SESSION [" + sessionName + "] ON SERVER"; - + using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); @@ -1835,9 +1850,9 @@ private static void DeleteXevent(string connectionString, string sessionName) deleteXeventSession.ExecuteNonQuery(); } } - + } - + private static void TimeoutDuringReadAsyncWithClosedReaderTest(string connectionString) { // Create the proxy diff --git a/src/System.Data.SqlClient/tests/ManualTests/SQL/MARSTest/MARSTest.cs b/src/System.Data.SqlClient/tests/ManualTests/SQL/MARSTest/MARSTest.cs index 2b1fee216b4b..b64daab66f76 100644 --- a/src/System.Data.SqlClient/tests/ManualTests/SQL/MARSTest/MARSTest.cs +++ b/src/System.Data.SqlClient/tests/ManualTests/SQL/MARSTest/MARSTest.cs @@ -13,7 +13,7 @@ public static class MARSTest { private static readonly string _connStr = (new SqlConnectionStringBuilder(DataTestUtility.TcpConnStr) { MultipleActiveResultSets = true }).ConnectionString; - [ConditionalFact(typeof(DataTestUtility),nameof(DataTestUtility.AreConnStringsSetup))] + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] [PlatformSpecific(TestPlatforms.Windows)] public static void NamedPipesMARSTest() { @@ -33,7 +33,7 @@ public static void NamedPipesMARSTest() } #if DEBUG - [ConditionalFact(typeof(DataTestUtility),nameof(DataTestUtility.AreConnStringsSetup), /* [ActiveIssue(33930)] */ nameof(DataTestUtility.IsUsingNativeSNI))] + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] public static void MARSAsyncTimeoutTest() { using (SqlConnection connection = new SqlConnection(_connStr)) @@ -73,7 +73,7 @@ public static void MARSAsyncTimeoutTest() } } - [ConditionalFact(typeof(DataTestUtility),nameof(DataTestUtility.AreConnStringsSetup), /* [ActiveIssue(33930)] */ nameof(DataTestUtility.IsUsingNativeSNI))] + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup)/*, [ActiveIssue(33930)] nameof(DataTestUtility.IsUsingNativeSNI)*/ )] public static void MARSSyncTimeoutTest() { using (SqlConnection connection = new SqlConnection(_connStr)) @@ -127,7 +127,7 @@ public static void MARSSyncTimeoutTest() } #endif - [ConditionalFact(typeof(DataTestUtility),nameof(DataTestUtility.AreConnStringsSetup))] + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] public static void MARSSyncBusyReaderTest() { using (SqlConnection conn = new SqlConnection(_connStr)) @@ -171,7 +171,7 @@ public static void MARSSyncBusyReaderTest() } } - [ConditionalFact(typeof(DataTestUtility),nameof(DataTestUtility.AreConnStringsSetup))] + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] public static void MARSSyncExecuteNonQueryTest() { using (SqlConnection conn = new SqlConnection(_connStr)) @@ -193,7 +193,7 @@ public static void MARSSyncExecuteNonQueryTest() } } - [ConditionalFact(typeof(DataTestUtility),nameof(DataTestUtility.AreConnStringsSetup))] + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] public static void MARSSyncExecuteReaderTest1() { using (SqlConnection conn = new SqlConnection(_connStr)) @@ -245,7 +245,7 @@ public static void MARSSyncExecuteReaderTest1() } - [ConditionalFact(typeof(DataTestUtility),nameof(DataTestUtility.AreConnStringsSetup))] + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] public static void MARSSyncExecuteReaderTest2() { using (SqlConnection conn = new SqlConnection(_connStr)) @@ -268,7 +268,7 @@ public static void MARSSyncExecuteReaderTest2() } } - [ConditionalFact(typeof(DataTestUtility),nameof(DataTestUtility.AreConnStringsSetup))] + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] public static void MARSSyncExecuteReaderTest3() { using (SqlConnection conn = new SqlConnection(_connStr)) @@ -303,7 +303,7 @@ public static void MARSSyncExecuteReaderTest3() } } - [ConditionalFact(typeof(DataTestUtility),nameof(DataTestUtility.AreConnStringsSetup))] + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] public static void MARSSyncExecuteReaderTest4() { using (SqlConnection conn = new SqlConnection(_connStr)) diff --git a/src/System.Data.SqlClient/tests/ManualTests/SQL/SqlCredentialTest/SqlCredentialTest.cs b/src/System.Data.SqlClient/tests/ManualTests/SQL/SqlCredentialTest/SqlCredentialTest.cs index 0ea5a11c2235..1513c6dcfbd0 100644 --- a/src/System.Data.SqlClient/tests/ManualTests/SQL/SqlCredentialTest/SqlCredentialTest.cs +++ b/src/System.Data.SqlClient/tests/ManualTests/SQL/SqlCredentialTest/SqlCredentialTest.cs @@ -17,7 +17,7 @@ namespace System.Data.SqlClient.ManualTesting.Tests public static class SqlCredentialTest { - [ConditionalFact(typeof(DataTestUtility),nameof(DataTestUtility.AreConnStringsSetup), /* [ActiveIssue(33930)] */ nameof(DataTestUtility.IsUsingNativeSNI))] + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] public static void CreateSqlConnectionWithCredential() { var user = "u" + Guid.NewGuid().ToString().Replace("-", ""); @@ -49,7 +49,7 @@ public static void CreateSqlConnectionWithCredential() } } - [ConditionalFact(typeof(DataTestUtility),nameof(DataTestUtility.AreConnStringsSetup), /* [ActiveIssue(33930)] */ nameof(DataTestUtility.IsUsingNativeSNI))] + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] public static void SqlConnectionChangePasswordPlaintext() { var user = "u" + Guid.NewGuid().ToString().Replace("-", ""); @@ -82,7 +82,7 @@ public static void SqlConnectionChangePasswordPlaintext() } } - [ConditionalFact(typeof(DataTestUtility),nameof(DataTestUtility.AreConnStringsSetup), /* [ActiveIssue(33930)] */ nameof(DataTestUtility.IsUsingNativeSNI))] + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] public static void SqlConnectionChangePasswordSecureString() { var user = "u" + Guid.NewGuid().ToString().Replace("-", ""); @@ -122,7 +122,7 @@ public static void SqlConnectionChangePasswordSecureString() } } - [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), /* [ActiveIssue(33930)] */ nameof(DataTestUtility.IsUsingNativeSNI))] + [ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] public static void OldCredentialsShouldFail() { String user = "u" + Guid.NewGuid().ToString().Replace("-", "");