package alien4cloud.it.provider;
import java.io.IOException;
import alien4cloud.it.provider.util.RuntimePropertiesUtil;
import org.jclouds.openstack.cinder.v1.domain.Volume;
import org.junit.Assert;
import alien4cloud.it.Context;
import alien4cloud.paas.function.FunctionEvaluator;
import alien4cloud.rest.deployment.DeploymentTopologyDTO;
import alien4cloud.rest.model.RestResponse;
import alien4cloud.rest.utils.JsonUtil;
import cucumber.api.java.en.And;
public class IAASStepDefinitions {
private String getVolumeId(String propertyName, String nodeName, String appName) throws IOException {
String topologyResponseText = Context.getRestClientInstance().get(
"/rest/v1/applications/" + Context.getInstance().getApplicationId(appName) + "/environments/"
+ Context.getInstance().getDefaultApplicationEnvironmentId(appName) + "/deployment-topology");
RestResponse<DeploymentTopologyDTO> topologyResponse = JsonUtil.read(topologyResponseText, DeploymentTopologyDTO.class, Context.getJsonMapper());
String volumeId = FunctionEvaluator.getScalarValue(topologyResponse.getData().getTopology().getNodeTemplates().get(nodeName).getProperties()
.get(propertyName));
Assert.assertNotNull(volumeId);
int indexOfEndRegion = volumeId.indexOf('/');
if (indexOfEndRegion > 0) {
volumeId = volumeId.substring(indexOfEndRegion + 1);
}
return volumeId;
}
@And("^I should have a volume on OpenStack with id defined in property \"([^\"]*)\" of the node \"([^\"]*)\" for \"([^\"]*)\"$")
public void I_should_have_a_volume_on_OpenStack_with_id_defined_in_property_of_the_node(String propertyName, String nodeName, String appName)
throws Throwable {
Assert.assertNotNull(Context.getInstance().getOpenStackClient().getVolume(getVolumeId(propertyName, nodeName, appName)));
}
@And("^I should have a volume on OpenStack with id defined in runtime property \"([^\"]*)\" of the node \"([^\"]*)\"$")
public void I_should_have_a_volume_on_OpenStack_with_id_defined_in_runtime_property_of_the_node(String propertyName, String nodeName)
throws Throwable {
String externalId = RuntimePropertiesUtil.getProperty(nodeName, propertyName);
Context.getInstance().setCurrentExternalId(externalId);
Assert.assertNotNull(Context.getInstance().getOpenStackClient().getVolume(externalId));
}
@And("^I should not have a volume on OpenStack with id defined in runtime property \"([^\"]*)\" of the node \"([^\"]*)\"$")
public void I_should_not_have_a_volume_on_OpenStack_with_id_defined_in_property_of_the_node(String propertyName, String nodeName)
throws Throwable {
String externalId = Context.getInstance().getCurrentExternalId();
Assert.assertNull(Context.getInstance().getOpenStackClient().getVolume(externalId));
}
@And("^I should have a volume on AWS with id defined in property \"([^\"]*)\" of the node \"([^\"]*)\" for \"([^\"]*)\"$")
public void I_should_have_a_volume_on_AWS_with_id_defined_in_property_of_the_node(String propertyName, String nodeName, String appName) throws Throwable {
Assert.assertNotNull(Context.getInstance().getAwsClient().getVolume(getVolumeId(propertyName, nodeName, appName)));
}
@And("^I should have a volume on AWS with id defined in runtime property \"([^\"]*)\" of the node \"([^\"]*)\"$")
public void I_should_have_a_volume_on_AWS_with_id_defined_in_runtime_property_of_the_node(String propertyName, String nodeName) throws Throwable {
String externalId = RuntimePropertiesUtil.getProperty(nodeName, propertyName);
Context.getInstance().setCurrentExternalId(externalId);
Assert.assertNotNull(Context.getInstance().getAwsClient().getVolume(externalId));
}
@And("^I should not have a volume on AWS with id defined in runtime property \"([^\"]*)\" of the node \"([^\"]*)\"$")
public void I_should_not_have_a_volume_on_AWS_with_id_defined_in_runtime_property_of_the_node(String propertyName, String nodeName) throws Throwable {
String externalId = Context.getInstance().getCurrentExternalId();
Assert.assertNull(Context.getInstance().getAwsClient().getVolume(externalId));
}
@And("^I should have volumes on OpenStack with ids defined in property \"([^\"]*)\" of the node \"([^\"]*)\" for \"([^\"]*)\"$")
public void I_should_have_volumes_on_OpenStack_with_ids_defined_in_property_of_the_node(String propertyName, String nodeName, String appName)
throws Throwable {
String ids = getVolumeId(propertyName, nodeName, appName);
String[] idsArr = ids.split(",");
for (String id : idsArr) {
Volume volume = Context.getInstance().getOpenStackClient().getVolume(id);
Assert.assertNotNull(volume);
}
}
@And("^I delete the volume on OpenStack with id defined in property \"([^\"]*)\" of the node \"([^\"]*)\" for \"([^\"]*)\"$")
public void I_delete_the_volume_on_OpenStack_with_id_defined_in_property_of_the_node(String propertyName, String nodeName, String appName) throws Throwable {
Assert.assertTrue(Context.getInstance().getOpenStackClient().deleteVolume(getVolumeId(propertyName, nodeName, appName)));
}
@And("^I delete the volume on AWS with id defined in property \"([^\"]*)\" of the node \"([^\"]*)\" for \"([^\"]*)\"$")
public void I_delete_the_volume_on_AWS_with_id_defined_in_property_of_the_node(String propertyName, String nodeName, String appName) throws Throwable {
Context.getInstance().getAwsClient().deleteVolume(getVolumeId(propertyName, nodeName, appName));
}
@And("^I delete volumes on OpenStack with ids defined in property \"([^\"]*)\" of the node \"([^\"]*)\" for \"([^\"]*)\"$")
public void I_delete_volumes_on_OpenStack_with_ids_defined_in_property_of_the_node(String propertyName, String nodeName, String appName) throws Throwable {
String ids = getVolumeId(propertyName, nodeName, appName);
String[] idsArr = ids.split(",");
for (String id : idsArr) {
Assert.assertTrue(Context.getInstance().getOpenStackClient().deleteVolume(id));
}
}
}