package alien4cloud.it.topology; import java.io.IOException; import java.util.ArrayList; import java.util.Map; import java.util.Set; import org.apache.http.NameValuePair; import org.junit.Assert; import alien4cloud.it.Context; import alien4cloud.rest.utils.JsonUtil; import alien4cloud.topology.TopologyDTO; import cucumber.api.java.en.Then; import cucumber.api.java.en.When; public class OutputPropertiesStepDefinitions { private String getPropertyUrl(String propertyName, String nodeName, String propertyType) { return "/rest/v1/topologies/" + Context.getInstance().getTopologyId() + "/nodetemplates/" + nodeName + "/property/" + propertyName + "/" + propertyType; } private String getCapabilityPropertyUrl(String propertyName, String capabilityId, String nodeName) { return "/rest/v1/topologies/" + Context.getInstance().getTopologyId() + "/nodetemplates/" + nodeName + "/capability/" + capabilityId + "/property/" + propertyName + "/isOutput"; } private String getAttributesUrl(String attributeName, String nodeName) { return "/rest/v1/topologies/" + Context.getInstance().getTopologyId() + "/nodetemplates/" + nodeName + "/attributes/" + attributeName + "/output"; } @When("^I define the property \"([^\"]*)\" of the node \"([^\"]*)\" as output property$") public void I_define_the_property_of_the_node_as_output_property(String propertyName, String nodeName) throws Throwable { Context.getInstance().registerRestResponse( Context.getRestClientInstance().postUrlEncoded(getPropertyUrl(propertyName, nodeName, "isOutput"), new ArrayList<NameValuePair>())); } @Then("^The topology should have the property \"([^\"]*)\" of the node \"([^\"]*)\" defined as output property$") public void The_topology_should_have_the_property_of_the_node_defined_as_output_property(String propertyName, String nodeName) throws Throwable { TopologyDTO topologyDTO = getTopologyDTO(); Map<String, Set<String>> outputProperties = topologyDTO.getTopology().getOutputProperties(); Assert.assertNotNull(outputProperties); Set<String> outputPropertiesOfNode = outputProperties.get(nodeName); Assert.assertNotNull(outputPropertiesOfNode); Assert.assertTrue(outputPropertiesOfNode.contains(propertyName)); } @Then("^The topology should have the capability property \"([^\"]*)\" of the capability \"([^\"]*)\" for the node \"([^\"]*)\" defined as output property$") public void The_topology_should_have_the_capability_property_of_the_capability_for_the_node_defined_as_output_property(String propertyName, String capabilityId, String nodeName) throws Throwable { TopologyDTO topologyDTO = getTopologyDTO(); Map<String, Map<String, Set<String>>> outputCapabilityProperties = topologyDTO.getTopology().getOutputCapabilityProperties(); Assert.assertNotNull(outputCapabilityProperties); Map<String, Set<String>> outputPropertiesOfNode = outputCapabilityProperties.get(nodeName); Assert.assertNotNull(outputPropertiesOfNode); Set<String> outputPropertiesOfCapability = outputPropertiesOfNode.get(capabilityId); Assert.assertNotNull(outputPropertiesOfCapability); Assert.assertTrue(outputPropertiesOfCapability.contains(propertyName)); } @Then("^The topology should not have the capability property \"([^\"]*)\" of the capability \"([^\"]*)\" for the node \"([^\"]*)\" defined as output property$") public void The_topology_should_not_have_the_capability_property_of_the_capability_for_the_node_defined_as_output_property(String propertyName, String capabilityId, String nodeName) throws Throwable { TopologyDTO topologyDTO = getTopologyDTO(); Map<String, Map<String, Set<String>>> outputCapabilityProperties = topologyDTO.getTopology().getOutputCapabilityProperties(); Assert.assertNotNull(outputCapabilityProperties); Map<String, Set<String>> outputPropertiesOfNode = outputCapabilityProperties.get(nodeName); Assert.assertNotNull(outputPropertiesOfNode); Set<String> outputPropertiesOfCapability = outputPropertiesOfNode.get(capabilityId); Assert.assertNotNull(outputPropertiesOfCapability); Assert.assertFalse(outputPropertiesOfCapability.contains(propertyName)); } @When("^I define the property \"([^\"]*)\" of the node \"([^\"]*)\" as non output property$") public void I_define_the_property_of_the_node_as_non_output_property(String propertyName, String nodeName) throws Throwable { Context.getInstance().registerRestResponse(Context.getRestClientInstance().delete(getPropertyUrl(propertyName, nodeName, "isOutput"))); } @Then("^The topology should not have the property \"([^\"]*)\" of the node \"([^\"]*)\" defined as output property$") public void The_topology_should_not_have_the_property_of_the_node_defined_as_output_property(String propertyName, String nodeName) throws Throwable { TopologyDTO topologyDTO = getTopologyDTO(); Map<String, Set<String>> outputProperties = topologyDTO.getTopology().getOutputProperties(); if (outputProperties != null) { Set<String> outputPropertiesOfNode = outputProperties.get(nodeName); if (outputPropertiesOfNode != null) { Assert.assertFalse(outputPropertiesOfNode.contains(propertyName)); } } } @When("^I define the attribute \"([^\"]*)\" of the node \"([^\"]*)\" as output attribute$") public void I_define_the_attribute_of_the_node_as_output_attribute(String attributeName, String nodeName) throws Throwable { Context.getInstance().registerRestResponse( Context.getRestClientInstance().postUrlEncoded(getAttributesUrl(attributeName, nodeName), new ArrayList<NameValuePair>())); } @Then("^The topology should have the attribute \"([^\"]*)\" of the node \"([^\"]*)\" defined as output attribute$") public void The_topology_should_have_the_attribute_of_the_node_defined_as_output_attribute(String attributeName, String nodeName) throws Throwable { TopologyDTO topologyDTO = getTopologyDTO(); Map<String, Set<String>> outputAttributes = topologyDTO.getTopology().getOutputAttributes(); Assert.assertNotNull(outputAttributes); Set<String> outputAttributesOfNode = outputAttributes.get(nodeName); Assert.assertNotNull(outputAttributesOfNode); Assert.assertTrue(outputAttributesOfNode.contains(attributeName)); } @When("^I remove the attribute \"([^\"]*)\" of the node \"([^\"]*)\" from the output attributes$") public void I_remove_the_attribute_of_the_node_from_the_output_attributes(String attributeName, String nodeName) throws Throwable { Context.getInstance().registerRestResponse(Context.getRestClientInstance().delete(getAttributesUrl(attributeName, nodeName))); } @Then("^The topology should not have the attribute \"([^\"]*)\" of the node \"([^\"]*)\" defined as output attribute$") public void The_topology_should_not_have_the_attribute_of_the_node_defined_as_output_attribute(String attributeName, String nodeName) throws Throwable { TopologyDTO topologyDTO = getTopologyDTO(); Map<String, Set<String>> outputAttributes = topologyDTO.getTopology().getOutputAttributes(); if (outputAttributes != null) { Set<String> outputAttributesOfNode = outputAttributes.get(nodeName); if (outputAttributesOfNode != null) { Assert.assertFalse(outputAttributesOfNode.contains(attributeName)); } } } @When("^I define the property \"([^\"]*)\" of the capability \"([^\"]*)\" of the node \"([^\"]*)\" as output property$") public void I_define_the_property_of_the_capability_of_the_node_as_output_property(String propertyName, String capabilityId, String nodeName) throws Throwable { Context.getInstance().registerRestResponse( Context.getRestClientInstance().postUrlEncoded(getCapabilityPropertyUrl(propertyName, capabilityId, nodeName), new ArrayList<NameValuePair>())); } @When("^I define the property \"([^\"]*)\" of the capability \"([^\"]*)\" of the node \"([^\"]*)\" as non output property$") public void I_define_the_property_of_the_capability_of_the_node_as_non_output_property(String propertyName, String capabilityId, String nodeName) throws Throwable { Context.getInstance().registerRestResponse(Context.getRestClientInstance().delete(getCapabilityPropertyUrl(propertyName, capabilityId, nodeName))); } private TopologyDTO getTopologyDTO() throws IOException { TopologyDTO topologyDTO = JsonUtil.read(Context.getRestClientInstance().get("/rest/v1/topologies/" + Context.getInstance().getTopologyId()), TopologyDTO.class, Context.getJsonMapper()).getData(); return topologyDTO; } }