diff --git a/pom.xml b/pom.xml index 8e57dc1..49c00bd 100644 --- a/pom.xml +++ b/pom.xml @@ -49,7 +49,7 @@ UTF-8 11 - 1.0.4 + 1.1.5 1.0.2 1.7.30 12.21.1 diff --git a/src/main/java/com/zebrunner/carina/azure/AzureManager.java b/src/main/java/com/zebrunner/carina/azure/AzureManager.java index 0bb549e..ccaeab1 100644 --- a/src/main/java/com/zebrunner/carina/azure/AzureManager.java +++ b/src/main/java/com/zebrunner/carina/azure/AzureManager.java @@ -23,10 +23,12 @@ import com.azure.storage.blob.models.BlobProperties; import com.azure.storage.blob.models.BlobStorageException; import com.azure.storage.common.StorageSharedKeyCredential; +import com.zebrunner.carina.azure.config.AzureConfiguration; import com.zebrunner.carina.commons.artifact.IArtifactManager; -import com.zebrunner.carina.utils.Configuration; import com.zebrunner.carina.utils.FileManager; import com.zebrunner.carina.utils.R; +import com.zebrunner.carina.utils.config.Configuration; +import com.zebrunner.carina.utils.config.StandardConfigurationOption; import org.apache.commons.codec.binary.Base64; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; @@ -60,17 +62,14 @@ private AzureManager() {} public static synchronized AzureManager getInstance() { if (instance == null) { AzureManager azureManager = new AzureManager(); - String accountName = Configuration.getDecrypted(Configuration.Parameter.AZURE_ACCOUNT_NAME); - String endpoint = Configuration.getDecrypted(Configuration.Parameter.AZURE_BLOB_URL); + String accountName = Configuration.getRequired(AzureConfiguration.Parameter.AZURE_ACCOUNT_NAME, StandardConfigurationOption.DECRYPT); + String endpoint = Configuration.getRequired(AzureConfiguration.Parameter.AZURE_BLOB_URL, StandardConfigurationOption.DECRYPT); BlobServiceClientBuilder blobServiceClientBuilder = new BlobServiceClientBuilder() .endpoint(endpoint); - - String secretKey = Configuration.getDecrypted(Configuration.Parameter.AZURE_ACCESS_KEY_TOKEN); - if (!secretKey.isEmpty()) { - StorageSharedKeyCredential credential = new StorageSharedKeyCredential(accountName, secretKey); + Configuration.get(AzureConfiguration.Parameter.AZURE_ACCESS_KEY_TOKEN, StandardConfigurationOption.DECRYPT).ifPresent(token -> { + StorageSharedKeyCredential credential = new StorageSharedKeyCredential(accountName, token); blobServiceClientBuilder.credential(credential); - } - + }); azureManager.blobServiceClient = blobServiceClientBuilder.buildClient(); instance = azureManager; } @@ -164,15 +163,14 @@ public String getDirectLink(String url) { String remoteFilePath = matcher.group("remoteFilePath"); LOGGER.info("Account: {}\nContainer: {}\nRemotePath: {}", accountName, containerName, remoteFilePath); - R.CONFIG.put(Configuration.Parameter.AZURE_ACCOUNT_NAME.getKey(), accountName); + R.CONFIG.put(AzureConfiguration.Parameter.AZURE_ACCOUNT_NAME.getKey(), accountName); BlobProperties blobProperties = get(containerName, remoteFilePath); - String azureLocalStorage = Configuration.get(Configuration.Parameter.AZURE_LOCAL_STORAGE); + String azureLocalStorage = Configuration.getRequired(AzureConfiguration.Parameter.AZURE_LOCAL_STORAGE); String localFilePath = azureLocalStorage + File.separator + (remoteFilePath.contains("/") ? StringUtils.substringAfterLast(remoteFilePath, "/") : remoteFilePath); File file = new File(localFilePath); - try { // verify requested artifact by checking the checksum if (file.exists() && FileManager.getFileChecksum(FileManager.Checksum.MD5, file) @@ -187,12 +185,6 @@ public String getDirectLink(String url) { } catch (Exception exception) { LOGGER.error("Azure app path update exception detected!", exception); } - - // try to redefine app_version if it's value is latest or empty - String appVersion = Configuration.get(Configuration.Parameter.APP_VERSION); - if (appVersion.equals("latest") || appVersion.isEmpty()) { - Configuration.setBuild(file.getName()); - } return file.getAbsolutePath(); } else { throw new RuntimeException(String.format("Unable to parse '%s' path using Azure pattern", url)); diff --git a/src/main/java/com/zebrunner/carina/azure/config/AzureConfiguration.java b/src/main/java/com/zebrunner/carina/azure/config/AzureConfiguration.java new file mode 100644 index 0000000..36087b3 --- /dev/null +++ b/src/main/java/com/zebrunner/carina/azure/config/AzureConfiguration.java @@ -0,0 +1,59 @@ +package com.zebrunner.carina.azure.config; + +import com.zebrunner.carina.utils.commons.SpecialKeywords; +import com.zebrunner.carina.utils.config.Configuration; +import com.zebrunner.carina.utils.config.IParameter; + +import java.util.Arrays; +import java.util.Optional; + +public final class AzureConfiguration extends Configuration { + + public enum Parameter implements IParameter { + + AZURE_ACCOUNT_NAME("azure_account_name"), + + AZURE_CONTAINER_NAME("azure_container_name"), + + AZURE_BLOB_URL("azure_blob_url"), + + AZURE_ACCESS_KEY_TOKEN("azure_access_key_token") { + @Override + public boolean hidden() { + return true; + } + }, + + AZURE_LOCAL_STORAGE("azure_local_storage"); + + private final String key; + + Parameter(String key) { + this.key = key; + } + + public String getKey() { + return key; + } + } + + @Override + public String toString() { + Optional asString = asString(Arrays.stream(Parameter.values()).filter(param -> { + if (Parameter.AZURE_BLOB_URL.equals(param)) { + Optional value = Configuration.get(param); + //#1451 hide WARN! Value not resolved by key: azure_container_name + if (value.isPresent() && value.get().toLowerCase().contains(SpecialKeywords.NULL.toLowerCase())) { + return false; + } + } + return true; + }).toArray(IParameter[]::new)); + + if (asString.isEmpty()) { + return ""; + } + return "\n============= Azure configuration =============\n" + + asString.get(); + } +} diff --git a/src/test/java/com/zebrunner/carina/azure/AzureClientTest.java b/src/test/java/com/zebrunner/carina/azure/AzureClientTest.java index f09a099..a38be50 100644 --- a/src/test/java/com/zebrunner/carina/azure/AzureClientTest.java +++ b/src/test/java/com/zebrunner/carina/azure/AzureClientTest.java @@ -16,8 +16,9 @@ package com.zebrunner.carina.azure; import com.azure.storage.blob.models.BlobProperties; -import com.zebrunner.carina.utils.Configuration; +import com.zebrunner.carina.azure.config.AzureConfiguration; import com.zebrunner.carina.utils.FileManager; +import com.zebrunner.carina.utils.config.Configuration; import org.apache.commons.codec.binary.Base64; import org.testng.Assert; import org.testng.annotations.Test; @@ -65,7 +66,7 @@ public void testPutFilePathNotExist() { @Test(expectedExceptions = RuntimeException.class) public void testGetKeyNull() { - String localPath = Configuration.get(Configuration.Parameter.AZURE_LOCAL_STORAGE); + String localPath = Configuration.getRequired(AzureConfiguration.Parameter.AZURE_LOCAL_STORAGE); AzureManager.getInstance().download("resources", "apk-StableDev.apk", new File(localPath + "/apk-StableDev.apk")); Assert.fail("Key verification doesn't work!"); } @@ -84,7 +85,6 @@ public void testDeleteKeyEmpty() { @Test(expectedExceptions = {RuntimeException.class, IOException.class, NoSuchAlgorithmException.class}) public void testGetPropsNull() throws IOException, NoSuchAlgorithmException { - String localPath = Configuration.get(Configuration.Parameter.AZURE_LOCAL_STORAGE); BlobProperties value = AzureManager.getInstance().get("resources", "apk-StableDev.apk"); String remoteFileMD5 = Base64.encodeBase64String(value.getContentMd5());