Merge "Update get Dcae Status flow"
[clamp.git] / src / test / java / org / onap / clamp / loop / DeployFlowTestItCase.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP CLAMP
4  * ================================================================================
5  * Copyright (C) 2020 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 import com.google.gson.JsonSyntaxException;
31
32 import java.io.IOException;
33 import java.util.HashSet;
34 import java.util.Set;
35
36 import javax.transaction.Transactional;
37
38 import org.apache.camel.CamelContext;
39 import org.apache.camel.Exchange;
40 import org.apache.camel.builder.ExchangeBuilder;
41 import org.junit.Test;
42 import org.junit.runner.RunWith;
43 import org.onap.clamp.clds.Application;
44 import org.onap.clamp.loop.template.LoopTemplate;
45 import org.onap.clamp.policy.microservice.MicroServicePolicy;
46 import org.springframework.beans.factory.annotation.Autowired;
47 import org.springframework.boot.test.context.SpringBootTest;
48 import org.springframework.test.context.junit4.SpringRunner;
49
50 @RunWith(SpringRunner.class)
51 @SpringBootTest(classes = Application.class)
52 public class DeployFlowTestItCase {
53     private Gson gson = new Gson();
54
55     @Autowired
56     CamelContext camelContext;
57
58     @Autowired
59     LoopService loopService;
60
61     @Autowired
62     LoopsRepository loopsRepository;
63
64     @Test
65     @Transactional
66     public void deployWithSingleBlueprintTest() throws JsonSyntaxException, IOException {
67         Loop loopTest = createLoop("ControlLoopTest", "<xml></xml>", "yamlcontent", "{\"testname\":\"testvalue\"}",
68                 "UUID-blueprint");
69         LoopTemplate template = new LoopTemplate();
70         template.setName("templateName");
71         template.setBlueprint("yamlcontent");
72         loopTest.setLoopTemplate(template);
73         MicroServicePolicy microServicePolicy = getMicroServicePolicy("configPolicyTest", "",
74                 "{\"configtype\":\"json\"}", "tosca_definitions_version: tosca_simple_yaml_1_0_0",
75                 "{\"param1\":\"value1\"}", true);
76         loopTest.addMicroServicePolicy(microServicePolicy);
77         loopService.saveOrUpdateLoop(loopTest);
78         Exchange myCamelExchange = ExchangeBuilder.anExchange(camelContext).withProperty("loopObject", loopTest)
79                 .build();
80
81         camelContext.createProducerTemplate().send("direct:deploy-loop", myCamelExchange);
82
83         Loop loopAfterTest = loopService.getLoop("ControlLoopTest");
84         assertThat(loopAfterTest.getDcaeDeploymentStatusUrl()).isNotNull();
85         assertThat(loopAfterTest.getDcaeDeploymentId()).isNotNull();
86     }
87
88     @Test
89     @Transactional
90     public void deployWithMultipleBlueprintTest() throws JsonSyntaxException, IOException {
91         Loop loopTest2 = createLoop("ControlLoopTest2", "<xml></xml>", "yamlcontent", "{\"dcaeDeployParameters\": {"
92                 + "\"microService1\": {\"location_id\": \"\", \"policy_id\": \"TCA_ResourceInstanceName1_tca\"},"
93                 + "\"microService2\": {\"location_id\": \"\", \"policy_id\": \"TCA_ResourceInstanceName2_tca\"}"
94                 + "}}", "UUID-blueprint");
95         LoopTemplate template = new LoopTemplate();
96         template.setName("templateName");
97         loopTest2.setLoopTemplate(template);
98         MicroServicePolicy microServicePolicy1 = getMicroServicePolicy("microService1", "", "{\"configtype\":\"json\"}",
99                 "tosca_definitions_version: tosca_simple_yaml_1_0_0", "{\"param1\":\"value1\"}", true);
100         MicroServicePolicy microServicePolicy2 = getMicroServicePolicy("microService2", "", "{\"configtype\":\"json\"}",
101                 "tosca_definitions_version: tosca_simple_yaml_1_0_0", "{\"param1\":\"value1\"}", true);
102         loopTest2.addMicroServicePolicy(microServicePolicy1);
103         loopTest2.addMicroServicePolicy(microServicePolicy2);
104         loopsRepository.saveAndFlush(loopTest2);
105         Exchange myCamelExchange = ExchangeBuilder.anExchange(camelContext).withProperty("loopObject", loopTest2)
106                 .build();
107
108         camelContext.createProducerTemplate().send("direct:deploy-loop", myCamelExchange);
109
110         Loop loopAfterTest = loopService.getLoop("ControlLoopTest2");
111         Set<MicroServicePolicy> policyList = loopAfterTest.getMicroServicePolicies();
112         for (MicroServicePolicy policy : policyList) {
113             assertThat(policy.getDcaeDeploymentStatusUrl()).isNotNull();
114             assertThat(policy.getDcaeDeploymentId()).isNotNull();
115         }
116         assertThat(loopAfterTest.getDcaeDeploymentStatusUrl()).isNull();
117         assertThat(loopAfterTest.getDcaeDeploymentId()).isNull();
118     }
119
120     @Test
121     @Transactional
122     public void undeployWithSingleBlueprintTest() throws JsonSyntaxException, IOException {
123         Loop loopTest = createLoop("ControlLoopTest", "<xml></xml>", "yamlcontent", "{\"testname\":\"testvalue\"}",
124                 "UUID-blueprint");
125         LoopTemplate template = new LoopTemplate();
126         template.setName("templateName");
127         template.setBlueprint("yamlcontent");
128         loopTest.setLoopTemplate(template);
129         loopTest.setDcaeDeploymentId("testDeploymentId");
130         loopTest.setDcaeDeploymentStatusUrl("testUrl");
131         MicroServicePolicy microServicePolicy = getMicroServicePolicy("configPolicyTest", "",
132                 "{\"configtype\":\"json\"}", "tosca_definitions_version: tosca_simple_yaml_1_0_0",
133                 "{\"param1\":\"value1\"}", true);
134         loopTest.addMicroServicePolicy(microServicePolicy);
135         loopService.saveOrUpdateLoop(loopTest);
136         Exchange myCamelExchange = ExchangeBuilder.anExchange(camelContext).withProperty("loopObject", loopTest)
137                 .build();
138
139         camelContext.createProducerTemplate().send("direct:undeploy-loop", myCamelExchange);
140
141         Loop loopAfterTest = loopService.getLoop("ControlLoopTest");
142         assertThat(loopAfterTest.getDcaeDeploymentStatusUrl().contains("/uninstall")).isTrue();
143     }
144
145     @Test
146     @Transactional
147     public void undeployWithMultipleBlueprintTest() throws JsonSyntaxException, IOException {
148         Loop loopTest2 = createLoop("ControlLoopTest2", "<xml></xml>", "yamlcontent", "{\"dcaeDeployParameters\": {"
149                 + "\"microService1\": {\"location_id\": \"\", \"policy_id\": \"TCA_ResourceInstanceName1_tca\"},"
150                 + "\"microService2\": {\"location_id\": \"\", \"policy_id\": \"TCA_ResourceInstanceName2_tca\"}"
151                 + "}}", "UUID-blueprint");
152         LoopTemplate template = new LoopTemplate();
153         template.setName("templateName");
154         loopTest2.setLoopTemplate(template);
155         MicroServicePolicy microServicePolicy1 = getMicroServicePolicy("microService1", "", "{\"configtype\":\"json\"}",
156                 "tosca_definitions_version: tosca_simple_yaml_1_0_0", "{\"param1\":\"value1\"}", true,
157                 "testDeploymentId1", "testDeploymentStatusUrl1");
158         MicroServicePolicy microServicePolicy2 = getMicroServicePolicy("microService2", "", "{\"configtype\":\"json\"}",
159                 "tosca_definitions_version: tosca_simple_yaml_1_0_0", "{\"param1\":\"value1\"}", true,
160                 "testDeploymentId2", "testDeploymentStatusUrl2");
161         loopTest2.addMicroServicePolicy(microServicePolicy1);
162         loopTest2.addMicroServicePolicy(microServicePolicy2);
163         loopsRepository.saveAndFlush(loopTest2);
164         Exchange myCamelExchange = ExchangeBuilder.anExchange(camelContext).withProperty("loopObject", loopTest2)
165                 .build();
166
167         camelContext.createProducerTemplate().send("direct:undeploy-loop", myCamelExchange);
168
169         Loop loopAfterTest = loopService.getLoop("ControlLoopTest2");
170         Set<MicroServicePolicy> policyList = loopAfterTest.getMicroServicePolicies();
171         for (MicroServicePolicy policy : policyList) {
172             assertThat(policy.getDcaeDeploymentStatusUrl().contains("/uninstall")).isTrue();
173         }
174         assertThat(loopAfterTest.getDcaeDeploymentStatusUrl()).isNull();
175         assertThat(loopAfterTest.getDcaeDeploymentId()).isNull();
176     }
177
178
179     @Test
180     @Transactional
181     public void getStatusWithSingleBlueprintTest() throws JsonSyntaxException, IOException {
182         Loop loopTest = createLoop("ControlLoopTest", "<xml></xml>", "yamlcontent", "{\"testname\":\"testvalue\"}",
183                 "UUID-blueprint");
184         LoopTemplate template = new LoopTemplate();
185         template.setName("templateName");
186         template.setBlueprint("yamlcontent");
187         loopTest.setLoopTemplate(template);
188         MicroServicePolicy microServicePolicy = getMicroServicePolicy("configPolicyTest", "",
189                 "{\"configtype\":\"json\"}", "tosca_definitions_version: tosca_simple_yaml_1_0_0",
190                 "{\"param1\":\"value1\"}", true);
191         loopTest.addMicroServicePolicy(microServicePolicy);
192         loopService.saveOrUpdateLoop(loopTest);
193         assertThat(loopTest.getComponents().size()).isEqualTo(2);
194         assertThat(loopTest.getComponent("DCAE")).isNotNull();
195         assertThat(loopTest.getComponent("POLICY")).isNotNull();
196         Exchange myCamelExchange = ExchangeBuilder.anExchange(camelContext).withProperty("loopObject", loopTest)
197                 .build();
198
199         camelContext.createProducerTemplate().send("direct:update-dcae-status-for-loop", myCamelExchange);
200
201         assertThat(loopTest.getComponent("DCAE").getState().getStateName()).isEqualTo("BLUEPRINT_DEPLOYED");
202
203         Loop loopAfterTest = loopService.getLoop("ControlLoopTest");
204         assertThat(loopAfterTest.getComponents().size()).isEqualTo(2);
205         assertThat(loopAfterTest.getComponent("DCAE")).isNotNull();
206         assertThat(loopAfterTest.getComponent("POLICY")).isNotNull();
207     }
208
209     @Test
210     @Transactional
211     public void getStatusWithMultipleBlueprintTest() throws JsonSyntaxException, IOException {
212         Loop loopTest = createLoop("ControlLoopTest", "<xml></xml>", "yamlcontent", "{\"testname\":\"testvalue\"}",
213                 "UUID-blueprint");
214         LoopTemplate template = new LoopTemplate();
215         template.setName("templateName");
216         loopTest.setLoopTemplate(template);
217         MicroServicePolicy microServicePolicy = getMicroServicePolicy("configPolicyTest", "",
218                 "{\"configtype\":\"json\"}", "tosca_definitions_version: tosca_simple_yaml_1_0_0",
219                 "{\"param1\":\"value1\"}", true);
220         MicroServicePolicy microServicePolicy2 = getMicroServicePolicy("configPolicyTest2", "",
221                 "{\"configtype\":\"json\"}", "tosca_definitions_version: tosca_simple_yaml_1_0_0",
222                 "{\"param1\":\"value1\"}", true);
223         loopTest.addMicroServicePolicy(microServicePolicy);
224         loopTest.addMicroServicePolicy(microServicePolicy2);
225         loopService.saveOrUpdateLoop(loopTest);
226         assertThat(loopTest.getComponents().size()).isEqualTo(3);
227         assertThat(loopTest.getComponent("DCAE")).isNull();
228         assertThat(loopTest.getComponent("DCAE_configPolicyTest")).isNotNull();
229         assertThat(loopTest.getComponent("DCAE_configPolicyTest2")).isNotNull();
230         assertThat(loopTest.getComponent("POLICY")).isNotNull();
231         Exchange myCamelExchange = ExchangeBuilder.anExchange(camelContext).withProperty("loopObject", loopTest)
232                 .build();
233
234         camelContext.createProducerTemplate().send("direct:update-dcae-status-for-loop", myCamelExchange);
235
236         assertThat(loopTest.getComponent("DCAE_configPolicyTest").getState().getStateName())
237             .isEqualTo("BLUEPRINT_DEPLOYED");
238         assertThat(loopTest.getComponent("DCAE_configPolicyTest2").getState().getStateName())
239             .isEqualTo("BLUEPRINT_DEPLOYED");
240
241         Loop loopAfterTest = loopService.getLoop("ControlLoopTest");
242         assertThat(loopAfterTest.getComponents().size()).isEqualTo(3);
243         assertThat(loopAfterTest.getComponent("DCAE")).isNull();
244         assertThat(loopAfterTest.getComponent("POLICY")).isNotNull();
245         assertThat(loopTest.getComponent("DCAE_configPolicyTest")).isNotNull();
246         assertThat(loopTest.getComponent("DCAE_configPolicyTest2")).isNotNull();
247     }
248
249     private Loop createLoop(String name, String svgRepresentation, String blueprint, String globalPropertiesJson,
250             String dcaeBlueprintId) throws JsonSyntaxException, IOException {
251         Loop loop = new Loop(name, svgRepresentation);
252         loop.setGlobalPropertiesJson(new Gson().fromJson(globalPropertiesJson, JsonObject.class));
253         loop.setLastComputedState(LoopState.DESIGN);
254         return loop;
255     }
256
257     private MicroServicePolicy getMicroServicePolicy(String name, String modelType, String jsonRepresentation,
258             String policyTosca, String jsonProperties, boolean shared) {
259         MicroServicePolicy microService = new MicroServicePolicy(name, modelType, policyTosca, shared,
260                 gson.fromJson(jsonRepresentation, JsonObject.class), new HashSet<>());
261         microService.setConfigurationsJson(new Gson().fromJson(jsonProperties, JsonObject.class));
262         return microService;
263     }
264
265     private MicroServicePolicy getMicroServicePolicy(String name, String modelType, String jsonRepresentation,
266             String policyTosca, String jsonProperties, boolean shared, String deploymengId,
267             String deploymentStatusUrl) {
268         MicroServicePolicy microService = getMicroServicePolicy(name, modelType, jsonRepresentation, policyTosca,
269                 jsonProperties, shared);
270
271         microService.setDcaeDeploymentId(deploymengId);
272         microService.setDcaeDeploymentStatusUrl(deploymentStatusUrl);
273         return microService;
274     }
275 }