Skip to content

Commit 55095ef

Browse files
benrr101edwardneal
andauthored
Tests | Remove hardcoded credentials from ManualTests (#3204)
* Initial removal of CertificateUtility.CreateCertificate One test implied that DataTestUtility.AKVUrl would point to an RSA key which aligned with the certificate's private key. Switching this to dynamically generate the key in places. * Hotfix for Azure Key Vault tests * Removed hardcoded references to Azure Key Vault key * Removed hardcoded references to CertificateUtilityWin These were mostly related to generating CSP keys. * Code review changes * Reorder properties and constructors * Move AEConnectionStringProviderWithCspParameters to its own file * Tweak to the AKV token acquisition * Code review Redundant bracket, alphabetised the ManualTesting csproj * Update src/Microsoft.Data.SqlClient/tests/ManualTests/AlwaysEncrypted/TestFixtures/SQLSetupStrategy.cs Let's try @edwardneal's idea Co-authored-by: Edward Neal <55035479+edwardneal@users.noreply.github.com> * Update src/Microsoft.Data.SqlClient/tests/ManualTests/AlwaysEncrypted/TestFixtures/SQLSetupStrategy.cs Co-authored-by: Edward Neal <55035479+edwardneal@users.noreply.github.com> * Fixes as per @edwardneal's suggestions * Fix as per @edwardneal's suggestion * Fix missing `new` Co-authored-by: Edward Neal <55035479+edwardneal@users.noreply.github.com> * Update src/Microsoft.Data.SqlClient/tests/ManualTests/AlwaysEncrypted/TestFixtures/SQLSetupStrategyAzureKeyVault.cs Co-authored-by: Edward Neal <55035479+edwardneal@users.noreply.github.com> * Update src/Microsoft.Data.SqlClient/tests/ManualTests/AlwaysEncrypted/TestFixtures/SQLSetupStrategyAzureKeyVault.cs Co-authored-by: Edward Neal <55035479+edwardneal@users.noreply.github.com> * Address comment that we don't need a CspParameters object as part of the test arguments * Move test arguments into property (the class was only used in a single location) * Cleanup test code * Tweak default provider discovery code to handle edge cases a bit better * Address comment regarding readonly member variables Apply long line chomping * Addressing the last of the comments. --------- Co-authored-by: Edward Neal <55035479+edwardneal@users.noreply.github.com>
1 parent 564c093 commit 55095ef

23 files changed

+574
-727
lines changed

src/Microsoft.Data.SqlClient/tests/ManualTests/AlwaysEncrypted/AKVTests.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -133,15 +133,15 @@ public void ForcedColumnDecryptErrorTestShouldFail()
133133
[PlatformSpecific(TestPlatforms.Windows)]
134134
public void TestRoundTripWithAKVAndCertStoreProvider()
135135
{
136-
using SQLSetupStrategyCertStoreProvider certStoreFixture = new();
136+
SqlColumnEncryptionCertificateStoreProvider certStoreProvider = new SqlColumnEncryptionCertificateStoreProvider();
137137
byte[] plainTextColumnEncryptionKey = ColumnEncryptionKey.GenerateRandomBytes(ColumnEncryptionKey.KeySizeInBytes);
138-
byte[] encryptedColumnEncryptionKeyUsingAKV = _fixture.AkvStoreProvider.EncryptColumnEncryptionKey(DataTestUtility.AKVUrl, @"RSA_OAEP", plainTextColumnEncryptionKey);
139-
byte[] columnEncryptionKeyReturnedAKV2Cert = certStoreFixture.CertStoreProvider.DecryptColumnEncryptionKey(certStoreFixture.CspColumnMasterKey.KeyPath, @"RSA_OAEP", encryptedColumnEncryptionKeyUsingAKV);
138+
byte[] encryptedColumnEncryptionKeyUsingAKV = _fixture.AkvStoreProvider.EncryptColumnEncryptionKey(_fixture.AkvKeyUrl, @"RSA_OAEP", plainTextColumnEncryptionKey);
139+
byte[] columnEncryptionKeyReturnedAKV2Cert = certStoreProvider.DecryptColumnEncryptionKey(_fixture.ColumnMasterKeyPath, @"RSA_OAEP", encryptedColumnEncryptionKeyUsingAKV);
140140
Assert.True(plainTextColumnEncryptionKey.SequenceEqual(columnEncryptionKeyReturnedAKV2Cert), @"Roundtrip failed");
141141

142142
// Try the opposite.
143-
byte[] encryptedColumnEncryptionKeyUsingCert = certStoreFixture.CertStoreProvider.EncryptColumnEncryptionKey(certStoreFixture.CspColumnMasterKey.KeyPath, @"RSA_OAEP", plainTextColumnEncryptionKey);
144-
byte[] columnEncryptionKeyReturnedCert2AKV = _fixture.AkvStoreProvider.DecryptColumnEncryptionKey(DataTestUtility.AKVUrl, @"RSA_OAEP", encryptedColumnEncryptionKeyUsingCert);
143+
byte[] encryptedColumnEncryptionKeyUsingCert = certStoreProvider.EncryptColumnEncryptionKey(_fixture.ColumnMasterKeyPath, @"RSA_OAEP", plainTextColumnEncryptionKey);
144+
byte[] columnEncryptionKeyReturnedCert2AKV = _fixture.AkvStoreProvider.DecryptColumnEncryptionKey(_fixture.AkvKeyUrl, @"RSA_OAEP", encryptedColumnEncryptionKeyUsingCert);
145145
Assert.True(plainTextColumnEncryptionKey.SequenceEqual(columnEncryptionKeyReturnedCert2AKV), @"Roundtrip failed");
146146
}
147147

src/Microsoft.Data.SqlClient/tests/ManualTests/AlwaysEncrypted/AKVUnitTests.cs

Lines changed: 42 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,20 @@
1414

1515
namespace Microsoft.Data.SqlClient.ManualTesting.Tests.AlwaysEncrypted
1616
{
17-
public static class AKVUnitTests
17+
public class AKVUnitTests : IClassFixture<AzureKeyVaultKeyFixture>
1818
{
1919
const string EncryptionAlgorithm = "RSA_OAEP";
2020
public static readonly byte[] s_columnEncryptionKey = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32 };
2121
private const string cekCacheName = "_columnEncryptionKeyCache";
2222
private const string signatureVerificationResultCacheName = "_columnMasterKeyMetadataSignatureVerificationCache";
2323

24+
private readonly AzureKeyVaultKeyFixture _fixture;
25+
26+
public AKVUnitTests(AzureKeyVaultKeyFixture fixture)
27+
{
28+
_fixture = fixture;
29+
}
30+
2431
private static void ValidateAKVTraces(List<EventWrittenEventArgs> eventData, Guid threadActivityId)
2532
{
2633
Assert.NotNull(eventData);
@@ -64,36 +71,36 @@ private static void ValidateAKVTraces(List<EventWrittenEventArgs> eventData, Gui
6471
}
6572

6673
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.IsAKVSetupAvailable))]
67-
public static void LegacyAuthenticationCallbackTest()
74+
public void LegacyAuthenticationCallbackTest()
6875
{
6976
Guid activityId = Trace.CorrelationManager.ActivityId = Guid.NewGuid();
7077
using DataTestUtility.AKVEventListener AKVListener = new();
7178

7279
// SqlClientCustomTokenCredential implements legacy authentication callback to request access token at client-side.
7380
SqlColumnEncryptionAzureKeyVaultProvider akvProvider = new SqlColumnEncryptionAzureKeyVaultProvider(new SqlClientCustomTokenCredential());
74-
byte[] encryptedCek = akvProvider.EncryptColumnEncryptionKey(DataTestUtility.AKVUrl, EncryptionAlgorithm, s_columnEncryptionKey);
75-
byte[] decryptedCek = akvProvider.DecryptColumnEncryptionKey(DataTestUtility.AKVUrl, EncryptionAlgorithm, encryptedCek);
81+
byte[] encryptedCek = akvProvider.EncryptColumnEncryptionKey(_fixture.GeneratedKeyUri, EncryptionAlgorithm, s_columnEncryptionKey);
82+
byte[] decryptedCek = akvProvider.DecryptColumnEncryptionKey(_fixture.GeneratedKeyUri, EncryptionAlgorithm, encryptedCek);
7683

7784
Assert.Equal(s_columnEncryptionKey, decryptedCek);
7885
ValidateAKVTraces(AKVListener.EventData, activityId);
7986
}
8087

8188
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.IsAKVSetupAvailable))]
82-
public static void TokenCredentialTest()
89+
public void TokenCredentialTest()
8390
{
8491
Guid activityId = Trace.CorrelationManager.ActivityId = Guid.NewGuid();
8592
using DataTestUtility.AKVEventListener AKVListener = new();
8693

8794
SqlColumnEncryptionAzureKeyVaultProvider akvProvider = new SqlColumnEncryptionAzureKeyVaultProvider(DataTestUtility.GetTokenCredential());
88-
byte[] encryptedCek = akvProvider.EncryptColumnEncryptionKey(DataTestUtility.AKVUrl, EncryptionAlgorithm, s_columnEncryptionKey);
89-
byte[] decryptedCek = akvProvider.DecryptColumnEncryptionKey(DataTestUtility.AKVUrl, EncryptionAlgorithm, encryptedCek);
95+
byte[] encryptedCek = akvProvider.EncryptColumnEncryptionKey(_fixture.GeneratedKeyUri, EncryptionAlgorithm, s_columnEncryptionKey);
96+
byte[] decryptedCek = akvProvider.DecryptColumnEncryptionKey(_fixture.GeneratedKeyUri, EncryptionAlgorithm, encryptedCek);
9097

9198
Assert.Equal(s_columnEncryptionKey, decryptedCek);
9299
ValidateAKVTraces(AKVListener.EventData, activityId);
93100
}
94101

95102
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.IsAKVSetupAvailable))]
96-
public static void TokenCredentialRotationTest()
103+
public void TokenCredentialRotationTest()
97104
{
98105
Guid activityId = Trace.CorrelationManager.ActivityId = Guid.NewGuid();
99106
using DataTestUtility.AKVEventListener AKVListener = new();
@@ -103,19 +110,19 @@ public static void TokenCredentialRotationTest()
103110

104111
SqlColumnEncryptionAzureKeyVaultProvider newAkvProvider = new SqlColumnEncryptionAzureKeyVaultProvider(DataTestUtility.GetTokenCredential());
105112

106-
byte[] encryptedCekWithNewProvider = newAkvProvider.EncryptColumnEncryptionKey(DataTestUtility.AKVUrl, EncryptionAlgorithm, s_columnEncryptionKey);
107-
byte[] decryptedCekWithOldProvider = oldAkvProvider.DecryptColumnEncryptionKey(DataTestUtility.AKVUrl, EncryptionAlgorithm, encryptedCekWithNewProvider);
113+
byte[] encryptedCekWithNewProvider = newAkvProvider.EncryptColumnEncryptionKey(_fixture.GeneratedKeyUri, EncryptionAlgorithm, s_columnEncryptionKey);
114+
byte[] decryptedCekWithOldProvider = oldAkvProvider.DecryptColumnEncryptionKey(_fixture.GeneratedKeyUri, EncryptionAlgorithm, encryptedCekWithNewProvider);
108115
Assert.Equal(s_columnEncryptionKey, decryptedCekWithOldProvider);
109116

110-
byte[] encryptedCekWithOldProvider = oldAkvProvider.EncryptColumnEncryptionKey(DataTestUtility.AKVUrl, EncryptionAlgorithm, s_columnEncryptionKey);
111-
byte[] decryptedCekWithNewProvider = newAkvProvider.DecryptColumnEncryptionKey(DataTestUtility.AKVUrl, EncryptionAlgorithm, encryptedCekWithOldProvider);
117+
byte[] encryptedCekWithOldProvider = oldAkvProvider.EncryptColumnEncryptionKey(_fixture.GeneratedKeyUri, EncryptionAlgorithm, s_columnEncryptionKey);
118+
byte[] decryptedCekWithNewProvider = newAkvProvider.DecryptColumnEncryptionKey(_fixture.GeneratedKeyUri, EncryptionAlgorithm, encryptedCekWithOldProvider);
112119
Assert.Equal(s_columnEncryptionKey, decryptedCekWithNewProvider);
113120

114121
ValidateAKVTraces(AKVListener.EventData, activityId);
115122
}
116123

117124
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.IsAKVSetupAvailable))]
118-
public static void ReturnSpecifiedVersionOfKeyWhenItIsNotTheMostRecentVersion()
125+
public void ReturnSpecifiedVersionOfKeyWhenItIsNotTheMostRecentVersion()
119126
{
120127
Uri keyPathUri = new Uri(DataTestUtility.AKVOriginalUrl);
121128
Uri vaultUri = new Uri(keyPathUri.GetLeftPart(UriPartial.Authority));
@@ -161,7 +168,7 @@ public static void ThrowWhenUrlHasLessThanThreeSegments()
161168
}
162169

163170
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.IsAKVSetupAvailable))]
164-
public static void DecryptedCekIsCachedDuringDecryption()
171+
public void DecryptedCekIsCachedDuringDecryption()
165172
{
166173
Guid activityId = Trace.CorrelationManager.ActivityId = Guid.NewGuid();
167174
using DataTestUtility.AKVEventListener AKVListener = new();
@@ -170,67 +177,67 @@ public static void DecryptedCekIsCachedDuringDecryption()
170177
byte[] plaintextKey1 = { 1, 2, 3 };
171178
byte[] plaintextKey2 = { 1, 2, 3 };
172179
byte[] plaintextKey3 = { 0, 1, 2, 3 };
173-
byte[] encryptedKey1 = akvProvider.EncryptColumnEncryptionKey(DataTestUtility.AKVUrl, "RSA_OAEP", plaintextKey1);
174-
byte[] encryptedKey2 = akvProvider.EncryptColumnEncryptionKey(DataTestUtility.AKVUrl, "RSA_OAEP", plaintextKey2);
175-
byte[] encryptedKey3 = akvProvider.EncryptColumnEncryptionKey(DataTestUtility.AKVUrl, "RSA_OAEP", plaintextKey3);
180+
byte[] encryptedKey1 = akvProvider.EncryptColumnEncryptionKey(_fixture.GeneratedKeyUri, "RSA_OAEP", plaintextKey1);
181+
byte[] encryptedKey2 = akvProvider.EncryptColumnEncryptionKey(_fixture.GeneratedKeyUri, "RSA_OAEP", plaintextKey2);
182+
byte[] encryptedKey3 = akvProvider.EncryptColumnEncryptionKey(_fixture.GeneratedKeyUri, "RSA_OAEP", plaintextKey3);
176183

177-
byte[] decryptedKey1 = akvProvider.DecryptColumnEncryptionKey(DataTestUtility.AKVUrl, "RSA_OAEP", encryptedKey1);
184+
byte[] decryptedKey1 = akvProvider.DecryptColumnEncryptionKey(_fixture.GeneratedKeyUri, "RSA_OAEP", encryptedKey1);
178185
Assert.Equal(1, GetCacheCount(cekCacheName, akvProvider));
179186
Assert.Equal(plaintextKey1, decryptedKey1);
180187

181-
decryptedKey1 = akvProvider.DecryptColumnEncryptionKey(DataTestUtility.AKVUrl, "RSA_OAEP", encryptedKey1);
188+
decryptedKey1 = akvProvider.DecryptColumnEncryptionKey(_fixture.GeneratedKeyUri, "RSA_OAEP", encryptedKey1);
182189
Assert.Equal(1, GetCacheCount(cekCacheName, akvProvider));
183190
Assert.Equal(plaintextKey1, decryptedKey1);
184191

185-
byte[] decryptedKey2 = akvProvider.DecryptColumnEncryptionKey(DataTestUtility.AKVUrl, "RSA_OAEP", encryptedKey2);
192+
byte[] decryptedKey2 = akvProvider.DecryptColumnEncryptionKey(_fixture.GeneratedKeyUri, "RSA_OAEP", encryptedKey2);
186193
Assert.Equal(2, GetCacheCount(cekCacheName, akvProvider));
187194
Assert.Equal(plaintextKey2, decryptedKey2);
188195

189-
byte[] decryptedKey3 = akvProvider.DecryptColumnEncryptionKey(DataTestUtility.AKVUrl, "RSA_OAEP", encryptedKey3);
196+
byte[] decryptedKey3 = akvProvider.DecryptColumnEncryptionKey(_fixture.GeneratedKeyUri, "RSA_OAEP", encryptedKey3);
190197
Assert.Equal(3, GetCacheCount(cekCacheName, akvProvider));
191198
Assert.Equal(plaintextKey3, decryptedKey3);
192199

193200
ValidateAKVTraces(AKVListener.EventData, activityId);
194201
}
195202

196203
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.IsAKVSetupAvailable))]
197-
public static void SignatureVerificationResultIsCachedDuringVerification()
204+
public void SignatureVerificationResultIsCachedDuringVerification()
198205
{
199206
Guid activityId = Trace.CorrelationManager.ActivityId = Guid.NewGuid();
200207
using DataTestUtility.AKVEventListener AKVListener = new();
201208

202209
SqlColumnEncryptionAzureKeyVaultProvider akvProvider = new(new SqlClientCustomTokenCredential());
203-
byte[] signature = akvProvider.SignColumnMasterKeyMetadata(DataTestUtility.AKVUrl, true);
204-
byte[] signature2 = akvProvider.SignColumnMasterKeyMetadata(DataTestUtility.AKVUrl, true);
205-
byte[] signatureWithoutEnclave = akvProvider.SignColumnMasterKeyMetadata(DataTestUtility.AKVUrl, false);
210+
byte[] signature = akvProvider.SignColumnMasterKeyMetadata(_fixture.GeneratedKeyUri, true);
211+
byte[] signature2 = akvProvider.SignColumnMasterKeyMetadata(_fixture.GeneratedKeyUri, true);
212+
byte[] signatureWithoutEnclave = akvProvider.SignColumnMasterKeyMetadata(_fixture.GeneratedKeyUri, false);
206213

207-
Assert.True(akvProvider.VerifyColumnMasterKeyMetadata(DataTestUtility.AKVUrl, true, signature));
214+
Assert.True(akvProvider.VerifyColumnMasterKeyMetadata(_fixture.GeneratedKeyUri, true, signature));
208215
Assert.Equal(1, GetCacheCount(signatureVerificationResultCacheName, akvProvider));
209216

210-
Assert.True(akvProvider.VerifyColumnMasterKeyMetadata(DataTestUtility.AKVUrl, true, signature));
217+
Assert.True(akvProvider.VerifyColumnMasterKeyMetadata(_fixture.GeneratedKeyUri, true, signature));
211218
Assert.Equal(1, GetCacheCount(signatureVerificationResultCacheName, akvProvider));
212219

213-
Assert.True(akvProvider.VerifyColumnMasterKeyMetadata(DataTestUtility.AKVUrl, true, signature2));
220+
Assert.True(akvProvider.VerifyColumnMasterKeyMetadata(_fixture.GeneratedKeyUri, true, signature2));
214221
Assert.Equal(1, GetCacheCount(signatureVerificationResultCacheName, akvProvider));
215222

216-
Assert.True(akvProvider.VerifyColumnMasterKeyMetadata(DataTestUtility.AKVUrl, false, signatureWithoutEnclave));
223+
Assert.True(akvProvider.VerifyColumnMasterKeyMetadata(_fixture.GeneratedKeyUri, false, signatureWithoutEnclave));
217224
Assert.Equal(2, GetCacheCount(signatureVerificationResultCacheName, akvProvider));
218225

219226
ValidateAKVTraces(AKVListener.EventData, activityId);
220227
}
221228

222229
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.IsAKVSetupAvailable))]
223-
public static void CekCacheEntryIsEvictedAfterTtlExpires()
230+
public void CekCacheEntryIsEvictedAfterTtlExpires()
224231
{
225232
Guid activityId = Trace.CorrelationManager.ActivityId = Guid.NewGuid();
226233
using DataTestUtility.AKVEventListener AKVListener = new();
227234

228235
SqlColumnEncryptionAzureKeyVaultProvider akvProvider = new(new SqlClientCustomTokenCredential());
229236
akvProvider.ColumnEncryptionKeyCacheTtl = TimeSpan.FromSeconds(5);
230237
byte[] plaintextKey = { 1, 2, 3 };
231-
byte[] encryptedKey = akvProvider.EncryptColumnEncryptionKey(DataTestUtility.AKVUrl, "RSA_OAEP", plaintextKey);
238+
byte[] encryptedKey = akvProvider.EncryptColumnEncryptionKey(_fixture.GeneratedKeyUri, "RSA_OAEP", plaintextKey);
232239

233-
akvProvider.DecryptColumnEncryptionKey(DataTestUtility.AKVUrl, "RSA_OAEP", encryptedKey);
240+
akvProvider.DecryptColumnEncryptionKey(_fixture.GeneratedKeyUri, "RSA_OAEP", encryptedKey);
234241
Assert.True(CekCacheContainsKey(encryptedKey, akvProvider));
235242
Assert.Equal(1, GetCacheCount(cekCacheName, akvProvider));
236243

@@ -242,7 +249,7 @@ public static void CekCacheEntryIsEvictedAfterTtlExpires()
242249
}
243250

244251
[ConditionalFact(typeof(DataTestUtility), nameof(DataTestUtility.IsAKVSetupAvailable))]
245-
public static void CekCacheShouldBeDisabledWhenCustomProviderIsRegisteredGlobally()
252+
public void CekCacheShouldBeDisabledWhenCustomProviderIsRegisteredGlobally()
246253
{
247254
if (SQLSetupStrategyAzureKeyVault.IsAKVProviderRegistered)
248255
{
@@ -255,9 +262,9 @@ public static void CekCacheShouldBeDisabledWhenCustomProviderIsRegisteredGloball
255262
SqlColumnEncryptionAzureKeyVaultProvider akvProviderInGlobalCache =
256263
globalProviders["AZURE_KEY_VAULT"] as SqlColumnEncryptionAzureKeyVaultProvider;
257264
byte[] plaintextKey = { 1, 2, 3 };
258-
byte[] encryptedKey = akvProviderInGlobalCache.EncryptColumnEncryptionKey(DataTestUtility.AKVUrl, "RSA_OAEP", plaintextKey);
265+
byte[] encryptedKey = akvProviderInGlobalCache.EncryptColumnEncryptionKey(_fixture.GeneratedKeyUri, "RSA_OAEP", plaintextKey);
259266

260-
akvProviderInGlobalCache.DecryptColumnEncryptionKey(DataTestUtility.AKVUrl, "RSA_OAEP", encryptedKey);
267+
akvProviderInGlobalCache.DecryptColumnEncryptionKey(_fixture.GeneratedKeyUri, "RSA_OAEP", encryptedKey);
261268
Assert.Equal(0, GetCacheCount(cekCacheName, akvProviderInGlobalCache));
262269
}
263270
}

src/Microsoft.Data.SqlClient/tests/ManualTests/AlwaysEncrypted/ConversionTests.cs

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,12 @@
1414
using System.Security.Cryptography.X509Certificates;
1515
using Xunit;
1616
using Microsoft.Data.SqlClient.ManualTesting.Tests.AlwaysEncrypted.Setup;
17+
using Microsoft.Data.SqlClient.TestUtilities.Fixtures;
1718

1819
namespace Microsoft.Data.SqlClient.ManualTesting.Tests.AlwaysEncrypted
1920
{
2021
[PlatformSpecific(TestPlatforms.Windows)]
21-
public sealed class ConversionTests : IDisposable
22+
public sealed class ConversionTests : IDisposable, IClassFixture<ColumnMasterKeyCertificateFixture>
2223
{
2324

2425
private const string IdentityColumnName = "IdentityColumn";
@@ -29,8 +30,6 @@ public sealed class ConversionTests : IDisposable
2930
private const decimal SmallMoneyMinValue = -214748.3648M;
3031
private const int MaxLength = 10000;
3132
private int NumberOfRows = DataTestUtility.EnclaveEnabled ? 10 : 100;
32-
private static X509Certificate2 certificate;
33-
private ColumnMasterKey columnMasterKey;
3433
private ColumnEncryptionKey columnEncryptionKey;
3534
private SqlColumnEncryptionCertificateStoreProvider certStoreProvider = new SqlColumnEncryptionCertificateStoreProvider();
3635
private List<DbObject> _databaseObjects = new List<DbObject>();
@@ -54,18 +53,20 @@ public ColumnMetaData(SqlDbType columnType, int columnSize, int precision, int s
5453
public bool UseMax { get; set; }
5554
}
5655

57-
public ConversionTests()
56+
public ConversionTests(ColumnMasterKeyCertificateFixture fixture)
5857
{
59-
if (certificate == null)
60-
{
61-
certificate = CertificateUtility.CreateCertificate();
62-
}
63-
columnMasterKey = new CspColumnMasterKey(DatabaseHelper.GenerateUniqueName("CMK"), certificate.Thumbprint, certStoreProvider, DataTestUtility.EnclaveEnabled);
64-
_databaseObjects.Add(columnMasterKey);
65-
66-
columnEncryptionKey = new ColumnEncryptionKey(DatabaseHelper.GenerateUniqueName("CEK"),
67-
columnMasterKey,
68-
certStoreProvider);
58+
X509Certificate2 certificate = fixture.ColumnMasterKeyCertificate;
59+
ColumnMasterKey columnMasterKey1 = new CspColumnMasterKey(
60+
DatabaseHelper.GenerateUniqueName("CMK"),
61+
certificate.Thumbprint,
62+
certStoreProvider,
63+
DataTestUtility.EnclaveEnabled);
64+
_databaseObjects.Add(columnMasterKey1);
65+
66+
columnEncryptionKey = new ColumnEncryptionKey(
67+
DatabaseHelper.GenerateUniqueName("CEK"),
68+
columnMasterKey1,
69+
certStoreProvider);
6970
_databaseObjects.Add(columnEncryptionKey);
7071

7172
foreach (string connectionStr in DataTestUtility.AEConnStringsSetup)

0 commit comments

Comments
 (0)