package alien4cloud.it.orchestrators; import java.io.IOException; import java.util.List; import org.apache.commons.collections4.CollectionUtils; import org.junit.Assert; import alien4cloud.dao.model.GetMultipleDataResult; import alien4cloud.it.Context; import alien4cloud.model.common.Usage; import alien4cloud.model.orchestrators.Orchestrator; import alien4cloud.model.orchestrators.OrchestratorState; import alien4cloud.rest.model.RestResponse; import alien4cloud.rest.orchestrator.UpdateOrchestratorRequest; import alien4cloud.rest.orchestrator.model.CreateOrchestratorRequest; import alien4cloud.rest.utils.JsonUtil; import cucumber.api.java.en.Given; import cucumber.api.java.en.Then; import cucumber.api.java.en.When; public class OrchestratorsDefinitionsSteps { @When("^I create an orchestrator named \"([^\"]*)\" and plugin id \"([^\"]*)\" and bean name \"([^\"]*)\"$") public void I_create_an_orchestrator_named_and_plugin_id_and_bean_name(String name, String pluginId, String pluginBean) throws Throwable { CreateOrchestratorRequest orchestrator = new CreateOrchestratorRequest(); orchestrator.setName(name); orchestrator.setPluginId(pluginId); orchestrator.setPluginBean(pluginBean); Context.getInstance().registerRestResponse(Context.getRestClientInstance().postJSon("/rest/v1/orchestrators", JsonUtil.toString(orchestrator))); RestResponse<String> idResponse = JsonUtil.read(Context.getInstance().getRestResponse(), String.class); Context.getInstance().registerOrchestrator(idResponse.getData(), name); } @When("^I create an orchestrator named \"([^\"]*)\" and plugin name \"([^\"]*)\" and bean name \"([^\"]*)\"$") public void I_create_an_orchestrator_named_and_plugin_name_and_bean_name(String name, String pluginName, String pluginBean) throws Throwable { I_create_an_orchestrator_named_and_plugin_id_and_bean_name(name, pluginName + ":" + Context.VERSION, pluginBean); } @When("^I list orchestrators$") public void I_list_orchestrators() throws Throwable { Context.getInstance().registerRestResponse(Context.getRestClientInstance().get("/rest/v1/orchestrators")); } @Then("^Response should contains (\\d+) orchestrator$") public void Response_should_contains_orchestrator(int count) throws Throwable { RestResponse<GetMultipleDataResult> response = JsonUtil.read(Context.getInstance().getRestResponse(), GetMultipleDataResult.class); Assert.assertEquals(count, response.getData().getTotalResults()); } @Then("^Response should contains an orchestrator with name \"([^\"]*)\"$") public void Response_should_contains_an_orchestrator_with_name(String name) throws Throwable { RestResponse<GetMultipleDataResult> response = JsonUtil.read(Context.getInstance().getRestResponse(), GetMultipleDataResult.class); boolean contains = false; for (Object cloudAsMap : response.getData().getData()) { Orchestrator orchestrator = JsonUtil.readObject(JsonUtil.toString(cloudAsMap), Orchestrator.class); if (name.equals(orchestrator.getName())) { contains = true; } } Assert.assertTrue(contains); } @When("^I delete an orchestrator with name \"([^\"]*)\"$") public void I_delete_an_orchestrator_with_name(String orchestratorName) throws Throwable { String orchestratorId = Context.getInstance().getOrchestratorId(orchestratorName); Context.getInstance().registerRestResponse(Context.getRestClientInstance().delete("/rest/v1/orchestrators/" + orchestratorId)); } @Given("^I enable the orchestrator \"([^\"]*)\"$") public void I_enable_the_orchestrator(String orchestratorName) throws IOException { String orchestratorId = Context.getInstance().getOrchestratorId(orchestratorName); String restResponse = Context.getRestClientInstance().postJSon("/rest/v1/orchestrators/" + orchestratorId + "/instance", "{}"); Context.getInstance().registerRestResponse(restResponse); } @When("^I disable \"([^\"]*)\"$") public void I_disable(String orchestratorName) throws Throwable { String orchestratorId = Context.getInstance().getOrchestratorId(orchestratorName); Context.getInstance().registerRestResponse(Context.getRestClientInstance().delete("/rest/v1/orchestrators/" + orchestratorId + "/instance")); } @When("^I disable all orchestrators$") public void I_disable_all_orchestrators() throws Throwable { for (String orchestratorId : Context.getInstance().getOrchestratorIds()) { Context.getRestClientInstance().delete("/rest/v1/orchestrators/" + orchestratorId + "/instance"); } } @When("^I update orchestrator name from \"([^\"]*)\" to \"([^\"]*)\"$") public void I_update_orchestrator_name_from_to(String oldName, String newName) throws Throwable { String orchestratorId = Context.getInstance().getOrchestratorId(oldName); UpdateOrchestratorRequest updateOrchestratorRequest = new UpdateOrchestratorRequest(); updateOrchestratorRequest.setName(newName); Context.getInstance().registerRestResponse( Context.getRestClientInstance().putJSon("/rest/v1/orchestrators/" + orchestratorId, JsonUtil.toString(updateOrchestratorRequest))); } @When("^I get the orchestrator named \"([^\"]*)\"$") public void I_get_the_orchestrator_named(String orchestratorName) throws Throwable { String orchestratorId = Context.getInstance().getOrchestratorId(orchestratorName); Context.getInstance().registerRestResponse(Context.getRestClientInstance().get("/rest/v1/orchestrators/" + orchestratorId)); // build eval context if possible String restResponse = Context.getInstance().getRestResponse(); RestResponse<Orchestrator> response = JsonUtil.read(restResponse, Orchestrator.class, Context.getJsonMapper()); if (response.getError() == null) { Context.getInstance().buildEvaluationContext(response.getData()); } } @Then("^Response should contains the orchestrator with name \"([^\"]*)\" and state enabled \"([^\"]*)\"$") public void Response_should_contains_the_orchestrator_with_name_and_state_enabled(String orchestratorName, String isStateEnabled) throws Throwable { RestResponse<Orchestrator> orchestratorResponse = JsonUtil.read(Context.getInstance().getRestResponse(), Orchestrator.class); Assert.assertNotNull(orchestratorResponse.getData()); Assert.assertEquals(orchestratorName, orchestratorResponse.getData().getName()); Assert.assertEquals(Boolean.valueOf(isStateEnabled), orchestratorResponse.getData().getState() == OrchestratorState.CONNECTED); } @Then("^I should receive a RestResponse with a non-empty list of usages$") public void I_should_receive_a_RestResponse_with_a_non_empty_list_of_usages() throws Throwable { RestResponse<?> response = JsonUtil.read(Context.getInstance().getRestResponse(), Context.getJsonMapper()); Assert.assertNotNull(response.getData()); List<Usage> usages = JsonUtil.toList(JsonUtil.toString(response.getData()), Usage.class, Context.getJsonMapper()); Assert.assertTrue(CollectionUtils.isNotEmpty(usages)); } }