Update deploy-loop route
[clamp.git] / src / test / java / org / onap / clamp / loop / DcaeComponentTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP CLAMP
4  * ================================================================================
5  * Copyright (C) 2019 AT&T Intellectual Property. All rights
6  *                             reserved.
7  * ================================================================================
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  * ============LICENSE_END============================================
20  * ===================================================================
21  *
22  */
23
24 package org.onap.clamp.loop;
25
26 import static org.assertj.core.api.Assertions.assertThat;
27
28 import com.google.gson.Gson;
29 import com.google.gson.JsonObject;
30
31 import java.io.IOException;
32 import java.util.HashSet;
33
34 import org.apache.camel.Exchange;
35 import org.apache.camel.Message;
36 import org.junit.Test;
37 import org.mockito.Mockito;
38 import org.onap.clamp.clds.model.dcae.DcaeOperationStatusResponse;
39 import org.onap.clamp.loop.components.external.DcaeComponent;
40 import org.onap.clamp.loop.components.external.ExternalComponentState;
41 import org.onap.clamp.policy.microservice.MicroServicePolicy;
42
43 public class DcaeComponentTest {
44
45     private Loop createTestLoop() {
46         String yaml = "imports:\n" + "  - \"http://www.getcloudify.org/spec/cloudify/3.4/types.yaml\"\n"
47             + "node_templates:\n" + "  docker_service_host:\n" + "    type: dcae.nodes.SelectedDockerHost";
48
49         Loop loopTest = new Loop("ControlLoopTest", yaml, "<xml></xml>");
50         loopTest.setGlobalPropertiesJson(
51             new Gson().fromJson("{\"dcaeDeployParameters\":" + "{\"policy_id\": \"name\"}}", JsonObject.class));
52         loopTest.setLastComputedState(LoopState.DESIGN);
53         loopTest.setDcaeDeploymentId("123456789");
54         loopTest.setDcaeDeploymentStatusUrl("http4://localhost:8085");
55         loopTest.setDcaeBlueprintId("UUID-blueprint");
56
57         MicroServicePolicy microServicePolicy = new MicroServicePolicy("configPolicyTest", "",
58             "tosca_definitions_version: tosca_simple_yaml_1_0_0", true,
59             new Gson().fromJson("{\"configtype\":\"json\"}", JsonObject.class), new HashSet<>());
60         microServicePolicy.setConfigurationsJson(new Gson().fromJson("{\"param1\":\"value1\"}", JsonObject.class));
61
62         loopTest.addMicroServicePolicy(microServicePolicy);
63         return loopTest;
64     }
65
66     @Test
67     public void convertDcaeResponseTest() throws IOException {
68         String dcaeFakeResponse = "{'requestId':'testId','operationType':'install','status':'state','error':'errorMessage', "
69             + "'links':{'self':'selfUrl','uninstall':'uninstallUrl'}}";
70         DcaeOperationStatusResponse responseObject = DcaeComponent.convertDcaeResponse(dcaeFakeResponse);
71         assertThat(responseObject.getRequestId()).isEqualTo("testId");
72         assertThat(responseObject.getOperationType()).isEqualTo("install");
73         assertThat(responseObject.getStatus()).isEqualTo("state");
74         assertThat(responseObject.getError()).isEqualTo("errorMessage");
75         assertThat(responseObject.getLinks()).isNotNull();
76         assertThat(responseObject.getLinks().getSelf()).isEqualTo("selfUrl");
77         assertThat(responseObject.getLinks().getUninstall()).isEqualTo("uninstallUrl");
78
79         assertThat(responseObject.getLinks().getStatus()).isNull();
80     }
81
82     @Test
83     public void testGetDeployPayload() throws IOException {
84         Loop loop = this.createTestLoop();
85         String deploymentPayload = DcaeComponent.getDeployPayload(loop);
86         String expectedPayload = "{\"serviceTypeId\":\"UUID-blueprint\",\"inputs\":{\"policy_id\":\"name\"}}";
87         assertThat(deploymentPayload).isEqualTo(expectedPayload);
88     }
89
90     @Test
91     public void testGetUndeployPayload() throws IOException {
92         Loop loop = this.createTestLoop();
93         String unDeploymentPayload = DcaeComponent.getUndeployPayload(loop);
94         String expectedPayload = "{\"serviceTypeId\":\"UUID-blueprint\"}";
95         assertThat(unDeploymentPayload).isEqualTo(expectedPayload);
96     }
97
98     @Test
99     public void computeStateTest() throws IOException {
100         Exchange exchange = Mockito.mock(Exchange.class);
101         Message message = Mockito.mock(Message.class);
102         Exchange exchange2 = Mockito.mock(Exchange.class);
103         Mockito.when(exchange.getIn()).thenReturn(message);
104         Mockito.when(message.getExchange()).thenReturn(exchange2);
105         Mockito.when(exchange2.getProperty("dcaeResponse")).thenReturn(null);
106
107         DcaeComponent dcae = new DcaeComponent();
108
109         // initial state
110         ExternalComponentState state = dcae.computeState(exchange);
111         assertThat(state.getStateName()).isEqualTo("BLUEPRINT_DEPLOYED");
112
113         // OperationalType = install
114         DcaeOperationStatusResponse dcaeResponse = Mockito.mock(DcaeOperationStatusResponse.class); 
115         Mockito.when(dcaeResponse.getOperationType()).thenReturn("install");
116
117         Mockito.when(dcaeResponse.getStatus()).thenReturn("succeeded");
118         Mockito.when(exchange2.getProperty("dcaeResponse")).thenReturn(dcaeResponse);
119         ExternalComponentState state2 = dcae.computeState(exchange);
120         assertThat(state2.getStateName()).isEqualTo("MICROSERVICE_INSTALLED_SUCCESSFULLY");
121         Mockito.when(dcaeResponse.getStatus()).thenReturn("processing");
122         ExternalComponentState state3 = dcae.computeState(exchange);
123         assertThat(state3.getStateName()).isEqualTo("PROCESSING_MICROSERVICE_INSTALLATION");
124
125         Mockito.when(dcaeResponse.getStatus()).thenReturn("failed");
126         ExternalComponentState state4 = dcae.computeState(exchange);
127         assertThat(state4.getStateName()).isEqualTo("MICROSERVICE_INSTALLATION_FAILED");
128
129         // OperationalType = uninstall
130         Mockito.when(dcaeResponse.getOperationType()).thenReturn("uninstall");
131
132         Mockito.when(dcaeResponse.getStatus()).thenReturn("succeeded");
133         Mockito.when(exchange2.getProperty("dcaeResponse")).thenReturn(dcaeResponse);
134         ExternalComponentState state5 = dcae.computeState(exchange);
135         assertThat(state5.getStateName()).isEqualTo("MICROSERVICE_UNINSTALLED_SUCCESSFULLY");
136
137         Mockito.when(dcaeResponse.getStatus()).thenReturn("processing");
138         ExternalComponentState state6 = dcae.computeState(exchange);
139         assertThat(state6.getStateName()).isEqualTo("PROCESSING_MICROSERVICE_UNINSTALLATION");
140
141         Mockito.when(dcaeResponse.getStatus()).thenReturn("failed");
142         ExternalComponentState state7 = dcae.computeState(exchange);
143         assertThat(state7.getStateName()).isEqualTo("MICROSERVICE_UNINSTALLATION_FAILED");
144
145         // error cases
146         Mockito.when(dcaeResponse.getOperationType()).thenReturn("whatever");
147         ExternalComponentState state8 = dcae.computeState(exchange);
148         assertThat(state8.getStateName()).isEqualTo("IN_ERROR");
149
150         Mockito.when(dcaeResponse.getOperationType()).thenReturn("install");
151         Mockito.when(dcaeResponse.getStatus()).thenReturn("anythingelse");
152         ExternalComponentState state9 = dcae.computeState(exchange);
153         assertThat(state9.getStateName()).isEqualTo("IN_ERROR");
154     }
155 }