From 8548b9a6401c1397f3a9cdf6bca98ff56971247d Mon Sep 17 00:00:00 2001 From: Michal Kabaj Date: Mon, 17 Sep 2018 15:10:43 +0200 Subject: DeploymentInfo tests and construction improvement - Improved construction by adding DeploymentInfoBuilder - DeploymentInfo immutable - added detailed unit tests Change-Id: I3dabb91d5190ef932e77f0c76e18fde8ca73c64d Issue-ID: SO-1055 Signed-off-by: Michal Kabaj --- .../org/onap/so/cloudify/beans/DeploymentInfo.java | 220 +++++++-------------- .../so/cloudify/beans/DeploymentInfoBuilder.java | 118 +++++++++++ .../onap/so/cloudify/utils/MsoCloudifyUtils.java | 60 ++++-- .../cloudify/beans/DeploymentInfoBuilderTest.java | 168 ++++++++++++++++ .../onap/so/cloudify/beans/DeploymentInfoTest.java | 76 ------- .../so/cloudify/utils/MsoCloudifyUtilsTest2.java | 60 +++--- 6 files changed, 423 insertions(+), 279 deletions(-) create mode 100644 adapters/mso-adapter-utils/src/main/java/org/onap/so/cloudify/beans/DeploymentInfoBuilder.java create mode 100644 adapters/mso-adapter-utils/src/test/java/org/onap/so/cloudify/beans/DeploymentInfoBuilderTest.java delete mode 100644 adapters/mso-adapter-utils/src/test/java/org/onap/so/cloudify/beans/DeploymentInfoTest.java (limited to 'adapters/mso-adapter-utils') diff --git a/adapters/mso-adapter-utils/src/main/java/org/onap/so/cloudify/beans/DeploymentInfo.java b/adapters/mso-adapter-utils/src/main/java/org/onap/so/cloudify/beans/DeploymentInfo.java index c6e29d05d7..d2b3334c8c 100644 --- a/adapters/mso-adapter-utils/src/main/java/org/onap/so/cloudify/beans/DeploymentInfo.java +++ b/adapters/mso-adapter-utils/src/main/java/org/onap/so/cloudify/beans/DeploymentInfo.java @@ -4,12 +4,14 @@ * ================================================================================ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. * ================================================================================ + * Copyright (C) 2018 Nokia. + * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -20,166 +22,78 @@ package org.onap.so.cloudify.beans; -import java.util.HashMap; import java.util.Map; -import org.onap.so.cloudify.v3.model.Deployment; -import org.onap.so.cloudify.v3.model.DeploymentOutputs; -import org.onap.so.cloudify.v3.model.Execution; - /* * This Java bean class relays Heat stack status information to ActiveVOS processes. - * + * * This bean is returned by all Heat-specific adapter operations (create, query, delete) */ -public class DeploymentInfo { - // Set defaults for everything - private String id = ""; - private DeploymentStatus status = DeploymentStatus.NOTFOUND; - private Map outputs = new HashMap(); - private Map inputs = new HashMap(); - private String lastAction; - private String actionStatus; - private String errorMessage; - - public DeploymentInfo () { - } - - public DeploymentInfo (String id, Map outputs) { - this.id = id; - if (outputs != null) this.outputs = outputs; - } - - public DeploymentInfo (String id) { - this.id = id; - } - - public DeploymentInfo (String id, DeploymentStatus status) { - this.id = id; - this.status = status; - } - - public DeploymentInfo (Deployment deployment) { - this(deployment, null, null); - } - - /** - * Construct a DeploymentInfo object from a deployment and the latest Execution action - * @param deployment - * @param execution - */ - public DeploymentInfo (Deployment deployment, DeploymentOutputs outputs, Execution execution) - { - if (deployment == null) { - this.id = null; - return; - } - - this.id = deployment.getId(); - - if (outputs != null) - this.outputs = outputs.getOutputs(); - - if (deployment.getInputs() != null) - this.inputs = deployment.getInputs(); - - if (execution != null) { - this.lastAction = execution.getWorkflowId(); - this.actionStatus = execution.getStatus(); - this.errorMessage = execution.getError(); - - // Compute the status based on the last workflow - if (lastAction.equals("install")) { - if (actionStatus.equals("terminated")) - this.status = DeploymentStatus.INSTALLED; - else if (actionStatus.equals("failed")) - this.status = DeploymentStatus.FAILED; - else if (actionStatus.equals("started") || actionStatus.equals("pending")) - this.status = DeploymentStatus.INSTALLING; - else - this.status = DeploymentStatus.UNKNOWN; - } - else if (lastAction.equals("uninstall")) { - if (actionStatus.equals("terminated")) - this.status = DeploymentStatus.CREATED; - else if (actionStatus.equals("failed")) - this.status = DeploymentStatus.FAILED; - else if (actionStatus.equals("started") || actionStatus.equals("pending")) - this.status = DeploymentStatus.UNINSTALLING; - else - this.status = DeploymentStatus.UNKNOWN; - } - else { - // Could have more cases in the future for different actions. - this.status = DeploymentStatus.UNKNOWN; - } - } - else { - this.status = DeploymentStatus.CREATED; - } - } - - public String getId() { - return id; - } - - public void setId (String id) { - this.id = id; - } - - public DeploymentStatus getStatus() { - return status; - } - - public void setStatus (DeploymentStatus status) { - this.status = status; - } - - public Map getOutputs () { - return outputs; - } - - public void setOutputs (Map outputs) { - this.outputs = outputs; - } - - public Map getInputs () { - return inputs; - } - - public void setInputs (Map inputs) { - this.inputs = inputs; - } - - public String getLastAction() { - return lastAction; - } - - public String getActionStatus() { - return actionStatus; - } - - public String getErrorMessage() { - return errorMessage; - } - - public void saveExecutionStatus (Execution execution) { - this.lastAction = execution.getWorkflowId(); - this.actionStatus = execution.getStatus(); - this.errorMessage = execution.getError(); - } - - @Override +public final class DeploymentInfo { + + private final String id; + private final DeploymentStatus status; + private final Map outputs; + private final Map inputs; + private final String lastAction; + private final String actionStatus; + private final String errorMessage; + + DeploymentInfo(String id, DeploymentStatus deploymentStatus, + Map deploymentOutputs, + Map deploymentInputs, + String lastAction, + String actionStatus, + String errorMessage) { + + this.id = id; + this.status = deploymentStatus; + this.outputs = deploymentOutputs; + this.inputs = deploymentInputs; + this.lastAction = lastAction; + this.actionStatus = actionStatus; + this.errorMessage = errorMessage; + } + + public String getId() { + return id; + } + + public DeploymentStatus getStatus() { + return status; + } + + public Map getOutputs() { + return outputs; + } + + public Map getInputs() { + return inputs; + } + + public String getLastAction() { + return lastAction; + } + + public String getActionStatus() { + return actionStatus; + } + + public String getErrorMessage() { + return errorMessage; + } + + @Override public String toString() { return "DeploymentInfo {" + - "id='" + id + '\'' + - ", inputs='" + inputs + '\'' + - ", outputs='" + outputs + '\'' + - ", lastAction='" + lastAction + '\'' + - ", status='" + status + '\'' + - ", errorMessage='" + errorMessage + '\'' + - '}'; + "id='" + id + '\'' + + ", inputs='" + inputs + '\'' + + ", outputs='" + outputs + '\'' + + ", lastAction='" + lastAction + '\'' + + ", status='" + status + '\'' + + ", errorMessage='" + errorMessage + '\'' + + '}'; } } diff --git a/adapters/mso-adapter-utils/src/main/java/org/onap/so/cloudify/beans/DeploymentInfoBuilder.java b/adapters/mso-adapter-utils/src/main/java/org/onap/so/cloudify/beans/DeploymentInfoBuilder.java new file mode 100644 index 0000000000..2e12869c95 --- /dev/null +++ b/adapters/mso-adapter-utils/src/main/java/org/onap/so/cloudify/beans/DeploymentInfoBuilder.java @@ -0,0 +1,118 @@ +/* + * ============LICENSE_START======================================================= + * ONAP : SO + * ================================================================================ + * Copyright (C) 2018 Nokia. + * ============================================================================= + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ +package org.onap.so.cloudify.beans; + +import java.util.HashMap; +import java.util.Map; +import org.onap.so.cloudify.v3.model.Execution; + +public final class DeploymentInfoBuilder { + + private String id = ""; + private DeploymentStatus deploymentStatus = DeploymentStatus.NOTFOUND; + private Map deploymentOutputs = new HashMap<>(); + private Map deploymentInputs = new HashMap<>(); + private String lastAction; + private String actionStatus; + private String errorMessage; + + public DeploymentInfoBuilder withId(String id) { + this.id = id; + return this; + } + + public DeploymentInfoBuilder withStatus(DeploymentStatus deploymentStatus) { + this.deploymentStatus = deploymentStatus; + return this; + } + + public DeploymentInfoBuilder withDeploymentOutputs(Map deploymentOutputs) { + this.deploymentOutputs = deploymentOutputs; + return this; + } + + public DeploymentInfoBuilder withDeploymentInputs(Map deploymentInputs) { + this.deploymentInputs = deploymentInputs; + return this; + } + + public DeploymentInfoBuilder withLastAction(String lastAction) { + this.lastAction = lastAction; + return this; + } + + public DeploymentInfoBuilder withActionStatus(String actionStatus) { + this.actionStatus = actionStatus; + return this; + } + + public DeploymentInfoBuilder withErrorMessage(String errorMessage) { + this.errorMessage = errorMessage; + return this; + } + + public DeploymentInfoBuilder fromExecution(Execution execution) { + if (execution != null) { + this.lastAction = execution.getWorkflowId(); + this.actionStatus = execution.getStatus(); + this.errorMessage = execution.getError(); + + // Compute the status based on the last workflow + if (lastAction.equals("install")) { + if (actionStatus.equals("terminated")) { + this.deploymentStatus = DeploymentStatus.INSTALLED; + } else if (actionStatus.equals("failed")) { + this.deploymentStatus = DeploymentStatus.FAILED; + } else if (actionStatus.equals("started") || actionStatus.equals("pending")) { + this.deploymentStatus = DeploymentStatus.INSTALLING; + } else { + this.deploymentStatus = DeploymentStatus.UNKNOWN; + } + } else if (lastAction.equals("uninstall")) { + if (actionStatus.equals("terminated")) { + this.deploymentStatus = DeploymentStatus.CREATED; + } else if (actionStatus.equals("failed")) { + this.deploymentStatus = DeploymentStatus.FAILED; + } else if (actionStatus.equals("started") || actionStatus.equals("pending")) { + this.deploymentStatus = DeploymentStatus.UNINSTALLING; + } else { + this.deploymentStatus = DeploymentStatus.UNKNOWN; + } + } else { + // Could have more cases in the future for different actions. + this.deploymentStatus = DeploymentStatus.UNKNOWN; + } + } else { + this.deploymentStatus = DeploymentStatus.CREATED; + } + + return this; + } + + public DeploymentInfo build() { + return new DeploymentInfo(id, + deploymentStatus, + deploymentOutputs, + deploymentInputs, + lastAction, + actionStatus, + errorMessage); + } +} diff --git a/adapters/mso-adapter-utils/src/main/java/org/onap/so/cloudify/utils/MsoCloudifyUtils.java b/adapters/mso-adapter-utils/src/main/java/org/onap/so/cloudify/utils/MsoCloudifyUtils.java index 677f6395ff..85abf9403c 100644 --- a/adapters/mso-adapter-utils/src/main/java/org/onap/so/cloudify/utils/MsoCloudifyUtils.java +++ b/adapters/mso-adapter-utils/src/main/java/org/onap/so/cloudify/utils/MsoCloudifyUtils.java @@ -4,6 +4,8 @@ * ================================================================================ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. * ================================================================================ + * Copyright (C) 2018 Nokia. + * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -20,6 +22,9 @@ package org.onap.so.cloudify.utils; +import com.fasterxml.jackson.core.JsonParseException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -30,7 +35,6 @@ import java.util.Map; import java.util.Optional; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; - import org.onap.so.adapters.vdu.CloudInfo; import org.onap.so.adapters.vdu.PluginAction; import org.onap.so.adapters.vdu.VduArtifact; @@ -42,14 +46,13 @@ import org.onap.so.adapters.vdu.VduPlugin; import org.onap.so.adapters.vdu.VduStateType; import org.onap.so.adapters.vdu.VduStatus; import org.onap.so.cloud.CloudConfig; -import org.onap.so.db.catalog.beans.CloudSite; -import org.onap.so.db.catalog.beans.CloudifyManager; import org.onap.so.cloudify.base.client.CloudifyBaseException; import org.onap.so.cloudify.base.client.CloudifyClientTokenProvider; import org.onap.so.cloudify.base.client.CloudifyConnectException; import org.onap.so.cloudify.base.client.CloudifyRequest; import org.onap.so.cloudify.base.client.CloudifyResponseException; import org.onap.so.cloudify.beans.DeploymentInfo; +import org.onap.so.cloudify.beans.DeploymentInfoBuilder; import org.onap.so.cloudify.beans.DeploymentStatus; import org.onap.so.cloudify.exceptions.MsoCloudifyException; import org.onap.so.cloudify.exceptions.MsoCloudifyManagerNotFound; @@ -77,6 +80,8 @@ import org.onap.so.cloudify.v3.model.Executions; import org.onap.so.cloudify.v3.model.OpenstackConfig; import org.onap.so.cloudify.v3.model.StartExecutionParams; import org.onap.so.config.beans.PoConfig; +import org.onap.so.db.catalog.beans.CloudSite; +import org.onap.so.db.catalog.beans.CloudifyManager; import org.onap.so.db.catalog.beans.HeatTemplateParam; import org.onap.so.logger.MessageEnum; import org.onap.so.logger.MsoAlarmLogger; @@ -93,10 +98,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; import org.springframework.stereotype.Component; -import com.fasterxml.jackson.core.JsonParseException; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; - @Component public class MsoCloudifyUtils extends MsoCommonUtils implements VduPlugin{ @@ -155,7 +156,6 @@ public class MsoCloudifyUtils extends MsoCommonUtils implements VduPlugin{ * @param inputs A map of key/value inputs * @param pollForCompletion Indicator that polling should be handled in Java vs. in the client * @param timeoutMinutes Timeout after which the "install" will be cancelled - * @param environment An optional yaml-format string to specify environmental parameters * @param backout Flag to delete deployment on install Failure - defaulted to True * @return A DeploymentInfo object * @throws MsoCloudifyException Thrown if the Cloudify API call returns an exception. @@ -256,7 +256,12 @@ public class MsoCloudifyUtils extends MsoCommonUtils implements VduPlugin{ // Success! // Create and return a DeploymentInfo structure. Include the Runtime outputs DeploymentOutputs outputs = getDeploymentOutputs (cloudify, deploymentId); - return new DeploymentInfo (deployment, outputs, installWorkflow); + return new DeploymentInfoBuilder() + .withId(deployment.getId()) + .withDeploymentInputs(deployment.getInputs()) + .withDeploymentOutputs(outputs.getOutputs()) + .fromExecution(installWorkflow) + .build(); } else { // The workflow completed with errors. Must try to back it out. @@ -538,7 +543,6 @@ public class MsoCloudifyUtils extends MsoCommonUtils implements VduPlugin{ * * @param tenantId The Openstack ID of the tenant in which to query * @param cloudSiteId The cloud identifier (may be a region) in which to query - * @param stackName The name of the stack to query (may be simple or canonical) * @return A StackInfo object * @throws MsoOpenstackException Thrown if the Openstack API call returns an exception. */ @@ -556,7 +560,7 @@ public class MsoCloudifyUtils extends MsoCommonUtils implements VduPlugin{ Cloudify cloudify = getCloudifyClient (cloudSite.get()); // Build and send the Cloudify request - Deployment deployment = null; + Deployment deployment = new Deployment(); DeploymentOutputs outputs = null; try { GetDeployment queryDeployment = cloudify.deployments().byId(deploymentId); @@ -573,10 +577,18 @@ public class MsoCloudifyUtils extends MsoCommonUtils implements VduPlugin{ // If no executions, does this give NOT_FOUND or empty set? if (executions.getItems().isEmpty()) { - return new DeploymentInfo (deployment); + return new DeploymentInfoBuilder() + .withId(deployment.getId()) + .withDeploymentInputs(deployment.getInputs()) + .build(); } else { - return new DeploymentInfo (deployment, outputs, executions.getItems().get(0)); + return new DeploymentInfoBuilder() + .withId(deployment.getId()) + .withDeploymentInputs(deployment.getInputs()) + .withDeploymentOutputs(outputs.getOutputs()) + .fromExecution(executions.getItems().get(0)) + .build(); } } catch (CloudifyConnectException ce) { @@ -589,10 +601,14 @@ public class MsoCloudifyUtils extends MsoCommonUtils implements VduPlugin{ // Got a NOT FOUND error. React differently based on deployment vs. execution if (deployment != null) { // Got NOT_FOUND on the executions. Assume this is a valid "empty" set - return new DeploymentInfo (deployment, outputs, null); + return new DeploymentInfoBuilder() + .withId(deployment.getId()) + .withDeploymentInputs(deployment.getInputs()) + .withDeploymentOutputs(outputs.getOutputs()) + .build(); } else { // Deployment not found. Default status of a DeploymentInfo object is NOTFOUND - return new DeploymentInfo (deploymentId); + return new DeploymentInfoBuilder().withId(deploymentId).build(); } } throw new MsoCloudifyException (re.getStatus(), re.getMessage(), re.getLocalizedMessage(), re); @@ -615,8 +631,6 @@ public class MsoCloudifyUtils extends MsoCommonUtils implements VduPlugin{ * * @param tenantId The Openstack ID of the tenant in which to perform the delete * @param cloudSiteId The cloud identifier (may be a region) from which to delete the stack. - * @param stackName The name/id of the stack to delete. May be simple or canonical - * @param pollForCompletion Indicator that polling should be handled in Java vs. in the client * @return A StackInfo object * @throws MsoOpenstackException Thrown if the Openstack API call returns an exception. * @throws MsoCloudSiteNotFound @@ -651,7 +665,10 @@ public class MsoCloudifyUtils extends MsoCommonUtils implements VduPlugin{ // Deployment doesn't exist. Return a "NOTFOUND" DeploymentInfo object // TODO: Should return NULL? LOGGER.debug("Deployment requested for deletion does not exist: " + deploymentId); - return new DeploymentInfo (deploymentId, DeploymentStatus.NOTFOUND); + return new DeploymentInfoBuilder() + .withId(deploymentId) + .withStatus(DeploymentStatus.NOTFOUND) + .build(); } else { // Convert the CloudifyResponseException to an MsoOpenstackException LOGGER.debug("ERROR STATUS = " + e.getStatus() + ",\n" + e.getMessage() + "\n" + e.getLocalizedMessage()); @@ -741,7 +758,12 @@ public class MsoCloudifyUtils extends MsoCommonUtils implements VduPlugin{ } // Return the deleted deployment info (with runtime outputs) along with the completed uninstall workflow status - return new DeploymentInfo (deployment, outputs, uninstallWorkflow); + return new DeploymentInfoBuilder() + .withId(deployment.getId()) + .withDeploymentInputs(deployment.getInputs()) + .withDeploymentOutputs(outputs.getOutputs()) + .fromExecution(uninstallWorkflow) + .build(); } diff --git a/adapters/mso-adapter-utils/src/test/java/org/onap/so/cloudify/beans/DeploymentInfoBuilderTest.java b/adapters/mso-adapter-utils/src/test/java/org/onap/so/cloudify/beans/DeploymentInfoBuilderTest.java new file mode 100644 index 0000000000..8f172b79ca --- /dev/null +++ b/adapters/mso-adapter-utils/src/test/java/org/onap/so/cloudify/beans/DeploymentInfoBuilderTest.java @@ -0,0 +1,168 @@ +/* + * ============LICENSE_START======================================================= + * ONAP : SO + * ================================================================================ + * Copyright (C) 2018 Nokia. + * ============================================================================= + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ +package org.onap.so.cloudify.beans; + +import static org.assertj.core.api.Assertions.assertThat; + +import com.google.common.collect.ImmutableMap; +import org.junit.Test; +import org.onap.so.cloudify.v3.model.Execution; + +public class DeploymentInfoBuilderTest { + + private static final String ERROR_MESSAGE = "something went wrong"; + private static final String INSTALL_WORKFLOW_ID = "install"; + private static final String UNINSTALL_WORKFLOW_ID = "uninstall"; + + @Test + public void shouldConstructDeploymentInfo_withBasicValues() { + DeploymentInfo deploymentInfo = new DeploymentInfoBuilder() + .withId("id") + .withStatus(DeploymentStatus.CREATED) + .withDeploymentOutputs(ImmutableMap.of()) + .withDeploymentInputs(ImmutableMap.of()) + .withActionStatus("started") + .withLastAction(INSTALL_WORKFLOW_ID) + .withErrorMessage(ERROR_MESSAGE) + .build(); + + assertThat(deploymentInfo.getId()).isEqualTo("id"); + assertThat(deploymentInfo.getStatus()).isEqualTo(DeploymentStatus.CREATED); + assertThat(deploymentInfo.getOutputs()).isEqualTo(ImmutableMap.of()); + assertThat(deploymentInfo.getInputs()).isEqualTo(ImmutableMap.of()); + assertThat(deploymentInfo.getActionStatus()).isEqualTo("started"); + assertThat(deploymentInfo.getLastAction()).isEqualTo(INSTALL_WORKFLOW_ID); + assertThat(deploymentInfo.getErrorMessage()).isEqualTo(ERROR_MESSAGE); + } + + @Test + public void shouldConstructDeploymentInfo_withCreateDeploymentStatus_fromNullExecution() { + DeploymentInfo deploymentInfo = new DeploymentInfoBuilder() + .fromExecution(null) + .build(); + + assertThat(deploymentInfo.getStatus()).isEqualTo(DeploymentStatus.CREATED); + } + + @Test + public void shouldConstructDeploymentInfo_withInstalledDeploymentStatus_fromTerminatedExecution() { + String workflowIdLastAction = INSTALL_WORKFLOW_ID; + String status = "terminated"; + DeploymentStatus expectedDeploymentStatus = DeploymentStatus.INSTALLED; + verifyDeploymentInfoConstruction(workflowIdLastAction, status, expectedDeploymentStatus); + } + + @Test + public void shouldConstructDeploymentInfo_withFailedDeploymentStatus_fromFailedInstallExecution() { + String workflowIdLastAction = INSTALL_WORKFLOW_ID; + String status = "failed"; + DeploymentStatus expectedDeploymentStatus = DeploymentStatus.FAILED; + verifyDeploymentInfoConstruction(workflowIdLastAction, status, expectedDeploymentStatus); + } + + @Test + public void shouldConstructDeploymentInfo_withInstallingDeploymentStatus_fromStartedExecution() { + String workflowIdLastAction = INSTALL_WORKFLOW_ID; + String status = "started"; + DeploymentStatus expectedDeploymentStatus = DeploymentStatus.INSTALLING; + verifyDeploymentInfoConstruction(workflowIdLastAction, status, expectedDeploymentStatus); + } + + @Test + public void shouldConstructDeploymentInfo_withInstallingDeploymentStatus_fromPendingExecution() { + String workflowIdLastAction = INSTALL_WORKFLOW_ID; + String status = "pending"; + DeploymentStatus expectedDeploymentStatus = DeploymentStatus.INSTALLING; + verifyDeploymentInfoConstruction(workflowIdLastAction, status, expectedDeploymentStatus); + } + + @Test + public void shouldConstructDeploymentInfo_withUnknownDeploymentStatus_fromUnmappableExecution() { + String workflowIdLastAction = INSTALL_WORKFLOW_ID; + String status = "strangeStatus"; + DeploymentStatus expectedDeploymentStatus = DeploymentStatus.UNKNOWN; + verifyDeploymentInfoConstruction(workflowIdLastAction, status, expectedDeploymentStatus); + } + + @Test + public void shouldConstructDeploymentInfo_withCreatedDeploymentStatus_fromTerminatedExecution() { + String workflowIdLastAction = UNINSTALL_WORKFLOW_ID; + String status = "terminated"; + DeploymentStatus expectedDeploymentStatus = DeploymentStatus.CREATED; + verifyDeploymentInfoConstruction(workflowIdLastAction, status, expectedDeploymentStatus); + } + + @Test + public void shouldConstructDeploymentInfo_withFailedDeploymentStatus_fromFailedUninstallExecution() { + String workflowIdLastAction = UNINSTALL_WORKFLOW_ID; + String status = "failed"; + DeploymentStatus expectedDeploymentStatus = DeploymentStatus.FAILED; + verifyDeploymentInfoConstruction(workflowIdLastAction, status, expectedDeploymentStatus); + } + + @Test + public void shouldConstructDeploymentInfo_withUninstallingDeploymentStatus_fromStartedUninstallExecution() { + String workflowIdLastAction = UNINSTALL_WORKFLOW_ID; + String status = "started"; + DeploymentStatus expectedDeploymentStatus = DeploymentStatus.UNINSTALLING; + verifyDeploymentInfoConstruction(workflowIdLastAction, status, expectedDeploymentStatus); + } + + @Test + public void shouldConstructDeploymentInfo_withUninstallingDeploymentStatus_fromPendingUninstallExecution() { + String workflowIdLastAction = UNINSTALL_WORKFLOW_ID; + String status = "pending"; + DeploymentStatus expectedDeploymentStatus = DeploymentStatus.UNINSTALLING; + verifyDeploymentInfoConstruction(workflowIdLastAction, status, expectedDeploymentStatus); + } + + @Test + public void shouldConstructDeploymentInfo_withUnknownDeploymentStatus_fromUnmappableUninstallExecution() { + String workflowIdLastAction = UNINSTALL_WORKFLOW_ID; + String status = "strangeStatus"; + DeploymentStatus expectedDeploymentStatus = DeploymentStatus.UNKNOWN; + verifyDeploymentInfoConstruction(workflowIdLastAction, status, expectedDeploymentStatus); + } + + @Test + public void shouldConstructDeploymentInfo_withUnknownDeploymentStatus_forUnknownExecutionWorkflowId() { + String workflowIdLastAction = "strangeWorkflowIdLastAction"; + String status = "strangeStatus"; + DeploymentStatus expectedDeploymentStatus = DeploymentStatus.UNKNOWN; + verifyDeploymentInfoConstruction(workflowIdLastAction, status, expectedDeploymentStatus); + } + + private void verifyDeploymentInfoConstruction(String workflowIdLastAction, String actionStatus, + DeploymentStatus expectedDeploymentStatus) { + + Execution execution = new Execution(); + execution.setWorkflowId(workflowIdLastAction); + execution.setStatus(actionStatus); + execution.setError(ERROR_MESSAGE); + DeploymentInfo deploymentInfo = new DeploymentInfoBuilder() + .fromExecution(execution) + .build(); + + assertThat(deploymentInfo.getLastAction()).isEqualTo(workflowIdLastAction); + assertThat(deploymentInfo.getActionStatus()).isEqualTo(actionStatus); + assertThat(deploymentInfo.getErrorMessage()).isEqualTo(ERROR_MESSAGE); + assertThat(deploymentInfo.getStatus()).isEqualTo(expectedDeploymentStatus); + } +} \ No newline at end of file diff --git a/adapters/mso-adapter-utils/src/test/java/org/onap/so/cloudify/beans/DeploymentInfoTest.java b/adapters/mso-adapter-utils/src/test/java/org/onap/so/cloudify/beans/DeploymentInfoTest.java deleted file mode 100644 index e200f9aa96..0000000000 --- a/adapters/mso-adapter-utils/src/test/java/org/onap/so/cloudify/beans/DeploymentInfoTest.java +++ /dev/null @@ -1,76 +0,0 @@ -/* -* ============LICENSE_START======================================================= - * ONAP : SO - * ================================================================================ - * Copyright (C) 2018 TechMahindra - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= -*/ - -package org.onap.so.cloudify.beans; - -import static org.mockito.Mockito.mock; -import java.util.HashMap; -import java.util.Map; -import org.junit.Test; -import org.mockito.Mock; -import org.onap.so.cloudify.v3.model.Deployment; -import org.onap.so.cloudify.v3.model.DeploymentOutputs; -import org.onap.so.cloudify.v3.model.Execution; -import org.powermock.api.mockito.PowerMockito; - -public class DeploymentInfoTest { - - @Mock - DeploymentStatus status; - - @Mock - DeploymentOutputs out; - - @Mock - Execution execution; - - @Mock - Deployment deployment; - - @Test - public void test() { - Deployment deployment=mock(Deployment.class); - Map dep=new HashMap(); - Map outputs = new HashMap(); - Map inputs = new HashMap(); - inputs.put("id",dep); - status=DeploymentStatus.CREATED; - outputs.put("id", out); - dep.put("id", outputs); - DeploymentInfo dinfo=new DeploymentInfo(deployment); - DeploymentInfo dinfi=new DeploymentInfo("id"); - DeploymentInfo din=new DeploymentInfo("id",outputs); - DeploymentInfo dfo=new DeploymentInfo("id", status); - DeploymentInfo dfoi=new DeploymentInfo(deployment, out, execution); - dinfo=PowerMockito.spy(new DeploymentInfo()); - dinfo.setId("id"); - dinfi.setInputs(inputs); - din.setStatus(status); - din.setOutputs(outputs); - assert(din.toString()!=null); - assert(din.getOutputs().equals(outputs)); - assert(din.getId().equals("id")); - assert(din.getStatus().equals(status)); - din.getLastAction(); - din.getErrorMessage(); - din.getActionStatus(); - } - -} diff --git a/adapters/mso-adapter-utils/src/test/java/org/onap/so/cloudify/utils/MsoCloudifyUtilsTest2.java b/adapters/mso-adapter-utils/src/test/java/org/onap/so/cloudify/utils/MsoCloudifyUtilsTest2.java index 96202c5122..c7aecd90be 100644 --- a/adapters/mso-adapter-utils/src/test/java/org/onap/so/cloudify/utils/MsoCloudifyUtilsTest2.java +++ b/adapters/mso-adapter-utils/src/test/java/org/onap/so/cloudify/utils/MsoCloudifyUtilsTest2.java @@ -2,14 +2,16 @@ * ============LICENSE_START======================================================= * ONAP - SO * ================================================================================ - * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Copyright (C) 2018 Nokia. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -17,7 +19,6 @@ * limitations under the License. * ============LICENSE_END========================================================= */ - package org.onap.so.cloudify.utils; import static com.shazam.shazamcrest.MatcherAssert.assertThat; @@ -42,6 +43,7 @@ import org.onap.so.adapters.vdu.VduModelInfo; import org.onap.so.adapters.vdu.VduStateType; import org.onap.so.adapters.vdu.VduStatus; import org.onap.so.cloud.CloudConfig; +import org.onap.so.cloudify.beans.DeploymentInfoBuilder; import org.onap.so.db.catalog.beans.CloudIdentity; import org.onap.so.db.catalog.beans.CloudSite; import org.onap.so.cloudify.beans.DeploymentInfo; @@ -82,9 +84,10 @@ public class MsoCloudifyUtilsTest2 { List artifacts = new ArrayList<>(); artifacts.add(artifact); vduModel.setArtifacts(artifacts); - DeploymentInfo deployment = new DeploymentInfo(); - deployment.setId("id"); - deployment.setStatus(DeploymentStatus.INSTALLED); + DeploymentInfo deployment = new DeploymentInfoBuilder() + .withId("id") + .withStatus(DeploymentStatus.INSTALLED) + .build(); Map blueprintFiles = new HashMap<>(); blueprintFiles.put(artifact.getName(), artifact.getContent()); String instanceName = "instanceName"; @@ -118,9 +121,10 @@ public class MsoCloudifyUtilsTest2 { CloudInfo cloudInfo = new CloudInfo(); cloudInfo.setCloudSiteId("cloudSiteId"); cloudInfo.setTenantId("tenantId"); - DeploymentInfo deployment = new DeploymentInfo(); - deployment.setId("id"); - deployment.setStatus(DeploymentStatus.INSTALLED); + DeploymentInfo deployment = new DeploymentInfoBuilder() + .withId("id") + .withStatus(DeploymentStatus.INSTALLED) + .build(); String instanceId = "instanceId"; MsoCloudifyUtils cloudify = Mockito.spy(MsoCloudifyUtils.class); @@ -148,14 +152,12 @@ public class MsoCloudifyUtilsTest2 { cloudInfo.setTenantId("tenantId"); String instanceId = "instanceId"; int timeoutMinutes = 1; - DeploymentInfo deployment = Mockito.mock(DeploymentInfo.class); - deployment.setId("id"); - deployment.setStatus(DeploymentStatus.CREATED); - when(deployment.getId()).thenReturn("id"); - when(deployment.getStatus()).thenReturn(DeploymentStatus.CREATED); - when(deployment.getLastAction()).thenReturn("deleting"); + DeploymentInfo deploymentInfo = new DeploymentInfoBuilder() + .withId("id") + .withStatus(DeploymentStatus.CREATED) + .withLastAction("deleting").build(); MsoCloudifyUtils cloudify = Mockito.spy(MsoCloudifyUtils.class); - doReturn(deployment).when(cloudify).uninstallAndDeleteDeployment(cloudInfo.getCloudSiteId(), + doReturn(deploymentInfo).when(cloudify).uninstallAndDeleteDeployment(cloudInfo.getCloudSiteId(), cloudInfo.getTenantId(), instanceId, timeoutMinutes); VduInstance actual = cloudify.deleteVdu(cloudInfo, instanceId, timeoutMinutes); @@ -173,16 +175,14 @@ public class MsoCloudifyUtilsTest2 { status.setLastAction(new PluginAction("deleting", null, null)); expected.setStatus(status); - DeploymentInfo deployment = Mockito.mock(DeploymentInfo.class); - deployment.setId("id"); - deployment.setStatus(DeploymentStatus.CREATED); - when(deployment.getId()).thenReturn("id"); - when(deployment.getStatus()).thenReturn(DeploymentStatus.CREATED); - when(deployment.getLastAction()).thenReturn("deleting"); + DeploymentInfo deploymentInfo = new DeploymentInfoBuilder() + .withId("id") + .withStatus(DeploymentStatus.CREATED) + .withLastAction("deleting").build(); MsoCloudifyUtils cloudify = new MsoCloudifyUtils(); - VduInstance actual = cloudify.deploymentInfoToVduInstance(deployment); + VduInstance actual = cloudify.deploymentInfoToVduInstance(deploymentInfo); assertThat(actual, sameBeanAs(expected)); } @@ -193,16 +193,14 @@ public class MsoCloudifyUtilsTest2 { expected.setState(VduStateType.DELETING); expected.setLastAction(new PluginAction("deleting", null, null)); - DeploymentInfo deployment = Mockito.mock(DeploymentInfo.class); - deployment.setId("id"); - deployment.setStatus(DeploymentStatus.CREATED); - when(deployment.getId()).thenReturn("id"); - when(deployment.getStatus()).thenReturn(DeploymentStatus.CREATED); - when(deployment.getLastAction()).thenReturn("deleting"); + DeploymentInfo deploymentInfo = new DeploymentInfoBuilder() + .withId("id") + .withStatus(DeploymentStatus.CREATED) + .withLastAction("deleting").build(); MsoCloudifyUtils cloudify = new MsoCloudifyUtils(); - VduStatus actual = cloudify.deploymentStatusToVduStatus(deployment); + VduStatus actual = cloudify.deploymentStatusToVduStatus(deploymentInfo); assertThat(actual, sameBeanAs(expected)); } -- cgit 1.2.3-korg