package com.sequenceiq.it.cloudbreak; import java.util.HashMap; import java.util.Map; import javax.inject.Inject; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.test.context.ConfigFileApplicationContextInitializer; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.testng.AbstractTestNGSpringContextTests; import org.springframework.util.StringUtils; import org.testng.ITestContext; import org.testng.annotations.BeforeSuite; import org.testng.annotations.Optional; import org.testng.annotations.Parameters; import com.sequenceiq.it.IntegrationTestContext; import com.sequenceiq.it.SuiteContext; import com.sequenceiq.it.config.IntegrationTestConfiguration; @ContextConfiguration(classes = IntegrationTestConfiguration.class, initializers = ConfigFileApplicationContextInitializer.class) public class CloudProviderParamsInitializer extends AbstractTestNGSpringContextTests { @Value("${integrationtest.azurermcredential.subscriptionId}") private String defaultAzureSubscriptionId; @Value("${integrationtest.azurermcredential.secretKey}") private String defaultAzureSecretKey; @Value("${integrationtest.azurermcredential.accessKey}") private String defaultAzureAccesKey; @Value("${integrationtest.azurermcredential.tenantId}") private String defaultAzureTenantId; @Value("${integrationtest.openstackcredential.tenantName}") private String defaultOpenstackTenantName; @Value("${integrationtest.openstackcredential.userName}") private String defaultOpenstackUserName; @Value("${integrationtest.openstackcredential.password}") private String defaultOpenstackPassword; @Value("${integrationtest.openstackcredential.endpoint}") private String defaultOpenstackEndpoint; @Value("${integrationtest.gcpcredential.name}") private String defaultGcpName; @Value("${integrationtest.gcpcredential.projectId}") private String defaultGcpProjectId; @Value("${integrationtest.gcpcredential.serviceAccountId}") private String defaultGcpServiceAccountId; @Value("${integrationtest.gcpcredential.p12File}") private String defaultGcpP12File; @Inject private SuiteContext suiteContext; private IntegrationTestContext itContext; private Map<String, String> cloudProviderParams; @BeforeSuite(dependsOnGroups = "suiteInit") public void initContext(ITestContext testContext) throws Exception { // Workaround of https://jira.spring.io/browse/SPR-4072 springTestContextBeforeTestClass(); springTestContextPrepareTestInstance(); itContext = suiteContext.getItContext(testContext.getSuite().getName()); cloudProviderParams = new HashMap<>(); suiteContext.getItContext(testContext.getSuite().getName()).putContextParam(CloudbreakITContextConstants.CLOUDPROVIDER_PARAMETERS, cloudProviderParams); } @BeforeSuite(dependsOnMethods = "initContext") @Parameters({"cloudProvider", "azureSubscriptionId", "azureSecretKey", "azureAccesKey", "azureTenantId"}) public void initAzureCloudProviderParameters(String cloudProvider, @Optional("") String azureSubscriptionId, @Optional ("") String azureSecretKey, @Optional ("") String azureAccesKey, @Optional ("") String azureTenantId) throws Exception { if ("AZURE".equals(cloudProvider)) { azureSubscriptionId = StringUtils.hasLength(azureSubscriptionId) ? azureSubscriptionId : defaultAzureSubscriptionId; azureSecretKey = StringUtils.hasLength(azureSecretKey) ? azureSecretKey : defaultAzureSecretKey; azureAccesKey = StringUtils.hasLength(azureAccesKey) ? azureAccesKey : defaultAzureAccesKey; azureTenantId = StringUtils.hasLength(azureTenantId) ? azureTenantId : defaultAzureTenantId; cloudProviderParams.put("cloudProvider", cloudProvider); cloudProviderParams.put("subscriptionId", azureSubscriptionId); cloudProviderParams.put("secretKey", azureSecretKey); cloudProviderParams.put("accesKey", azureAccesKey); cloudProviderParams.put("tenantId", azureTenantId); } } @BeforeSuite(dependsOnMethods = "initContext") @Parameters({"cloudProvider", "region"}) public void initAWSCloudProviderParameters(String cloudProvider, @Optional("") String region) { if ("AWS".equals(cloudProvider)) { cloudProviderParams.put("cloudProvider", cloudProvider); cloudProviderParams.put("region", region); } } @BeforeSuite(dependsOnMethods = "initContext") @Parameters({"cloudProvider", "openstackTenantName", "openstackUserName", "openstackPassword", "openstackEndpoint" }) public void setCloudProviderParameters(String cloudProvider, @Optional("") String openstackTenantName, @Optional("") String openstackUserName, @Optional("") String openstackPassword, @Optional("") String openstackEndpoint) { if ("OPENSTACK".equals(cloudProvider)) { openstackTenantName = StringUtils.hasLength(openstackTenantName) ? openstackTenantName : defaultOpenstackTenantName; openstackUserName = StringUtils.hasLength(openstackUserName) ? openstackUserName : defaultOpenstackUserName; openstackPassword = StringUtils.hasLength(openstackPassword) ? openstackPassword : defaultOpenstackPassword; openstackEndpoint = StringUtils.hasLength(openstackEndpoint) ? openstackEndpoint : defaultOpenstackEndpoint; cloudProviderParams.put("cloudProvider", cloudProvider); cloudProviderParams.put("tenantName", openstackTenantName); cloudProviderParams.put("userName", openstackUserName); cloudProviderParams.put("password", openstackPassword); cloudProviderParams.put("endpoint", openstackEndpoint); } } @BeforeSuite(dependsOnMethods = "initContext") @Parameters({ "cloudProvider", "gcpAvailabiltyZone", "gcpAppName", "gcpProjectId", "gcpServiceAccountId", "gcpP12File" }) public void checkGcpTags(String cloudProvider, @Optional ("europe-west1-b") String gcpAvailabilityZone, @Optional ("") String gcpAppName, @Optional ("") String gcpProjectId, @Optional ("") String gcpServiceAccountId, @Optional ("") String gcpP12File) throws Exception { if ("GCP".equals(cloudProvider)) { gcpAppName = StringUtils.hasLength(gcpAppName) ? gcpAppName : defaultGcpName; gcpProjectId = StringUtils.hasLength(gcpProjectId) ? gcpProjectId : defaultGcpProjectId; gcpServiceAccountId = StringUtils.hasLength(gcpServiceAccountId) ? gcpServiceAccountId : defaultGcpServiceAccountId; gcpP12File = StringUtils.hasLength(gcpP12File) ? gcpP12File : defaultGcpP12File; cloudProviderParams.put("cloudProvider", cloudProvider); cloudProviderParams.put("availabilityZone", gcpAvailabilityZone); cloudProviderParams.put("applicationName", gcpAppName); cloudProviderParams.put("projectId", gcpProjectId); cloudProviderParams.put("serviceAccountId", gcpServiceAccountId); cloudProviderParams.put("p12File", gcpP12File); } } }