2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2019 Nokia 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.JsonObject;
31 import java.util.stream.Collectors;
33 import javax.transaction.Transactional;
35 import org.assertj.core.util.Lists;
36 import org.junit.After;
37 import org.junit.Test;
38 import org.junit.runner.RunWith;
39 import org.onap.clamp.clds.Application;
40 import org.onap.clamp.clds.util.JsonUtils;
41 import org.onap.clamp.policy.microservice.MicroServicePolicy;
42 import org.onap.clamp.policy.operational.OperationalPolicy;
43 import org.springframework.beans.factory.annotation.Autowired;
44 import org.springframework.boot.test.context.SpringBootTest;
45 import org.springframework.test.context.junit4.SpringRunner;
47 @RunWith(SpringRunner.class)
48 @SpringBootTest(classes = Application.class)
49 public class LoopServiceTestItCase {
51 private static final String EXAMPLE_LOOP_NAME = "ClosedLoopTest";
52 private static final String EXAMPLE_JSON = "{\"testName\":\"testValue\"}";
55 LoopService loopService;
58 LoopsRepository loopsRepository;
61 public void tearDown() {
62 loopsRepository.deleteAll();
67 public void shouldCreateEmptyLoop() {
69 String loopBlueprint = "blueprint";
70 String loopSvg = "representation";
71 Loop testLoop = createTestLoop(EXAMPLE_LOOP_NAME, loopBlueprint, loopSvg);
72 testLoop.setGlobalPropertiesJson(JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class));
73 testLoop.setLastComputedState(LoopState.DESIGN);
76 Loop actualLoop = loopService.saveOrUpdateLoop(testLoop);
79 assertThat(actualLoop).isNotNull();
80 assertThat(actualLoop).isEqualTo(loopsRepository.findById(actualLoop.getName()).get());
81 assertThat(actualLoop.getName()).isEqualTo(EXAMPLE_LOOP_NAME);
82 assertThat(actualLoop.getBlueprint()).isEqualTo(loopBlueprint);
83 assertThat(actualLoop.getSvgRepresentation()).isEqualTo(loopSvg);
84 assertThat(actualLoop.getGlobalPropertiesJson().getAsJsonPrimitive("testName").getAsString())
85 .isEqualTo("testValue");
90 public void shouldAddOperationalPolicyToLoop() {
93 OperationalPolicy operationalPolicy = new OperationalPolicy("policyName", null,
94 JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class));
97 Loop actualLoop = loopService.updateAndSaveOperationalPolicies(EXAMPLE_LOOP_NAME,
98 Lists.newArrayList(operationalPolicy));
101 assertThat(actualLoop).isNotNull();
102 assertThat(actualLoop.getName()).isEqualTo(EXAMPLE_LOOP_NAME);
103 Set<OperationalPolicy> savedPolicies = actualLoop.getOperationalPolicies();
104 assertThat(savedPolicies).hasSize(1);
105 assertThat(savedPolicies).usingElementComparatorIgnoringFields("loop").contains(operationalPolicy);
106 OperationalPolicy savedPolicy = savedPolicies.iterator().next();
107 assertThat(savedPolicy.getLoop().getName()).isEqualTo(EXAMPLE_LOOP_NAME);
113 public void shouldAddMicroservicePolicyToLoop() {
116 MicroServicePolicy microServicePolicy = new MicroServicePolicy("policyName", "",
117 "tosca_definitions_version: tosca_simple_yaml_1_0_0", false,
118 JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null);
121 Loop actualLoop = loopService.updateAndSaveMicroservicePolicies(EXAMPLE_LOOP_NAME,
122 Lists.newArrayList(microServicePolicy));
125 assertThat(actualLoop).isNotNull();
126 assertThat(actualLoop.getName()).isEqualTo(EXAMPLE_LOOP_NAME);
127 Set<MicroServicePolicy> savedPolicies = actualLoop.getMicroServicePolicies();
128 assertThat(savedPolicies).hasSize(1);
129 assertThat(savedPolicies).usingElementComparatorIgnoringFields("usedByLoops")
130 .containsExactly(microServicePolicy);
131 assertThat(savedPolicies).extracting("usedByLoops").hasSize(1);
137 public void shouldCreateNewMicroservicePolicyAndUpdateJsonRepresentationOfOldOne() {
141 MicroServicePolicy firstMicroServicePolicy = new MicroServicePolicy("firstPolicyName", "", "", false,
142 JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null);
143 loopService.updateAndSaveMicroservicePolicies(EXAMPLE_LOOP_NAME, Lists.newArrayList(firstMicroServicePolicy));
144 MicroServicePolicy secondMicroServicePolicy = new MicroServicePolicy("secondPolicyName", "",
145 "tosca_definitions_version: tosca_simple_yaml_1_0_0", true, JsonUtils.GSON.fromJson("{}", JsonObject.class),
149 firstMicroServicePolicy.setProperties(JsonUtils.GSON.fromJson("{\"name1\":\"value1\"}", JsonObject.class));
150 Loop actualLoop = loopService.updateAndSaveMicroservicePolicies(EXAMPLE_LOOP_NAME,
151 Lists.newArrayList(firstMicroServicePolicy, secondMicroServicePolicy));
154 assertThat(actualLoop).isNotNull();
155 assertThat(actualLoop.getName()).isEqualTo(EXAMPLE_LOOP_NAME);
156 Set<MicroServicePolicy> savedPolicies = actualLoop.getMicroServicePolicies();
157 assertThat(savedPolicies).hasSize(2);
158 assertThat(savedPolicies).contains(firstMicroServicePolicy);
159 assertThat(savedPolicies).contains(secondMicroServicePolicy);
160 assertThat(savedPolicies).usingElementComparatorIgnoringFields("usedByLoops")
161 .containsExactlyInAnyOrder(firstMicroServicePolicy, secondMicroServicePolicy);
165 private void saveTestLoopToDb() {
166 Loop testLoop = createTestLoop(EXAMPLE_LOOP_NAME, "blueprint", "representation");
167 testLoop.setGlobalPropertiesJson(JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class));
168 loopService.saveOrUpdateLoop(testLoop);
173 public void shouldRemoveOldMicroservicePolicyIfNotInUpdatedList() {
177 MicroServicePolicy firstMicroServicePolicy = new MicroServicePolicy("firstPolicyName", "",
178 "\"tosca_definitions_version: tosca_simple_yaml_1_0_0\"", false,
179 JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class), null);
180 loopService.updateAndSaveMicroservicePolicies(EXAMPLE_LOOP_NAME, Lists.newArrayList(firstMicroServicePolicy));
182 MicroServicePolicy secondMicroServicePolicy = new MicroServicePolicy("policyName", "", "secondPolicyTosca",
183 true, JsonUtils.GSON.fromJson("{}", JsonObject.class), null);
186 Loop actualLoop = loopService.updateAndSaveMicroservicePolicies(EXAMPLE_LOOP_NAME,
187 Lists.newArrayList(secondMicroServicePolicy));
190 assertThat(actualLoop).isNotNull();
191 assertThat(actualLoop.getName()).isEqualTo(EXAMPLE_LOOP_NAME);
192 Set<MicroServicePolicy> savedPolicies = actualLoop.getMicroServicePolicies();
193 assertThat(savedPolicies).hasSize(1);
194 assertThat(savedPolicies).usingElementComparatorIgnoringFields("usedByLoops")
195 .containsExactly(secondMicroServicePolicy);
201 public void shouldCreateNewOperationalPolicyAndUpdateJsonRepresentationOfOldOne() {
205 JsonObject newJsonConfiguration = JsonUtils.GSON.fromJson("{}", JsonObject.class);
207 OperationalPolicy firstOperationalPolicy = new OperationalPolicy("firstPolicyName", null,
208 JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class));
209 loopService.updateAndSaveOperationalPolicies(EXAMPLE_LOOP_NAME, Lists.newArrayList(firstOperationalPolicy));
211 OperationalPolicy secondOperationalPolicy = new OperationalPolicy("secondPolicyName", null,
212 newJsonConfiguration);
215 firstOperationalPolicy.setConfigurationsJson(newJsonConfiguration);
216 Loop actualLoop = loopService.updateAndSaveOperationalPolicies(EXAMPLE_LOOP_NAME,
217 Lists.newArrayList(firstOperationalPolicy, secondOperationalPolicy));
220 assertThat(actualLoop).isNotNull();
221 assertThat(actualLoop.getName()).isEqualTo(EXAMPLE_LOOP_NAME);
222 Set<OperationalPolicy> savedPolicies = actualLoop.getOperationalPolicies();
223 assertThat(savedPolicies).hasSize(2);
224 assertThat(savedPolicies).usingElementComparatorIgnoringFields("loop")
225 .containsExactlyInAnyOrder(firstOperationalPolicy, secondOperationalPolicy);
226 Set<String> policiesLoops = Lists.newArrayList(savedPolicies).stream().map(OperationalPolicy::getLoop)
227 .map(Loop::getName).collect(Collectors.toSet());
228 assertThat(policiesLoops).containsExactly(EXAMPLE_LOOP_NAME);
233 public void shouldRemoveOldOperationalPolicyIfNotInUpdatedList() {
237 OperationalPolicy firstOperationalPolicy = new OperationalPolicy("firstPolicyName", null,
238 JsonUtils.GSON.fromJson(EXAMPLE_JSON, JsonObject.class));
239 loopService.updateAndSaveOperationalPolicies(EXAMPLE_LOOP_NAME, Lists.newArrayList(firstOperationalPolicy));
241 OperationalPolicy secondOperationalPolicy = new OperationalPolicy("policyName", null,
242 JsonUtils.GSON.fromJson("{}", JsonObject.class));
245 Loop actualLoop = loopService.updateAndSaveOperationalPolicies(EXAMPLE_LOOP_NAME,
246 Lists.newArrayList(secondOperationalPolicy));
249 assertThat(actualLoop).isNotNull();
250 assertThat(actualLoop.getName()).isEqualTo(EXAMPLE_LOOP_NAME);
251 Set<OperationalPolicy> savedPolicies = actualLoop.getOperationalPolicies();
252 assertThat(savedPolicies).hasSize(1);
253 assertThat(savedPolicies).usingElementComparatorIgnoringFields("loop").containsExactly(secondOperationalPolicy);
254 OperationalPolicy savedPolicy = savedPolicies.iterator().next();
255 assertThat(savedPolicy.getLoop().getName()).isEqualTo(EXAMPLE_LOOP_NAME);
261 public void shouldCreateModelPropertiesAndUpdateJsonRepresentationOfOldOne() {
264 String expectedJson = "{\"test\":\"test\"}";
265 JsonObject baseGlobalProperites = JsonUtils.GSON.fromJson("{}", JsonObject.class);
266 JsonObject updatedGlobalProperites = JsonUtils.GSON.fromJson(expectedJson, JsonObject.class);
267 loopService.updateAndSaveGlobalPropertiesJson(EXAMPLE_LOOP_NAME, baseGlobalProperites);
270 Loop actualLoop = loopService.updateAndSaveGlobalPropertiesJson(EXAMPLE_LOOP_NAME, updatedGlobalProperites);
273 assertThat(actualLoop).isNotNull();
274 assertThat(actualLoop.getName()).isEqualTo(EXAMPLE_LOOP_NAME);
275 JsonObject returnedGlobalProperties = actualLoop.getGlobalPropertiesJson();
276 assertThat(returnedGlobalProperties.getAsJsonObject()).isEqualTo(updatedGlobalProperites);
279 private Loop createTestLoop(String loopName, String loopBlueprint, String loopSvg) {
280 return new Loop(loopName, loopBlueprint, loopSvg);