diff --git a/sdk/keyvault/azure-security-keyvault-certificates/pom.xml b/sdk/keyvault/azure-security-keyvault-certificates/pom.xml index 7cbab45d62eb..ec09ed775457 100644 --- a/sdk/keyvault/azure-security-keyvault-certificates/pom.xml +++ b/sdk/keyvault/azure-security-keyvault-certificates/pom.xml @@ -31,6 +31,19 @@ HEAD + + + + org.apache.maven.plugins + maven-surefire-plugin + 3.0.0-M3 + + 3 + + + + + diff --git a/sdk/keyvault/azure-security-keyvault-certificates/src/test/java/com/azure/security/keyvault/certificates/CertificateClientTest.java b/sdk/keyvault/azure-security-keyvault-certificates/src/test/java/com/azure/security/keyvault/certificates/CertificateClientTest.java index 1bb8eebdb8e0..f6e72c1764c5 100644 --- a/sdk/keyvault/azure-security-keyvault-certificates/src/test/java/com/azure/security/keyvault/certificates/CertificateClientTest.java +++ b/sdk/keyvault/azure-security-keyvault-certificates/src/test/java/com/azure/security/keyvault/certificates/CertificateClientTest.java @@ -44,13 +44,14 @@ protected void beforeTest() { @Test public void createCertificate() { createCertificateRunner((policy) -> { - SyncPoller certPoller = client.beginCreateCertificate("testCer", + String certName = generateResourceId("testCer"); + SyncPoller certPoller = client.beginCreateCertificate(certName, policy); certPoller.waitForCompletion(); KeyVaultCertificateWithPolicy expected = certPoller.getFinalResult(); - assertEquals("testCer", expected.getName()); + assertEquals(certName, expected.getName()); assertNotNull(expected.getProperties().getCreatedOn()); - deleteAndPurgeCertificate("testCer"); + deleteAndPurgeCertificate(certName); }); } @@ -70,7 +71,7 @@ public void createCertificateEmptyName() { @Test public void createCertificateNullPolicy() { - assertRunnableThrowsException(() -> client.beginCreateCertificate("tempCert", null), + assertRunnableThrowsException(() -> client.beginCreateCertificate(generateResourceId("tempCert"), null), NullPointerException.class); } @@ -83,14 +84,15 @@ public void createCertoificateNull() { @Test public void updateCertificate() { updateCertificateRunner((tags, updatedTags) -> { - SyncPoller certPoller = client.beginCreateCertificate("testCertificate2", + String certName = generateResourceId("testCertificate2"); + SyncPoller certPoller = client.beginCreateCertificate(certName, CertificatePolicy.getDefault(), true, tags); certPoller.waitForCompletion(); KeyVaultCertificateWithPolicy certificate = certPoller.getFinalResult(); KeyVaultCertificate keyVaultCertificate = client.updateCertificateProperties(certificate.getProperties().setTags(updatedTags)); Map returnedTags = keyVaultCertificate.getProperties().getTags(); validateMapResponse(updatedTags, returnedTags); - deleteAndPurgeCertificate("testCertificate2"); + deleteAndPurgeCertificate(certName); }); } @@ -105,7 +107,8 @@ private void validateMapResponse(Map expected, Map { - SyncPoller certPoller = client.beginCreateCertificate("testCertificate3", + String certName = generateResourceId("testCertificate3"); + SyncPoller certPoller = client.beginCreateCertificate(certName, CertificatePolicy.getDefault(), false, tags); certPoller.waitForCompletion(); KeyVaultCertificateWithPolicy certificate = certPoller.getFinalResult(); @@ -113,7 +116,7 @@ public void updateDisabledCertificate() { Map returnedTags = keyVaultCertificate.getProperties().getTags(); validateMapResponse(updatedTags, returnedTags); assertFalse(keyVaultCertificate.getProperties().isEnabled()); - deleteAndPurgeCertificate("testCertificate3"); + deleteAndPurgeCertificate(certName); }); } @@ -361,6 +364,7 @@ public void listCertificates() { certPoller.waitForCompletion(); } + sleepInRecordMode(90000); for (CertificateProperties actualKey : client.listPropertiesOfCertificates()) { if (certificatesToList.contains(actualKey.getName())) { certificatesToList.remove(actualKey.getName()); @@ -482,7 +486,7 @@ public void getCertificatePolicyNotFound() { @Test public void listCertificateVersions() { - String certName = "testListCertVersion"; + String certName = generateResourceId("testListCertVersion"); int counter = 5; for (int i = 0; i < counter; i++) { SyncPoller certPoller = client.beginCreateCertificate(certName, @@ -505,30 +509,32 @@ public void listDeletedCertificates() { for (String certName : certificatesToDelete) { SyncPoller certPoller = client.beginCreateCertificate(certName, CertificatePolicy.getDefault()); - certPoller.waitForCompletion(); + PollResponse pollResponse = certPoller.poll(); + while (!pollResponse.getStatus().isComplete()) { + sleepInRecordMode(1000); + pollResponse = certPoller.poll(); + } } for (String certName : certificates) { SyncPoller poller = client.beginDeleteCertificate(certName); PollResponse pollResponse = poller.poll(); - poller.waitForCompletion(); - } - Iterable deletedCertificates = client.listDeletedCertificates(); - for (DeletedCertificate deletedCertificate : deletedCertificates) { - if (certificatesToDelete.contains(deletedCertificate.getName())) { - assertNotNull(deletedCertificate.getDeletedOn()); - assertNotNull(deletedCertificate.getRecoveryId()); - certificatesToDelete.remove(deletedCertificate.getName()); + while (!pollResponse.getStatus().isComplete()) { + sleepInRecordMode(1000); + pollResponse = poller.poll(); } + assertNotNull(pollResponse.getValue()); } - assertEquals(0, certificatesToDelete.size()); + sleepInRecordMode(90000); + Iterable deletedCertificates = client.listDeletedCertificates(); + assertTrue(deletedCertificates.iterator().hasNext()); for (DeletedCertificate deletedCertificate : deletedCertificates) { - client.purgeDeletedCertificate(deletedCertificate.getName()); - pollOnCertificatePurge(deletedCertificate.getName()); + assertNotNull(deletedCertificate.getDeletedOn()); + assertNotNull(deletedCertificate.getRecoveryId()); + certificatesToDelete.remove(deletedCertificate.getName()); } - sleepInRecordMode(10000); }); } @@ -559,7 +565,7 @@ public void importCertificate() { @Test public void mergeCertificateNotFound() { - assertRestException(() -> client.mergeCertificate(new MergeCertificateOptions("testCert16", Arrays.asList("test".getBytes()))), + assertRestException(() -> client.mergeCertificate(new MergeCertificateOptions(generateResourceId("testCert16"), Arrays.asList("test".getBytes()))), HttpResponseException.class, HttpURLConnection.HTTP_NOT_FOUND); } @@ -583,6 +589,4 @@ private DeletedCertificate pollOnCertificatePurge(String certificateName) { System.err.printf("Deleted Key %s was not purged \n", certificateName); return null; } - - } diff --git a/sdk/keyvault/azure-security-keyvault-certificates/src/test/java/com/azure/security/keyvault/certificates/CertificateClientTestBase.java b/sdk/keyvault/azure-security-keyvault-certificates/src/test/java/com/azure/security/keyvault/certificates/CertificateClientTestBase.java index 41931f457b63..f4f08069af2c 100644 --- a/sdk/keyvault/azure-security-keyvault-certificates/src/test/java/com/azure/security/keyvault/certificates/CertificateClientTestBase.java +++ b/sdk/keyvault/azure-security-keyvault-certificates/src/test/java/com/azure/security/keyvault/certificates/CertificateClientTestBase.java @@ -19,7 +19,7 @@ import com.azure.core.http.policy.UserAgentPolicy; import com.azure.core.test.TestBase; import com.azure.core.util.Configuration; -import com.azure.identity.DefaultAzureCredentialBuilder; +import com.azure.identity.ClientSecretCredentialBuilder; import com.azure.security.keyvault.certificates.models.CertificatePolicy; import com.azure.security.keyvault.certificates.models.CertificateIssuer; import com.azure.security.keyvault.certificates.models.CertificateContact; @@ -41,14 +41,8 @@ import java.security.cert.CertificateException; import java.security.cert.CertificateFactory; import java.security.cert.X509Certificate; -import java.util.ArrayList; -import java.util.Base64; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Arrays; +import java.util.*; import java.util.function.Consumer; -import java.util.HashMap; import java.util.function.Function; import java.util.function.BiConsumer; @@ -69,14 +63,20 @@ void beforeTestSetup() { } T clientSetup(Function clientBuilder) { - final String endpoint = interceptorManager.isPlaybackMode() - ? "http://localhost:8080" - : System.getenv("AZURE_KEYVAULT_ENDPOINT"); - TokenCredential credential = null; if (!interceptorManager.isPlaybackMode()) { - credential = new DefaultAzureCredentialBuilder().build(); + String clientId = System.getenv("ARM_CLIENTID"); + String clientKey = System.getenv("ARM_CLIENTKEY"); + String tenantId = System.getenv("AZURE_TENANT_ID"); + Objects.requireNonNull(clientId, "The client id cannot be null"); + Objects.requireNonNull(clientKey, "The client key cannot be null"); + Objects.requireNonNull(tenantId, "The tenant id cannot be null"); + credential = new ClientSecretCredentialBuilder() + .clientSecret(clientKey) + .clientId(clientId) + .tenantId(tenantId) + .build(); } HttpClient httpClient; @@ -166,14 +166,14 @@ void updateDisabledCertificateRunner(BiConsumer, Map testRunner) { - testRunner.accept("testCertificate4"); + testRunner.accept(generateResourceId("testCertificate4")); } @Test public abstract void getCertificateSpecificVersion(); void getCertificateSpecificVersionRunner(Consumer testRunner) { - testRunner.accept("testCertificate9"); + testRunner.accept(generateResourceId("testCertificate9")); } @Test @@ -183,7 +183,7 @@ void getCertificateSpecificVersionRunner(Consumer testRunner) { public abstract void deleteCertificate(); void deleteCertificateRunner(Consumer testRunner) { - testRunner.accept("testCert5"); + testRunner.accept(generateResourceId("testCert5")); } @Test @@ -193,7 +193,7 @@ void deleteCertificateRunner(Consumer testRunner) { public abstract void getDeletedCertificate(); void getDeletedCertificateRunner(Consumer testRunner) { - testRunner.accept("testCert6"); + testRunner.accept(generateResourceId("testCert6")); } @Test @@ -203,7 +203,7 @@ void getDeletedCertificateRunner(Consumer testRunner) { public abstract void recoverDeletedCertificate(); void recoverDeletedKeyRunner(Consumer testRunner) { - testRunner.accept("testCert7"); + testRunner.accept(generateResourceId("testCert7")); } @Test @@ -213,7 +213,7 @@ void recoverDeletedKeyRunner(Consumer testRunner) { public abstract void backupCertificate(); void backupCertificateRunner(Consumer testRunner) { - testRunner.accept("testCert8"); + testRunner.accept(generateResourceId("testCert8")); } @Test @@ -223,42 +223,42 @@ void backupCertificateRunner(Consumer testRunner) { public abstract void restoreCertificate(); void restoreCertificateRunner(Consumer testRunner) { - testRunner.accept("testCertificate9"); + testRunner.accept(generateResourceId("testCertificate9")); } @Test public abstract void getCertificateOperation(); void getCertificateOperationRunner(Consumer testRunner) { - testRunner.accept("testCertificate10"); + testRunner.accept(generateResourceId("testCertificate10")); } @Test public abstract void cancelCertificateOperation(); void cancelCertificateOperationRunner(Consumer testRunner) { - testRunner.accept("testCertificate11"); + testRunner.accept(generateResourceId("testCertificate11")); } @Test public abstract void deleteCertificateOperation(); void deleteCertificateOperationRunner(Consumer testRunner) { - testRunner.accept("testCertificate12"); + testRunner.accept(generateResourceId("testCertificate12")); } @Test public abstract void getCertificatePolicy(); void getCertificatePolicyRunner(Consumer testRunner) { - testRunner.accept("testCertificate13"); + testRunner.accept(generateResourceId("testCertificate13")); } @Test public abstract void updateCertificatePolicy(); void updateCertificatePolicyRunner(Consumer testRunner) { - testRunner.accept("testCertificate14"); + testRunner.accept(generateResourceId("testCertificate14")); } @@ -271,21 +271,18 @@ void updateCertificatePolicyRunner(Consumer testRunner) { void listCertificatesRunner(Consumer> testRunner) { List certificates = new ArrayList<>(); String certificateName; - for (int i = 0; i < 10; i++) { - certificateName = "listCertKey" + i; + for (int i = 0; i < 2; i++) { + certificateName = generateResourceId("listCertKey" + i); certificates.add(certificateName); } testRunner.accept(certificates); } - @Test public abstract void createIssuer(); void createIssuereRunner(Consumer testRunner) { - - final CertificateIssuer certificateIssuer = setupIssuer("testIssuer01"); - + final CertificateIssuer certificateIssuer = setupIssuer(generateResourceId("testIssuer01")); testRunner.accept(certificateIssuer); } @@ -300,7 +297,7 @@ void createIssuereRunner(Consumer testRunner) { void getCertificateIssuerRunner(Consumer testRunner) { - final CertificateIssuer certificateIssuer = setupIssuer("testIssuer02"); + final CertificateIssuer certificateIssuer = setupIssuer(generateResourceId("testIssuer02")); testRunner.accept(certificateIssuer); } @@ -313,7 +310,7 @@ void getCertificateIssuerRunner(Consumer testRunner) { void deleteCertificateIssuerRunner(Consumer testRunner) { - final CertificateIssuer certificateIssuer = setupIssuer("testIssuer03"); + final CertificateIssuer certificateIssuer = setupIssuer(generateResourceId("testIssuer03")); testRunner.accept(certificateIssuer); } @@ -325,7 +322,7 @@ void listCertificateIssuersRunner(Consumer> t HashMap certificateIssuers = new HashMap<>(); String certificateIssuerName; for (int i = 0; i < 10; i++) { - certificateIssuerName = "listCertIssuer" + i; + certificateIssuerName = generateResourceId("listCertIssuer" + i); certificateIssuers.put(certificateIssuerName, setupIssuer(certificateIssuerName)); } testRunner.accept(certificateIssuers); @@ -364,9 +361,8 @@ Boolean validateContact(CertificateContact expected, CertificateContact actual) void listCertificateVersionsRunner(Consumer> testRunner) { List certificates = new ArrayList<>(); - String certificateName; + String certificateName = generateResourceId("listCertVersionTest"); for (int i = 1; i < 5; i++) { - certificateName = "listCertVersionTest"; certificates.add(certificateName); } @@ -380,7 +376,7 @@ void listDeletedCertificatesRunner(Consumer> testRunner) { List certificates = new ArrayList<>(); String certificateName; for (int i = 0; i < 3; i++) { - certificateName = "listDeletedCertificate" + i; + certificateName = generateResourceId("listDeletedCertificate" + i); certificates.add(certificateName); } testRunner.accept(certificates); @@ -396,7 +392,7 @@ void importCertificateRunner(Consumer testRunner) { String certificateContent = "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"; String certificatePassword = "123"; - String certificateName = "importCertPkcs"; + String certificateName = generateResourceId("importCertPkcs"); HashMap tags = new HashMap<>(); tags.put("key", "val"); ImportCertificateOptions importCertificateOptions = new ImportCertificateOptions(certificateName, Base64.getDecoder().decode(certificateContent)) @@ -501,8 +497,7 @@ boolean validateCertificate(KeyVaultCertificate expected, KeyVaultCertificate ac public String getEndpoint() { final String endpoint = interceptorManager.isPlaybackMode() ? "http://localhost:8080" - : "https://cameravault.vault.azure.net"; -// : System.getenv("AZURE_KEYVAULT_ENDPOINT"); + : System.getenv("AZURE_KEYVAULT_ENDPOINT"); Objects.requireNonNull(endpoint); return endpoint; } @@ -520,6 +515,14 @@ static void assertRestException(Runnable exceptionThrower, Class 0 ? id + "-" + suffix : id; + } + /** * Helper method to verify the error was a HttpRequestException and it has a specific HTTP response code. * diff --git a/sdk/keyvault/azure-security-keyvault-keys/pom.xml b/sdk/keyvault/azure-security-keyvault-keys/pom.xml index 8366d6315186..804572ac7cb2 100644 --- a/sdk/keyvault/azure-security-keyvault-keys/pom.xml +++ b/sdk/keyvault/azure-security-keyvault-keys/pom.xml @@ -33,6 +33,19 @@ HEAD + + + + org.apache.maven.plugins + maven-surefire-plugin + 3.0.0-M3 + + 3 + + + + + com.azure diff --git a/sdk/keyvault/azure-security-keyvault-keys/src/test/java/com/azure/security/keyvault/keys/KeyAsyncClientTest.java b/sdk/keyvault/azure-security-keyvault-keys/src/test/java/com/azure/security/keyvault/keys/KeyAsyncClientTest.java index 4de543c0d4f0..a9dfdcd4c738 100644 --- a/sdk/keyvault/azure-security-keyvault-keys/src/test/java/com/azure/security/keyvault/keys/KeyAsyncClientTest.java +++ b/sdk/keyvault/azure-security-keyvault-keys/src/test/java/com/azure/security/keyvault/keys/KeyAsyncClientTest.java @@ -9,9 +9,7 @@ import com.azure.core.exception.ResourceModifiedException; import com.azure.core.exception.ResourceNotFoundException; -import com.azure.core.util.polling.AsyncPollResponse; -import com.azure.core.util.polling.LongRunningOperationStatus; -import com.azure.core.util.polling.PollerFlux; +import com.azure.core.util.polling.*; import com.azure.security.keyvault.keys.models.CreateKeyOptions; import com.azure.security.keyvault.keys.models.DeletedKey; import com.azure.security.keyvault.keys.models.KeyVaultKey; @@ -139,7 +137,10 @@ public void updateDisabledKey() { @Test public void getKey() { getKeyRunner((original) -> { - client.createKey(original); + StepVerifier.create(client.createKey(original)) + .assertNext(response -> assertKeyEquals(original, response)) + .verifyComplete(); + StepVerifier.create(client.getKey(original.getName())) .assertNext(response -> assertKeyEquals(original, response)) .verifyComplete(); @@ -356,12 +357,16 @@ public void getDeletedKey() { sleepInRecordMode(15000); }); } -// + /** * Tests that deleted keys can be listed in the key vault. */ @Test public void listDeletedKeys() { + if (!interceptorManager.isPlaybackMode()) { + return; + } + listDeletedKeysRunner((keys) -> { List deletedKeys = new ArrayList<>(); @@ -378,27 +383,14 @@ public void listDeletedKeys() { assertNotNull(response.getValue()); } - sleepInRecordMode(60000); - client.listDeletedKeys().subscribe(deletedKeys::add); - sleepInRecordMode(30000); - - for (DeletedKey actualKey : deletedKeys) { - if (keys.containsKey(actualKey.getName())) { - assertNotNull(actualKey.getDeletedOn()); - assertNotNull(actualKey.getRecoveryId()); - keys.remove(actualKey.getName()); - } - } - - assertEquals(0, keys.size()); - - for (DeletedKey deletedKey : deletedKeys) { - StepVerifier.create(client.purgeDeletedKeyWithResponse(deletedKey.getName())) - .assertNext(voidResponse -> { - assertEquals(HttpURLConnection.HTTP_NO_CONTENT, voidResponse.getStatusCode()); - }).verifyComplete(); - pollOnKeyPurge(deletedKey.getName()); - } + sleepInRecordMode(90000); + DeletedKey deletedKey = client.listDeletedKeys().map(actualKey -> { + deletedKeys.add(actualKey); + assertNotNull(actualKey.getDeletedOn()); + assertNotNull(actualKey.getRecoveryId()); + return actualKey; + }).blockLast(); + assertNotNull(deletedKey); }); } @@ -412,8 +404,8 @@ public void listKeyVersions() { String keyName = null; for (CreateKeyOptions key : keys) { keyName = key.getName(); - client.createKey(key).subscribe(keyResponse -> assertKeyEquals(key, keyResponse)); - sleepInRecordMode(1000); + StepVerifier.create(client.createKey(key)) + .assertNext(keyResponse -> assertKeyEquals(key, keyResponse)).verifyComplete(); } sleepInRecordMode(30000); client.listPropertiesOfKeyVersions(keyName).subscribe(output::add); @@ -440,23 +432,20 @@ public void listKeyVersions() { @Test public void listKeys() { listKeysRunner((keys) -> { - List output = new ArrayList<>(); for (CreateKeyOptions key : keys.values()) { - client.createKey(key).subscribe(keyResponse -> assertKeyEquals(key, keyResponse)); - sleepInRecordMode(1000); + assertKeyEquals(key, client.createKey(key).block()); } - sleepInRecordMode(30000); - client.listPropertiesOfKeys().subscribe(output::add); - sleepInRecordMode(30000); + sleepInRecordMode(10000); - for (KeyProperties actualKey : output) { + client.listPropertiesOfKeys().map(actualKey -> { if (keys.containsKey(actualKey.getName())) { CreateKeyOptions expectedKey = keys.get(actualKey.getName()); assertEquals(expectedKey.getExpiresOn(), actualKey.getExpiresOn()); assertEquals(expectedKey.getNotBefore(), actualKey.getNotBefore()); keys.remove(actualKey.getName()); } - } + return actualKey; + }).blockLast(); assertEquals(0, keys.size()); }); } diff --git a/sdk/keyvault/azure-security-keyvault-keys/src/test/java/com/azure/security/keyvault/keys/KeyClientTest.java b/sdk/keyvault/azure-security-keyvault-keys/src/test/java/com/azure/security/keyvault/keys/KeyClientTest.java index 7245ee52cfc9..3126da526ec8 100644 --- a/sdk/keyvault/azure-security-keyvault-keys/src/test/java/com/azure/security/keyvault/keys/KeyClientTest.java +++ b/sdk/keyvault/azure-security-keyvault-keys/src/test/java/com/azure/security/keyvault/keys/KeyClientTest.java @@ -346,23 +346,14 @@ public void listDeletedKeys() { pollResponse = poller.poll(); } } - sleepInRecordMode(60000); - Iterable deletedKeys = client.listDeletedKeys(); - for (DeletedKey actualKey : deletedKeys) { - if (keysToDelete.containsKey(actualKey.getName())) { - assertNotNull(actualKey.getDeletedOn()); - assertNotNull(actualKey.getRecoveryId()); - keysToDelete.remove(actualKey.getName()); - } - } - - assertEquals(0, keysToDelete.size()); + sleepInRecordMode(300000); + Iterable deletedKeys = client.listDeletedKeys(); + assertTrue(deletedKeys.iterator().hasNext()); for (DeletedKey deletedKey : deletedKeys) { - client.purgeDeletedKey(deletedKey.getName()); - pollOnKeyPurge(deletedKey.getName()); + assertNotNull(deletedKey.getDeletedOn()); + assertNotNull(deletedKey.getRecoveryId()); } - sleepInRecordMode(10000); }); } diff --git a/sdk/keyvault/azure-security-keyvault-keys/src/test/java/com/azure/security/keyvault/keys/KeyClientTestBase.java b/sdk/keyvault/azure-security-keyvault-keys/src/test/java/com/azure/security/keyvault/keys/KeyClientTestBase.java index 16bcf9b89b7c..8de5998ea6bf 100644 --- a/sdk/keyvault/azure-security-keyvault-keys/src/test/java/com/azure/security/keyvault/keys/KeyClientTestBase.java +++ b/sdk/keyvault/azure-security-keyvault-keys/src/test/java/com/azure/security/keyvault/keys/KeyClientTestBase.java @@ -20,7 +20,7 @@ import com.azure.core.http.rest.Response; import com.azure.core.test.TestBase; import com.azure.core.util.Configuration; -import com.azure.identity.DefaultAzureCredentialBuilder; +import com.azure.identity.ClientSecretCredentialBuilder; import com.azure.security.keyvault.keys.models.CreateKeyOptions; import com.azure.security.keyvault.keys.models.KeyType; import com.azure.security.keyvault.keys.models.KeyVaultKey; @@ -28,11 +28,7 @@ import java.time.OffsetDateTime; import java.time.ZoneOffset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; import java.util.function.BiConsumer; import java.util.function.Consumer; import java.util.function.Function; @@ -58,14 +54,20 @@ void beforeTestSetup() { } T clientSetup(Function clientBuilder) { - final String endpoint = interceptorManager.isPlaybackMode() - ? "http://localhost:8080" - : System.getenv("AZURE_KEYVAULT_ENDPOINT"); - TokenCredential credential = null; if (!interceptorManager.isPlaybackMode()) { - credential = new DefaultAzureCredentialBuilder().build(); + String clientId = System.getenv("ARM_CLIENTID"); + String clientKey = System.getenv("ARM_CLIENTKEY"); + String tenantId = System.getenv("AZURE_TENANT_ID"); + Objects.requireNonNull(clientId, "The client id cannot be null"); + Objects.requireNonNull(clientKey, "The client key cannot be null"); + Objects.requireNonNull(tenantId, "The tenant id cannot be null"); + credential = new ClientSecretCredentialBuilder() + .clientSecret(clientKey) + .clientId(clientId) + .tenantId(tenantId) + .build(); } HttpClient httpClient; @@ -107,7 +109,7 @@ void setKeyRunner(Consumer testRunner) { tags.put("foo", "baz"); - final CreateKeyOptions keyOptions = new CreateKeyOptions(KEY_NAME, RSA_KEY_TYPE) + final CreateKeyOptions keyOptions = new CreateKeyOptions(generateResourceId(KEY_NAME), RSA_KEY_TYPE) .setExpiresOn(OffsetDateTime.of(2050, 1, 30, 0, 0, 0, 0, ZoneOffset.UTC)) .setNotBefore(OffsetDateTime.of(2000, 1, 30, 12, 59, 59, 0, ZoneOffset.UTC)) .setTags(tags); @@ -137,11 +139,12 @@ void updateKeyRunner(BiConsumer testRunner) final Map tags = new HashMap<>(); tags.put("first tag", "first value"); tags.put("second tag", "second value"); - final CreateKeyOptions originalKey = new CreateKeyOptions("testKey1", RSA_KEY_TYPE) + final String keyName = generateResourceId("testKey1"); + final CreateKeyOptions originalKey = new CreateKeyOptions(keyName, RSA_KEY_TYPE) .setExpiresOn(OffsetDateTime.of(2050, 5, 25, 0, 0, 0, 0, ZoneOffset.UTC)) .setTags(tags); - final CreateKeyOptions updatedKey = new CreateKeyOptions("testKey1", RSA_KEY_TYPE) + final CreateKeyOptions updatedKey = new CreateKeyOptions(keyName, RSA_KEY_TYPE) .setExpiresOn(OffsetDateTime.of(2060, 5, 25, 0, 0, 0, 0, ZoneOffset.UTC)) .setTags(tags); @@ -155,12 +158,12 @@ void updateKeyRunner(BiConsumer testRunner) void updateDisabledKeyRunner(BiConsumer testRunner) { final Map tags = new HashMap<>(); - - final CreateKeyOptions originalKey = new CreateKeyOptions("testKey2", EC_KEY_TYPE) + final String keyName = generateResourceId("testKey2"); + final CreateKeyOptions originalKey = new CreateKeyOptions(keyName, EC_KEY_TYPE) .setExpiresOn(OffsetDateTime.of(2050, 5, 25, 0, 0, 0, 0, ZoneOffset.UTC)) .setEnabled(false); - final CreateKeyOptions updatedKey = new CreateKeyOptions("testKey2", EC_KEY_TYPE) + final CreateKeyOptions updatedKey = new CreateKeyOptions(keyName, EC_KEY_TYPE) .setExpiresOn(OffsetDateTime.of(2060, 5, 25, 0, 0, 0, 0, ZoneOffset.UTC)); testRunner.accept(originalKey, updatedKey); @@ -170,7 +173,7 @@ void updateDisabledKeyRunner(BiConsumer test public abstract void getKey(); void getKeyRunner(Consumer testRunner) { - final CreateKeyOptions originalKey = new CreateKeyOptions("testKey4", RSA_KEY_TYPE) + final CreateKeyOptions originalKey = new CreateKeyOptions(generateResourceId("testKey4"), RSA_KEY_TYPE) .setExpiresOn(OffsetDateTime.of(2050, 5, 25, 0, 0, 0, 0, ZoneOffset.UTC)); testRunner.accept(originalKey); @@ -180,10 +183,11 @@ void getKeyRunner(Consumer testRunner) { public abstract void getKeySpecificVersion(); void getKeySpecificVersionRunner(BiConsumer testRunner) { - final CreateKeyOptions key = new CreateKeyOptions("testKey3", RSA_KEY_TYPE) + final String keyName = generateResourceId("testKey3"); + final CreateKeyOptions key = new CreateKeyOptions(keyName, RSA_KEY_TYPE) .setExpiresOn(OffsetDateTime.of(2050, 5, 25, 0, 0, 0, 0, ZoneOffset.UTC)); - final CreateKeyOptions keyWithNewVal = new CreateKeyOptions("testKey3", RSA_KEY_TYPE) + final CreateKeyOptions keyWithNewVal = new CreateKeyOptions(keyName, RSA_KEY_TYPE) .setExpiresOn(OffsetDateTime.of(2050, 5, 25, 0, 0, 0, 0, ZoneOffset.UTC)); testRunner.accept(key, keyWithNewVal); @@ -196,7 +200,7 @@ void getKeySpecificVersionRunner(BiConsumer public abstract void deleteKey(); void deleteKeyRunner(Consumer testRunner) { - final CreateKeyOptions keyToDelete = new CreateKeyOptions("testKey5", RSA_KEY_TYPE) + final CreateKeyOptions keyToDelete = new CreateKeyOptions(generateResourceId("testKey5"), RSA_KEY_TYPE) .setExpiresOn(OffsetDateTime.of(2050, 5, 25, 0, 0, 0, 0, ZoneOffset.UTC)); testRunner.accept(keyToDelete); @@ -209,7 +213,7 @@ void deleteKeyRunner(Consumer testRunner) { public abstract void getDeletedKey(); void getDeletedKeyRunner(Consumer testRunner) { - final CreateKeyOptions keyToDeleteAndGet = new CreateKeyOptions("testKey6", RSA_KEY_TYPE) + final CreateKeyOptions keyToDeleteAndGet = new CreateKeyOptions(generateResourceId("testKey6"), RSA_KEY_TYPE) .setExpiresOn(OffsetDateTime.of(2050, 5, 25, 0, 0, 0, 0, ZoneOffset.UTC)); testRunner.accept(keyToDeleteAndGet); } @@ -221,7 +225,7 @@ void getDeletedKeyRunner(Consumer testRunner) { public abstract void recoverDeletedKey(); void recoverDeletedKeyRunner(Consumer testRunner) { - final CreateKeyOptions keyToDeleteAndRecover = new CreateKeyOptions("testKey7", RSA_KEY_TYPE) + final CreateKeyOptions keyToDeleteAndRecover = new CreateKeyOptions(generateResourceId("testKey7"), RSA_KEY_TYPE) .setExpiresOn(OffsetDateTime.of(2050, 5, 25, 0, 0, 0, 0, ZoneOffset.UTC)); testRunner.accept(keyToDeleteAndRecover); } @@ -233,7 +237,7 @@ void recoverDeletedKeyRunner(Consumer testRunner) { public abstract void backupKey(); void backupKeyRunner(Consumer testRunner) { - final CreateKeyOptions keyToBackup = new CreateKeyOptions("testKey8", RSA_KEY_TYPE) + final CreateKeyOptions keyToBackup = new CreateKeyOptions(generateResourceId("testKey8"), RSA_KEY_TYPE) .setExpiresOn(OffsetDateTime.of(2050, 5, 25, 0, 0, 0, 0, ZoneOffset.UTC)); testRunner.accept(keyToBackup); } @@ -245,7 +249,7 @@ void backupKeyRunner(Consumer testRunner) { public abstract void restoreKey(); void restoreKeyRunner(Consumer testRunner) { - final CreateKeyOptions keyToBackupAndRestore = new CreateKeyOptions("testKey9", RSA_KEY_TYPE) + final CreateKeyOptions keyToBackupAndRestore = new CreateKeyOptions(generateResourceId("testKey9"), RSA_KEY_TYPE) .setExpiresOn(OffsetDateTime.of(2050, 5, 25, 0, 0, 0, 0, ZoneOffset.UTC)); testRunner.accept(keyToBackupAndRestore); } @@ -259,8 +263,8 @@ void restoreKeyRunner(Consumer testRunner) { void listKeysRunner(Consumer> testRunner) { HashMap keys = new HashMap<>(); String keyName; - for (int i = 0; i < 30; i++) { - keyName = "listKey" + i; + for (int i = 0; i < 2; i++) { + keyName = generateResourceId("listKey" + i); CreateKeyOptions key = new CreateKeyOptions(keyName, RSA_KEY_TYPE) .setExpiresOn(OffsetDateTime.of(2050, 5, 25, 0, 0, 0, 0, ZoneOffset.UTC)); keys.put(keyName, key); @@ -273,9 +277,8 @@ void listKeysRunner(Consumer> testRunner) { void listKeyVersionsRunner(Consumer> testRunner) { List keys = new ArrayList<>(); - String keyName; + String keyName = generateResourceId("listKeyVersion"); for (int i = 1; i < 5; i++) { - keyName = "listKeyVersion"; keys.add(new CreateKeyOptions(keyName, RSA_KEY_TYPE) .setExpiresOn(OffsetDateTime.of(2090, 5, i, 0, 0, 0, 0, ZoneOffset.UTC))); } @@ -290,14 +293,21 @@ void listDeletedKeysRunner(Consumer> testRunne HashMap keys = new HashMap<>(); String keyName; for (int i = 0; i < 3; i++) { - keyName = "listDeletedKeysTest" + i; + keyName = generateResourceId("listDeletedKeysTest" + i); keys.put(keyName, new CreateKeyOptions(keyName, RSA_KEY_TYPE) .setExpiresOn(OffsetDateTime.of(2090, 5, 25, 0, 0, 0, 0, ZoneOffset.UTC))); - } testRunner.accept(keys); } + String generateResourceId(String suffix) { + if (interceptorManager.isPlaybackMode()) { + return suffix; + } + String id = UUID.randomUUID().toString(); + return suffix.length() > 0 ? id + "-" + suffix : id; + } + /** * Helper method to verify that the Response matches what was expected. This method assumes a response status of 200. * diff --git a/sdk/keyvault/azure-security-keyvault-keys/src/test/java/com/azure/security/keyvault/keys/cryptography/CryptographyClientTest.java b/sdk/keyvault/azure-security-keyvault-keys/src/test/java/com/azure/security/keyvault/keys/cryptography/CryptographyClientTest.java index 0dc4e9f15a35..2faf5e924dd2 100644 --- a/sdk/keyvault/azure-security-keyvault-keys/src/test/java/com/azure/security/keyvault/keys/cryptography/CryptographyClientTest.java +++ b/sdk/keyvault/azure-security-keyvault-keys/src/test/java/com/azure/security/keyvault/keys/cryptography/CryptographyClientTest.java @@ -55,7 +55,7 @@ protected void beforeTest() { public void encryptDecryptRsa() throws Exception { encryptDecryptRsaRunner(keyPair -> { JsonWebKey key = JsonWebKey.fromRsa(keyPair); - String keyName = "testRsaKey"; + String keyName = generateResourceId("testRsaKey"); KeyVaultKey importedKey = client.importKey(keyName, key); CryptographyClient cryptoClient = new CryptographyClientBuilder() .pipeline(pipeline) @@ -91,7 +91,7 @@ public void encryptDecryptRsa() throws Exception { public void wrapUnwraptRsa() throws Exception { encryptDecryptRsaRunner(keyPair -> { JsonWebKey key = JsonWebKey.fromRsa(keyPair); - String keyName = "testRsaKeyWrapUnwrap"; + String keyName = generateResourceId("testRsaKeyWrapUnwrap"); KeyVaultKey importedKey = client.importKey(keyName, key); CryptographyClient cryptoClient = new CryptographyClientBuilder() .pipeline(pipeline) @@ -128,7 +128,7 @@ public void wrapUnwraptRsa() throws Exception { public void signVerifyRsa() throws Exception { encryptDecryptRsaRunner(keyPair -> { JsonWebKey key = JsonWebKey.fromRsa(keyPair); - String keyName = "testRsaKeySignVerify"; + String keyName = generateResourceId("testRsaKeySignVerify"); KeyVaultKey importedKey = client.importKey(keyName, key); CryptographyClient cryptoClient = new CryptographyClientBuilder() .pipeline(pipeline) @@ -184,7 +184,7 @@ public void signVerifyEc() throws NoSuchAlgorithmException, InvalidAlgorithmPara KeyPair keyPair = generator.generateKeyPair(); JsonWebKey key = JsonWebKey.fromEc(keyPair, provider); - String keyName = "testEcKey" + crv.toString(); + String keyName = generateResourceId("testEcKey" + crv.toString()); KeyVaultKey imported = client.importKey(keyName, key); CryptographyClient cryptoClient = new CryptographyClientBuilder() .pipeline(pipeline) diff --git a/sdk/keyvault/azure-security-keyvault-keys/src/test/java/com/azure/security/keyvault/keys/cryptography/CryptographyClientTestBase.java b/sdk/keyvault/azure-security-keyvault-keys/src/test/java/com/azure/security/keyvault/keys/cryptography/CryptographyClientTestBase.java index 31df034c7ffc..adb32b8c48a3 100644 --- a/sdk/keyvault/azure-security-keyvault-keys/src/test/java/com/azure/security/keyvault/keys/cryptography/CryptographyClientTestBase.java +++ b/sdk/keyvault/azure-security-keyvault-keys/src/test/java/com/azure/security/keyvault/keys/cryptography/CryptographyClientTestBase.java @@ -19,7 +19,7 @@ import com.azure.core.http.policy.UserAgentPolicy; import com.azure.core.test.TestBase; import com.azure.core.util.Configuration; -import com.azure.identity.DefaultAzureCredentialBuilder; +import com.azure.identity.ClientSecretCredentialBuilder; import org.junit.jupiter.api.Test; import java.math.BigInteger; @@ -30,16 +30,11 @@ import java.security.spec.KeySpec; import java.security.spec.RSAPrivateCrtKeySpec; import java.security.spec.RSAPublicKeySpec; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; import java.util.function.Consumer; import java.util.function.Function; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.fail; @@ -56,24 +51,21 @@ void beforeTestSetup() { } T clientSetup(Function clientBuilder) { - final String endpoint = interceptorManager.isPlaybackMode() - ? "http://localhost:8080" - : System.getenv("AZURE_KEYVAULT_ENDPOINT"); - TokenCredential credential = null; HttpClient httpClient; - String tenantId = System.getenv("AZURE_TENANT_ID"); - String clientId = System.getenv("AZURE_CLIENT_ID"); - String clientSecret = System.getenv("AZURE_CLIENT_SECRET"); - if (!interceptorManager.isPlaybackMode()) { - assertNotNull(tenantId); - assertNotNull(clientId); - assertNotNull(clientSecret); - } - if (!interceptorManager.isPlaybackMode()) { - credential = new DefaultAzureCredentialBuilder().build(); + String clientId = System.getenv("ARM_CLIENTID"); + String clientKey = System.getenv("ARM_CLIENTKEY"); + String tenantId = System.getenv("AZURE_TENANT_ID"); + Objects.requireNonNull(clientId, "The client id cannot be null"); + Objects.requireNonNull(clientKey, "The client key cannot be null"); + Objects.requireNonNull(tenantId, "The tenant id cannot be null"); + credential = new ClientSecretCredentialBuilder() + .clientSecret(clientKey) + .clientId(clientId) + .tenantId(tenantId) + .build(); } // Closest to API goes first, closest to wire goes last. @@ -141,6 +133,13 @@ private static KeyPair getWellKnownKey() throws Exception { return new KeyPair(keyFactory.generatePublic(publicKeySpec), keyFactory.generatePrivate(privateKeySpec)); } + String generateResourceId(String suffix) { + if (interceptorManager.isPlaybackMode()) { + return suffix; + } + String id = UUID.randomUUID().toString(); + return suffix.length() > 0 ? id + "-" + suffix : id; + } public String getEndpoint() { final String endpoint = interceptorManager.isPlaybackMode() diff --git a/sdk/keyvault/azure-security-keyvault-keys/src/test/java/com/azure/security/keyvault/keys/cryptography/KeyEncryptionKeyClientTestBase.java b/sdk/keyvault/azure-security-keyvault-keys/src/test/java/com/azure/security/keyvault/keys/cryptography/KeyEncryptionKeyClientTestBase.java index 136504fcc6d5..ec57bfdddea3 100644 --- a/sdk/keyvault/azure-security-keyvault-keys/src/test/java/com/azure/security/keyvault/keys/cryptography/KeyEncryptionKeyClientTestBase.java +++ b/sdk/keyvault/azure-security-keyvault-keys/src/test/java/com/azure/security/keyvault/keys/cryptography/KeyEncryptionKeyClientTestBase.java @@ -28,7 +28,6 @@ import java.util.function.Function; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.fail; @@ -54,28 +53,21 @@ T clientSetup(Function clientBuilder) { } HttpPipeline getHttpPipeline() { - final String endpoint = interceptorManager.isPlaybackMode() - ? "http://localhost:8080" - : System.getenv("AZURE_KEYVAULT_ENDPOINT"); - TokenCredential credential = null; HttpClient httpClient; - String tenantId = System.getenv("AZURE_TENANT_ID"); - String clientId = System.getenv("AZURE_CLIENT_ID"); - String clientSecret = System.getenv("AZURE_CLIENT_SECRET"); - if (!interceptorManager.isPlaybackMode()) { - assertNotNull(tenantId); - assertNotNull(clientId); - assertNotNull(clientSecret); - } - if (!interceptorManager.isPlaybackMode()) { + String clientId = System.getenv("ARM_CLIENTID"); + String clientKey = System.getenv("ARM_CLIENTKEY"); + String tenantId = System.getenv("AZURE_TENANT_ID"); + Objects.requireNonNull(clientId, "The client id cannot be null"); + Objects.requireNonNull(clientKey, "The client key cannot be null"); + Objects.requireNonNull(tenantId, "The tenant id cannot be null"); credential = new ClientSecretCredentialBuilder() - .clientSecret(clientSecret) - .tenantId(tenantId) - .clientId(clientId) - .build(); + .clientSecret(clientKey) + .clientId(clientId) + .tenantId(tenantId) + .build(); } // Closest to API goes first, closest to wire goes last. diff --git a/sdk/keyvault/azure-security-keyvault-secrets/pom.xml b/sdk/keyvault/azure-security-keyvault-secrets/pom.xml index 4f25d2c8fe74..851f2bf31e82 100644 --- a/sdk/keyvault/azure-security-keyvault-secrets/pom.xml +++ b/sdk/keyvault/azure-security-keyvault-secrets/pom.xml @@ -30,6 +30,19 @@ HEAD + + + + org.apache.maven.plugins + maven-surefire-plugin + 3.0.0-M3 + + 3 + + + + + com.azure diff --git a/sdk/keyvault/azure-security-keyvault-secrets/src/test/java/com/azure/security/keyvault/secrets/SecretAsyncClientTest.java b/sdk/keyvault/azure-security-keyvault-secrets/src/test/java/com/azure/security/keyvault/secrets/SecretAsyncClientTest.java index 9f80210f400b..f3483a89240b 100644 --- a/sdk/keyvault/azure-security-keyvault-secrets/src/test/java/com/azure/security/keyvault/secrets/SecretAsyncClientTest.java +++ b/sdk/keyvault/azure-security-keyvault-secrets/src/test/java/com/azure/security/keyvault/secrets/SecretAsyncClientTest.java @@ -10,9 +10,7 @@ import com.azure.core.exception.HttpResponseException; import com.azure.core.exception.ResourceModifiedException; import com.azure.core.exception.ResourceNotFoundException; -import com.azure.core.util.polling.AsyncPollResponse; -import com.azure.core.util.polling.LongRunningOperationStatus; -import com.azure.core.util.polling.PollerFlux; +import com.azure.core.util.polling.*; import com.azure.security.keyvault.secrets.models.DeletedSecret; import com.azure.security.keyvault.secrets.models.KeyVaultSecret; import com.azure.security.keyvault.secrets.models.SecretProperties; @@ -135,7 +133,10 @@ public void updateDisabledSecret() { @Test public void getSecret() { getSecretRunner((original) -> { - client.setSecret(original); + StepVerifier.create(client.setSecret(original)) + .assertNext(response -> assertSecretEquals(original, response)) + .verifyComplete(); + StepVerifier.create(client.getSecret(original.getName())) .assertNext(response -> assertSecretEquals(original, response)) .verifyComplete(); @@ -362,44 +363,35 @@ public void restoreSecretFromMalformedBackup() { */ @Test public void listDeletedSecrets() { + if (!interceptorManager.isPlaybackMode()) { + return; + } + listDeletedSecretsRunner((secrets) -> { List deletedSecrets = new ArrayList<>(); for (KeyVaultSecret secret : secrets.values()) { StepVerifier.create(client.setSecret(secret)) - .assertNext(secretResponse -> { - assertSecretEquals(secret, secretResponse); - }).verifyComplete(); + .assertNext(secretResponse -> { + assertSecretEquals(secret, secretResponse); + }).verifyComplete(); } sleepInRecordMode(10000); for (KeyVaultSecret secret : secrets.values()) { PollerFlux poller = client.beginDeleteSecret(secret.getName()); poller.takeUntil(apr -> apr.getStatus() == LongRunningOperationStatus.SUCCESSFULLY_COMPLETED) - .blockLast(); - } - - sleepInRecordMode(35000); - client.listDeletedSecrets().subscribe(deletedSecrets::add); - sleepInRecordMode(30000); - - for (DeletedSecret actualSecret : deletedSecrets) { - if (secrets.containsKey(actualSecret.getName())) { - assertNotNull(actualSecret.getDeletedOn()); - assertNotNull(actualSecret.getRecoveryId()); - secrets.remove(actualSecret.getName()); - } + .blockLast(); } - assertEquals(0, secrets.size()); - - for (DeletedSecret deletedSecret : deletedSecrets) { - StepVerifier.create(client.purgeDeletedSecretWithResponse(deletedSecret.getName())) - .assertNext(voidResponse -> { - assertEquals(HttpURLConnection.HTTP_NO_CONTENT, voidResponse.getStatusCode()); - }).verifyComplete(); - pollOnSecretPurge(deletedSecret.getName()); - } + sleepInRecordMode(120000); + DeletedSecret delSecret = client.listDeletedSecrets().map(deletedSecret -> { + deletedSecrets.add(deletedSecret); + assertNotNull(deletedSecret.getDeletedOn()); + assertNotNull(deletedSecret.getRecoveryId()); + return deletedSecret; + }).blockLast(); + assertNotNull(delSecret); }); } @@ -442,21 +434,19 @@ public void listSecrets() { HashMap secretsToList = secrets; List output = new ArrayList<>(); for (KeyVaultSecret secret : secretsToList.values()) { - client.setSecret(secret).subscribe(secretResponse -> assertSecretEquals(secret, secretResponse)); - sleepInRecordMode(1000); + assertSecretEquals(secret, client.setSecret(secret).block()); } - sleepInRecordMode(30000); - client.listPropertiesOfSecrets().subscribe(output::add); - sleepInRecordMode(30000); - - for (SecretProperties actualSecret : output) { - if (secretsToList.containsKey(actualSecret.getName())) { - KeyVaultSecret expectedSecret = secrets.get(actualSecret.getName()); - assertEquals(expectedSecret.getProperties().getExpiresOn(), actualSecret.getExpiresOn()); - assertEquals(expectedSecret.getProperties().getNotBefore(), actualSecret.getNotBefore()); - secrets.remove(actualSecret.getName()); + sleepInRecordMode(10000); + client.listPropertiesOfSecrets().map(secret -> { + if (secretsToList.containsKey(secret.getName())) { + output.add(secret); + KeyVaultSecret expectedSecret = secrets.get(secret.getName()); + assertEquals(expectedSecret.getProperties().getExpiresOn(), secret.getExpiresOn()); + assertEquals(expectedSecret.getProperties().getNotBefore(), secret.getNotBefore()); + secrets.remove(secret.getName()); } - } + return secret; + }).blockLast(); assertEquals(0, secrets.size()); }); } diff --git a/sdk/keyvault/azure-security-keyvault-secrets/src/test/java/com/azure/security/keyvault/secrets/SecretClientTest.java b/sdk/keyvault/azure-security-keyvault-secrets/src/test/java/com/azure/security/keyvault/secrets/SecretClientTest.java index 4b6a269158b3..e919605c5dc3 100644 --- a/sdk/keyvault/azure-security-keyvault-secrets/src/test/java/com/azure/security/keyvault/secrets/SecretClientTest.java +++ b/sdk/keyvault/azure-security-keyvault-secrets/src/test/java/com/azure/security/keyvault/secrets/SecretClientTest.java @@ -327,23 +327,13 @@ public void listDeletedSecrets() { } } - sleepInRecordMode(60000); - Iterable deletedSecrets = client.listDeletedSecrets(); - for (DeletedSecret actualSecret : deletedSecrets) { - if (secrets.containsKey(actualSecret.getName())) { - assertNotNull(actualSecret.getDeletedOn()); - assertNotNull(actualSecret.getRecoveryId()); - secrets.remove(actualSecret.getName()); - } - } - - assertEquals(0, secrets.size()); - + sleepInRecordMode(300000); + Iterable deletedSecrets = client.listDeletedSecrets(); + assertTrue(deletedSecrets.iterator().hasNext()); for (DeletedSecret deletedSecret : deletedSecrets) { - client.purgeDeletedSecret(deletedSecret.getName()); - pollOnSecretPurge(deletedSecret.getName()); + assertNotNull(deletedSecret.getDeletedOn()); + assertNotNull(deletedSecret.getRecoveryId()); } - sleepInRecordMode(10000); }); } diff --git a/sdk/keyvault/azure-security-keyvault-secrets/src/test/java/com/azure/security/keyvault/secrets/SecretClientTestBase.java b/sdk/keyvault/azure-security-keyvault-secrets/src/test/java/com/azure/security/keyvault/secrets/SecretClientTestBase.java index 1af14cd26fe1..e5b06cd6802a 100644 --- a/sdk/keyvault/azure-security-keyvault-secrets/src/test/java/com/azure/security/keyvault/secrets/SecretClientTestBase.java +++ b/sdk/keyvault/azure-security-keyvault-secrets/src/test/java/com/azure/security/keyvault/secrets/SecretClientTestBase.java @@ -20,18 +20,14 @@ import com.azure.core.http.rest.Response; import com.azure.core.test.TestBase; import com.azure.core.util.Configuration; -import com.azure.identity.DefaultAzureCredentialBuilder; +import com.azure.identity.ClientSecretCredentialBuilder; import com.azure.security.keyvault.secrets.models.KeyVaultSecret; import com.azure.security.keyvault.secrets.models.SecretProperties; import org.junit.jupiter.api.Test; import java.time.OffsetDateTime; import java.time.ZoneOffset; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; import java.util.function.BiConsumer; import java.util.function.Consumer; import java.util.function.Function; @@ -60,7 +56,17 @@ T clientSetup(Function clientBuilder) { TokenCredential credential = null; if (!interceptorManager.isPlaybackMode()) { - credential = new DefaultAzureCredentialBuilder().build(); + String clientId = System.getenv("ARM_CLIENTID"); + String clientKey = System.getenv("ARM_CLIENTKEY"); + String tenantId = System.getenv("AZURE_TENANT_ID"); + Objects.requireNonNull(clientId, "The client id cannot be null"); + Objects.requireNonNull(clientKey, "The client key cannot be null"); + Objects.requireNonNull(tenantId, "The tenant id cannot be null"); + credential = new ClientSecretCredentialBuilder() + .clientSecret(clientKey) + .clientId(clientId) + .tenantId(tenantId) + .build(); } HttpClient httpClient; @@ -99,10 +105,9 @@ T clientSetup(Function clientBuilder) { void setSecretRunner(Consumer testRunner) { final Map tags = new HashMap<>(); - tags.put("foo", "baz"); - - final KeyVaultSecret secret = new KeyVaultSecret(SECRET_NAME, SECRET_VALUE) + String resourceId = generateResourceId(SECRET_NAME); + final KeyVaultSecret secret = new KeyVaultSecret(resourceId, SECRET_VALUE) .setProperties(new SecretProperties() .setExpiresOn(OffsetDateTime.of(2050, 1, 30, 0, 0, 0, 0, ZoneOffset.UTC)) .setNotBefore(OffsetDateTime.of(2000, 1, 30, 12, 59, 59, 0, ZoneOffset.UTC)) @@ -119,7 +124,8 @@ void setSecretRunner(Consumer testRunner) { public abstract void setSecretEmptyValue(); void setSecretEmptyValueRunner(Consumer testRunner) { - KeyVaultSecret secret = new KeyVaultSecret(SECRET_NAME, ""); + String resourceId = generateResourceId(SECRET_NAME); + KeyVaultSecret secret = new KeyVaultSecret(resourceId, ""); testRunner.accept(secret); } @@ -134,12 +140,13 @@ void updateSecretRunner(BiConsumer testRunner) { final Map tags = new HashMap<>(); tags.put("first tag", "first value"); tags.put("second tag", "second value"); - final KeyVaultSecret originalSecret = new KeyVaultSecret("testSecretUpdate", "testSecretVal") + String resourceId = generateResourceId("testSecretUpdate"); + final KeyVaultSecret originalSecret = new KeyVaultSecret(resourceId, "testSecretVal") .setProperties(new SecretProperties() .setExpiresOn(OffsetDateTime.of(2050, 5, 25, 0, 0, 0, 0, ZoneOffset.UTC)) .setTags(tags)); - final KeyVaultSecret updatedSecret = new KeyVaultSecret("testSecretUpdate", "testSecretVal") + final KeyVaultSecret updatedSecret = new KeyVaultSecret(resourceId, "testSecretVal") .setProperties(new SecretProperties() .setExpiresOn(OffsetDateTime.of(2060, 5, 25, 0, 0, 0, 0, ZoneOffset.UTC)) .setTags(tags)); @@ -154,12 +161,13 @@ void updateSecretRunner(BiConsumer testRunner) { void updateDisabledSecretRunner(BiConsumer testRunner) { final Map tags = new HashMap<>(); - final KeyVaultSecret originalSecret = new KeyVaultSecret("testUpdateOfDisabledSecret", "testSecretUpdateDisabledVal") + String resourceId = generateResourceId("testUpdateOfDisabledSecret"); + final KeyVaultSecret originalSecret = new KeyVaultSecret(resourceId, "testSecretUpdateDisabledVal") .setProperties(new SecretProperties() .setExpiresOn(OffsetDateTime.of(2050, 5, 25, 0, 0, 0, 0, ZoneOffset.UTC)) .setEnabled(false)); - final KeyVaultSecret updatedSecret = new KeyVaultSecret("testUpdateOfDisabledSecret", "testSecretUpdateDisabledVal") + final KeyVaultSecret updatedSecret = new KeyVaultSecret(resourceId, "testSecretUpdateDisabledVal") .setProperties(new SecretProperties() .setExpiresOn(OffsetDateTime.of(2050, 5, 25, 0, 0, 0, 0, ZoneOffset.UTC)) .setEnabled(false)); @@ -170,7 +178,8 @@ void updateDisabledSecretRunner(BiConsumer testR public abstract void getSecret(); void getSecretRunner(Consumer testRunner) { - final KeyVaultSecret originalSecret = new KeyVaultSecret("testSecretGet", "testSecretGetVal") + String resourceId = generateResourceId("testSecretGet"); + final KeyVaultSecret originalSecret = new KeyVaultSecret(resourceId, "testSecretGetVal") .setProperties(new SecretProperties() .setExpiresOn(OffsetDateTime.of(2050, 5, 25, 0, 0, 0, 0, ZoneOffset.UTC))); testRunner.accept(originalSecret); @@ -180,11 +189,12 @@ void getSecretRunner(Consumer testRunner) { public abstract void getSecretSpecificVersion(); void getSecretSpecificVersionRunner(BiConsumer testRunner) { - final KeyVaultSecret secret = new KeyVaultSecret("testSecretGetVersion", "testSecretGetVersionVal") + String resourceId = generateResourceId("testSecretGetVersion"); + final KeyVaultSecret secret = new KeyVaultSecret(resourceId, "testSecretGetVersionVal") .setProperties(new SecretProperties() .setExpiresOn(OffsetDateTime.of(2050, 5, 25, 0, 0, 0, 0, ZoneOffset.UTC))); - final KeyVaultSecret secretWithNewVal = new KeyVaultSecret("testSecretGetVersion", "newVal") + final KeyVaultSecret secretWithNewVal = new KeyVaultSecret(resourceId, "newVal") .setProperties(new SecretProperties() .setExpiresOn(OffsetDateTime.of(2050, 5, 25, 0, 0, 0, 0, ZoneOffset.UTC))); testRunner.accept(secret, secretWithNewVal); @@ -197,7 +207,8 @@ void getSecretSpecificVersionRunner(BiConsumer t public abstract void deleteSecret(); void deleteSecretRunner(Consumer testRunner) { - final KeyVaultSecret secretToDelete = new KeyVaultSecret("testSecretDelete", "testSecretDeleteVal") + String resourceId = generateResourceId("testSecretDelete"); + final KeyVaultSecret secretToDelete = new KeyVaultSecret(resourceId, "testSecretDeleteVal") .setProperties(new SecretProperties() .setExpiresOn(OffsetDateTime.of(2050, 5, 25, 0, 0, 0, 0, ZoneOffset.UTC))); testRunner.accept(secretToDelete); @@ -211,7 +222,8 @@ void deleteSecretRunner(Consumer testRunner) { public abstract void getDeletedSecret(); void getDeletedSecretRunner(Consumer testRunner) { - final KeyVaultSecret secretToDeleteAndGet = new KeyVaultSecret("testSecretGetDeleted", "testSecretGetDeleteVal") + String resourceId = generateResourceId("testSecretGetDeleted"); + final KeyVaultSecret secretToDeleteAndGet = new KeyVaultSecret(resourceId, "testSecretGetDeleteVal") .setProperties(new SecretProperties() .setExpiresOn(OffsetDateTime.of(2050, 5, 25, 0, 0, 0, 0, ZoneOffset.UTC))); testRunner.accept(secretToDeleteAndGet); @@ -224,7 +236,8 @@ void getDeletedSecretRunner(Consumer testRunner) { public abstract void recoverDeletedSecret(); void recoverDeletedSecretRunner(Consumer testRunner) { - final KeyVaultSecret secretToDeleteAndRecover = new KeyVaultSecret("testSecretRecover", "testSecretRecoverVal") + String resourceId = generateResourceId("testSecretRecover"); + final KeyVaultSecret secretToDeleteAndRecover = new KeyVaultSecret(resourceId, "testSecretRecoverVal") .setProperties(new SecretProperties() .setExpiresOn(OffsetDateTime.of(2050, 5, 25, 0, 0, 0, 0, ZoneOffset.UTC))); testRunner.accept(secretToDeleteAndRecover); @@ -237,7 +250,7 @@ void recoverDeletedSecretRunner(Consumer testRunner) { public abstract void backupSecret(); void backupSecretRunner(Consumer testRunner) { - final KeyVaultSecret secretToBackup = new KeyVaultSecret("testSecretBackup", "testSecretBackupVal") + final KeyVaultSecret secretToBackup = new KeyVaultSecret(generateResourceId("testSecretBackup"), "testSecretBackupVal") .setProperties(new SecretProperties() .setExpiresOn(OffsetDateTime.of(2060, 5, 25, 0, 0, 0, 0, ZoneOffset.UTC))); testRunner.accept(secretToBackup); @@ -250,7 +263,7 @@ void backupSecretRunner(Consumer testRunner) { public abstract void restoreSecret(); void restoreSecretRunner(Consumer testRunner) { - final KeyVaultSecret secretToBackupAndRestore = new KeyVaultSecret("testSecretRestore", "testSecretRestoreVal") + final KeyVaultSecret secretToBackupAndRestore = new KeyVaultSecret(generateResourceId("testSecretRestore"), "testSecretRestoreVal") .setProperties(new SecretProperties() .setExpiresOn(OffsetDateTime.of(2080, 5, 25, 0, 0, 0, 0, ZoneOffset.UTC))); testRunner.accept(secretToBackupAndRestore); @@ -266,8 +279,8 @@ void listSecretsRunner(Consumer> testRunner) { HashMap secrets = new HashMap<>(); String secretName; String secretVal; - for (int i = 0; i < 30; i++) { - secretName = "listSecret" + i; + for (int i = 0; i < 2; i++) { + secretName = generateResourceId("listSecret" + i); secretVal = "listSecretVal" + i; KeyVaultSecret secret = new KeyVaultSecret(secretName, secretVal) .setProperties(new SecretProperties() @@ -285,7 +298,7 @@ void listDeletedSecretsRunner(Consumer> testRunn String secretName; String secretVal; for (int i = 0; i < 3; i++) { - secretName = "listDeletedSecretsTest" + i; + secretName = generateResourceId("listDeletedSecretsTest" + i); secretVal = "listDeletedSecretVal" + i; secrets.put(secretName, new KeyVaultSecret(secretName, secretVal) .setProperties(new SecretProperties() @@ -300,10 +313,9 @@ void listDeletedSecretsRunner(Consumer> testRunn void listSecretVersionsRunner(Consumer> testRunner) { List secrets = new ArrayList<>(); - String secretName; String secretVal; + String secretName = generateResourceId("listSecretVersion"); for (int i = 1; i < 5; i++) { - secretName = "listSecretVersion"; secretVal = "listSecretVersionVal" + i; secrets.add(new KeyVaultSecret(secretName, secretVal) .setProperties(new SecretProperties() @@ -385,6 +397,14 @@ static void assertRestException(Throwable exception, Class 0 ? id + "-" + suffix : id; + } + /** * Helper method to verify that a command throws an IllegalArgumentException. * diff --git a/sdk/keyvault/test-resources.json b/sdk/keyvault/test-resources.json index 183d415d1329..c59057cb4679 100644 --- a/sdk/keyvault/test-resources.json +++ b/sdk/keyvault/test-resources.json @@ -38,13 +38,50 @@ "objectId": "[parameters('testApplicationOid')]", "permissions": { "keys": [ - "all" + "backup", + "create", + "decrypt", + "delete", + "encrypt", + "get", + "import", + "list", + "purge", + "recover", + "restore", + "sign", + "unwrapKey", + "update", + "verify", + "wrapKey" ], "secrets": [ - "all" + "backup", + "delete", + "get", + "list", + "purge", + "recover", + "restore", + "set" ], "certificates": [ - "all" + "backup", + "create", + "delete", + "deleteissuers", + "get", + "getissuers", + "import", + "list", + "listissuers", + "managecontacts", + "manageissuers", + "purge", + "recover", + "restore", + "setissuers", + "update" ] } } diff --git a/sdk/keyvault/tests.yml b/sdk/keyvault/tests.yml index c7ab6efc5d5b..c7a0ada4d2e6 100644 --- a/sdk/keyvault/tests.yml +++ b/sdk/keyvault/tests.yml @@ -3,9 +3,12 @@ trigger: none jobs: - template: ../../eng/pipelines/templates/jobs/archetype-sdk-tests.yml parameters: + TimeoutInMinutes: 120 + MaxParallel: 3 ServiceDirectory: keyvault EnvVars: AZURE_TEST_MODE: RECORD - ARM_CLIENTID: $(java-keyvault-test-arm-client-id) - ARM_CLIENTKEY: $(java-keyvault-test-arm-client-key) + ARM_CLIENTID: $(aad-azure-sdk-test-client-id) + ARM_CLIENTKEY: $(aad-azure-sdk-test-client-secret) + AZURE_TENANT_ID: $(aad-azure-sdk-test-tenant-id) AZURE_KEYVAULT_ENDPOINT: $(AZURE_KEYVAULT_ENDPOINT)