Skip to content

Commit

Permalink
Update SqlClient manual test feature detection (dotnet#34040)
Browse files Browse the repository at this point in the history
* add DataUtility functions to detect service broker and specific databases by name and attributes to use them

* change UDT tests to use database detection fact for UDTTestDatabase

* change service broker tests to use conditional fact

* add the new attribute files to the project

* address feedback

* remember to open connection before running query

* address feedback

* fixup IsServiceBrokerEnabled

* remove IsServiceBrokerEnabled

* re-enabled tests

* remove unused variable
  • Loading branch information
Wraith2 authored and jlennox committed Dec 16, 2018
1 parent 43d2d13 commit 9b9e824
Show file tree
Hide file tree
Showing 5 changed files with 67 additions and 35 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
// 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.Collections.Generic;
using System.Globalization;
using System.Reflection;
using System.Threading.Tasks;
Expand All @@ -13,6 +14,9 @@ public static class DataTestUtility
{
public static readonly string NpConnStr = null;
public static readonly string TcpConnStr = null;

public const string UdtTestDbName = "UdtTestDb";

private static readonly Assembly s_systemDotData = typeof(System.Data.SqlClient.SqlConnection).GetTypeInfo().Assembly;
private static readonly Type s_tdsParserStateObjectFactory = s_systemDotData?.GetType("System.Data.SqlClient.TdsParserStateObjectFactory");
private static readonly PropertyInfo s_useManagedSNI = s_tdsParserStateObjectFactory?.GetProperty("UseManagedSNI", BindingFlags.Static | BindingFlags.Public);
Expand All @@ -21,6 +25,9 @@ public static class DataTestUtility
".database.cloudapi.de",
".database.usgovcloudapi.net",
".database.chinacloudapi.cn"};

private static Dictionary<string, bool> databasesAvailable;

static DataTestUtility()
{
NpConnStr = Environment.GetEnvironmentVariable("TEST_NP_CONN_STR");
Expand All @@ -32,6 +39,28 @@ public static bool AreConnStringsSetup()
return !string.IsNullOrEmpty(NpConnStr) && !string.IsNullOrEmpty(TcpConnStr);
}

public static bool IsDatabasePresent(string name)
{
databasesAvailable = databasesAvailable ?? new Dictionary<string, bool>();
bool present = false;
if (AreConnStringsSetup() && !string.IsNullOrEmpty(name) && !databasesAvailable.TryGetValue(name, out present))
{
var builder = new SqlConnectionStringBuilder(TcpConnStr);
builder.ConnectTimeout = 2;
using (var connection = new SqlConnection(builder.ToString()))
using (var command = new SqlCommand("SELECT COUNT(*) FROM sys.databases WHERE name=@name", connection))
{
connection.Open();
command.Parameters.AddWithValue("name", name);
present = Convert.ToInt32(command.ExecuteScalar()) == 1;
}
databasesAvailable[name] = present;
}
return present;
}

public static bool IsUdtTestDatabasePresent() => IsDatabasePresent(UdtTestDbName);

public static bool IsUsingManagedSNI() => (bool)(s_useManagedSNI?.GetValue(null) ?? false);

// the name length will be no more then (16 + prefix.Length + escapeLeft.Length + escapeRight.Length)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ public void Dispose()

#region StartStop_Tests

[CheckConnStrSetupFact]
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
public void Test_DoubleStart_SameConnStr()
{
Assert.True(SqlDependency.Start(_startConnectionString), "Failed to start listener.");
Expand All @@ -51,7 +51,7 @@ public void Test_DoubleStart_SameConnStr()
Assert.True(SqlDependency.Stop(_startConnectionString), "Failed to stop listener.");
}

[CheckConnStrSetupFact]
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
public void Test_DoubleStart_DifferentConnStr()
{
SqlConnectionStringBuilder cb = new SqlConnectionStringBuilder(_startConnectionString);
Expand All @@ -76,7 +76,7 @@ public void Test_DoubleStart_DifferentConnStr()
}
}

[CheckConnStrSetupFact]
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
public void Test_Start_DifferentDB()
{
SqlConnectionStringBuilder cb = new SqlConnectionStringBuilder(_startConnectionString)
Expand All @@ -97,7 +97,7 @@ public void Test_Start_DifferentDB()

#region SqlDependency_Tests

[CheckConnStrSetupFact]
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
public void Test_SingleDependency_NoStart()
{
using (SqlConnection conn = new SqlConnection(_execConnectionString))
Expand All @@ -115,7 +115,7 @@ public void Test_SingleDependency_NoStart()
}
}

[CheckConnStrSetupFact]
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
public void Test_SingleDependency_Stopped()
{
SqlDependency.Start(_startConnectionString);
Expand All @@ -137,7 +137,7 @@ public void Test_SingleDependency_Stopped()
}
}

[CheckConnStrSetupFact]
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
public void Test_SingleDependency_AllDefaults_SqlAuth()
{
Assert.True(SqlDependency.Start(_startConnectionString), "Failed to start listener.");
Expand Down Expand Up @@ -181,7 +181,7 @@ public void Test_SingleDependency_AllDefaults_SqlAuth()
}
}

[CheckConnStrSetupFact]
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
public void Test_SingleDependency_CustomQueue_SqlAuth()
{
Assert.True(SqlDependency.Start(_startConnectionString, _queueName), "Failed to start listener.");
Expand Down Expand Up @@ -225,7 +225,7 @@ public void Test_SingleDependency_CustomQueue_SqlAuth()
/// <summary>
/// SqlDependecy premature timeout
/// </summary>
[CheckConnStrSetupFact]
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
public void Test_SingleDependency_Timeout()
{
Assert.True(SqlDependency.Start(_startConnectionString), "Failed to start listener.");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,18 @@
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.

using Xunit;

namespace System.Data.SqlClient.ManualTesting.Tests
{
public class UdtBulkCopyTest
{
private string _connStr;

[CheckConnStrSetupFact]
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.IsUdtTestDatabasePresent), nameof(DataTestUtility.AreConnStringsSetup))]
public void RunCopyTest()
{
_connStr = (new SqlConnectionStringBuilder(DataTestUtility.TcpConnStr) { InitialCatalog = "UdtTestDb" }).ConnectionString;
_connStr = (new SqlConnectionStringBuilder(DataTestUtility.TcpConnStr) { InitialCatalog = DataTestUtility.UdtTestDbName }).ConnectionString;
SqlConnection conn = new SqlConnection(_connStr);

string cities = DataTestUtility.GetUniqueNameForSqlServer("UdtBulkCopy_cities");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@ public class UdtTest

public UdtTest()
{
_connStr = (new SqlConnectionStringBuilder(DataTestUtility.TcpConnStr) { InitialCatalog = "UdtTestDb" }).ConnectionString;
_connStr = (new SqlConnectionStringBuilder(DataTestUtility.TcpConnStr) { InitialCatalog = DataTestUtility.UdtTestDbName }).ConnectionString;
}

[CheckConnStrSetupFact]
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.IsUdtTestDatabasePresent), nameof(DataTestUtility.AreConnStringsSetup))]
public void ReaderTest()
{
using (SqlConnection conn = new SqlConnection(_connStr))
Expand Down Expand Up @@ -57,7 +57,7 @@ public void ReaderTest()
}
}

[CheckConnStrSetupFact]
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.IsUdtTestDatabasePresent), nameof(DataTestUtility.AreConnStringsSetup))]
public void ExecuteScalarTest()
{
using (SqlConnection conn = new SqlConnection(_connStr))
Expand All @@ -74,7 +74,7 @@ public void ExecuteScalarTest()
}
}

[CheckConnStrSetupFact]
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.IsUdtTestDatabasePresent), nameof(DataTestUtility.AreConnStringsSetup))]
public void InputParameterTest()
{
using (SqlConnection conn = new SqlConnection(_connStr))
Expand Down Expand Up @@ -123,7 +123,7 @@ public void InputParameterTest()
}
}

[CheckConnStrSetupFact]
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.IsUdtTestDatabasePresent), nameof(DataTestUtility.AreConnStringsSetup))]
public void OutputParameterTest()
{
using (SqlConnection conn = new SqlConnection(_connStr))
Expand Down Expand Up @@ -158,7 +158,7 @@ public void OutputParameterTest()
}
}

[CheckConnStrSetupFact]
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.IsUdtTestDatabasePresent), nameof(DataTestUtility.AreConnStringsSetup))]
public void FillTest()
{
using (SqlConnection conn = new SqlConnection(_connStr))
Expand All @@ -180,7 +180,7 @@ public void FillTest()
}
}

[CheckConnStrSetupFact]
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.IsUdtTestDatabasePresent), nameof(DataTestUtility.AreConnStringsSetup))]
public void UpdateTest()
{
using (SqlConnection conn = new SqlConnection(_connStr))
Expand Down Expand Up @@ -216,7 +216,7 @@ public void UpdateTest()
}
}

[CheckConnStrSetupFact]
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.IsUdtTestDatabasePresent), nameof(DataTestUtility.AreConnStringsSetup))]
public void NullTest()
{
using (SqlConnection conn = new SqlConnection(_connStr))
Expand Down Expand Up @@ -290,4 +290,4 @@ private void VerifyDataSet(DataSet ds, Utf8String[] expectedValues)
}
}
}
}
}
33 changes: 17 additions & 16 deletions src/System.Data.SqlClient/tests/ManualTests/SQL/UdtTest/UdtTest2.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
using System.Reflection;
using System.Text;
using Microsoft.SqlServer.Server;
using Xunit;

namespace System.Data.SqlClient.ManualTesting.Tests
{
Expand All @@ -15,10 +16,10 @@ public class UdtTest2

public UdtTest2()
{
_connStr = (new SqlConnectionStringBuilder(DataTestUtility.TcpConnStr) { InitialCatalog = "UdtTestDb" }).ConnectionString;
_connStr = (new SqlConnectionStringBuilder(DataTestUtility.TcpConnStr) { InitialCatalog = DataTestUtility.UdtTestDbName }).ConnectionString;
}

[CheckConnStrSetupFact]
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.IsUdtTestDatabasePresent), nameof(DataTestUtility.AreConnStringsSetup))]
public void UDTParams_Early()
{
using (SqlConnection conn = new SqlConnection(_connStr))
Expand Down Expand Up @@ -48,7 +49,7 @@ public void UDTParams_Early()
}
}

[CheckConnStrSetupFact]
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.IsUdtTestDatabasePresent), nameof(DataTestUtility.AreConnStringsSetup))]
public void UDTParams_Binary()
{
using (SqlConnection conn = new SqlConnection(_connStr))
Expand Down Expand Up @@ -77,7 +78,7 @@ public void UDTParams_Binary()
}
}

[CheckConnStrSetupFact]
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.IsUdtTestDatabasePresent), nameof(DataTestUtility.AreConnStringsSetup))]
public void UDTParams_Invalid2()
{
string spInsertCustomer = DataTestUtility.GetUniqueNameForSqlServer("spUdtTest2_InsertCustomer");
Expand Down Expand Up @@ -117,7 +118,7 @@ public void UDTParams_Invalid2()
}
}

[CheckConnStrSetupFact]
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.IsUdtTestDatabasePresent), nameof(DataTestUtility.AreConnStringsSetup))]
public void UDTParams_Invalid()
{
using (SqlConnection conn = new SqlConnection(_connStr))
Expand All @@ -136,7 +137,7 @@ public void UDTParams_Invalid()
}
}

[CheckConnStrSetupFact]
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.IsUdtTestDatabasePresent), nameof(DataTestUtility.AreConnStringsSetup))]
public void UDTParams_TypedNull()
{
string spInsertCustomer = DataTestUtility.GetUniqueNameForSqlServer("spUdtTest2_InsertCustomer");
Expand Down Expand Up @@ -181,7 +182,7 @@ public void UDTParams_TypedNull()
}
}

[CheckConnStrSetupFact]
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.IsUdtTestDatabasePresent), nameof(DataTestUtility.AreConnStringsSetup))]
public void UDTParams_NullInput()
{
string spInsertCustomer = DataTestUtility.GetUniqueNameForSqlServer("spUdtTest2_InsertCustomer");
Expand Down Expand Up @@ -225,7 +226,7 @@ public void UDTParams_NullInput()
}
}

[CheckConnStrSetupFact]
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.IsUdtTestDatabasePresent), nameof(DataTestUtility.AreConnStringsSetup))]
public void UDTParams_InputOutput()
{
string spInsertCity = DataTestUtility.GetUniqueNameForSqlServer("spUdtTest2_InsertCity");
Expand Down Expand Up @@ -287,7 +288,7 @@ public void UDTParams_InputOutput()
}
}

[CheckConnStrSetupFact]
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.IsUdtTestDatabasePresent), nameof(DataTestUtility.AreConnStringsSetup))]
public void UDTFields_WrongType()
{
using (SqlConnection cn = new SqlConnection(_connStr))
Expand Down Expand Up @@ -317,7 +318,7 @@ public void UDTFields_WrongType()
}
}

[CheckConnStrSetupFact]
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.IsUdtTestDatabasePresent), nameof(DataTestUtility.AreConnStringsSetup))]
public void UDT_DataSetFill()
{
using (SqlConnection cn = new SqlConnection(_connStr))
Expand All @@ -341,7 +342,7 @@ public void UDT_DataSetFill()
}
}

[CheckConnStrSetupFact]
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.IsUdtTestDatabasePresent), nameof(DataTestUtility.AreConnStringsSetup))]
public void Reader_PointEarly()
{
using (SqlConnection conn = new SqlConnection(_connStr))
Expand Down Expand Up @@ -375,7 +376,7 @@ public void Reader_PointEarly()
}
}

[CheckConnStrSetupFact]
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.IsUdtTestDatabasePresent), nameof(DataTestUtility.AreConnStringsSetup))]
public void Reader_LineEarly()
{
using (SqlConnection conn = new SqlConnection(_connStr))
Expand Down Expand Up @@ -435,7 +436,7 @@ public void Reader_LineEarly()
}
}

[CheckConnStrSetupFact]
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.IsUdtTestDatabasePresent), nameof(DataTestUtility.AreConnStringsSetup))]
public void Reader_PointLate()
{
using (SqlConnection conn = new SqlConnection(_connStr))
Expand Down Expand Up @@ -468,7 +469,7 @@ public void Reader_PointLate()
}
}

[CheckConnStrSetupFact]
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.IsUdtTestDatabasePresent), nameof(DataTestUtility.AreConnStringsSetup))]
public void Reader_CircleLate()
{
using (SqlConnection conn = new SqlConnection(_connStr))
Expand Down Expand Up @@ -500,7 +501,7 @@ public void Reader_CircleLate()
}
}

[CheckConnStrSetupFact]
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.IsUdtTestDatabasePresent), nameof(DataTestUtility.AreConnStringsSetup))]
public void TestSchemaTable()
{
using (SqlConnection conn = new SqlConnection(_connStr))
Expand Down Expand Up @@ -562,7 +563,7 @@ public void TestSchemaTable()
}
}

[CheckConnStrSetupFact]
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.IsUdtTestDatabasePresent), nameof(DataTestUtility.AreConnStringsSetup))]
public void TestSqlUserDefinedAggregateAttributeMaxByteSize()
{
Func<int, SqlUserDefinedAggregateAttribute> create
Expand Down

0 comments on commit 9b9e824

Please sign in to comment.