2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2020 AT&T Intellectual Property. All rights
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
12 * http://www.apache.org/licenses/LICENSE-2.0
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 * ===================================================================
24 package org.onap.clamp.loop;
26 import static org.assertj.core.api.Assertions.assertThat;
28 import com.google.gson.Gson;
29 import com.google.gson.JsonObject;
30 import com.google.gson.JsonSyntaxException;
32 import java.io.IOException;
33 import java.util.HashSet;
36 import javax.transaction.Transactional;
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;
50 @RunWith(SpringRunner.class)
51 @SpringBootTest(classes = Application.class)
52 public class DeployFlowTestItCase {
53 private Gson gson = new Gson();
56 CamelContext camelContext;
59 LoopService loopService;
62 LoopsRepository loopsRepository;
66 public void deployWithSingleBlueprintTest() throws JsonSyntaxException, IOException {
67 Loop loopTest = createLoop("ControlLoopTest", "<xml></xml>", "yamlcontent", "{\"testname\":\"testvalue\"}",
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)
81 camelContext.createProducerTemplate().send("direct:deploy-loop", myCamelExchange);
83 Loop loopAfterTest = loopService.getLoop("ControlLoopTest");
84 assertThat(loopAfterTest.getDcaeDeploymentStatusUrl()).isNotNull();
85 assertThat(loopAfterTest.getDcaeDeploymentId()).isNotNull();
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)
108 camelContext.createProducerTemplate().send("direct:deploy-loop", myCamelExchange);
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();
116 assertThat(loopAfterTest.getDcaeDeploymentStatusUrl()).isNull();
117 assertThat(loopAfterTest.getDcaeDeploymentId()).isNull();
122 public void undeployWithSingleBlueprintTest() throws JsonSyntaxException, IOException {
123 Loop loopTest = createLoop("ControlLoopTest", "<xml></xml>", "yamlcontent", "{\"testname\":\"testvalue\"}",
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)
139 camelContext.createProducerTemplate().send("direct:undeploy-loop", myCamelExchange);
141 Loop loopAfterTest = loopService.getLoop("ControlLoopTest");
142 assertThat(loopAfterTest.getDcaeDeploymentStatusUrl().contains("/uninstall")).isTrue();
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)
167 camelContext.createProducerTemplate().send("direct:undeploy-loop", myCamelExchange);
169 Loop loopAfterTest = loopService.getLoop("ControlLoopTest2");
170 Set<MicroServicePolicy> policyList = loopAfterTest.getMicroServicePolicies();
171 for (MicroServicePolicy policy : policyList) {
172 assertThat(policy.getDcaeDeploymentStatusUrl().contains("/uninstall")).isTrue();
174 assertThat(loopAfterTest.getDcaeDeploymentStatusUrl()).isNull();
175 assertThat(loopAfterTest.getDcaeDeploymentId()).isNull();
181 public void getStatusWithSingleBlueprintTest() throws JsonSyntaxException, IOException {
182 Loop loopTest = createLoop("ControlLoopTest", "<xml></xml>", "yamlcontent", "{\"testname\":\"testvalue\"}",
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)
199 camelContext.createProducerTemplate().send("direct:update-dcae-status-for-loop", myCamelExchange);
201 assertThat(loopTest.getComponent("DCAE").getState().getStateName()).isEqualTo("BLUEPRINT_DEPLOYED");
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();
211 public void getStatusWithMultipleBlueprintTest() throws JsonSyntaxException, IOException {
212 Loop loopTest = createLoop("ControlLoopTest", "<xml></xml>", "yamlcontent", "{\"testname\":\"testvalue\"}",
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)
234 camelContext.createProducerTemplate().send("direct:update-dcae-status-for-loop", myCamelExchange);
236 assertThat(loopTest.getComponent("DCAE_configPolicyTest").getState().getStateName())
237 .isEqualTo("BLUEPRINT_DEPLOYED");
238 assertThat(loopTest.getComponent("DCAE_configPolicyTest2").getState().getStateName())
239 .isEqualTo("BLUEPRINT_DEPLOYED");
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();
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);
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));
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);
271 microService.setDcaeDeploymentId(deploymengId);
272 microService.setDcaeDeploymentStatusUrl(deploymentStatusUrl);