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