Skip to content

Commit bad621f

Browse files
authored
Test fixes to accommodate recent infra changes (#2646)
* Test fixes to accomodate recent infra changes
1 parent 0352a50 commit bad621f

File tree

8 files changed

+68
-37
lines changed

8 files changed

+68
-37
lines changed

src/Microsoft.Data.SqlClient/tests/ManualTests/DataCommon/DataTestUtility.cs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ public static class DataTestUtility
6767
public static readonly string EnclaveAzureDatabaseConnString = null;
6868
public static bool ManagedIdentitySupported = true;
6969
public static string AADAccessToken = null;
70+
public static bool SupportsSystemAssignedManagedIdentity = false;
7071
public static string AADSystemIdentityAccessToken = null;
7172
public static string AADUserIdentityAccessToken = null;
7273
public const string ApplicationClientId = "2fd908ad-0664-4344-b9be-cd3e8b574c38";
@@ -108,6 +109,15 @@ public static bool IsAzureSynapse
108109
}
109110
}
110111

112+
public static bool TcpConnectionStringDoesNotUseAadAuth
113+
{
114+
get
115+
{
116+
SqlConnectionStringBuilder builder = new (TCPConnectionString);
117+
return builder.Authentication == SqlAuthenticationMethod.SqlPassword || builder.Authentication == SqlAuthenticationMethod.NotSpecified;
118+
}
119+
}
120+
111121
public static string SQLServerVersion
112122
{
113123
get
@@ -645,7 +655,7 @@ public static string GetAccessToken()
645655

646656
public static string GetSystemIdentityAccessToken()
647657
{
648-
if (true == ManagedIdentitySupported && null == AADSystemIdentityAccessToken && IsAADPasswordConnStrSetup())
658+
if (ManagedIdentitySupported && SupportsSystemAssignedManagedIdentity && null == AADSystemIdentityAccessToken && IsAADPasswordConnStrSetup())
649659
{
650660
AADSystemIdentityAccessToken = AADUtility.GetManagedIdentityToken().GetAwaiter().GetResult();
651661
if (AADSystemIdentityAccessToken == null)
@@ -658,7 +668,7 @@ public static string GetSystemIdentityAccessToken()
658668

659669
public static string GetUserIdentityAccessToken()
660670
{
661-
if (true == ManagedIdentitySupported && null == AADUserIdentityAccessToken && IsAADPasswordConnStrSetup())
671+
if (ManagedIdentitySupported && null == AADUserIdentityAccessToken && IsAADPasswordConnStrSetup())
662672
{
663673
// Pass User Assigned Managed Identity Client Id here.
664674
AADUserIdentityAccessToken = AADUtility.GetManagedIdentityToken(UserManagedIdentityClientId).GetAwaiter().GetResult();

src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/AdapterTest/AdapterTest.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1059,7 +1059,14 @@ public void UpdateOffsetTest()
10591059
}
10601060
}
10611061

1062-
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
1062+
public static bool CanRunSchemaTests()
1063+
{
1064+
return DataTestUtility.AreConnStringsSetup() &&
1065+
// Tests switch to master database, which is not guaranteed when using AAD auth
1066+
DataTestUtility.TcpConnectionStringDoesNotUseAadAuth;
1067+
}
1068+
1069+
[ConditionalFact(nameof(CanRunSchemaTests))]
10631070
public void SelectAllTest()
10641071
{
10651072
// Test exceptions

src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ConnectivityTests/AADConnectionTest.cs

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -74,13 +74,14 @@ private static void ConnectAndDisconnect(string connectionString, SqlCredential
7474
private static bool IsAccessTokenSetup() => DataTestUtility.IsAccessTokenSetup();
7575
private static bool IsAADConnStringsSetup() => DataTestUtility.IsAADPasswordConnStrSetup();
7676
private static bool IsManagedIdentitySetup() => DataTestUtility.ManagedIdentitySupported;
77+
private static bool SupportsSystemAssignedManagedIdentity() => DataTestUtility.SupportsSystemAssignedManagedIdentity;
7778

7879
[PlatformSpecific(TestPlatforms.Windows)]
79-
[ConditionalFact(nameof(IsAccessTokenSetup), nameof(IsAADConnStringsSetup))]
80+
[ConditionalFact(nameof(IsAccessTokenSetup), nameof(IsAADConnStringsSetup), nameof(IsManagedIdentitySetup))]
8081
public static void KustoDatabaseTest()
8182
{
8283
// This is a sample Kusto database that can be connected by any AD account.
83-
using SqlConnection connection = new SqlConnection("Data Source=help.kusto.windows.net; Authentication=Active Directory Default;Trust Server Certificate=True;");
84+
using SqlConnection connection = new SqlConnection($"Data Source=help.kusto.windows.net; Authentication=Active Directory Default;Trust Server Certificate=True;User ID = {DataTestUtility.UserManagedIdentityClientId};");
8485
connection.Open();
8586
Assert.True(connection.State == System.Data.ConnectionState.Open);
8687
}
@@ -602,7 +603,7 @@ public static void AccessTokenCallbackMustOpenPassAndChangePropertyFail()
602603
{
603604
string[] credKeys = { "Authentication", "User ID", "Password", "UID", "PWD" };
604605
string connStr = DataTestUtility.RemoveKeysInConnStr(DataTestUtility.AADPasswordConnectionString, credKeys);
605-
var cred = new DefaultAzureCredential();
606+
var cred = DataTestUtility.GetTokenCredential();
606607
const string defaultScopeSuffix = "/.default";
607608
using (SqlConnection conn = new SqlConnection(connStr))
608609
{
@@ -629,7 +630,7 @@ public static void AccessTokenCallbackReceivesUsernameAndPassword()
629630
string[] credKeys = { "Authentication", "User ID", "Password", "UID", "PWD" };
630631
string connStr = DataTestUtility.RemoveKeysInConnStr(DataTestUtility.AADPasswordConnectionString, credKeys) +
631632
$"User ID={userId}; Password={pwd}";
632-
var cred = new DefaultAzureCredential();
633+
var cred = DataTestUtility.GetTokenCredential();
633634
const string defaultScopeSuffix = "/.default";
634635
using (SqlConnection conn = new SqlConnection(connStr))
635636
{
@@ -645,12 +646,12 @@ public static void AccessTokenCallbackReceivesUsernameAndPassword()
645646
}
646647
}
647648

648-
[ConditionalFact(nameof(IsAADConnStringsSetup))]
649+
[ConditionalFact(nameof(IsAADConnStringsSetup), nameof(IsManagedIdentitySetup))]
649650
public static void ActiveDirectoryDefaultMustPass()
650651
{
651652
string[] credKeys = { "Authentication", "User ID", "Password", "UID", "PWD" };
652653
string connStr = DataTestUtility.RemoveKeysInConnStr(DataTestUtility.AADPasswordConnectionString, credKeys) +
653-
"Authentication=ActiveDirectoryDefault;";
654+
$"Authentication=ActiveDirectoryDefault;User ID={DataTestUtility.UserManagedIdentityClientId};";
654655

655656
// Connection should be established using Managed Identity by default.
656657
ConnectAndDisconnect(connStr);
@@ -706,7 +707,7 @@ public static void ConnectionSpeed()
706707

707708
#region Managed Identity Authentication tests
708709

709-
[ConditionalFact(nameof(IsAADConnStringsSetup), nameof(IsManagedIdentitySetup))]
710+
[ConditionalFact(nameof(IsAADConnStringsSetup), nameof(IsManagedIdentitySetup), nameof(SupportsSystemAssignedManagedIdentity))]
710711
public static void SystemAssigned_ManagedIdentityTest()
711712
{
712713
string[] removeKeys = { "Authentication", "User ID", "Password", "UID", "PWD" };
@@ -724,7 +725,7 @@ public static void UserAssigned_ManagedIdentityTest()
724725
ConnectAndDisconnect(connStr);
725726
}
726727

727-
[ConditionalFact(nameof(IsAADConnStringsSetup), nameof(IsManagedIdentitySetup))]
728+
[ConditionalFact(nameof(IsAADConnStringsSetup), nameof(IsManagedIdentitySetup), nameof(SupportsSystemAssignedManagedIdentity))]
728729
public static void AccessToken_SystemManagedIdentityTest()
729730
{
730731
string[] removeKeys = { "Authentication", "User ID", "Password", "UID", "PWD" };
@@ -752,7 +753,7 @@ public static void AccessToken_UserManagedIdentityTest()
752753
}
753754
}
754755

755-
[ConditionalFact(nameof(AreConnStringsSetup), nameof(IsAzure), nameof(IsManagedIdentitySetup))]
756+
[ConditionalFact(nameof(AreConnStringsSetup), nameof(IsAzure), nameof(IsManagedIdentitySetup), nameof(SupportsSystemAssignedManagedIdentity))]
756757
public static void Azure_SystemManagedIdentityTest()
757758
{
758759
string[] removeKeys = { "Authentication", "User ID", "Password", "UID", "PWD", "Trusted_Connection", "Integrated Security" };
@@ -782,7 +783,7 @@ public static void Azure_UserManagedIdentityTest()
782783
}
783784
}
784785

785-
[ConditionalFact(nameof(AreConnStringsSetup), nameof(IsAzure), nameof(IsAccessTokenSetup), nameof(IsManagedIdentitySetup))]
786+
[ConditionalFact(nameof(AreConnStringsSetup), nameof(IsAzure), nameof(IsAccessTokenSetup), nameof(IsManagedIdentitySetup), nameof(SupportsSystemAssignedManagedIdentity))]
786787
public static void Azure_AccessToken_SystemManagedIdentityTest()
787788
{
788789
string[] removeKeys = { "Authentication", "User ID", "Password", "UID", "PWD", "Trusted_Connection", "Integrated Security" };

src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ConnectivityTests/ConnectivityTest.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -360,7 +360,8 @@ public static void ConnectionStringPersistentInfoTest()
360360
}
361361
}
362362

363-
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
363+
// ConnectionOpenDisableRetry relies on error 4060 for automatic retry, which is not returned when using AAD auth
364+
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureServer), nameof(DataTestUtility.TcpConnectionStringDoesNotUseAadAuth))]
364365
public static void ConnectionOpenDisableRetry()
365366
{
366367
SqlConnectionStringBuilder connectionStringBuilder = new(DataTestUtility.TCPConnectionString)

src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/DataBaseSchemaTest/ConnectionSchemaTest.cs

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10,92 +10,98 @@ namespace Microsoft.Data.SqlClient.ManualTesting.Tests
1010
{
1111
public static class ConnectionSchemaTest
1212
{
13+
public static bool CanRunSchemaTests()
14+
{
15+
return DataTestUtility.AreConnStringsSetup() &&
16+
// Tests switch to master database, which is not guaranteed when using AAD auth
17+
DataTestUtility.TcpConnectionStringDoesNotUseAadAuth;
18+
}
1319

14-
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
20+
[ConditionalFact(nameof(CanRunSchemaTests))]
1521
public static void GetTablesFromSchema()
1622
{
1723
VerifySchemaTable(SqlClientMetaDataCollectionNames.Tables, new string[] { "TABLE_CATALOG", "TABLE_SCHEMA", "TABLE_NAME", "TABLE_TYPE" });
1824
}
1925

20-
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
26+
[ConditionalFact(nameof(CanRunSchemaTests))]
2127
public static void GetProceduresFromSchema()
2228
{
2329
VerifySchemaTable(SqlClientMetaDataCollectionNames.Procedures, new string[] { "ROUTINE_SCHEMA", "ROUTINE_NAME", "ROUTINE_TYPE" });
2430
}
2531

26-
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
32+
[ConditionalFact(nameof(CanRunSchemaTests))]
2733
public static void GetProcedureParametersFromSchema()
2834
{
2935
VerifySchemaTable(SqlClientMetaDataCollectionNames.ProcedureParameters, new string[] { "PARAMETER_MODE", "PARAMETER_NAME" });
3036
}
3137

32-
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
38+
[ConditionalFact(nameof(CanRunSchemaTests))]
3339
public static void GetDatabasesFromSchema()
3440
{
3541
VerifySchemaTable(SqlClientMetaDataCollectionNames.Databases, new string[] { "database_name", "dbid", "create_date" });
3642
}
3743

38-
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
44+
[ConditionalFact(nameof(CanRunSchemaTests))]
3945
public static void GetForeignKeysFromSchema()
4046
{
4147
VerifySchemaTable(SqlClientMetaDataCollectionNames.ForeignKeys, new string[] { "CONSTRAINT_TYPE", "IS_DEFERRABLE", "INITIALLY_DEFERRED" });
4248
}
4349

44-
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
50+
[ConditionalFact(nameof(CanRunSchemaTests))]
4551
public static void GetIndexesFromSchema()
4652
{
4753
VerifySchemaTable(SqlClientMetaDataCollectionNames.Indexes, new string[] { "index_name", "constraint_name" });
4854
}
4955

50-
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
56+
[ConditionalFact(nameof(CanRunSchemaTests))]
5157
public static void GetIndexColumnsFromSchema()
5258
{
5359
VerifySchemaTable(SqlClientMetaDataCollectionNames.IndexColumns, new string[] { "index_name", "KeyType", "column_name" });
5460
}
5561

56-
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
62+
[ConditionalFact(nameof(CanRunSchemaTests))]
5763
public static void GetColumnsFromSchema()
5864
{
5965
VerifySchemaTable(SqlClientMetaDataCollectionNames.Columns, new string[] { "IS_NULLABLE", "COLUMN_DEFAULT" });
6066
}
6167

62-
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
68+
[ConditionalFact(nameof(CanRunSchemaTests))]
6369
public static void GetAllColumnsFromSchema()
6470
{
6571
VerifySchemaTable(SqlClientMetaDataCollectionNames.AllColumns, new string[] { "IS_NULLABLE", "COLUMN_DEFAULT", "IS_FILESTREAM", "IS_SPARSE", "IS_COLUMN_SET" });
6672
}
6773

68-
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
74+
[ConditionalFact(nameof(CanRunSchemaTests))]
6975
public static void GetColumnSetColumnsFromSchema()
7076
{
7177
VerifySchemaTable(SqlClientMetaDataCollectionNames.ColumnSetColumns, new string[] { "IS_NULLABLE", "COLUMN_DEFAULT", "IS_FILESTREAM", "IS_SPARSE", "IS_COLUMN_SET" });
7278
}
7379

74-
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
80+
[ConditionalFact(nameof(CanRunSchemaTests))]
7581
public static void GetUsersFromSchema()
7682
{
7783
VerifySchemaTable(SqlClientMetaDataCollectionNames.Users, new string[] { "uid", "user_name" });
7884
}
7985

80-
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
86+
[ConditionalFact(nameof(CanRunSchemaTests))]
8187
public static void GetViewsFromSchema()
8288
{
8389
VerifySchemaTable(SqlClientMetaDataCollectionNames.Views, new string[] { "TABLE_NAME", "CHECK_OPTION", "IS_UPDATABLE" });
8490
}
8591

86-
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
92+
[ConditionalFact(nameof(CanRunSchemaTests))]
8793
public static void GetViewColumnsFromSchema()
8894
{
8995
VerifySchemaTable(SqlClientMetaDataCollectionNames.ViewColumns, new string[] { "VIEW_CATALOG", "VIEW_SCHEMA", "VIEW_NAME" });
9096
}
9197

92-
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
98+
[ConditionalFact(nameof(CanRunSchemaTests))]
9399
public static void GetUserDefinedTypesFromSchema()
94100
{
95101
VerifySchemaTable(SqlClientMetaDataCollectionNames.UserDefinedTypes, new string[] { "assembly_name", "version_revision", "culture_info" });
96102
}
97103

98-
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
104+
[ConditionalFact(nameof(CanRunSchemaTests))]
99105
public static void GetStructuredTypeMembersFromSchema()
100106
{
101107
VerifySchemaTable(SqlClientMetaDataCollectionNames.StructuredTypeMembers, new string[] { "TYPE_CATALOG", "TYPE_SCHEMA", "TYPE_NAME", "MEMBER_NAME", "ORDINAL_POSITION" });

src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/ExceptionTest/ExceptionTest.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ public static void ExceptionTests()
201201
}
202202

203203
// Synapse: 110003;Invalid user or password
204-
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))]
204+
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureServer))]
205205
public static void VariousExceptionTests()
206206
{
207207
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(DataTestUtility.TCPConnectionString);
@@ -219,7 +219,7 @@ public static void VariousExceptionTests()
219219
}
220220

221221
// Test 1 - B
222-
badBuilder = new SqlConnectionStringBuilder(builder.ConnectionString) { Password = string.Empty, IntegratedSecurity = false };
222+
badBuilder = new SqlConnectionStringBuilder(builder.ConnectionString) { Password = string.Empty, IntegratedSecurity = false, Authentication = SqlAuthenticationMethod.NotSpecified };
223223
using (var sqlConnection = new SqlConnection(badBuilder.ConnectionString))
224224
{
225225
string errorMessage = string.Format(CultureInfo.InvariantCulture, logonFailedErrorMessage, badBuilder.UserID);

src/Microsoft.Data.SqlClient/tests/ManualTests/SQL/RetryLogic/SqlConfigurationManagerReliabilityTest.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ public class SqlConfigurationManagerReliabilityTest
2323
{ InitialCatalog = SqlConnectionReliabilityTest.InvalidInitialCatalog, ConnectTimeout = 1 }.ConnectionString;
2424

2525
#region Internal Functions
26-
[ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
26+
// Test relies on error 4060 for automatic retry, which is not returned when using AAD auth
27+
[ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.TcpConnectionStringDoesNotUseAadAuth))]
2728
[InlineData(RetryLogicConfigHelper.RetryMethodName_Fix, RetryLogicConfigHelper.RetryMethodName_Inc)]
2829
[InlineData(RetryLogicConfigHelper.RetryMethodName_Inc, RetryLogicConfigHelper.RetryMethodName_Exp)]
2930
[InlineData(RetryLogicConfigHelper.RetryMethodName_Exp, RetryLogicConfigHelper.RetryMethodName_Fix)]
@@ -129,7 +130,8 @@ public void InvalidRetryMethodName(string methodName)
129130
s_commandCRLTest.NoneRetriableExecuteFail(TcpCnnString, cmdProvider);
130131
}
131132

132-
[ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
133+
// Test relies on error 4060 for automatic retry, which is not returned when using AAD auth
134+
[ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.TcpConnectionStringDoesNotUseAadAuth))]
133135
[InlineData("InvalidRetrylogicTypeName")]
134136
[InlineData("")]
135137
[InlineData(null)]

0 commit comments

Comments
 (0)