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