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