summaryrefslogtreecommitdiffstats
path: root/adapters/mso-adapter-utils
diff options
context:
space:
mode:
authorMichal Kabaj <michal.kabaj@nokia.com>2018-09-17 15:10:43 +0200
committerMichal Kabaj <michal.kabaj@nokia.com>2018-09-17 15:10:43 +0200
commit8548b9a6401c1397f3a9cdf6bca98ff56971247d (patch)
tree87c2e8a27433c6981a9f3ba792e9064f261422de /adapters/mso-adapter-utils
parent7f14f0c2cb879573709b687697636095e134b231 (diff)
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 <michal.kabaj@nokia.com>
Diffstat (limited to 'adapters/mso-adapter-utils')
-rw-r--r--adapters/mso-adapter-utils/src/main/java/org/onap/so/cloudify/beans/DeploymentInfo.java220
-rw-r--r--adapters/mso-adapter-utils/src/main/java/org/onap/so/cloudify/beans/DeploymentInfoBuilder.java118
-rw-r--r--adapters/mso-adapter-utils/src/main/java/org/onap/so/cloudify/utils/MsoCloudifyUtils.java60
-rw-r--r--adapters/mso-adapter-utils/src/test/java/org/onap/so/cloudify/beans/DeploymentInfoBuilderTest.java168
-rw-r--r--adapters/mso-adapter-utils/src/test/java/org/onap/so/cloudify/beans/DeploymentInfoTest.java76
-rw-r--r--adapters/mso-adapter-utils/src/test/java/org/onap/so/cloudify/utils/MsoCloudifyUtilsTest2.java60
6 files changed, 423 insertions, 279 deletions
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<String,Object> outputs = new HashMap<String,Object>();
- private Map<String,Object> inputs = new HashMap<String,Object>();
- private String lastAction;
- private String actionStatus;
- private String errorMessage;
-
- public DeploymentInfo () {
- }
-
- public DeploymentInfo (String id, Map<String,Object> 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<String,Object> getOutputs () {
- return outputs;
- }
-
- public void setOutputs (Map<String,Object> outputs) {
- this.outputs = outputs;
- }
-
- public Map<String,Object> getInputs () {
- return inputs;
- }
-
- public void setInputs (Map<String,Object> 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<String, Object> outputs;
+ private final Map<String, Object> inputs;
+ private final String lastAction;
+ private final String actionStatus;
+ private final String errorMessage;
+
+ DeploymentInfo(String id, DeploymentStatus deploymentStatus,
+ Map<String, Object> deploymentOutputs,
+ Map<String, Object> 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<String, Object> getOutputs() {
+ return outputs;
+ }
+
+ public Map<String, Object> 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<String, Object> deploymentOutputs = new HashMap<>();
+ private Map<String, Object> 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<String, Object> deploymentOutputs) {
+ this.deploymentOutputs = deploymentOutputs;
+ return this;
+ }
+
+ public DeploymentInfoBuilder withDeploymentInputs(Map<String, Object> 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<String,Object> dep=new HashMap();
- Map<String,Object> outputs = new HashMap<String,Object>();
- Map<String,Object> inputs = new HashMap<String,Object>();
- 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<VduArtifact> 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<String, byte[]> 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));
}