b16aa558d90640062cd389269a970b101423ed5c
[clamp.git] / src / test / java / org / onap / clamp / loop / PolicyModelServiceItCase.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.JsonObject;
29 import java.io.IOException;
30 import java.util.LinkedList;
31 import java.util.List;
32 import java.util.SortedSet;
33 import java.util.TreeSet;
34 import java.util.stream.Collectors;
35 import javax.transaction.Transactional;
36 import org.junit.Test;
37 import org.junit.runner.RunWith;
38 import org.onap.clamp.clds.Application;
39 import org.onap.clamp.clds.util.JsonUtils;
40 import org.onap.clamp.clds.util.ResourceFileUtil;
41 import org.onap.clamp.loop.template.PolicyModel;
42 import org.onap.clamp.loop.template.PolicyModelId;
43 import org.onap.clamp.loop.template.PolicyModelsRepository;
44 import org.onap.clamp.loop.template.PolicyModelsService;
45 import org.onap.clamp.policy.pdpgroup.PdpGroup;
46 import org.onap.clamp.policy.pdpgroup.PdpSubgroup;
47 import org.onap.clamp.policy.pdpgroup.PolicyModelKey;
48 import org.springframework.beans.factory.annotation.Autowired;
49 import org.springframework.boot.test.context.SpringBootTest;
50 import org.springframework.test.context.junit4.SpringRunner;
51
52 @RunWith(SpringRunner.class)
53 @SpringBootTest(classes = Application.class)
54 public class PolicyModelServiceItCase {
55
56     @Autowired
57     PolicyModelsService policyModelsService;
58
59     @Autowired
60     PolicyModelsRepository policyModelsRepository;
61
62     private static final String POLICY_MODEL_TYPE_1 = "org.onap.testos";
63     private static final String POLICY_MODEL_TYPE_1_VERSION_1 = "1.0.0";
64
65     private static final String POLICY_MODEL_TYPE_2 = "org.onap.testos2";
66     private static final String POLICY_MODEL_TYPE_3 = "org.onap.testos3";
67     private static final String POLICY_MODEL_TYPE_2_VERSION_1 = "1.0.0";
68     private static final String POLICY_MODEL_TYPE_3_VERSION_1 = "1.0.0";
69     private static final String POLICY_MODEL_TYPE_2_VERSION_2 = "2.0.0";
70
71     private PolicyModel getPolicyModel(String policyType, String policyModelTosca, String version,
72         String policyAcronym, String policyVariant, String createdBy) {
73         PolicyModel policyModel = new PolicyModel();
74         policyModel.setCreatedBy(createdBy);
75         policyModel.setPolicyAcronym(policyAcronym);
76         policyModel.setPolicyModelTosca(policyModelTosca);
77         policyModel.setPolicyModelType(policyType);
78         policyModel.setUpdatedBy(createdBy);
79         policyModel.setVersion(version);
80         return policyModel;
81     }
82
83     /**
84      * This test the create policy Model.
85      */
86     @Test
87     @Transactional
88     public void shouldCreatePolicyModel() {
89         // given
90         PolicyModel policyModel = getPolicyModel(POLICY_MODEL_TYPE_1, "yaml",
91             POLICY_MODEL_TYPE_1_VERSION_1, "TEST", "VARIANT", "user");
92
93         // when
94         PolicyModel actualPolicyModel = policyModelsService.saveOrUpdatePolicyModel(policyModel);
95
96         // then
97         assertThat(actualPolicyModel).isNotNull();
98         assertThat(actualPolicyModel).isEqualTo(policyModelsRepository
99             .findById(new PolicyModelId(actualPolicyModel.getPolicyModelType(),
100                 actualPolicyModel.getVersion()))
101             .get());
102         assertThat(actualPolicyModel.getPolicyModelType())
103             .isEqualTo(policyModel.getPolicyModelType());
104         assertThat(actualPolicyModel.getCreatedBy()).isEqualTo("Not found");
105         assertThat(actualPolicyModel.getCreatedDate()).isNotNull();
106         assertThat(actualPolicyModel.getPolicyAcronym()).isEqualTo(policyModel.getPolicyAcronym());
107         assertThat(actualPolicyModel.getPolicyModelTosca())
108             .isEqualTo(policyModel.getPolicyModelTosca());
109         assertThat(actualPolicyModel.getUpdatedBy()).isEqualTo("Not found");
110         assertThat(actualPolicyModel.getUpdatedDate()).isNotNull();
111         assertThat(actualPolicyModel.getVersion()).isEqualTo(policyModel.getVersion());
112
113         assertThat(
114             policyModelsService.getPolicyModel(POLICY_MODEL_TYPE_1, POLICY_MODEL_TYPE_1_VERSION_1))
115                 .isEqualToIgnoringGivenFields(policyModel, "createdDate", "updatedDate",
116                     "createdBy", "updatedBy");
117     }
118
119     /**
120      * This tests a create Policy Model from Tosca.
121      *
122      * @throws IOException In case of failure
123      */
124     @Test
125     @Transactional
126     public void shouldCreatePolicyModelFromTosca() throws IOException {
127         String toscaModelYaml =
128             ResourceFileUtil.getResourceAsString("tosca/tosca_with_metadata.yaml");
129         PolicyModel policyModel = policyModelsService.createNewPolicyModelFromTosca(toscaModelYaml);
130
131         assertThat(policyModelsService.getAllPolicyModels()).contains(policyModel);
132
133         assertThat(policyModelsService.getPolicyModelTosca(policyModel.getPolicyModelType(),
134             policyModel.getVersion())).contains(toscaModelYaml);
135     }
136
137     /**
138      * This tests a update Policy Model.
139      *
140      * @throws IOException In case of failure
141      */
142     @Test
143     @Transactional
144     public void shouldUpdatePolicyModel() throws IOException {
145         String toscaModelYaml =
146             ResourceFileUtil.getResourceAsString("tosca/tosca_with_metadata.yaml");
147         PolicyModel policyModel = policyModelsService.createNewPolicyModelFromTosca(toscaModelYaml);
148         String newToscaModelYaml =
149             ResourceFileUtil.getResourceAsString("tosca/tosca_metadata_clamp_possible_values.yaml");
150
151         PolicyModel updatedPolicyModel = policyModelsService.updatePolicyModelTosca(
152             policyModel.getPolicyModelType(), policyModel.getVersion(), newToscaModelYaml);
153
154         assertThat(updatedPolicyModel.getPolicyModelTosca()).isEqualTo(newToscaModelYaml);
155
156     }
157
158     /**
159      * This tests a getAllPolicyModelTypes get.
160      */
161     @Test
162     @Transactional
163     public void shouldReturnAllPolicyModelTypes() {
164         // given
165         PolicyModel policyModel1 = getPolicyModel(POLICY_MODEL_TYPE_2, "yaml",
166             POLICY_MODEL_TYPE_2_VERSION_1, "TEST", "VARIANT", "user");
167         policyModelsService.saveOrUpdatePolicyModel(policyModel1);
168         PolicyModel policyModel2 = getPolicyModel(POLICY_MODEL_TYPE_2, "yaml",
169             POLICY_MODEL_TYPE_2_VERSION_2, "TEST", "VARIANT", "user");
170         policyModelsService.saveOrUpdatePolicyModel(policyModel2);
171         List<String> policyModelTypesList = policyModelsService.getAllPolicyModelTypes();
172
173         assertThat(policyModelTypesList).contains(policyModel1.getPolicyModelType(),
174             policyModel2.getPolicyModelType());
175     }
176
177     /**
178      * This tests a getAllPolicyModels get.
179      */
180     @Test
181     @Transactional
182     public void shouldReturnAllPolicyModels() {
183         PolicyModel policyModel1 = getPolicyModel(POLICY_MODEL_TYPE_2, "yaml",
184             POLICY_MODEL_TYPE_2_VERSION_1, "TEST", "VARIANT", "user");
185         policyModelsService.saveOrUpdatePolicyModel(policyModel1);
186         PolicyModel policyModel2 = getPolicyModel(POLICY_MODEL_TYPE_2, "yaml",
187             POLICY_MODEL_TYPE_2_VERSION_2, "TEST", "VARIANT", "user");
188         policyModelsService.saveOrUpdatePolicyModel(policyModel2);
189
190         assertThat(policyModelsService.getAllPolicyModels()).contains(policyModel1, policyModel2);
191     }
192
193     /**
194      * This tests a getAllPolicyModelsByType get.
195      */
196     @Test
197     @Transactional
198     public void shouldReturnAllModelsByType() {
199         PolicyModel policyModel1 = getPolicyModel(POLICY_MODEL_TYPE_2, "yaml",
200             POLICY_MODEL_TYPE_2_VERSION_1, "TEST", "VARIANT", "user");
201         policyModelsService.saveOrUpdatePolicyModel(policyModel1);
202         PolicyModel policyModel2 = getPolicyModel(POLICY_MODEL_TYPE_2, "yaml",
203             POLICY_MODEL_TYPE_2_VERSION_2, "TEST", "VARIANT", "user");
204         policyModelsService.saveOrUpdatePolicyModel(policyModel2);
205
206         assertThat(policyModelsService.getAllPolicyModelsByType(POLICY_MODEL_TYPE_2))
207             .contains(policyModel1, policyModel2);
208     }
209
210     /**
211      * This tests the sorting of policyModel.
212      */
213     @Test
214     @Transactional
215     public void shouldReturnSortedSet() {
216         PolicyModel policyModel1 = getPolicyModel(POLICY_MODEL_TYPE_2, "yaml",
217             POLICY_MODEL_TYPE_2_VERSION_1, "TEST", "VARIANT", "user");
218         policyModelsService.saveOrUpdatePolicyModel(policyModel1);
219         PolicyModel policyModel2 = getPolicyModel(POLICY_MODEL_TYPE_2, "yaml",
220             POLICY_MODEL_TYPE_2_VERSION_2, "TEST", "VARIANT", "user");
221         policyModelsService.saveOrUpdatePolicyModel(policyModel2);
222         PolicyModel policyModel3 = getPolicyModel(POLICY_MODEL_TYPE_3, "yaml",
223             POLICY_MODEL_TYPE_3_VERSION_1, "TEST", "VARIANT", "user");
224         policyModelsService.saveOrUpdatePolicyModel(policyModel3);
225
226         SortedSet<PolicyModel> sortedSet = new TreeSet<>();
227         policyModelsService.getAllPolicyModels().forEach(sortedSet::add);
228         List<PolicyModel> listToCheck =
229             sortedSet
230                 .stream().filter(policy -> policy.equals(policyModel3)
231                     || policy.equals(policyModel2) || policy.equals(policyModel1))
232                 .collect(Collectors.toList());
233         assertThat(listToCheck.get(0)).isEqualByComparingTo(policyModel2);
234         assertThat(listToCheck.get(1)).isEqualByComparingTo(policyModel1);
235         assertThat(listToCheck.get(2)).isEqualByComparingTo(policyModel3);
236     }
237
238     /**
239      * This tests the pdpgroup GSON encode/decode and saving.
240      */
241     @Test
242     @Transactional
243     public void shouldAddPdpGroupInfo() {
244         PolicyModel policyModel1 = getPolicyModel(POLICY_MODEL_TYPE_1, "yaml",
245             POLICY_MODEL_TYPE_1_VERSION_1, "TEST", "VARIANT", "user");
246         policyModelsService.saveOrUpdatePolicyModel(policyModel1);
247         PolicyModel policyModel2 = getPolicyModel(POLICY_MODEL_TYPE_2, "yaml",
248             POLICY_MODEL_TYPE_2_VERSION_2, "TEST", "VARIANT", "user");
249         policyModelsService.saveOrUpdatePolicyModel(policyModel2);
250         PolicyModel policyModel3 = getPolicyModel(POLICY_MODEL_TYPE_3, "yaml",
251             POLICY_MODEL_TYPE_3_VERSION_1, "TEST", "VARIANT", "user");
252         policyModelsService.saveOrUpdatePolicyModel(policyModel3);
253
254         PolicyModelKey type1 = new PolicyModelKey("org.onap.testos", "1.0.0");
255         PolicyModelKey type2 = new PolicyModelKey("org.onap.testos2", "2.0.0");
256
257         PdpSubgroup pdpSubgroup1 = new PdpSubgroup();
258         pdpSubgroup1.setPdpType("subGroup1");
259         List<PolicyModelKey> pdpTypeList = new LinkedList<PolicyModelKey>();
260         pdpTypeList.add(type1);
261         pdpTypeList.add(type2);
262         pdpSubgroup1.setSupportedPolicyTypes(pdpTypeList);
263
264         PolicyModelKey type3 = new PolicyModelKey("org.onap.testos3", "2.0.0");
265         PdpSubgroup pdpSubgroup2 = new PdpSubgroup();
266         pdpSubgroup2.setPdpType("subGroup2");
267         List<PolicyModelKey> pdpTypeList2 = new LinkedList<PolicyModelKey>();
268         pdpTypeList2.add(type2);
269         pdpTypeList2.add(type3);
270         pdpSubgroup2.setSupportedPolicyTypes(pdpTypeList2);
271
272         List<PdpSubgroup> pdpSubgroupList = new LinkedList<PdpSubgroup>();
273         pdpSubgroupList.add(pdpSubgroup1);
274
275         PdpGroup pdpGroup1 = new PdpGroup();
276         pdpGroup1.setName("pdpGroup1");
277         pdpGroup1.setPdpGroupState("ACTIVE");
278         pdpGroup1.setPdpSubgroups(pdpSubgroupList);
279
280         List<PdpSubgroup> pdpSubgroupList2 = new LinkedList<PdpSubgroup>();
281         pdpSubgroupList2.add(pdpSubgroup1);
282         pdpSubgroupList2.add(pdpSubgroup2);
283         PdpGroup pdpGroup2 = new PdpGroup();
284         pdpGroup2.setName("pdpGroup2");
285         pdpGroup2.setPdpGroupState("ACTIVE");
286         pdpGroup2.setPdpSubgroups(pdpSubgroupList2);
287
288         List<PdpGroup> pdpGroupList = new LinkedList<PdpGroup>();
289         pdpGroupList.add(pdpGroup1);
290         pdpGroupList.add(pdpGroup2);
291         policyModelsService.updatePdpGroupInfo(pdpGroupList);
292
293         JsonObject res1 =
294             policyModelsService.getPolicyModel("org.onap.testos", "1.0.0").getPolicyPdpGroup();
295         String expectedRes1 =
296             "{\"supportedPdpGroups\":[{\"pdpGroup1\":[\"subGroup1\"]},{\"pdpGroup2\":[\"subGroup1\"]}]}";
297         JsonObject expectedJson1 = JsonUtils.GSON.fromJson(expectedRes1, JsonObject.class);
298         assertThat(res1).isEqualTo(expectedJson1);
299
300         JsonObject res2 =
301             policyModelsService.getPolicyModel("org.onap.testos2", "2.0.0").getPolicyPdpGroup();
302         String expectedRes2 =
303             "{\"supportedPdpGroups\":[{\"pdpGroup1\":[\"subGroup1\"]},{\"pdpGroup2\":[\"subGroup1\",\"subGroup2\"]}]}";
304         JsonObject expectedJson2 = JsonUtils.GSON.fromJson(expectedRes2, JsonObject.class);
305         assertThat(res2).isEqualTo(expectedJson2);
306
307         JsonObject res3 =
308             policyModelsService.getPolicyModel("org.onap.testos3", "1.0.0").getPolicyPdpGroup();
309         assertThat(res3).isNull();
310     }
311 }