From a2450ee833ecfb0d8bfafe7cd061d0c7fd7869b2 Mon Sep 17 00:00:00 2001 From: Cheena Malhotra Date: Tue, 28 Sep 2021 15:17:22 -0700 Subject: [PATCH] Modify tests --- .../Microsoft/Data/SqlClient/SqlDataReader.cs | 1 + .../DataReaderTest/DataReaderStreamsTest.cs | 89 ++++++++++--------- 2 files changed, 50 insertions(+), 40 deletions(-) diff --git a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlDataReader.cs b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlDataReader.cs index 22c6a86baf..f691da0e7a 100644 --- a/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlDataReader.cs +++ b/src/Microsoft.Data.SqlClient/netcore/src/Microsoft/Data/SqlClient/SqlDataReader.cs @@ -3868,6 +3868,7 @@ internal bool TryReadColumnInternal(int i, bool readHeaderOnly = false, bool for else { // we have read past the column somehow, this is an error + Debug.Assert(false, "We have read past the column somehow, this is an error"); } } else diff --git a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataReaderTest/DataReaderStreamsTest.cs b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataReaderTest/DataReaderStreamsTest.cs index 2d8f0ef81d..532cff5134 100644 --- a/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataReaderTest/DataReaderStreamsTest.cs +++ b/src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataReaderTest/DataReaderStreamsTest.cs @@ -17,8 +17,8 @@ public static class DataReaderStreamsTest { [SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework)] [ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] - [MemberData(nameof(GetCommandBehaviours))] - public static async Task GetFieldValueAsync_OfStream(CommandBehavior behavior) + [MemberData(nameof(GetCommandBehavioursAndIsAsync))] + public static async Task GetFieldValueAsync_OfStream(CommandBehavior behavior, bool isExecuteAsync) { const int PacketSize = 512; // force minimun packet size so that the test data spans multiple packets to test sequential access spanning string connectionString = SetConnectionStringPacketSize(DataTestUtility.TCPConnectionString, PacketSize); @@ -31,9 +31,9 @@ public static async Task GetFieldValueAsync_OfStream(CommandBehavior behavior) using (SqlCommand command = new SqlCommand(query, connection)) { connection.Open(); - using (SqlDataReader reader = command.ExecuteReader(behavior)) + using (SqlDataReader reader = await ExecuteReader(command, behavior, isExecuteAsync)) { - if (reader.Read()) + if (await Read(reader, isExecuteAsync)) { using (MemoryStream buffer = new MemoryStream(originalData.Length)) using (Stream stream = await reader.GetFieldValueAsync(1)) @@ -54,8 +54,8 @@ public static async Task GetFieldValueAsync_OfStream(CommandBehavior behavior) [SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework)] [ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] - [MemberData(nameof(GetCommandBehaviours))] - public static async Task GetFieldValueAsync_OfXmlReader(CommandBehavior behavior) + [MemberData(nameof(GetCommandBehavioursAndIsAsync))] + public static async Task GetFieldValueAsync_OfXmlReader(CommandBehavior behavior, bool isExecuteAsync) { const int PacketSize = 512; // force minimun packet size so that the test data spans multiple packets to test sequential access spanning string connectionString = SetConnectionStringPacketSize(DataTestUtility.TCPConnectionString, PacketSize); @@ -68,9 +68,9 @@ public static async Task GetFieldValueAsync_OfXmlReader(CommandBehavior behavior using (SqlCommand command = new SqlCommand(query, connection)) { connection.Open(); - using (SqlDataReader reader = command.ExecuteReader(behavior)) + using (SqlDataReader reader = await ExecuteReader(command, behavior, isExecuteAsync)) { - if (reader.Read()) + if (await Read(reader, isExecuteAsync)) { using (XmlReader xmlReader = await reader.GetFieldValueAsync(1)) { @@ -89,8 +89,8 @@ public static async Task GetFieldValueAsync_OfXmlReader(CommandBehavior behavior [SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework)] [ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] - [MemberData(nameof(GetCommandBehaviours))] - public static async Task GetFieldValueAsync_OfTextReader(CommandBehavior behavior) + [MemberData(nameof(GetCommandBehavioursAndIsAsync))] + public static async Task GetFieldValueAsync_OfTextReader(CommandBehavior behavior, bool isExecuteAsync) { const int PacketSize = 512; // force minimun packet size so that the test data spans multiple packets to test sequential access spanning string connectionString = SetConnectionStringPacketSize(DataTestUtility.TCPConnectionString, PacketSize); @@ -103,9 +103,9 @@ public static async Task GetFieldValueAsync_OfTextReader(CommandBehavior behavio using (SqlCommand command = new SqlCommand(query, connection)) { connection.Open(); - using (SqlDataReader reader = command.ExecuteReader(behavior)) + using (SqlDataReader reader = await ExecuteReader(command, behavior, isExecuteAsync)) { - if (reader.Read()) + if (await Read(reader, isExecuteAsync)) { using (TextReader textReader = await reader.GetFieldValueAsync(1)) { @@ -124,8 +124,8 @@ public static async Task GetFieldValueAsync_OfTextReader(CommandBehavior behavio [SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework)] [ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] - [MemberData(nameof(GetCommandBehaviours))] - public static void GetFieldValue_OfXmlReader(CommandBehavior behavior) + [MemberData(nameof(GetCommandBehavioursAndIsAsync))] + public static async void GetFieldValue_OfXmlReader(CommandBehavior behavior, bool isExecuteAsync) { const int PacketSize = 512; // force minimun packet size so that the test data spans multiple packets to test sequential access spanning string connectionString = SetConnectionStringPacketSize(DataTestUtility.TCPConnectionString, PacketSize); @@ -138,9 +138,9 @@ public static void GetFieldValue_OfXmlReader(CommandBehavior behavior) using (SqlCommand command = new SqlCommand(query, connection)) { connection.Open(); - using (SqlDataReader reader = command.ExecuteReader(behavior)) + using (SqlDataReader reader = await ExecuteReader(command, behavior, isExecuteAsync)) { - if (reader.Read()) + if (await Read(reader, isExecuteAsync)) { using (XmlReader xmlReader = reader.GetFieldValue(1)) { @@ -159,8 +159,8 @@ public static void GetFieldValue_OfXmlReader(CommandBehavior behavior) [SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework)] [ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] - [MemberData(nameof(GetCommandBehaviours))] - public static void GetFieldValue_OfStream(CommandBehavior behavior) + [MemberData(nameof(GetCommandBehavioursAndIsAsync))] + public static async void GetFieldValue_OfStream(CommandBehavior behavior, bool isExecuteAsync) { const int PacketSize = 512; // force minimun packet size so that the test data spans multiple packets to test sequential access spanning string connectionString = SetConnectionStringPacketSize(DataTestUtility.TCPConnectionString, PacketSize); @@ -173,9 +173,9 @@ public static void GetFieldValue_OfStream(CommandBehavior behavior) using (SqlCommand command = new SqlCommand(query, connection)) { connection.Open(); - using (SqlDataReader reader = command.ExecuteReader(behavior)) + using (SqlDataReader reader = await ExecuteReader(command, behavior, isExecuteAsync)) { - if (reader.Read()) + if (await Read(reader, isExecuteAsync)) { using (Stream stream = reader.GetFieldValue(1)) { @@ -193,8 +193,8 @@ public static void GetFieldValue_OfStream(CommandBehavior behavior) [SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework)] [ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] - [MemberData(nameof(GetCommandBehaviours))] - public static void GetFieldValue_OfTextReader(CommandBehavior behavior) + [MemberData(nameof(GetCommandBehavioursAndIsAsync))] + public static async void GetFieldValue_OfTextReader(CommandBehavior behavior, bool isExecuteAsync) { const int PacketSize = 512; // force minimun packet size so that the test data spans multiple packets to test sequential access spanning string connectionString = SetConnectionStringPacketSize(DataTestUtility.TCPConnectionString, PacketSize); @@ -207,9 +207,9 @@ public static void GetFieldValue_OfTextReader(CommandBehavior behavior) using (SqlCommand command = new SqlCommand(query, connection)) { connection.Open(); - using (SqlDataReader reader = command.ExecuteReader(behavior)) + using (SqlDataReader reader = await ExecuteReader(command, behavior, isExecuteAsync)) { - if (reader.Read()) + if (await Read(reader, isExecuteAsync)) { using (TextReader textReader = reader.GetFieldValue(1)) { @@ -228,8 +228,8 @@ public static void GetFieldValue_OfTextReader(CommandBehavior behavior) [SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework)] [ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] - [MemberData(nameof(GetCommandBehaviours))] - public static void GetStream(CommandBehavior behavior) + [MemberData(nameof(GetCommandBehavioursAndIsAsync))] + public static async void GetStream(CommandBehavior behavior, bool isExecuteAsync) { const int PacketSize = 512; // force minimun packet size so that the test data spans multiple packets to test sequential access spanning string connectionString = SetConnectionStringPacketSize(DataTestUtility.TCPConnectionString, PacketSize); @@ -242,9 +242,9 @@ public static void GetStream(CommandBehavior behavior) using (SqlCommand command = new SqlCommand(query, connection)) { connection.Open(); - using (SqlDataReader reader = command.ExecuteReader(behavior)) + using (SqlDataReader reader = await ExecuteReader(command, behavior, isExecuteAsync)) { - if (reader.Read()) + if (await Read(reader, isExecuteAsync)) { using (MemoryStream buffer = new MemoryStream(originalData.Length)) using (Stream stream = reader.GetStream(1)) @@ -265,8 +265,8 @@ public static void GetStream(CommandBehavior behavior) [SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework)] [ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] - [MemberData(nameof(GetCommandBehaviours))] - public static void GetXmlReader(CommandBehavior behavior) + [MemberData(nameof(GetCommandBehavioursAndIsAsync))] + public static async void GetXmlReader(CommandBehavior behavior, bool isExecuteAsync) { const int PacketSize = 512; // force minimun packet size so that the test data spans multiple packets to test sequential access spanning string connectionString = SetConnectionStringPacketSize(DataTestUtility.TCPConnectionString, PacketSize); @@ -279,9 +279,9 @@ public static void GetXmlReader(CommandBehavior behavior) using (SqlCommand command = new SqlCommand(query, connection)) { connection.Open(); - using (SqlDataReader reader = command.ExecuteReader(behavior)) + using (SqlDataReader reader = await ExecuteReader(command, behavior, isExecuteAsync)) { - if (reader.Read()) + if (await Read(reader, isExecuteAsync)) { using (XmlReader xmlReader = reader.GetXmlReader(1)) { @@ -300,8 +300,8 @@ public static void GetXmlReader(CommandBehavior behavior) [SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework)] [ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))] - [MemberData(nameof(GetCommandBehaviours))] - public static void GetTextReader(CommandBehavior behavior) + [MemberData(nameof(GetCommandBehavioursAndIsAsync))] + public static async void GetTextReader(CommandBehavior behavior, bool isExecuteAsync) { const int PacketSize = 512; // force minimun packet size so that the test data spans multiple packets to test sequential access spanning string connectionString = SetConnectionStringPacketSize(DataTestUtility.TCPConnectionString, PacketSize); @@ -314,9 +314,9 @@ public static void GetTextReader(CommandBehavior behavior) using (SqlCommand command = new SqlCommand(query, connection)) { connection.Open(); - using (SqlDataReader reader = command.ExecuteReader(behavior)) + using (SqlDataReader reader = await ExecuteReader(command, behavior, isExecuteAsync)) { - if (reader.Read()) + if (await Read(reader, isExecuteAsync)) { using (TextReader textReader = reader.GetTextReader(1)) { @@ -407,7 +407,7 @@ public static void NullStreamProperties(CommandBehavior behavior, AccessorType a using (TextReader textReader = GetValue(reader, 1, accessorType)) { - Assert.Equal(textReader.ReadToEnd(), string.Empty); + Assert.Equal(textReader.ReadToEnd(), string.Empty); } using (Stream stream = GetValue(reader, 2, accessorType)) @@ -420,6 +420,12 @@ public static void NullStreamProperties(CommandBehavior behavior, AccessorType a } + private static async Task ExecuteReader(SqlCommand command, CommandBehavior behavior, bool isExecuteAsync) + => isExecuteAsync ? await command.ExecuteReaderAsync(behavior) : command.ExecuteReader(behavior); + + private static async Task Read(SqlDataReader reader, bool isExecuteAsync) + => isExecuteAsync ? await reader.ReadAsync() : reader.Read(); + public static IEnumerable GetCommandBehaviourAndAccessorTypes() { foreach (CommandBehavior behavior in new CommandBehavior[] { CommandBehavior.Default, CommandBehavior.SequentialAccess }) @@ -431,10 +437,13 @@ public static IEnumerable GetCommandBehaviourAndAccessorTypes() } } - public static IEnumerable GetCommandBehaviours() + public static IEnumerable GetCommandBehavioursAndIsAsync() { - yield return new object[] { CommandBehavior.Default }; - yield return new object[] { CommandBehavior.SequentialAccess }; + foreach (CommandBehavior behavior in new CommandBehavior[] { CommandBehavior.Default, CommandBehavior.SequentialAccess }) + { + yield return new object[] { behavior, true }; + yield return new object[] { behavior, false }; + } } public enum AccessorType