Skip to content

Commit ec5ad66

Browse files
authored
[5.2] Test | Fixed some Azure managed identity authentication unit test failures (#2652) (#2735)
1 parent 9ebbc68 commit ec5ad66

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
@@ -201,11 +201,17 @@ public static void ExceptionTests()
201201
}
202202

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

210216
// Test 1 - A
211217
SqlConnectionStringBuilder badBuilder = new SqlConnectionStringBuilder(builder.ConnectionString) { DataSource = badServer, ConnectTimeout = 1 };
@@ -219,11 +225,14 @@ public static void VariousExceptionTests()
219225
}
220226

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

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)