Skip to content

Commit

Permalink
Fix | Clone of SqlConnection should include AccessTokenCallback (#2525)
Browse files Browse the repository at this point in the history
  • Loading branch information
David-Engel committed May 23, 2024
1 parent cd7a3d1 commit b178ba5
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -227,6 +227,7 @@ private SqlConnection(SqlConnection connection)
}

_accessToken = connection._accessToken;
_accessTokenCallback = connection._accessTokenCallback;
CacheConnectionStringProperties();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -429,6 +429,7 @@ private SqlConnection(SqlConnection connection)
_credential = new SqlCredential(connection._credential.UserId, password);
}
_accessToken = connection._accessToken;
_accessTokenCallback = connection._accessTokenCallback;
_serverCertificateValidationCallback = connection._serverCertificateValidationCallback;
_clientCertificateRetrievalCallback = connection._clientCertificateRetrievalCallback;
_originalNetworkAddressInfo = connection._originalNetworkAddressInfo;
Expand Down
10 changes: 10 additions & 0 deletions src/Microsoft.Data.SqlClient/tests/FunctionalTests/CloneTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

using System;
using System.Data;
using System.Threading.Tasks;
using Xunit;

namespace Microsoft.Data.SqlClient.Tests
Expand All @@ -18,10 +19,19 @@ public void CloneSqlConnection()
builder.ConnectTimeout = 1;
builder.InitialCatalog = "northwinddb";
SqlConnection connection = new SqlConnection(builder.ConnectionString);
connection.AccessToken = Guid.NewGuid().ToString();

SqlConnection clonedConnection = (connection as ICloneable).Clone() as SqlConnection;
Assert.Equal(connection.ConnectionString, clonedConnection.ConnectionString);
Assert.Equal(connection.ConnectionTimeout, clonedConnection.ConnectionTimeout);
Assert.Equal(connection.AccessToken, clonedConnection.AccessToken);
Assert.NotEqual(connection, clonedConnection);

connection = new SqlConnection(builder.ConnectionString);
connection.AccessTokenCallback = (ctx, token) =>
Task.FromResult(new SqlAuthenticationToken(Guid.NewGuid().ToString(), DateTimeOffset.MaxValue));
clonedConnection = (connection as ICloneable).Clone() as SqlConnection;
Assert.Equal(connection.AccessTokenCallback, clonedConnection.AccessTokenCallback);
Assert.NotEqual(connection, clonedConnection);
}

Expand Down

0 comments on commit b178ba5

Please sign in to comment.