From 3d6f625afd06c7ca52517a5fed60194dc24c26b7 Mon Sep 17 00:00:00 2001 From: Andrei Kamarouski Date: Tue, 20 Jun 2023 11:12:39 +0300 Subject: [PATCH 1/3] refactoring --- pom.xml | 2 +- .../zebrunner/carina/azure/AzureManager.java | 28 ++++----- .../azure/config/AzureConfiguration.java | 59 +++++++++++++++++++ .../carina/azure/AzureClientTest.java | 6 +- 4 files changed, 73 insertions(+), 22 deletions(-) create mode 100644 src/main/java/com/zebrunner/carina/azure/config/AzureConfiguration.java diff --git a/pom.xml b/pom.xml index 8e57dc1..c7c947a 100644 --- a/pom.xml +++ b/pom.xml @@ -49,7 +49,7 @@ UTF-8 11 - 1.0.4 + 1.0.5.REFACTORING-SNAPSHOT 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()); From e6fd1be51cfc6e3f12c8e3f936c0faf4a064357d Mon Sep 17 00:00:00 2001 From: Andrei Kamarouski Date: Tue, 27 Jun 2023 23:30:30 +0300 Subject: [PATCH 2/3] change version of carina-utils to 1.1.5.P1-SNAPSHOT --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c7c947a..a49903a 100644 --- a/pom.xml +++ b/pom.xml @@ -49,7 +49,7 @@ UTF-8 11 - 1.0.5.REFACTORING-SNAPSHOT + 1.1.5.P1-SNAPSHOT 1.0.2 1.7.30 12.21.1 From 5db03ae7b84b5c55858558da7f6fec013a3d06e9 Mon Sep 17 00:00:00 2001 From: Andrei Kamarouski Date: Thu, 29 Jun 2023 13:59:29 +0300 Subject: [PATCH 3/3] bump up carina-utils to 1.1.5 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index a49903a..49c00bd 100644 --- a/pom.xml +++ b/pom.xml @@ -49,7 +49,7 @@ UTF-8 11 - 1.1.5.P1-SNAPSHOT + 1.1.5 1.0.2 1.7.30 12.21.1