Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@
using System.Data;
using System.Data.SqlTypes;
using System.IO;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
Expand All @@ -28,24 +27,197 @@ public DataStreamTest(ITestOutputHelper outputHelper)
_testName = DataTestUtility.CurrentTestName(outputHelper);
}

[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureServer))]
public void RunAllTestsForSingleServer_NP()
public static IEnumerable<object[]> ConnectionStrings
{
// @TODO: Split into separate tests! Or why even bother running this test on non-windows, the error comes from something other than data stream!
if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
get
{
DataTestUtility.AssertThrowsWrapper<PlatformNotSupportedException>(() => RunAllTestsForSingleServer(DataTestUtility.NPConnectionString, true));
}
else
{
RunAllTestsForSingleServer(DataTestUtility.NPConnectionString, true);
foreach (string connectionString in DataTestUtility.GetConnectionStrings(withEnclave: false))
{
yield return new object[] { connectionString };
}
}
}

[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
public void RunAllTestsForSingleServer_TCP()

[ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
[MemberData(nameof(ConnectionStrings))]
public static void RowBuffer_ReadsBufferCorrectly(string connectionString)
{
RowBuffer(connectionString);
}

[ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
[MemberData(nameof(ConnectionStrings))]
public static void InvalidRead_ThrowsInvalidOperationException(string connectionString)
{
InvalidRead(connectionString);
}

[ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
[MemberData(nameof(ConnectionStrings))]
public static void VariantRead_ReadsVariantDataCorrectly(string connectionString)
{
VariantRead(connectionString);
}

[ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
[MemberData(nameof(ConnectionStrings))]
public static void TypeRead_ReadsTypedDataCorrectly(string connectionString)
{
TypeRead(connectionString);
}

[ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
[MemberData(nameof(ConnectionStrings))]
public static void SqlTypeRead_ReadsSqlTypesCorrectly(string connectionString)
{
SQLTypeRead(connectionString);
}

[ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
[MemberData(nameof(ConnectionStrings))]
public static void GetValueOfTRead_ReadsGenericTypesCorrectly(string connectionString)
{
GetValueOfTRead(connectionString);
}

[ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
[MemberData(nameof(ConnectionStrings))]
public static void MultipleResults_ReadsMultipleBatchesCorrectly(string connectionString)
{
MultipleResults(connectionString);
}

[ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
[MemberData(nameof(ConnectionStrings))]
public static void NumericRead_ReadsLargeNumericValues(string connectionString)
{
NumericRead(connectionString);
}

[ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
[MemberData(nameof(ConnectionStrings))]
public static void TimestampRead_ReadsBinaryTimestamp(string connectionString)
{
TimestampRead(connectionString);
}

[ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
[MemberData(nameof(ConnectionStrings))]
public static void OrphanReader_HandlesConnectionCloseCorrectly(string connectionString)
{
OrphanReader(connectionString);
}

[ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
[MemberData(nameof(ConnectionStrings))]
public static void BufferSize_HandlesVariableBufferSizes(string connectionString)
{
BufferSize(connectionString);
}

[ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
[MemberData(nameof(ConnectionStrings))]
public static void ExecuteXmlReader_ReadsXmlDataCorrectly(string connectionString)
{
ExecuteXmlReaderTest(connectionString);
}

[ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
[MemberData(nameof(ConnectionStrings))]
public static void SequentialAccess_ReadsDataSequentially(string connectionString)
{
SequentialAccess(connectionString);
}

[ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
[MemberData(nameof(ConnectionStrings))]
public static void HasRows_ReportsCorrectly(string connectionString)
{
HasRowsTest(connectionString);
}

[ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
[MemberData(nameof(ConnectionStrings))]
public static void CloseConnection_ClosesReaderWithConnection(string connectionString)
{
CloseConnection(connectionString);
}

[ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
[MemberData(nameof(ConnectionStrings))]
public static void OpenConnection_OpensSuccessfully(string connectionString)
{
OpenConnection(connectionString);
}

[ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
[MemberData(nameof(ConnectionStrings))]
public static void SqlCharsBytes_QueriesWithSqlTypes(string connectionString)
{
SqlCharsBytesTest(connectionString);
}

[ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
[MemberData(nameof(ConnectionStrings))]
public static void GetStream_ReturnsStreamCorrectly(string connectionString)
{
GetStream(connectionString);
}

[ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
[MemberData(nameof(ConnectionStrings))]
public static void GetTextReader_ReturnsTextReaderCorrectly(string connectionString)
{
GetTextReader(connectionString);
}

[ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
[MemberData(nameof(ConnectionStrings))]
public static void GetXmlReader_ReturnsXmlReaderCorrectly(string connectionString)
{
RunAllTestsForSingleServer(DataTestUtility.TCPConnectionString);
GetXmlReader(connectionString);
}

[ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
[MemberData(nameof(ConnectionStrings))]
public static void ReadStream_ReadsStreamDataCorrectly(string connectionString)
{
ReadStream(connectionString);
}

[ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
[MemberData(nameof(ConnectionStrings))]
public static void ReadTextReader_ReadsTextCorrectly(string connectionString)
{
ReadTextReader(connectionString);
}

[ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
[MemberData(nameof(ConnectionStrings))]
public static void StreamingBlobDataTypes_ReadsAllBlobTypes(string connectionString)
{
StreamingBlobDataTypes(connectionString);
}

[ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
[MemberData(nameof(ConnectionStrings))]
public static void OutOfOrderGetChars_ReadsColumnsOutOfOrder(string connectionString)
{
OutOfOrderGetChars(connectionString);
}

[ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureServer), nameof(DataTestUtility.IsNotNamedInstance))]
[MemberData(nameof(ConnectionStrings))]
public void TestXEventsStreaming_StreamsXEventsCorrectly(string connectionString)
{
TestXEventsStreaming(connectionString);
}

// TimeoutDuringReadAsync only works with TCP (not named pipes) and native SNI
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureServer), nameof(DataTestUtility.IsNotNamedInstance), nameof(DataTestUtility.IsUsingNativeSNI))]
public static void TimeoutDuringReadAsync_WithClosedReader_TimesOut()
{
TimeoutDuringReadAsyncWithClosedReaderTest(DataTestUtility.TCPConnectionString);
}

// Synapse: The statement failed. Column 'foo' has a data type that cannot participate in a columnstore index.
Expand Down Expand Up @@ -162,53 +334,6 @@ IF OBJECT_ID('dbo.{tableName}', 'U') IS NOT NULL
return data;
}

// @TODO: Split into separate tests!
private void RunAllTestsForSingleServer(string connectionString, bool usingNamePipes = false)
{
RowBuffer(connectionString);
InvalidRead(connectionString);
VariantRead(connectionString);
TypeRead(connectionString);
SQLTypeRead(connectionString);
GetValueOfTRead(connectionString);
MultipleResults(connectionString);
NumericRead(connectionString);
TimestampRead(connectionString);
OrphanReader(connectionString);
BufferSize(connectionString);
ExecuteXmlReaderTest(connectionString);
SequentialAccess(connectionString);
HasRowsTest(connectionString);
CloseConnection(connectionString);
OpenConnection(connectionString);
SqlCharsBytesTest(connectionString);
GetStream(connectionString);
GetTextReader(connectionString);
GetXmlReader(connectionString);
ReadStream(connectionString);
ReadTextReader(connectionString);
StreamingBlobDataTypes(connectionString);
OutOfOrderGetChars(connectionString);

// These tests fail on Azure or Named Instances, so skip them for
// those contexts.
var dataSource = new SqlConnectionStringBuilder(connectionString).DataSource;
if (!Utils.IsAzureSqlServer(dataSource)
&& !dataSource.Contains(@"\"))
{
TestXEventsStreaming(connectionString);

// These tests also fail with named pipes, since they try to do
// DNS lookups on named pipe paths.
//
// They also are only meant to run for native SNI.
if (!usingNamePipes && DataTestUtility.IsUsingNativeSNI())
{
TimeoutDuringReadAsyncWithClosedReaderTest(connectionString);
}
}
}

private static void MultipleResults(string connectionString)
{
using (SqlConnection conn = new SqlConnection(connectionString))
Expand Down Expand Up @@ -572,27 +697,34 @@ private static void TimestampRead(string connectionString)
conn.Open();
using (SqlCommand cmdDefault = new SqlCommand("", conn))
{
cmdDefault.CommandText = "create table " + tempTable + "(c1 int, c2 timestamp)";
cmdDefault.ExecuteNonQuery();
try
{
cmdDefault.CommandText = "create table " + tempTable + "(c1 int, c2 timestamp)";
cmdDefault.ExecuteNonQuery();

cmdDefault.CommandText = "insert into " + tempTable + "(c1) values (1)";
cmdDefault.ExecuteNonQuery();
cmdDefault.CommandText = "insert into " + tempTable + "(c1) values (1)";
cmdDefault.ExecuteNonQuery();

cmdDefault.CommandText = "select * from " + tempTable;
using (SqlDataReader reader = cmdDefault.ExecuteReader())
{
DataTestUtility.AssertEqualsWithDescription("timestamp", reader.GetDataTypeName(1), "FAILED: Data value did not have correct type");
reader.Read();
cmdDefault.CommandText = "select * from " + tempTable;
using (SqlDataReader reader = cmdDefault.ExecuteReader())
{
DataTestUtility.AssertEqualsWithDescription("timestamp", reader.GetDataTypeName(1), "FAILED: Data value did not have correct type");
reader.Read();

object o = reader[1];
object o = reader[1];

// timestamps are really 8-byte binary
byte[] b = (byte[])o;
DataTestUtility.AssertEqualsWithDescription(8, b.Length, "FAILED: Retrieved byte array had incorrect length");
// timestamps are really 8-byte binary
byte[] b = (byte[])o;
DataTestUtility.AssertEqualsWithDescription(8, b.Length, "FAILED: Retrieved byte array had incorrect length");

SqlBinary sqlBin = reader.GetSqlBinary(1);
b = sqlBin.Value;
DataTestUtility.AssertEqualsWithDescription(8, b.Length, "FAILED: Retrieved SqlBinary value had incorrect length");
SqlBinary sqlBin = reader.GetSqlBinary(1);
b = sqlBin.Value;
DataTestUtility.AssertEqualsWithDescription(8, b.Length, "FAILED: Retrieved SqlBinary value had incorrect length");
}
}
finally
{
DataTestUtility.DropTable(conn, tempTable);
}
}
}
Expand Down
Loading