Skip to content

Commit

Permalink
Merge pull request #20 from zebrunner/develop
Browse files Browse the repository at this point in the history
1.1.4
  • Loading branch information
vdelendik authored Jun 29, 2023
2 parents 3df7fe8 + 5db03ae commit 662624d
Show file tree
Hide file tree
Showing 4 changed files with 73 additions and 22 deletions.
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>11</java.version>
<carina-utils.version>1.0.4</carina-utils.version>
<carina-utils.version>1.1.5</carina-utils.version>
<carina-commons.version>1.0.2</carina-commons.version>
<slf4j.version>1.7.30</slf4j.version>
<azure-storage-blob.version>12.21.1</azure-storage-blob.version>
Expand Down
28 changes: 10 additions & 18 deletions src/main/java/com/zebrunner/carina/azure/AzureManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
}
Expand Down Expand Up @@ -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)
Expand All @@ -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));
Expand Down
Original file line number Diff line number Diff line change
@@ -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<String> asString = asString(Arrays.stream(Parameter.values()).filter(param -> {
if (Parameter.AZURE_BLOB_URL.equals(param)) {
Optional<String> 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();
}
}
6 changes: 3 additions & 3 deletions src/test/java/com/zebrunner/carina/azure/AzureClientTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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!");
}
Expand All @@ -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());
Expand Down

0 comments on commit 662624d

Please sign in to comment.