http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/ac03bac4/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/VaultApiMockTest.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/VaultApiMockTest.java b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/VaultApiMockTest.java deleted file mode 100644 index 7459f48..0000000 --- a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/VaultApiMockTest.java +++ /dev/null @@ -1,1619 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.jclouds.azurecompute.arm.features; - -import static org.testng.Assert.assertFalse; -import static org.testng.Assert.assertNotNull; -import static org.testng.Assert.assertNull; -import static org.testng.Assert.assertTrue; - -import java.io.IOException; -import java.net.URI; -import java.net.URISyntaxException; - -import java.util.List; -import java.util.Map; -import java.util.HashMap; -import java.util.Arrays; -import java.util.ArrayList; - -import org.jclouds.azurecompute.arm.domain.Certificate; -import org.jclouds.azurecompute.arm.domain.Certificate.AdministrationDetails; -import org.jclouds.azurecompute.arm.domain.Certificate.CertificateAttributes; -import org.jclouds.azurecompute.arm.domain.Certificate.CertificateBundle; -import org.jclouds.azurecompute.arm.domain.Certificate.CertificateIssuer; -import org.jclouds.azurecompute.arm.domain.Certificate.CertificateOperation; -import org.jclouds.azurecompute.arm.domain.Certificate.CertificatePolicy; -import org.jclouds.azurecompute.arm.domain.Certificate.Contact; -import org.jclouds.azurecompute.arm.domain.Certificate.Contacts; -import org.jclouds.azurecompute.arm.domain.Certificate.DeletedCertificate; -import org.jclouds.azurecompute.arm.domain.Certificate.DeletedCertificateBundle; -import org.jclouds.azurecompute.arm.domain.Certificate.IssuerBundle; -import org.jclouds.azurecompute.arm.domain.Certificate.IssuerCredentials; -import org.jclouds.azurecompute.arm.domain.Certificate.IssuerParameters; -import org.jclouds.azurecompute.arm.domain.Certificate.KeyProperties; -import org.jclouds.azurecompute.arm.domain.Certificate.OrganizationDetails; -import org.jclouds.azurecompute.arm.domain.Certificate.SecretProperties; -import org.jclouds.azurecompute.arm.domain.Certificate.X509CertificateProperties; -import org.jclouds.azurecompute.arm.domain.Key; -import org.jclouds.azurecompute.arm.domain.Key.DeletedKeyBundle; -import org.jclouds.azurecompute.arm.domain.Key.JsonWebKey; -import org.jclouds.azurecompute.arm.domain.Key.KeyAttributes; -import org.jclouds.azurecompute.arm.domain.Key.KeyBundle; -import org.jclouds.azurecompute.arm.domain.Key.KeyOperationResult; -import org.jclouds.azurecompute.arm.domain.SKU; -import org.jclouds.azurecompute.arm.domain.Secret; -import org.jclouds.azurecompute.arm.domain.Secret.DeletedSecretBundle; -import org.jclouds.azurecompute.arm.domain.Secret.SecretAttributes; -import org.jclouds.azurecompute.arm.domain.Secret.SecretBundle; -import org.jclouds.azurecompute.arm.domain.Vault; -import org.jclouds.azurecompute.arm.domain.Vault.DeletedVault; -import org.jclouds.azurecompute.arm.domain.VaultProperties; -import org.jclouds.azurecompute.arm.internal.BaseAzureComputeApiMockTest; -import org.jclouds.rest.ResourceNotFoundException; -import org.testng.SkipException; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.Test; - -import com.google.common.collect.ImmutableList; - - -@Test(groups = "unit", testName = "VaultApiMockTest", singleThreaded = true) -public class VaultApiMockTest extends BaseAzureComputeApiMockTest { - private final String subscriptionId = "SUBSCRIPTIONID"; - private final String resourceGroup = "myresourcegroup"; - private final String tenantId = "myTenantId"; - private final String identityObjId = "myIdentityObjectId"; - private final String vaultName = "kvvaultapimocktest"; - private final String apiVersion = "api-version=2016-10-01"; - private final String location = "westeurope"; - private URI vaultUri; - - private static String KEY_NAME = "myKey"; - private static String TEMP_KEY_NAME = "myTempKey"; - private static String IMPORT_KEY_NAME = "myImportKey"; - private static String RECOVERABLE_KEY_NAME = "myRecoverableKey"; - private static String SECRET_NAME = "mySecret"; - private static String RECOVERABLE_SECRET_NAME = "myRecoverableSecret"; - private static String CERTIFICATE_NAME = "myCertificate"; - private static String TEMP_CERTIFICATE_NAME = "myTempCertificate"; - private static String RECOVERABLE_CERTIFICATE_NAME = "myRecoverableCertificate"; - private static String IMPORTABLE_CERTIFICATE_NAME = "myImportableCertificate"; - private static String CERTIFICATE_ISSUER_NAME = "globalsign01"; - private String IMPORTABLE_CERTIFICATE_PEM = stringFromResource("/vaultimportablecert.txt"); - private String sampleSecret = stringFromResource("/vaultsamplesecret.txt"); - private String keyBackup = stringFromResource("/vaultkeybackup.txt"); - private String secretBackup = stringFromResource("/vaultsecretbackup.txt"); - private String[] mergeX5C = { - stringFromResource("/vaultmergex5c-1.txt"), - stringFromResource("/vaultmergex5c-2.txt"), - stringFromResource("/vaultmergex5c-3.txt") - }; - private static String cryptoText = "R29sZCUyNTIxJTJCR29sZCUyNTIxJTJCR2" + - "9sZCUyQmZyb20lMkJ0aGUlMkJBbWVyaWNhbiUyQlJpdmVyJTI1MjE"; - private static String cryptoAlgorithm = "RSA-OAEP"; - private static String hashToSign = "FvabKT6qGwpml59iHUJ72DZ4XyJcJ8bgpgFA4_8JFmM"; - private static String signatureAlgorithm = "RS256"; - private static String contentEncryptionKey = "YxzoHR65aFwD2_IOiZ5rD08jMSALA1y7b_yYW0G3hyI"; - private static String keyDecryptData = "0_S8pyjjnGRlcbDa-Lt0jYjMXpXrf9Fat3elx-fSO" + - "g3dj6mYgEEs6kt79OMD4MFmVyOt6umeWAfdDIkNVnqb5fgyWceveh9wN-37jc5CFgG2PF3XI" + - "A6RII-HF2BkBcVa9KcAX3_di4KQE70PXgHf-dlz_RgLOJILeG50wzFeBFCLsjEEPp3itmoai" + - "E6vfDidCRm5At8Vjka0G-N_afwkIijfQZLT0VaXvL39cIJE2QN3HJPZM8YPUlkFlYnY4GIRy" + - "RWSBpK_KYuVufzUGtDi6Sh8pUa67ppa7DHVZlixlmnVqI3Oeg6XUvMqbFFqVSrcNbRQDwVGL" + - "3cUtK-KB1PfKg"; - private static String keySignedData = "uO0r4P1cB-fKsDZ8cj5ahiNw8Tdsudt5zLCeEKOt29" + - "LAlPDpeGx9Q1SOFNaR7JlRYVelxsohdzvydwX8ao6MLnqlpdEj0Xt5Aadp-kN84AXW238gab" + - "S1AUyiWILCmdsBFeRU4wTRSxz2qGS_0ztHkaNln32P_9GJC72ZRlgZoVA4C_fowZolUoCWGj" + - "4V7fAzcSoiNYipWP0HkFe3xmuz-cSQg3CCAs-MclHHfMeSagLJZZQ9bpl5LIr-Ik89bNtqEq" + - "yP7Jb_fCgHajAx2lUFcRZhSIKuCfrLPMl6wzejQ2rQXX-ixEkDa73dYaPIrVW4IL3iC0Ufxn" + - "fxYffHJ7QCRw"; - private static String keyWrappedData = "1jcTlu3KJNDBYydhaH9POWOo0tAPGkpsZVizCkHpC" + - "3g_9Kg91Q3HKK-rfZynn5W5nVPM-SVFHA3JTankcXX8gx8GycwUh4pMoyil_DV35m2QjyuiT" + - "ln83OJXw-nMvRXyKdVfF7nyRcs256kW7gthAOsYUVBrfFS7DFFxsXqLNREsA8j85IqIXIm8p" + - "AB3C9uvl1I7SQhLvrwZZXXqjeCWMfseVJwWgsQFyyqH2P0f3-xnngV7cvik2k3Elrk3G_2Cu" + - "JCozIIrANg9zG9Z8DrwSNNm9YooxWkSu0ZeDLOJ0bMdhcPGGm5OvKz3oZqX-39yv5klNlCRb" + - "r0q7gqmI0x25w"; - - @BeforeMethod - public void start() throws IOException, URISyntaxException { - super.start(); - vaultUri = server.getUrl("").toURI(); - } - - public void createVault() throws InterruptedException { - server.enqueue(jsonResponse("/vaultcreate.json").setResponseCode(200)); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - Vault vault = vaultApi.createOrUpdateVault(vaultName, location, VaultProperties.builder() - .tenantId(this.tenantId) - .sku(SKU.create(location, "standard", null, "A")) - .accessPolicies(ImmutableList.of(VaultProperties.AccessPolicyEntry.create(null, this.identityObjId, this.tenantId, - VaultProperties.Permissions.create( - ImmutableList.of( // certificates - "Get", - "List", - "Update", - "Create", - "Import", - "Delete", - "ManageContacts", - "ManageIssuers", - "GetIssuers", - "ListIssuers", - "SetIssuers", - "DeleteIssuers", - "Purge", - "Recover" - ), - ImmutableList.of( // keys - "Get", - "List", - "Update", - "Create", - "Import", - "Delete", - "Recover", - "Backup", - "Restore", - "Purge", - "Encrypt", - "Decrypt", - "Sign", - "Verify", - "WrapKey", - "UnwrapKey" - ), - ImmutableList.of( // secrets - "Get", - "List", - "Set", - "Delete", - "Recover", - "Backup", - "Restore", - "Purge" - ), - ImmutableList.<String>of() - )))) - .build(), - null); - - String path = String.format( - "/subscriptions/%s/resourcegroups/%s/providers/Microsoft.KeyVault/vaults/%s?%s", - subscriptionId, resourceGroup, vaultName, apiVersion - ); - assertSent(server, "PUT", path, stringFromResource("/vaultcreaterequestbody.json")); - - assertNotNull(vault); - assertNotNull(vault.properties().vaultUri()); - assertTrue(!vault.name().isEmpty()); - } - - public void listVaults() throws InterruptedException { - server.enqueue(jsonResponse("/vaultlist.json").setResponseCode(200)); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - List<Vault> vaults = vaultApi.listVaults(); - - String path = String.format( - "/subscriptions/%s/resourcegroups/%s/providers/Microsoft.KeyVault/vaults?%s", - subscriptionId, resourceGroup, apiVersion - ); - assertSent(server, "GET", path); - - assertNotNull(vaults); - assertTrue(vaults.size() > 0); - assertTrue(!vaults.get(0).name().isEmpty()); - } - - public void listVaultsReturns404() throws InterruptedException { - server.enqueue(response404()); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - List<Vault> vaults = vaultApi.listVaults(); - - String path = String.format( - "/subscriptions/%s/resourcegroups/%s/providers/Microsoft.KeyVault/vaults?%s", - subscriptionId, resourceGroup, apiVersion - ); - assertSent(server, "GET", path); - - assertTrue(vaults.isEmpty()); - } - - public void getVault() throws InterruptedException { - server.enqueue(jsonResponse("/vaultget.json").setResponseCode(200)); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - Vault vault = vaultApi.getVault(vaultName); - - String path = String.format( - "/subscriptions/%s/resourcegroups/%s/providers/Microsoft.KeyVault/vaults/%s?%s", - subscriptionId, resourceGroup, vaultName, apiVersion - ); - assertSent(server, "GET", path); - - assertNotNull(vault); - assertTrue(!vault.name().isEmpty()); - } - - public void getVaultReturns404() throws InterruptedException { - server.enqueue(response404()); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - Vault vault = vaultApi.getVault(vaultName); - - String path = String.format( - "/subscriptions/%s/resourcegroups/%s/providers/Microsoft.KeyVault/vaults/%s?%s", - subscriptionId, resourceGroup, vaultName, apiVersion - ); - assertSent(server, "GET", path); - - assertNull(vault); - } - - public void deleteVault() throws InterruptedException { - server.enqueue(response200()); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - boolean status = vaultApi.deleteVault(vaultName); - - String path = String.format( - "/subscriptions/%s/resourcegroups/%s/providers/Microsoft.KeyVault/vaults/%s?%s", - subscriptionId, resourceGroup, vaultName, apiVersion - ); - assertSent(server, "DELETE", path); - - assertTrue(status); - } - - public void deleteVaultReturns404() throws InterruptedException { - server.enqueue(response404()); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - boolean status = vaultApi.deleteVault(vaultName); - - String path = String.format( - "/subscriptions/%s/resourcegroups/%s/providers/Microsoft.KeyVault/vaults/%s?%s", - subscriptionId, resourceGroup, vaultName, apiVersion - ); - assertSent(server, "DELETE", path); - - assertFalse(status); - } - - public void purgeDeletedVault() throws InterruptedException { - server.enqueue(response200()); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - boolean status = vaultApi.purgeVault(location, vaultName); - - String path = String.format( - "/subscriptions/%s/providers/Microsoft.KeyVault/locations/%s/deletedVaults/%s/purge?%s", - subscriptionId, location, vaultName, apiVersion - ); - assertSent(server, "POST", path); - - assertTrue(status); - } - - public void purgeDeletedVaultReturns404() throws InterruptedException { - server.enqueue(response404()); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - boolean status = vaultApi.purgeVault(location, vaultName); - - String path = String.format( - "/subscriptions/%s/providers/Microsoft.KeyVault/locations/%s/deletedVaults/%s/purge?%s", - subscriptionId, location, vaultName, apiVersion - ); - assertSent(server, "POST", path); - - assertFalse(status); - } - - public void listDeletedVaults() throws InterruptedException { - server.enqueue(jsonResponse("/vaultlistdeleted.json").setResponseCode(200)); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - List<DeletedVault> vaults = vaultApi.listDeletedVaults(); - - String path = String.format( - "/subscriptions/%s/providers/Microsoft.KeyVault/deletedVaults?%s", - subscriptionId, apiVersion - ); - assertSent(server, "GET", path); - - assertNotNull(vaults); - assertTrue(vaults.size() > 0); - } - - public void listDeletedVaultsReturns404() throws InterruptedException { - server.enqueue(response404()); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - List<DeletedVault> vaults = vaultApi.listDeletedVaults(); - - String path = String.format( - "/subscriptions/%s/providers/Microsoft.KeyVault/deletedVaults?%s", - subscriptionId, apiVersion - ); - assertSent(server, "GET", path); - - assertTrue(vaults.isEmpty()); - } - - public void getDeletedVault() throws InterruptedException { - server.enqueue(jsonResponse("/vaultgetdeleted.json").setResponseCode(200)); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - DeletedVault vault = vaultApi.getDeletedVault(location, vaultName); - - String path = String.format( - "/subscriptions/%s/providers/Microsoft.KeyVault/locations/%s/deletedVaults/%s?%s", - subscriptionId, location, vaultName, apiVersion - ); - assertSent(server, "GET", path); - - assertNotNull(vault); - assertTrue(!vault.name().isEmpty()); - assertTrue(!vault.properties().deletionDate().toString().isEmpty()); - } - - public void getDeletedVaultReturns404() throws InterruptedException { - server.enqueue(response404()); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - DeletedVault vault = vaultApi.getDeletedVault(location, vaultName); - - String path = String.format( - "/subscriptions/%s/providers/Microsoft.KeyVault/locations/%s/deletedVaults/%s?%s", - subscriptionId, location, vaultName, apiVersion - ); - assertSent(server, "GET", path); - - assertNull(vault); - } - - - // Key mock tests - public void listKeys() throws InterruptedException { - server.enqueue(jsonResponse("/vaultlistkeys.json").setResponseCode(200)); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - List<Key> keys = vaultApi.listKeys(vaultUri); - - String path = String.format("/keys?%s", apiVersion); - assertSent(server, "GET", path); - - assertNotNull(keys); - assertTrue(keys.size() > 0); - } - - public void listKeysReturns404() throws InterruptedException { - server.enqueue(response404()); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - List<Key> keys = vaultApi.listKeys(vaultUri); - - String path = String.format("/keys?%s", apiVersion); - assertSent(server, "GET", path); - - assertTrue(keys.isEmpty()); - } - - public void createKey() throws InterruptedException { - server.enqueue(jsonResponse("/vaultcreatekey.json").setResponseCode(200)); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - KeyAttributes keyAttr = KeyAttributes.create(true, null, null, null, null, null); - KeyBundle keyBundle = vaultApi.createKey(vaultUri, - KEY_NAME, - keyAttr, - null, - null, - 2048, - "RSA", - null - ); - - String path = String.format("/keys/%s/create?%s", KEY_NAME, apiVersion); - assertSent(server, "POST", path, stringFromResource("/vaultcreatekeyrequestbody.json")); - - assertNotNull(keyBundle); - assertNotNull(keyBundle.attributes().created()); - } - - public void importKey() throws InterruptedException { - server.enqueue(jsonResponse("/vaultcreatekey.json").setResponseCode(200)); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - KeyAttributes keyAttr = KeyAttributes.create(true, null, null, null, null, null); - List<String> keyOps = new ArrayList<String>(); - keyOps.add("encrypt"); - JsonWebKey keyInfo = JsonWebKey.create( - null, - "DjU54mYvHpICXHjc5-JiFqiH8NkUgOG8LL4kwt3DeBp9bP0-5hSJH8vmzwJkeGG9L79EWG4b_bfxgYdeNX7cFFagmW" + - "PRFrlxbd64VRYFawZHRJt-2cbzMVI6DL8EK4bu5Ux5qTiV44Jw19hoD9nDzCTfPzSTSGrKD3iLPdnREYaIGDVxcjB" + - "v3Tx6rrv3Z2lhHHKhEHb0RRjATcjAVKV9NZhMajJ4l9pqJ3A4IQrCBl95ux6Xm1oXP0i6aR78cjchsCpcMXdP3WMs" + - "vHgTlsZT0RZLFHrvkiNHlPiil4G2_eHkwvT__CrcbO6SmI_zCtMmypuHJqcr-Xb7GPJoa64WoQ", - "DB9nGuHplY_7Xv5a5UCs5YgxkWPtJFfbIZ1Zr-XHCCY09JIWReOGQG226OhjwixKtOK_OqmAKtMKM9OmKviJRHNbD" + - "hbTxumN3u7cL8dftjXpSryiEQlPmWyW94MneI2WNIrvh4wruQuDt8EztgOiDFxwcnUgey8iend7WmZnE7E", - "O-bSTUQ4N_UuQezgkF3TDrnBraO67leDGwRbfiE_U0ghQvqh5DA0QSPVzlWDZc9KUitvj8vxsR9o1PW9GS0an17GJ" + - "EYuetLnkShKK3NWOhBBX6d1yP9rVdH6JhgIJEy_g0Suz7TAFiFc8i7JF8u4QJ05C8bZAMhOLotqftQeVOM", - "AQAB", - null, - null, - keyOps, - null, - "RSA", - "33TqqLR3eeUmDtHS89qF3p4MP7Wfqt2Zjj3lZjLjjCGDvwr9cJNlNDiuKboODgUiT4ZdPWbOiMAfDcDzlOxA04DDnEF" + - "GAf-kDQiNSe2ZtqC7bnIc8-KSG_qOGQIVaay4Ucr6ovDkykO5Hxn7OU7sJp9TP9H0JH8zMQA6YzijYH9LsupTerrY" + - "3U6zyihVEDXXOv08vBHk50BMFJbE9iwFwnxCsU5-UZUZYw87Uu0n4LPFS9BT8tUIvAfnRXIEWCha3KbFWmdZQZlyr" + - "Fw0buUEf0YN3_Q0auBkdbDR_ES2PbgKTJdkjc_rEeM0TxvOUf7HuUNOhrtAVEN1D5uuxE1WSw", - "8K33pX90XX6PZGiv26wZm7tfvqlqWFT03nUMvOAytqdxhO2HysiPn4W58OaJd1tY4372Qpiv6enmUeI4MidCie-s-d0" + - "_B6A0xfhU5EeeaDN0xDOOl8yN-kaaVj9b4HDR3c91OAwKpDJQIeJVZtxoijxl-SRx3u7Vs_7meeSpOfE", - "7a5KnUs1pTo72A-JquJvIz4Eu794Yh3ftTk_Et-83aE_FVc6Nk-EhfnwYSNpVmM6UKdrAoy5gsCvZPxrq-eR9pEwU8M" + - "5UOlki03vWY_nqDBpJSIqwPvGHUB16zvggsPQUyQBfnN3N8XlDi12n88ltvWwEhn1LQOwMUALEfka9_s", - "InfGmkb2jNkPGuNiZ-mU0-ZrOgLza_fLL9ErZ35jUPhGFzdGxJNobklvsNoTd-E2GAU41YkJh24bncMLvJVYxHHA5iF" + - "7FBWx1SvpEyKVhhnIcuXGD7N5PbNZzEdmr9C6I7cPVkWO-sUV7zfFukexIcANmsd_oBBGKRoYzP5Tti4", - null, - null - ); - KeyBundle importedKey = vaultApi.importKey(vaultUri, IMPORT_KEY_NAME, false, keyAttr, keyInfo, null); - - String path = String.format("/keys/%s?%s", IMPORT_KEY_NAME, apiVersion); - assertSent(server, "PUT", path, stringFromResource("/vaultimportkeyrequestbody.json")); - - assertNotNull(importedKey); - assertNotNull(importedKey.attributes().created()); - } - - public void getKey() throws InterruptedException { - server.enqueue(jsonResponse("/vaultgetkey.json").setResponseCode(200)); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - KeyBundle key = vaultApi.getKey(vaultUri, KEY_NAME); - - String path = String.format("/keys/%s?%s", KEY_NAME, apiVersion); - assertSent(server, "GET", path); - - assertNotNull(key); - assertNotNull(key.attributes().created()); - } - - public void getKeyReturns404() throws InterruptedException { - server.enqueue(response404()); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - KeyBundle key = vaultApi.getKey(vaultUri, KEY_NAME); - - String path = String.format("/keys/%s?%s", KEY_NAME, apiVersion); - assertSent(server, "GET", path); - - assertNull(key); - } - - public void deleteKey() throws InterruptedException { - server.enqueue(jsonResponse("/vaultdeletekey.json").setResponseCode(200)); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - DeletedKeyBundle key = vaultApi.deleteKey(vaultUri, KEY_NAME); - - String path = String.format("/keys/%s?%s", KEY_NAME, apiVersion); - assertSent(server, "DELETE", path); - - assertNotNull(key); - assertNotNull(key.attributes().created()); - } - - public void deleteKeyReturns404() throws InterruptedException { - server.enqueue(response404()); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - DeletedKeyBundle key = vaultApi.deleteKey(vaultUri, KEY_NAME); - - String path = String.format("/keys/%s?%s", KEY_NAME, apiVersion); - assertSent(server, "DELETE", path); - - assertNull(key); - } - - public void getKeyVersions() throws InterruptedException { - server.enqueue(jsonResponse("/vaultgetkeyversions.json").setResponseCode(200)); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - List<Key> keys = vaultApi.getKeyVersions(vaultUri, KEY_NAME); - - String path = String.format("/keys/%s/versions?%s", KEY_NAME, apiVersion); - assertSent(server, "GET", path); - - assertNotNull(keys); - assertTrue(keys.size() > 0); - assertNotNull(keys.get(0).attributes().created()); - } - - public void getKeyVersionsReturns404() throws InterruptedException { - server.enqueue(response404()); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - List<Key> keys = vaultApi.getKeyVersions(vaultUri, KEY_NAME); - - String path = String.format("/keys/%s/versions?%s", KEY_NAME, apiVersion); - assertSent(server, "GET", path); - - assertTrue(keys.isEmpty()); - } - - public void updateKey() throws InterruptedException { - server.enqueue(jsonResponse("/vaultupdatekey.json").setResponseCode(200)); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - Map<String, String> tags = new HashMap<String, String>(); - tags.put("purpose", "testing"); - KeyBundle updatedKey = vaultApi.updateKey(vaultUri, KEY_NAME, null, null, null, tags); - - String path = String.format("/keys/%s?%s", KEY_NAME, apiVersion); - assertSent(server, "PATCH", path, stringFromResource("/vaultupdatekeyrequestbody.json")); - - assertNotNull(updatedKey); - assertNotNull(updatedKey.attributes().created()); - } - - public void updateKeyWithVersion() throws InterruptedException { - server.enqueue(jsonResponse("/vaultupdatekeywithversion.json").setResponseCode(200)); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - String keyVersion = "bd6566ec707e4ad89f4ab9577d9d0bef"; - Map<String, String> tags = new HashMap<String, String>(); - tags.put("purpose", "testing"); - KeyBundle updatedKey = vaultApi.updateKey(vaultUri, KEY_NAME, keyVersion, null, null, tags); - - String path = String.format("/keys/%s/%s?%s", KEY_NAME, keyVersion, apiVersion); - assertSent(server, "PATCH", path, stringFromResource("/vaultupdatekeyrequestbody.json")); - - assertNotNull(updatedKey); - assertNotNull(updatedKey.attributes().created()); - } - - public void backupKey() throws InterruptedException { - server.enqueue(jsonResponse("/vaultbackupkey.json").setResponseCode(200)); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - String keyBackup = vaultApi.backupKey(vaultUri, KEY_NAME); - - String path = String.format("/keys/%s/backup?%s", KEY_NAME, apiVersion); - assertSent(server, "POST", path); - - assertNotNull(keyBackup); - assertTrue(keyBackup.length() > 0); - } - - public void restoreKey() throws InterruptedException { - server.enqueue(jsonResponse("/vaultrestorekey.json").setResponseCode(200)); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - KeyBundle restoredKey = vaultApi.restoreKey(vaultUri, keyBackup); - - String path = String.format("/keys/restore?%s", apiVersion); - assertSent(server, "POST", path, stringFromResource("/vaultrestorekeyrequestbody.json")); - - assertNotNull(restoredKey); - assertNotNull(restoredKey.attributes().created()); - } - - public void listDeletedKeys() throws InterruptedException { - server.enqueue(jsonResponse("/vaultlistdeletedkeys.json").setResponseCode(200)); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - List<DeletedKeyBundle> keys = vaultApi.listDeletedKeys(vaultUri); - - String path = String.format("/deletedkeys?%s", apiVersion); - assertSent(server, "GET", path); - - assertNotNull(keys); - assertTrue(keys.size() > 0); - } - - public void listDeletedKeysReturns404() throws InterruptedException { - server.enqueue(response404()); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - List<DeletedKeyBundle> keys = vaultApi.listDeletedKeys(vaultUri); - - String path = String.format("/deletedkeys?%s", apiVersion); - assertSent(server, "GET", path); - - assertTrue(keys.isEmpty()); - } - - public void getDeletedKey() throws InterruptedException { - server.enqueue(jsonResponse("/vaultgetdeletedkey.json").setResponseCode(200)); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - DeletedKeyBundle key = vaultApi.getDeletedKey(vaultUri, RECOVERABLE_KEY_NAME); - - String path = String.format("/deletedkeys/%s?%s", RECOVERABLE_KEY_NAME, apiVersion); - assertSent(server, "GET", path); - - assertNotNull(key); - assertTrue(!key.deletedDate().isEmpty()); - } - - public void getDeletedKeyReturns404() throws InterruptedException { - server.enqueue(response404()); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - DeletedKeyBundle key = vaultApi.getDeletedKey(vaultUri, RECOVERABLE_KEY_NAME); - - String path = String.format("/deletedkeys/%s?%s", RECOVERABLE_KEY_NAME, apiVersion); - assertSent(server, "GET", path); - - assertNull(key); - } - - public void recoverDeletedKey() throws InterruptedException { - server.enqueue(jsonResponse("/vaultrecoverdeletedkey.json").setResponseCode(200)); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - KeyBundle key = vaultApi.recoverDeletedKey(vaultUri, RECOVERABLE_KEY_NAME); - - String path = String.format("/deletedkeys/%s/recover?%s", RECOVERABLE_KEY_NAME, apiVersion); - assertSent(server, "POST", path); - - assertNotNull(key); - assertNotNull(key.attributes().created()); - } - - public void purgeDeletedKey() throws InterruptedException { - server.enqueue(response200()); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - boolean status = vaultApi.purgeDeletedKey(vaultUri, RECOVERABLE_KEY_NAME); - - String path = String.format("/deletedkeys/%s?%s", RECOVERABLE_KEY_NAME, apiVersion); - assertSent(server, "DELETE", path); - - assertTrue(status); - } - - public void purgeDeletedKeyReturns404() throws InterruptedException { - server.enqueue(response404()); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - boolean status = vaultApi.purgeDeletedKey(vaultUri, RECOVERABLE_KEY_NAME); - - String path = String.format("/deletedkeys/%s?%s", RECOVERABLE_KEY_NAME, apiVersion); - assertSent(server, "DELETE", path); - - assertFalse(status); - } - - public void encrypt() throws InterruptedException { - server.enqueue(jsonResponse("/vaultkeyencrypt.json").setResponseCode(200)); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - KeyOperationResult encryptResult = vaultApi.encrypt(vaultUri, - KEY_NAME, - null, - cryptoAlgorithm, - cryptoText - ); - - String path = String.format("/keys/%s/encrypt?%s", KEY_NAME, apiVersion); - assertSent(server, "POST", path, stringFromResource("/vaultkeyencryptrequestbody.json")); - - assertNotNull(encryptResult); - assertTrue(!encryptResult.value().isEmpty()); - } - - public void decrypt() throws InterruptedException { - server.enqueue(jsonResponse("/vaultkeydecrypt.json").setResponseCode(200)); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - KeyOperationResult decryptResult = vaultApi.decrypt(vaultUri, - KEY_NAME, - null, - cryptoAlgorithm, - keyDecryptData - ); - - String path = String.format("/keys/%s/decrypt?%s", KEY_NAME, apiVersion); - assertSent(server, "POST", path, stringFromResource("/vaultkeydecryptrequestbody.json")); - - assertNotNull(decryptResult); - assertTrue(!decryptResult.value().isEmpty()); - } - - public void sign() throws InterruptedException { - server.enqueue(jsonResponse("/vaultkeysign.json").setResponseCode(200)); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - KeyOperationResult signResult = vaultApi.sign(vaultUri, - KEY_NAME, - null, - signatureAlgorithm, - hashToSign - ); - - String path = String.format("/keys/%s/sign?%s", KEY_NAME, apiVersion); - assertSent(server, "POST", path, stringFromResource("/vaultkeysignrequestbody.json")); - - assertNotNull(signResult); - assertTrue(!signResult.value().isEmpty()); - } - - public void verify() throws InterruptedException { - server.enqueue(jsonResponse("/vaultkeyverify.json").setResponseCode(200)); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - boolean verifyResult = vaultApi.verify(vaultUri, - KEY_NAME, - null, - signatureAlgorithm, - hashToSign, - keySignedData - ); - - String path = String.format("/keys/%s/verify?%s", KEY_NAME, apiVersion); - assertSent(server, "POST", path, stringFromResource("/vaultkeyverifyrequestbody.json")); - - assertTrue(verifyResult); - } - - public void wrap() throws InterruptedException { - server.enqueue(jsonResponse("/vaultkeywrap.json").setResponseCode(200)); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - KeyOperationResult wrapResult = vaultApi.wrap(vaultUri, - KEY_NAME, - null, - cryptoAlgorithm, - contentEncryptionKey - ); - - String path = String.format("/keys/%s/wrapkey?%s", KEY_NAME, apiVersion); - assertSent(server, "POST", path, stringFromResource("/vaultkeywraprequestbody.json")); - - assertNotNull(wrapResult); - assertTrue(!wrapResult.value().isEmpty()); - } - - public void unwrap() throws InterruptedException { - server.enqueue(jsonResponse("/vaultkeyunwrap.json").setResponseCode(200)); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - KeyOperationResult unwrapResult = vaultApi.unwrap(vaultUri, - KEY_NAME, - null, - cryptoAlgorithm, - keyWrappedData - ); - - String path = String.format("/keys/%s/unwrapkey?%s", KEY_NAME, apiVersion); - assertSent(server, "POST", path, stringFromResource("/vaultkeyunwraprequestbody.json")); - - assertNotNull(unwrapResult); - assertTrue(!unwrapResult.value().isEmpty()); - } - - // Secret mock tests - public void listSecrets() throws InterruptedException { - server.enqueue(jsonResponse("/vaultlistsecrets.json").setResponseCode(200)); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - List<Secret> secrets = vaultApi.listSecrets(vaultUri); - - String path = String.format("/secrets?%s", apiVersion); - assertSent(server, "GET", path); - - assertNotNull(secrets); - assertTrue(secrets.size() > 0); - } - - public void listSecretsReturns404() throws InterruptedException { - server.enqueue(response404()); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - List<Secret> secrets = vaultApi.listSecrets(vaultUri); - - String path = String.format("/secrets?%s", apiVersion); - assertSent(server, "GET", path); - - assertTrue(secrets.isEmpty()); - } - - public void setSecret() throws InterruptedException { - server.enqueue(jsonResponse("/vaultsetsecret.json").setResponseCode(200)); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - SecretAttributes attributes = SecretAttributes.create(true, null, null, null, null, null); - SecretBundle secretBundle = vaultApi.setSecret(vaultUri, - SECRET_NAME, - attributes, - "testSecretKey", - null, - sampleSecret - ); - - String path = String.format("/secrets/%s?%s", SECRET_NAME, apiVersion); - assertSent(server, "PUT", path, stringFromResource("/vaultsetsecretrequestbody.json")); - - assertNotNull(secretBundle); - assertTrue(!secretBundle.id().isEmpty()); - } - - public void getSecret() throws InterruptedException { - server.enqueue(jsonResponse("/vaultgetsecret.json").setResponseCode(200)); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - SecretBundle secret = vaultApi.getSecret(vaultUri, SECRET_NAME, null); - - String path = String.format("/secrets/%s?%s", SECRET_NAME, apiVersion); - assertSent(server, "GET", path); - - assertNotNull(secret); - assertNotNull(secret.attributes().created()); - } - - public void getSecretReturns404() throws InterruptedException { - server.enqueue(response404()); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - SecretBundle secret = vaultApi.getSecret(vaultUri, SECRET_NAME, null); - - String path = String.format("/secrets/%s?%s", SECRET_NAME, apiVersion); - assertSent(server, "GET", path); - - assertNull(secret); - } - - public void deleteSecret() throws InterruptedException { - server.enqueue(jsonResponse("/vaultdeletesecret.json").setResponseCode(200)); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - DeletedSecretBundle secret = vaultApi.deleteSecret(vaultUri, SECRET_NAME); - - String path = String.format("/secrets/%s?%s", SECRET_NAME, apiVersion); - assertSent(server, "DELETE", path); - - assertNotNull(secret); - assertNotNull(secret.attributes().created()); - } - - public void deleteSecretReturns404() throws InterruptedException { - server.enqueue(response404()); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - DeletedSecretBundle secret = vaultApi.deleteSecret(vaultUri, SECRET_NAME); - - String path = String.format("/secrets/%s?%s", SECRET_NAME, apiVersion); - assertSent(server, "DELETE", path); - - assertNull(secret); - } - - public void getSecretVersions() throws InterruptedException { - server.enqueue(jsonResponse("/vaultgetsecretversions.json").setResponseCode(200)); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - List<Secret> secrets = vaultApi.getSecretVersions(vaultUri, SECRET_NAME); - - String path = String.format("/secrets/%s/versions?%s", SECRET_NAME, apiVersion); - assertSent(server, "GET", path); - - assertNotNull(secrets); - assertTrue(secrets.size() > 0); - assertNotNull(secrets.get(0).attributes().created()); - } - - public void getSecretVersionsReturns404() throws InterruptedException { - server.enqueue(response404()); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - List<Secret> secrets = vaultApi.getSecretVersions(vaultUri, SECRET_NAME); - - String path = String.format("/secrets/%s/versions?%s", SECRET_NAME, apiVersion); - assertSent(server, "GET", path); - - assertTrue(secrets.isEmpty()); - } - - public void updateSecret() throws InterruptedException { - server.enqueue(jsonResponse("/vaultupdatekey.json").setResponseCode(200)); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - Map<String, String> tags = new HashMap<String, String>(); - tags.put("purpose", "testing"); - SecretBundle updatedSecret = vaultApi.updateSecret(vaultUri, SECRET_NAME, null, null, null, tags); - - String path = String.format("/secrets/%s?%s", SECRET_NAME, apiVersion); - assertSent(server, "PATCH", path, stringFromResource("/vaultupdatesecretrequestbody.json")); - - assertNotNull(updatedSecret); - assertNotNull(updatedSecret.attributes().created()); - } - - public void updateSecretWithVersion() throws InterruptedException { - server.enqueue(jsonResponse("/vaultupdatesecretwithversion.json").setResponseCode(200)); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - String secretVersion = "b936ececbc674f3bb1367ae50d28ada0"; - Map<String, String> tags = new HashMap<String, String>(); - tags.put("purpose", "testing again"); - SecretBundle updatedSecret = vaultApi.updateSecret(vaultUri, SECRET_NAME, secretVersion, null, null, tags); - - String path = String.format("/secrets/%s/%s?%s", SECRET_NAME, secretVersion, apiVersion); - assertSent(server, "PATCH", path, stringFromResource("/vaultupdatesecretwithversionrequestbody.json")); - - assertNotNull(updatedSecret); - assertNotNull(updatedSecret.attributes().created()); - } - - public void backupSecret() throws InterruptedException { - server.enqueue(jsonResponse("/vaultbackupsecret.json").setResponseCode(200)); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - String secretBackup = vaultApi.backupSecret(vaultUri, SECRET_NAME); - - String path = String.format("/secrets/%s/backup?%s", SECRET_NAME, apiVersion); - assertSent(server, "POST", path); - - assertNotNull(secretBackup); - assertTrue(secretBackup.length() > 0); - } - - public void restoreSecret() throws InterruptedException { - server.enqueue(jsonResponse("/vaultrestoresecret.json").setResponseCode(200)); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - SecretBundle restoredSecret = vaultApi.restoreSecret(vaultUri, secretBackup); - - String path = String.format("/secrets/restore?%s", apiVersion); - assertSent(server, "POST", path, stringFromResource("/vaultrestoresecretrequestbody.json")); - - assertNotNull(restoredSecret); - assertNotNull(restoredSecret.attributes().created()); - } - - public void listDeletedSecrets() throws InterruptedException { - server.enqueue(jsonResponse("/vaultlistdeletedsecrets.json").setResponseCode(200)); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - List<DeletedSecretBundle> secrets = vaultApi.listDeletedSecrets(vaultUri); - - String path = String.format("/deletedsecrets?%s", apiVersion); - assertSent(server, "GET", path); - - assertNotNull(secrets); - assertTrue(secrets.size() > 0); - } - - public void listDeletedSecretsReturns404() throws InterruptedException { - server.enqueue(response404()); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - List<DeletedSecretBundle> secrets = vaultApi.listDeletedSecrets(vaultUri); - - String path = String.format("/deletedsecrets?%s", apiVersion); - assertSent(server, "GET", path); - - assertTrue(secrets.isEmpty()); - } - - public void getDeletedSecret() throws InterruptedException { - server.enqueue(jsonResponse("/vaultgetdeletedsecret.json").setResponseCode(200)); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - DeletedSecretBundle secret = vaultApi.getDeletedSecret(vaultUri, RECOVERABLE_SECRET_NAME); - - String path = String.format("/deletedsecrets/%s?%s", RECOVERABLE_SECRET_NAME, apiVersion); - assertSent(server, "GET", path); - - assertNotNull(secret); - assertTrue(!secret.deletedDate().isEmpty()); - } - - public void getDeletedSecretReturns404() throws InterruptedException { - server.enqueue(response404()); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - DeletedSecretBundle secret = vaultApi.getDeletedSecret(vaultUri, RECOVERABLE_SECRET_NAME); - - String path = String.format("/deletedsecrets/%s?%s", RECOVERABLE_SECRET_NAME, apiVersion); - assertSent(server, "GET", path); - - assertNull(secret); - } - - public void recoverDeletedSecret() throws InterruptedException { - server.enqueue(jsonResponse("/vaultrecoverdeletedsecret.json").setResponseCode(200)); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - SecretBundle secret = vaultApi.recoverDeletedSecret(vaultUri, RECOVERABLE_SECRET_NAME); - - String path = String.format("/deletedsecrets/%s/recover?%s", RECOVERABLE_SECRET_NAME, apiVersion); - assertSent(server, "POST", path); - - assertNotNull(secret); - assertNotNull(secret.attributes().created()); - } - - public void purgeDeletedSecret() throws InterruptedException { - server.enqueue(response200()); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - boolean status = vaultApi.purgeDeletedSecret(vaultUri, RECOVERABLE_SECRET_NAME); - - String path = String.format("/deletedsecrets/%s?%s", RECOVERABLE_SECRET_NAME, apiVersion); - assertSent(server, "DELETE", path); - - assertTrue(status); - } - - public void purgeDeletedSecretReturns404() throws InterruptedException { - server.enqueue(response404()); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - boolean status = vaultApi.purgeDeletedSecret(vaultUri, RECOVERABLE_SECRET_NAME); - - String path = String.format("/deletedsecrets/%s?%s", RECOVERABLE_SECRET_NAME, apiVersion); - assertSent(server, "DELETE", path); - - assertFalse(status); - } - - public void createCertificate() throws InterruptedException { - server.enqueue(jsonResponse("/vaultcreatecertificate.json").setResponseCode(200)); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - CertificatePolicy policy = CertificatePolicy.create(null, - CERTIFICATE_NAME, - IssuerParameters.create(null, "Self"), - KeyProperties.create(false, 2048, "RSA", false), - null, - null, - X509CertificateProperties.create(null, null, null, "CN=mycertificate.foobar.com", 12) - ); - CertificateOperation certOp = vaultApi.createCertificate(vaultUri, - CERTIFICATE_NAME, - null, - policy, - null - ); - - String path = String.format("/certificates/%s/create?%s", CERTIFICATE_NAME, apiVersion); - assertSent(server, "POST", path, stringFromResource("/vaultcreatecertificaterequestbody.json")); - - assertNotNull(certOp); - assertTrue(!certOp.id().isEmpty()); - } - - public void getCertificate() throws InterruptedException { - server.enqueue(jsonResponse("/vaultgetcertificate.json").setResponseCode(200)); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - CertificateBundle cert = vaultApi.getCertificate(vaultUri, CERTIFICATE_NAME, null); - - String path = String.format("/certificates/%s?%s", CERTIFICATE_NAME, apiVersion); - assertSent(server, "GET", path); - - assertNotNull(cert); - assertTrue(!cert.id().isEmpty()); - } - - public void getCertificateReturns404() throws InterruptedException { - server.enqueue(response404()); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - CertificateBundle cert = vaultApi.getCertificate(vaultUri, CERTIFICATE_NAME, null); - - String path = String.format("/certificates/%s?%s", CERTIFICATE_NAME, apiVersion); - assertSent(server, "GET", path); - - assertNull(cert); - } - - public void deleteCertificate() throws InterruptedException { - server.enqueue(jsonResponse("/vaultdeletecertificate.json").setResponseCode(200)); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - DeletedCertificateBundle cert = vaultApi.deleteCertificate(vaultUri, CERTIFICATE_NAME); - - String path = String.format("/certificates/%s?%s", CERTIFICATE_NAME, apiVersion); - assertSent(server, "DELETE", path); - - assertNotNull(cert); - assertTrue(!cert.id().isEmpty()); - } - - public void deleteCertificateReturns404() throws InterruptedException { - server.enqueue(response404()); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - DeletedCertificateBundle cert = vaultApi.deleteCertificate(vaultUri, CERTIFICATE_NAME); - - String path = String.format("/certificates/%s?%s", CERTIFICATE_NAME, apiVersion); - assertSent(server, "DELETE", path); - - assertNull(cert); - } - - public void listCertificates() throws InterruptedException { - server.enqueue(jsonResponse("/vaultlistcertificates.json").setResponseCode(200)); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - List<Certificate> certs = vaultApi.getCertificates(vaultUri); - - String path = String.format("/certificates?%s", apiVersion); - assertSent(server, "GET", path); - - assertNotNull(certs); - assertTrue(certs.size() > 0); - } - - public void listCertificatesReturns404() throws InterruptedException { - server.enqueue(response404()); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - List<Certificate> certs = vaultApi.getCertificates(vaultUri); - - String path = String.format("/certificates?%s", apiVersion); - assertSent(server, "GET", path); - - assertTrue(certs.isEmpty()); - } - - public void listDeletedCertificates() throws InterruptedException { - server.enqueue(jsonResponse("/vaultlistdeletedcertificates.json").setResponseCode(200)); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - List<DeletedCertificate> certs = vaultApi.getDeletedCertificates(vaultUri); - - String path = String.format("/deletedcertificates?%s", apiVersion); - assertSent(server, "GET", path); - - assertNotNull(certs); - assertTrue(certs.size() > 0); - } - - public void listDeletedCertificatesReturns404() throws InterruptedException { - server.enqueue(response404()); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - List<DeletedCertificate> certs = vaultApi.getDeletedCertificates(vaultUri); - - String path = String.format("/deletedcertificates?%s", apiVersion); - assertSent(server, "GET", path); - - assertTrue(certs.isEmpty()); - } - - public void getDeletedCertificate() throws InterruptedException { - server.enqueue(jsonResponse("/vaultgetdeletedcertificate.json").setResponseCode(200)); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - DeletedCertificateBundle cert = vaultApi.getDeletedCertificate(vaultUri, RECOVERABLE_CERTIFICATE_NAME); - - String path = String.format("/deletedcertificates/%s?%s", RECOVERABLE_CERTIFICATE_NAME, apiVersion); - assertSent(server, "GET", path); - - assertNotNull(cert); - assertTrue(!cert.id().isEmpty()); - } - - public void getDeletedCertificateReturns404() throws InterruptedException { - server.enqueue(response404()); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - DeletedCertificateBundle cert = vaultApi.getDeletedCertificate(vaultUri, RECOVERABLE_CERTIFICATE_NAME); - - String path = String.format("/deletedcertificates/%s?%s", RECOVERABLE_CERTIFICATE_NAME, apiVersion); - assertSent(server, "GET", path); - - assertNull(cert); - } - - public void recoverDeletedCertificate() throws InterruptedException { - server.enqueue(jsonResponse("/vaultrecoverdeletedcertificate.json").setResponseCode(200)); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - CertificateBundle cert = vaultApi.recoverDeletedCertificate(vaultUri, RECOVERABLE_CERTIFICATE_NAME); - - String path = String.format("/deletedcertificates/%s/recover?%s", RECOVERABLE_CERTIFICATE_NAME, apiVersion); - assertSent(server, "POST", path); - - assertNotNull(cert); - assertTrue(!cert.id().isEmpty()); - } - - public void purgeDeletedCertificate() throws InterruptedException { - server.enqueue(response200()); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - boolean status = vaultApi.purgeDeletedCertificate(vaultUri, RECOVERABLE_CERTIFICATE_NAME); - - String path = String.format("/deletedcertificates/%s?%s", RECOVERABLE_CERTIFICATE_NAME, apiVersion); - assertSent(server, "DELETE", path); - - assertTrue(status); - } - - public void purgeDeletedCertificateReturns404() throws InterruptedException { - server.enqueue(response404()); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - boolean status = vaultApi.purgeDeletedCertificate(vaultUri, RECOVERABLE_CERTIFICATE_NAME); - - String path = String.format("/deletedcertificates/%s?%s", RECOVERABLE_CERTIFICATE_NAME, apiVersion); - assertSent(server, "DELETE", path); - - assertFalse(status); - } - - public void listCertificateVersions() throws InterruptedException { - server.enqueue(jsonResponse("/vaultlistcertificateversions.json").setResponseCode(200)); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - List<Certificate> certs = vaultApi.getCertificateVersions(vaultUri, CERTIFICATE_NAME); - - String path = String.format("/certificates/%s/versions?%s", CERTIFICATE_NAME, apiVersion); - assertSent(server, "GET", path); - - assertNotNull(certs); - assertTrue(certs.size() > 0); - } - - public void listCertificateVersionsReturns404() throws InterruptedException { - server.enqueue(response404()); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - List<Certificate> certs = vaultApi.getCertificateVersions(vaultUri, CERTIFICATE_NAME); - - String path = String.format("/certificates/%s/versions?%s", CERTIFICATE_NAME, apiVersion); - assertSent(server, "GET", path); - - assertTrue(certs.isEmpty()); - } - - public void updateCertificate() throws InterruptedException { - server.enqueue(jsonResponse("/vaultupdatecertificate.json").setResponseCode(200)); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - Map<String, String> tags = new HashMap<String, String>(); - tags.put("selfsigned", "true"); - CertificatePolicy policy = CertificatePolicy.create(null, - CERTIFICATE_NAME, - IssuerParameters.create(null, "Self"), - KeyProperties.create(false, 2048, "RSA", false), - null, - null, - X509CertificateProperties.create(null, null, null, "CN=mycertificate.foobar.com", 12) - ); - CertificateBundle certBundle = vaultApi.updateCertificate( - vaultUri, - CERTIFICATE_NAME, - null, - null, - policy, - tags - ); - - String path = String.format("/certificates/%s?%s", CERTIFICATE_NAME, apiVersion); - assertSent(server, "PATCH", path, stringFromResource("/vaultupdatecertificaterequestbody.json")); - - assertNotNull(certBundle); - assertTrue(!certBundle.id().isEmpty()); - } - - public void updateCertificateVersion() { - // Update the specific version of a certificate - - /* - * XXX -- update using version complains about needing policy (required input), yet - * passing in the same policy results in the error: - * - * Policy cannot be updated with a specific version of a certificate - * - * Will uncomment/fix once this issue is resolved. - * - */ - throw new SkipException("azure bug - update using version complains about needing policy"); - } - - public void importCertificate() throws InterruptedException { - server.enqueue(jsonResponse("/vaultimportcertificate.json").setResponseCode(200)); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - String certPem = IMPORTABLE_CERTIFICATE_PEM; - CertificateBundle certBundle = null; - try { - certBundle = vaultApi.importCertificate( - vaultUri, - RECOVERABLE_CERTIFICATE_NAME, - null, - CertificatePolicy.create( - null, - null, - null, - null, - null, - SecretProperties.create("application/x-pem-file"), - null - ), - null, - null, - certPem); - } catch (ResourceNotFoundException rnf) { - assertNotNull(rnf); - } - - String path = String.format("/certificates/%s/import?%s", RECOVERABLE_CERTIFICATE_NAME, apiVersion); - assertSent(server, "POST", path, stringFromResource("/vaultimportcertificaterequestbody.json")); - - assertNotNull(certBundle); - assertTrue(!certBundle.id().isEmpty()); - } - - public void mergeCertificate() throws InterruptedException { - // Merging a certificate is for when a CSR is signed by an external CA - server.enqueue(jsonResponse("/vaultmergecertificate.json").setResponseCode(200)); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - CertificateAttributes attributes = CertificateAttributes.create(null, true, null, null, null, null); - CertificateBundle certBundle = vaultApi.mergeCertificate( - vaultUri, - CERTIFICATE_NAME, - attributes, - null, - Arrays.asList(mergeX5C) - ); - - String path = String.format("/certificates/%s/pending/merge?%s", CERTIFICATE_NAME, apiVersion); - assertSent(server, "POST", path, stringFromResource("/vaultmergecertificaterequestbody.json")); - - assertNotNull(certBundle); - assertTrue(!certBundle.attributes().created().toString().isEmpty()); - } - - public void getCertificateOperation() throws InterruptedException { - server.enqueue(jsonResponse("/vaultgetcertificateoperation.json").setResponseCode(200)); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - CertificateOperation certOp = vaultApi.getCertificateOperation(vaultUri, CERTIFICATE_NAME); - - String path = String.format("/certificates/%s/pending?%s", CERTIFICATE_NAME, apiVersion); - assertSent(server, "GET", path); - - assertNotNull(certOp); - assertTrue(!certOp.id().isEmpty()); - } - - public void getCertificateOperationReturns404() throws InterruptedException { - server.enqueue(response404()); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - CertificateOperation certOp = vaultApi.getCertificateOperation(vaultUri, CERTIFICATE_NAME); - - String path = String.format("/certificates/%s/pending?%s", CERTIFICATE_NAME, apiVersion); - assertSent(server, "GET", path); - - assertNull(certOp); - } - - public void updateCertificateOperation() throws InterruptedException { - server.enqueue(jsonResponse("/vaultupdatecertificateoperation.json").setResponseCode(200)); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - CertificateOperation certOp = vaultApi.updateCertificateOperation(vaultUri, CERTIFICATE_NAME, true); - - String path = String.format("/certificates/%s/pending?%s", CERTIFICATE_NAME, apiVersion); - assertSent(server, "PATCH", path, stringFromResource("/vaultupdatecertificateoperationrequestbody.json")); - - assertNotNull(certOp); - assertTrue(!certOp.id().isEmpty()); - } - - public void deleteCertificateOperation() throws InterruptedException { - server.enqueue(jsonResponse("/vaultdeletecertificateoperation.json").setResponseCode(200)); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - CertificateOperation certOp = vaultApi.deleteCertificateOperation(vaultUri, CERTIFICATE_NAME); - - String path = String.format("/certificates/%s/pending?%s", CERTIFICATE_NAME, apiVersion); - assertSent(server, "DELETE", path); - - assertNotNull(certOp); - assertTrue(!certOp.id().isEmpty()); - } - - public void deleteCertificateOperationReturns404() throws InterruptedException { - server.enqueue(response404()); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - CertificateOperation certOp = vaultApi.deleteCertificateOperation(vaultUri, CERTIFICATE_NAME); - - String path = String.format("/certificates/%s/pending?%s", CERTIFICATE_NAME, apiVersion); - assertSent(server, "DELETE", path); - - assertNull(certOp); - } - - public void setCertificateIssuer() throws InterruptedException { - server.enqueue(jsonResponse("/vaultsetcertificateissuer.json").setResponseCode(200)); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - AdministrationDetails adminDetail = AdministrationDetails.create( - "[email protected]", - "Admin", - "Guy", - "867-5309" - ); - List<AdministrationDetails> adminDetails = new ArrayList<AdministrationDetails>(); - adminDetails.add(adminDetail); - OrganizationDetails orgDetails = OrganizationDetails.create( - adminDetails, - null - ); - IssuerBundle issuer = null; - try { - issuer = vaultApi.setCertificateIssuer( - vaultUri, - CERTIFICATE_ISSUER_NAME, - null, - IssuerCredentials.create("imauser", "This1sMyPa55wurD!"), - orgDetails, - "GlobalSign" - ); - } catch (ResourceNotFoundException rnf) { - assertNotNull(rnf); - } - - String path = String.format("/certificates/issuers/%s?%s", CERTIFICATE_ISSUER_NAME, apiVersion); - assertSent(server, "PUT", path, stringFromResource("/vaultsetcertificateissuerrequestbody.json")); - - assertNotNull(issuer); - assertTrue(!issuer.id().isEmpty()); - } - - public void listCertificateIssuers() throws InterruptedException { - server.enqueue(jsonResponse("/vaultlistcertificateissuers.json").setResponseCode(200)); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - List<CertificateIssuer> issuers = vaultApi.getCertificateIssuers(vaultUri); - - String path = String.format("/certificates/issuers?%s", apiVersion); - assertSent(server, "GET", path); - - assertNotNull(issuers); - assertTrue(issuers.size() > 0); - } - - public void listCertificateIssuersReturns404() throws InterruptedException { - server.enqueue(response404()); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - List<CertificateIssuer> issuers = vaultApi.getCertificateIssuers(vaultUri); - - String path = String.format("/certificates/issuers?%s", apiVersion); - assertSent(server, "GET", path); - - assertTrue(issuers.isEmpty()); - } - - public void getCertificateIssuer() throws InterruptedException { - server.enqueue(jsonResponse("/vaultgetcertificateissuer.json").setResponseCode(200)); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - IssuerBundle issuer = vaultApi.getCertificateIssuer(vaultUri, CERTIFICATE_ISSUER_NAME); - - String path = String.format("/certificates/issuers/%s?%s", CERTIFICATE_ISSUER_NAME, apiVersion); - assertSent(server, "GET", path); - - assertNotNull(issuer); - assertTrue(!issuer.id().isEmpty()); - } - - public void getCertificateIssuerReturns404() throws InterruptedException { - server.enqueue(response404()); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - IssuerBundle issuer = vaultApi.getCertificateIssuer(vaultUri, CERTIFICATE_ISSUER_NAME); - - String path = String.format("/certificates/issuers/%s?%s", CERTIFICATE_ISSUER_NAME, apiVersion); - assertSent(server, "GET", path); - - assertNull(issuer); - } - - public void updateCertificateIssuer() throws InterruptedException { - server.enqueue(jsonResponse("/vaultupdatecertificateissuer.json").setResponseCode(200)); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - AdministrationDetails adminDetail = AdministrationDetails.create( - "[email protected]", - "Admin", - "Guy", - "867-5309" - ); - List<AdministrationDetails> adminDetails = new ArrayList<AdministrationDetails>(); - adminDetails.add(adminDetail); - OrganizationDetails orgDetails = OrganizationDetails.create( - adminDetails, - null - ); - IssuerBundle issuer = vaultApi.updateCertificateIssuer( - vaultUri, - "globalsign01", - null, - IssuerCredentials.create("imauser", "CanHa5P455wuRd!"), - orgDetails, - "GlobalSign" - ); - - String path = String.format("/certificates/issuers/%s?%s", CERTIFICATE_ISSUER_NAME, apiVersion); - assertSent(server, "PATCH", path, stringFromResource("/vaultupdatecertificateissuerrequestbody.json")); - - assertNotNull(issuer); - assertTrue(!issuer.id().isEmpty()); - } - - public void deleteCertificateIssuer() throws InterruptedException { - server.enqueue(jsonResponse("/vaultdeletecertificateissuer.json").setResponseCode(200)); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - IssuerBundle issuer = vaultApi.deleteCertificateIssuer(vaultUri, CERTIFICATE_ISSUER_NAME); - - String path = String.format("/certificates/issuers/%s?%s", CERTIFICATE_ISSUER_NAME, apiVersion); - assertSent(server, "DELETE", path); - - assertNotNull(issuer); - assertTrue(!issuer.id().isEmpty()); - } - - public void deleteCertificateIssuerReturns404() throws InterruptedException { - server.enqueue(response404()); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - IssuerBundle issuer = vaultApi.deleteCertificateIssuer(vaultUri, CERTIFICATE_ISSUER_NAME); - - String path = String.format("/certificates/issuers/%s?%s", CERTIFICATE_ISSUER_NAME, apiVersion); - assertSent(server, "DELETE", path); - - assertNull(issuer); - } - - public void getCertificateContacts() throws InterruptedException { - server.enqueue(jsonResponse("/vaultgetcertificatecontacts.json").setResponseCode(200)); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - Contacts contacts = vaultApi.getCertificateContacts(vaultUri); - - String path = String.format("/certificates/contacts?%s", apiVersion); - assertSent(server, "GET", path); - - assertNotNull(contacts); - assertTrue(!contacts.id().isEmpty()); - assertTrue(contacts.contacts().size() > 0); - } - - public void getCertificateContactsReturns404() throws InterruptedException { - server.enqueue(response404()); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - IssuerBundle issuer = null; - try { - issuer = vaultApi.getCertificateIssuer(vaultUri, CERTIFICATE_ISSUER_NAME); - } catch (ResourceNotFoundException rnf) { - assertNotNull(rnf); - } - - String path = String.format("/certificates/issuers/%s?%s", CERTIFICATE_ISSUER_NAME, apiVersion); - assertSent(server, "GET", path); - - assertNull(issuer); - } - - public void setCertificateContacts() throws InterruptedException { - server.enqueue(jsonResponse("/vaultsetcertificatecontacts.json").setResponseCode(200)); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - List<Contact> contactsIn = new ArrayList<Contact>(); - contactsIn.add(Contact.create("[email protected]", "Foo bar", "867-5309")); - Contacts contacts = vaultApi.setCertificateContacts(vaultUri, contactsIn); - - String path = String.format("/certificates/contacts?%s", apiVersion); - assertSent(server, "PUT", path, stringFromResource("/vaultsetcertificatecontactsrequestbody.json")); - - assertNotNull(contacts); - assertTrue(!contacts.id().isEmpty()); - assertTrue(contacts.contacts().size() > 0); - } - - public void deleteCertificateContacts() throws InterruptedException { - server.enqueue(jsonResponse("/vaultdeletecertificatecontacts.json").setResponseCode(200)); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - Contacts contacts = vaultApi.deleteCertificateContacts(vaultUri); - - String path = String.format("/certificates/contacts?%s", apiVersion); - assertSent(server, "DELETE", path); - - assertNotNull(contacts); - assertTrue(!contacts.id().isEmpty()); - assertTrue(contacts.contacts().size() > 0); - } - - public void deleteCertificateContactsReturns404() throws InterruptedException { - server.enqueue(response404()); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - Contacts contacts = vaultApi.deleteCertificateContacts(vaultUri); - - String path = String.format("/certificates/contacts?%s", apiVersion); - assertSent(server, "DELETE", path); - - assertNull(contacts); - } - - public void getCertificatePolicy() throws InterruptedException { - server.enqueue(jsonResponse("/vaultgetcertificatepolicy.json").setResponseCode(200)); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - CertificatePolicy policy = vaultApi.getCertificatePolicy(vaultUri, CERTIFICATE_NAME); - - String path = String.format("/certificates/%s/policy?%s", CERTIFICATE_NAME, apiVersion); - assertSent(server, "GET", path); - - assertNotNull(policy); - assertTrue(!policy.id().isEmpty()); - } - - public void getCertificatePolicyReturns404() throws InterruptedException { - server.enqueue(response404()); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - CertificatePolicy policy = vaultApi.getCertificatePolicy(vaultUri, CERTIFICATE_NAME); - - String path = String.format("/certificates/%s/policy?%s", CERTIFICATE_NAME, apiVersion); - assertSent(server, "GET", path); - - assertNull(policy); - } - - public void updateCertificatePolicy() throws InterruptedException { - server.enqueue(jsonResponse("/vaultupdatecertificatepolicy.json").setResponseCode(200)); - final VaultApi vaultApi = api.getVaultApi(resourceGroup); - CertificatePolicy policy = vaultApi.updateCertificatePolicy( - vaultUri, - CERTIFICATE_NAME, - null, - null, - KeyProperties.create(true, 3072, "RSA", false), - null, - null, - null - ); - - String path = String.format("/certificates/%s/policy?%s", CERTIFICATE_NAME, apiVersion); - assertSent(server, "PATCH", path, stringFromResource("/vaultupdatecertificatepolicyrequestbody.json")); - - assertNotNull(policy); - assertTrue(!policy.id().isEmpty()); - } -}
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/ac03bac4/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/VirtualMachineApiLiveTest.java ---------------------------------------------------------------------- diff --git a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/VirtualMachineApiLiveTest.java b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/VirtualMachineApiLiveTest.java deleted file mode 100644 index 34b289e..0000000 --- a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/VirtualMachineApiLiveTest.java +++ /dev/null @@ -1,349 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.jclouds.azurecompute.arm.features; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.jclouds.util.Predicates2.retry; -import static org.testng.Assert.assertEquals; -import static org.testng.Assert.assertNotNull; -import static org.testng.Assert.assertTrue; - -import java.net.URI; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import java.util.Map; - -import org.jclouds.azurecompute.arm.domain.DataDisk; -import org.jclouds.azurecompute.arm.domain.HardwareProfile; -import org.jclouds.azurecompute.arm.domain.IdReference; -import org.jclouds.azurecompute.arm.domain.ImageReference; -import org.jclouds.azurecompute.arm.domain.IpConfiguration; -import org.jclouds.azurecompute.arm.domain.IpConfigurationProperties; -import org.jclouds.azurecompute.arm.domain.ManagedDiskParameters; -import org.jclouds.azurecompute.arm.domain.NetworkInterfaceCard; -import org.jclouds.azurecompute.arm.domain.NetworkInterfaceCardProperties; -import org.jclouds.azurecompute.arm.domain.NetworkProfile; -import org.jclouds.azurecompute.arm.domain.OSDisk; -import org.jclouds.azurecompute.arm.domain.OSProfile; -import org.jclouds.azurecompute.arm.domain.ResourceDefinition; -import org.jclouds.azurecompute.arm.domain.Secrets; -import org.jclouds.azurecompute.arm.domain.StorageAccountType; -import org.jclouds.azurecompute.arm.domain.StorageProfile; -import org.jclouds.azurecompute.arm.domain.StorageService; -import org.jclouds.azurecompute.arm.domain.Subnet; -import org.jclouds.azurecompute.arm.domain.VHD; -import org.jclouds.azurecompute.arm.domain.VaultCertificate; -import org.jclouds.azurecompute.arm.domain.VirtualMachine; -import org.jclouds.azurecompute.arm.domain.VirtualMachineInstance; -import org.jclouds.azurecompute.arm.domain.VirtualMachineInstance.PowerState; -import org.jclouds.azurecompute.arm.domain.VirtualMachineProperties; -import org.jclouds.azurecompute.arm.domain.NetworkProfile.NetworkInterface; -import org.jclouds.azurecompute.arm.domain.NetworkProfile.NetworkInterface.NetworkInterfaceProperties; -import org.jclouds.azurecompute.arm.domain.OSProfile.WindowsConfiguration.WinRM.Protocol; -import org.jclouds.azurecompute.arm.domain.OSProfile.WindowsConfiguration.WinRM.ProtocolListener; -import org.jclouds.azurecompute.arm.functions.ParseJobStatus; -import org.jclouds.azurecompute.arm.internal.BaseAzureComputeApiLiveTest; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import static org.testng.util.Strings.isNullOrEmpty; - -import com.beust.jcommander.internal.Lists; -import com.google.common.base.Predicate; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.Iterables; - -@Test(groups = "live", testName = "VirtualMachineApiLiveTest") -public class VirtualMachineApiLiveTest extends BaseAzureComputeApiLiveTest { - - private String subscriptionid; - private String vmName; - private String nicName; - private String virtualNetworkName; - private String subnetId; - - @BeforeClass - @Override - public void setup() { - super.setup(); - subscriptionid = getSubscriptionId(); - - createTestResourceGroup(); - - virtualNetworkName = String.format("vn-%s-%s", this.getClass().getSimpleName().toLowerCase(), System.getProperty("user.name")); - - // Subnets belong to a virtual network so that needs to be created first - assertNotNull(createDefaultVirtualNetwork(resourceGroupName, virtualNetworkName, "10.2.0.0/16", LOCATION)); - - //Subnet needs to be up & running before NIC can be created - String subnetName = String.format("s-%s-%s", this.getClass().getSimpleName().toLowerCase(), System.getProperty("user.name")); - Subnet subnet = createDefaultSubnet(resourceGroupName, subnetName, virtualNetworkName, "10.2.0.0/23"); - assertNotNull(subnet); - assertNotNull(subnet.id()); - subnetId = subnet.id(); - - NetworkInterfaceCard nic = createNetworkInterfaceCard(resourceGroupName, "jc-nic-" + RAND, LOCATION, "ipConfig-" + RAND); - assertNotNull(nic); - nicName = nic.name(); - - vmName = String.format("%3.24s", System.getProperty("user.name") + RAND + this.getClass().getSimpleName()).toLowerCase().substring(0, 15); - } - - @Test - public void testCreate() { - VirtualMachine vm = api().createOrUpdate(vmName, LOCATION, getProperties(nicName, null), - Collections.<String, String> emptyMap(), null); - assertTrue(!vm.name().isEmpty()); - waitUntilReady(vmName); - } - - @Test(dependsOnMethods = "testCreate") - public void testGet() { - VirtualMachine vm = api().get(vmName); - assertTrue(!vm.name().isEmpty()); - } - - @Test(dependsOnMethods = "testCreate") - public void testGetInstanceView() { - VirtualMachineInstance vmi = api().getInstanceDetails(vmName); - assertTrue(!vmi.statuses().isEmpty()); - } - - @Test(dependsOnMethods = "testGet") - public void testStart() { - api().start(vmName); - assertTrue(stateReached(vmName, PowerState.RUNNING), "start operation did not complete in the configured timeout"); - } - - @Test(dependsOnMethods = "testStart") - public void testUpdate() { - VirtualMachine vm = api().get(vmName); - VirtualMachineProperties oldProperties = vm.properties(); - StorageProfile oldStorageProfile = oldProperties.storageProfile(); - - DataDisk newDataDisk = DataDisk.builder() - .name(vmName + "new-data-disk") - .diskSizeGB("1") - .lun(1) - .createOption(DataDisk.DiskCreateOptionTypes.EMPTY) - .build(); - List<DataDisk> oldDataDisks = oldStorageProfile.dataDisks(); - assertEquals(oldDataDisks.size(), 1); - - ImmutableList<DataDisk> newDataDisks = ImmutableList.<DataDisk> builder().addAll(oldDataDisks).add(newDataDisk).build(); - StorageProfile newStorageProfile = oldStorageProfile.toBuilder().dataDisks(newDataDisks).build(); - VirtualMachineProperties newProperties = oldProperties.toBuilder().storageProfile(newStorageProfile).build(); - - VirtualMachine newVm = vm.toBuilder().properties(newProperties).build(); - vm = api().createOrUpdate(vmName, newVm.location(), newVm.properties(), newVm.tags(), newVm.plan()); - - assertEquals(vm.properties().storageProfile().dataDisks().size(), oldDataDisks.size() + 1); - } - - @Test(dependsOnMethods = "testUpdate") - public void testStop() { - api().stop(vmName); - assertTrue(stateReached(vmName, PowerState.STOPPED), "stop operation did not complete in the configured timeout"); - } - - @Test(dependsOnMethods = "testStop") - public void testRestart() { - api().start(vmName); - assertTrue(stateReached(vmName, PowerState.RUNNING), "start operation did not complete in the configured timeout"); - api().restart(vmName); - assertTrue(stateReached(vmName, PowerState.RUNNING), "restart operation did not complete in the configured timeout"); - } - - @Test(dependsOnMethods = "testCreate") - public void testList() { - List<VirtualMachine> list = api().list(); - final VirtualMachine vm = api().get(vmName); - - boolean vmPresent = Iterables.any(list, new Predicate<VirtualMachine>() { - public boolean apply(VirtualMachine input) { - return input.name().equals(vm.name()); - } - }); - - assertTrue(vmPresent); - } - - @Test(dependsOnMethods = "testRestart") - public void testGeneralize() throws IllegalStateException { - api().stop(vmName); - assertTrue(stateReached(vmName, PowerState.STOPPED), "restart operation did not complete in the configured timeout"); - api().generalize(vmName); - } - - @SuppressWarnings("unchecked") - @Test - public void testCapture() throws IllegalStateException { - // Capture is only allowed for Blob based VMs, so let's create one VM for this test - NetworkInterfaceCard nic = createNetworkInterfaceCard(resourceGroupName, "capture-nic-" + RAND, LOCATION, "ipConfig-" + RAND); - StorageService storageService = createStorageService(resourceGroupName, "capture" + RAND, LOCATION); - String blob = storageService.storageServiceProperties().primaryEndpoints().get("blob"); - - String captureVmName = "capture-" + RAND; - api().createOrUpdate(captureVmName, LOCATION, getProperties(nic.name(), blob), - Collections.<String, String> emptyMap(), null); - waitUntilReady(captureVmName); - - api().stop(captureVmName); - assertTrue(stateReached(captureVmName, PowerState.STOPPED), - "restart operation did not complete in the configured timeout"); - api().generalize(captureVmName); - - URI uri = api().capture(captureVmName, captureVmName, captureVmName); - assertNotNull(uri); - - if (imageAvailablePredicate.apply(uri)) { - List<ResourceDefinition> definitions = api.getJobApi().captureStatus(uri); - if (definitions != null) { - for (ResourceDefinition definition : definitions) { - Map<String, String> properties = (Map<String, String>) definition.properties(); - Object storageObject = properties.get("storageProfile"); - Map<String, String> properties2 = (Map<String, String>) storageObject; - Object osDiskObject = properties2.get("osDisk"); - Map<String, String> osProperties = (Map<String, String>) osDiskObject; - assertNotNull(osProperties.get("name")); - } - } - } - } - - @Test(dependsOnMethods = "testGeneralize", alwaysRun = true) - public void testDelete() throws Exception { - URI uri = api().delete(vmName); - assertResourceDeleted(uri); - } - - private VirtualMachineApi api() { - return api.getVirtualMachineApi(resourceGroupName); - } - - private VirtualMachineProperties getProperties(String nic, String blob) { - - HardwareProfile hwProf = HardwareProfile.create("Standard_D1_v2"); - ImageReference imgRef = ImageReference.builder().publisher("MicrosoftWindowsServer") - .offer("WindowsServer").sku("2008-R2-SP1").version("latest").build(); - - DataDisk.Builder dataDisk = DataDisk.builder().name("data").diskSizeGB("100").lun(0).createOption(DataDisk.DiskCreateOptionTypes.EMPTY); - - OSDisk.Builder osDisk = OSDisk.builder() - .name("os") - .osType("Windows") - .caching(DataDisk.CachingTypes.READ_WRITE.toString()) - .createOption("FromImage"); - - if (blob == null) { - osDisk.managedDiskParameters(ManagedDiskParameters.create(null, StorageAccountType.STANDARD_LRS.toString())); - } else { - osDisk.vhd(VHD.create(blob + "vhds/" + vmName + ".vhd")); - dataDisk.vhd(VHD.create(blob + "vhds/" + vmName + "data.vhd")); - } - - StorageProfile storageProfile = StorageProfile.create(imgRef, osDisk.build(), ImmutableList.of(dataDisk.build())); - - List<Secrets> secrets = null; - OSProfile.WindowsConfiguration.WinRM winRm = null; - if (!isNullOrEmpty(vaultResourceGroup) && !isNullOrEmpty(vaultName) && !isNullOrEmpty(vaultCertificateUrl)) { - List<ProtocolListener> listeners = Lists.newArrayList(); - - listeners.add(OSProfile.WindowsConfiguration.WinRM.ProtocolListener.create(Protocol.HTTPS, vaultCertificateUrl)); - listeners.add(OSProfile.WindowsConfiguration.WinRM.ProtocolListener.create(Protocol.HTTP, null)); - - winRm = OSProfile.WindowsConfiguration.WinRM.create(listeners); - VaultCertificate vaultCertificate = VaultCertificate.create(vaultCertificateUrl, vaultName); - secrets = ImmutableList.of(Secrets.create(Secrets.SourceVault.create(String.format("%s/providers/Microsoft.KeyVault/vaults/%s", - api.getResourceGroupApi().get(vaultResourceGroup).id(), vaultName)), - ImmutableList.of(vaultCertificate))); - } - OSProfile.WindowsConfiguration windowsConfig = OSProfile.WindowsConfiguration.create(true, winRm, null, true); - OSProfile osProfile = OSProfile.create(vmName, "azureuser", "RFe3&432dg", null, null, windowsConfig, secrets); - NetworkInterface networkInterface = - NetworkInterface.create("/subscriptions/" + subscriptionid + - "/resourceGroups/" + resourceGroupName + "/providers/Microsoft.Network/networkInterfaces/" - + nic, NetworkInterfaceProperties.create(true)); - List<NetworkInterface> networkInterfaces = new ArrayList<NetworkInterface>(); - networkInterfaces.add(networkInterface); - NetworkProfile networkProfile = NetworkProfile.create(networkInterfaces); - VirtualMachineProperties properties = VirtualMachineProperties.create(null, - null, null, hwProf, storageProfile, osProfile, networkProfile, null, VirtualMachineProperties.ProvisioningState.CREATING); - return properties; - } - - private NetworkInterfaceCard createNetworkInterfaceCard(final String resourceGroupName, String networkInterfaceCardName, String locationName, String ipConfigurationName) { - //Create properties object - final NetworkInterfaceCardProperties networkInterfaceCardProperties = NetworkInterfaceCardProperties - .builder() - .ipConfigurations( - Arrays.asList(IpConfiguration.create(ipConfigurationName, null, null, null, IpConfigurationProperties - .create(null, null, "Dynamic", IdReference.create(subnetId), null, null, null)))).build(); - - final Map<String, String> tags = ImmutableMap.of("jclouds", "livetest"); - return api.getNetworkInterfaceCardApi(resourceGroupName).createOrUpdate(networkInterfaceCardName, locationName, networkInterfaceCardProperties, tags); - } - - private StorageService createStorageService(final String resourceGroupName, final String storageServiceName, - final String location) { - URI uri = api.getStorageAccountApi(resourceGroupName).create(storageServiceName, location, - ImmutableMap.of("property_name", "property_value"), - ImmutableMap.of("accountType", StorageService.AccountType.Standard_LRS.toString())); - if (uri != null) { - assertTrue(uri.toString().contains("api-version")); - - boolean jobDone = retry(new Predicate<URI>() { - @Override - public boolean apply(final URI uri) { - return ParseJobStatus.JobStatus.DONE == api.getJobApi().jobStatus(uri); - } - }, 60 * 1 * 1000 /* 1 minute timeout */).apply(uri); - assertTrue(jobDone, "create operation did not complete in the configured timeout"); - } - return api.getStorageAccountApi(resourceGroupName).get(storageServiceName); - } - - private boolean waitForState(String name, final PowerState state) { - return api().getInstanceDetails(name).powerState().equals(state); - } - - private void waitUntilReady(String vmName) { - boolean ready = retry(new Predicate<String>() { - @Override - public boolean apply(String name) { - return !api().get(name).properties().provisioningState().equals(VirtualMachineProperties.ProvisioningState.CREATING); - } - }, 60 * 20 * 1000).apply(vmName); - assertTrue(ready, "createOrUpdate operation did not complete in the configured timeout"); - - VirtualMachineProperties.ProvisioningState status = api().get(vmName).properties().provisioningState(); - // Cannot be creating anymore. Should be succeeded or running but not failed. - assertThat(status).isNotEqualTo(VirtualMachineProperties.ProvisioningState.CREATING); - assertThat(status).isNotEqualTo(VirtualMachineProperties.ProvisioningState.FAILED); - } - - private boolean stateReached(String vmName, final PowerState state) { - return retry(new Predicate<String>() { - @Override - public boolean apply(String name) { - return waitForState(name, state); - } - }, 60 * 4 * 1000).apply(vmName); - } -}
