Skip to content

Commit f401443

Browse files
authored
[4.0] Test | Fixed some Azure managed identity authentication unit test failures (#2652) (#2737)
1 parent d4c6136 commit f401443

File tree

3 files changed

+21
-11
lines changed

3 files changed

+21
-11
lines changed

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

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -200,11 +200,17 @@ public static void ExceptionTests()
200200
}
201201

202202
// Synapse: 110003;Invalid user or password
203-
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureServer))]
203+
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureSynapse))]
204204
public static void VariousExceptionTests()
205205
{
206206
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(DataTestUtility.TCPConnectionString);
207-
207+
// Strip the password in connection string if Authentication=Active Directory Managed Identity as it can not be used with a Password
208+
if (builder.Authentication == SqlAuthenticationMethod.ActiveDirectoryManagedIdentity)
209+
{
210+
string[] removeKeys = { "Password", "PWD" };
211+
string connStr = DataTestUtility.RemoveKeysInConnStr(DataTestUtility.TCPConnectionString, removeKeys);
212+
builder = new SqlConnectionStringBuilder(connStr);
213+
}
208214

209215
// Test 1 - A
210216
SqlConnectionStringBuilder badBuilder = new SqlConnectionStringBuilder(builder.ConnectionString) { DataSource = badServer, ConnectTimeout = 1 };
@@ -218,11 +224,14 @@ public static void VariousExceptionTests()
218224
}
219225

220226
// Test 1 - B
221-
badBuilder = new SqlConnectionStringBuilder(builder.ConnectionString) { Password = string.Empty, IntegratedSecurity = false, Authentication = SqlAuthenticationMethod.NotSpecified };
222-
using (var sqlConnection = new SqlConnection(badBuilder.ConnectionString))
227+
if (DataTestUtility.IsNotAzureServer())
223228
{
224-
string errorMessage = string.Format(CultureInfo.InvariantCulture, logonFailedErrorMessage, badBuilder.UserID);
225-
VerifyConnectionFailure<SqlException>(() => sqlConnection.Open(), errorMessage, (ex) => VerifyException(ex, 1, 18456, 1, 14));
229+
badBuilder = new SqlConnectionStringBuilder(builder.ConnectionString) { Password = string.Empty, IntegratedSecurity = false };
230+
using (var sqlConnection = new SqlConnection(badBuilder.ConnectionString))
231+
{
232+
string errorMessage = string.Format(CultureInfo.InvariantCulture, logonFailedErrorMessage, badBuilder.UserID);
233+
VerifyConnectionFailure<SqlException>(() => sqlConnection.Open(), errorMessage, (ex) => VerifyException(ex, 1, 18456, 1, 14));
234+
}
226235
}
227236
}
228237

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,8 @@ private static readonly HashSet<int> s_defaultTransientErrors
7171
20,
7272
0,
7373
-2, // Execution Timeout Expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
74-
207 // invalid column name
74+
207, // invalid column name
75+
18456 // Using managed identity in Azure Sql Server throws 18456 for non-existent database instead of 4060.
7576
};
7677

7778
internal static readonly string s_exceedErrMsgPattern = SystemDataResourceManager.Instance.SqlRetryLogic_RetryExceeded;
@@ -117,7 +118,7 @@ public static IEnumerable<object[]> GetConnectionAndRetryStrategy(int numberOfRe
117118

118119
public static IEnumerable<object[]> GetConnectionAndRetryStrategyInvalidCatalog(int numberOfRetries)
119120
{
120-
return GetConnectionAndRetryStrategy(numberOfRetries, TimeSpan.FromSeconds(1), FilterSqlStatements.None, null, 250, false);
121+
return GetConnectionAndRetryStrategy(numberOfRetries, TimeSpan.FromSeconds(1), FilterSqlStatements.None, null, 250, true);
121122
}
122123

123124
public static IEnumerable<object[]> GetConnectionAndRetryStrategyInvalidCommand(int numberOfRetries)

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public class SqlConnectionReliabilityTest
1717

1818
#region Sync
1919
// Test relies on error 4060 for automatic retry, which is not reliable when using Azure or AAD auth
20-
[ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureServer))]
20+
[ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
2121
[MemberData(nameof(RetryLogicTestHelper.GetConnectionAndRetryStrategyInvalidCatalog), parameters: new object[] { 2 }, MemberType = typeof(RetryLogicTestHelper), DisableDiscoveryEnumeration = true)]
2222
public void ConnectionRetryOpenInvalidCatalogFailed(string cnnString, SqlRetryLogicBaseProvider provider)
2323
{
@@ -35,7 +35,7 @@ public void ConnectionRetryOpenInvalidCatalogFailed(string cnnString, SqlRetryLo
3535
}
3636

3737
// Test relies on error 4060 for automatic retry, which is not reliable when using Azure or AAD auth
38-
[ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureServer))]
38+
[ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
3939
[MemberData(nameof(RetryLogicTestHelper.GetConnectionAndRetryStrategyInvalidCatalog), parameters: new object[] { 2 }, MemberType = typeof(RetryLogicTestHelper), DisableDiscoveryEnumeration = true)]
4040
public void ConnectionCancelRetryOpenInvalidCatalog(string cnnString, SqlRetryLogicBaseProvider provider)
4141
{
@@ -158,7 +158,7 @@ public void DefaultOpenWithoutRetry(string connectionString, SqlRetryLogicBasePr
158158

159159
#region Async
160160
// Test relies on error 4060 for automatic retry, which is not reliable when using Azure or AAD auth
161-
[ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup), nameof(DataTestUtility.IsNotAzureServer))]
161+
[ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
162162
[MemberData(nameof(RetryLogicTestHelper.GetConnectionAndRetryStrategyInvalidCatalog), parameters: new object[] { 5 }, MemberType = typeof(RetryLogicTestHelper), DisableDiscoveryEnumeration = true)]
163163
public async void ConnectionRetryOpenAsyncInvalidCatalogFailed(string cnnString, SqlRetryLogicBaseProvider provider)
164164
{

0 commit comments

Comments
 (0)