Fix sonar issues for tests in policy-models
[policy/models.git] / models-provider / src / test / java / org / onap / policy / models / provider / revisionhierarchy / HierarchyFetchTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2020-2021 Nordix Foundation.
4  *  Modifications Copyright (C) 2020 Bell Canada. All rights reserved.
5  * ================================================================================
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  *      http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  *
18  * SPDX-License-Identifier: Apache-2.0
19  * ============LICENSE_END=========================================================
20  */
21
22 package org.onap.policy.models.provider.revisionhierarchy;
23
24 import static org.assertj.core.api.Assertions.assertThatCode;
25 import static org.junit.Assert.assertEquals;
26
27 import java.util.Iterator;
28 import java.util.List;
29 import java.util.Map;
30 import org.junit.BeforeClass;
31 import org.junit.Test;
32 import org.onap.policy.common.utils.coder.YamlJsonTranslator;
33 import org.onap.policy.common.utils.resources.TextFileUtils;
34 import org.onap.policy.models.provider.PolicyModelsProvider;
35 import org.onap.policy.models.provider.PolicyModelsProviderFactory;
36 import org.onap.policy.models.provider.PolicyModelsProviderParameters;
37 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
38 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyType;
39 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
40
41 public class HierarchyFetchTest {
42
43     private static PolicyModelsProviderParameters parameters;
44
45     @BeforeClass
46     public static void beforeSetupParameters() {
47         parameters = new PolicyModelsProviderParameters();
48         parameters.setDatabaseDriver("org.h2.Driver");
49         parameters.setDatabaseUrl("jdbc:h2:mem:testdb");
50         parameters.setDatabaseUser("policy");
51         parameters.setDatabasePassword("P01icY");
52         parameters.setPersistenceUnit("ToscaConceptTest");
53     }
54
55     @Test
56     public void testMultipleVersions() throws Exception {
57         PolicyModelsProvider databaseProvider =
58             new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
59
60         ToscaServiceTemplate serviceTemplate = new YamlJsonTranslator().fromYaml(
61             TextFileUtils
62                 .getTextFileAsString("src/test/resources/servicetemplates/MultipleRevisionServiceTemplate.yaml"),
63             ToscaServiceTemplate.class);
64
65         assertThatCode(() -> {
66             databaseProvider.createPolicies(serviceTemplate);
67         }).doesNotThrowAnyException();
68
69         ToscaServiceTemplate fetchedServiceTemplate = databaseProvider.getPolicies(null, null);
70
71         assertLatestDataTypesAreReturned(fetchedServiceTemplate);
72         assertLatestPolicyTypesAreReturned(fetchedServiceTemplate);
73         assertEquals(12, countReturnedPolicies(fetchedServiceTemplate));
74
75         fetchedServiceTemplate = databaseProvider.getPolicyTypes(null, null);
76         assertLatestDataTypesAreReturned(fetchedServiceTemplate);
77         assertLatestPolicyTypesAreReturned(fetchedServiceTemplate);
78
79         fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0", null);
80         assertLatestDataTypesAreReturned(fetchedServiceTemplate);
81         assertEquals(1, fetchedServiceTemplate.getPolicyTypes().size());
82         ToscaPolicyType fetchedPolicyType = fetchedServiceTemplate.getPolicyTypes().values().iterator().next();
83         checkEqualsPolicyType(fetchedPolicyType, "onap.policies.PolicyTypeLevel0",
84                 "3.0.0", fetchedServiceTemplate, 3);
85
86
87         fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0", "1.0.0");
88         assertOldDataTypesAreReturned(fetchedServiceTemplate);
89         assertEquals(1, fetchedServiceTemplate.getPolicyTypes().size());
90         fetchedPolicyType = fetchedServiceTemplate.getPolicyTypes().values().iterator().next();
91         checkEqualsPolicyType(fetchedPolicyType, "onap.policies.PolicyTypeLevel0",
92                 "1.0.0", fetchedServiceTemplate, 1);
93
94         fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0", "1.1.0");
95         assertOldDataTypesAreReturned(fetchedServiceTemplate);
96         assertEquals(1, fetchedServiceTemplate.getPolicyTypes().size());
97         fetchedPolicyType = fetchedServiceTemplate.getPolicyTypes().values().iterator().next();
98         checkEqualsPolicyType(fetchedPolicyType, "onap.policies.PolicyTypeLevel0",
99                 "2.0.0", fetchedServiceTemplate, 1);
100
101         fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0", "1.2.0");
102         assertLatestDataTypesAreReturned(fetchedServiceTemplate);
103         assertEquals(1, fetchedServiceTemplate.getPolicyTypes().size());
104         fetchedPolicyType = fetchedServiceTemplate.getPolicyTypes().values().iterator().next();
105         checkEqualsPolicyType(fetchedPolicyType, "onap.policies.PolicyTypeLevel0",
106                 "3.0.0", fetchedServiceTemplate, 1);
107
108         fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1", null);
109         assertLatestDataTypesAreReturned(fetchedServiceTemplate);
110         assertEquals(2, fetchedServiceTemplate.getPolicyTypes().size());
111         Iterator<ToscaPolicyType> fetchedPolicyTypeIterator =
112             fetchedServiceTemplate.getPolicyTypes().values().iterator();
113         fetchedPolicyType = fetchedPolicyTypeIterator.next();
114         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0", "3.0.0");
115         fetchedPolicyType = fetchedPolicyTypeIterator.next();
116         checkEqualsPolicyType(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1",
117                 "3.0.0", fetchedServiceTemplate, 3);
118
119         fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1", "1.0.0");
120         assertLatestDataTypesAreReturned(fetchedServiceTemplate);
121         assertEquals(2, fetchedServiceTemplate.getPolicyTypes().size());
122         fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
123         fetchedPolicyType = fetchedPolicyTypeIterator.next();
124         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0", "3.0.0");
125         fetchedPolicyType = fetchedPolicyTypeIterator.next();
126         checkEqualsPolicyType(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1",
127                 "1.0.0", fetchedServiceTemplate, 1);
128
129         fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1", "1.1.0");
130         assertLatestDataTypesAreReturned(fetchedServiceTemplate);
131         assertEquals(2, fetchedServiceTemplate.getPolicyTypes().size());
132         fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
133         fetchedPolicyType = fetchedPolicyTypeIterator.next();
134         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0", "3.0.0");
135         fetchedPolicyType = fetchedPolicyTypeIterator.next();
136         checkEqualsPolicyType(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1",
137                 "2.0.0", fetchedServiceTemplate, 1);
138
139         fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1", "1.2.0");
140         assertLatestDataTypesAreReturned(fetchedServiceTemplate);
141         assertEquals(2, fetchedServiceTemplate.getPolicyTypes().size());
142         fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
143         fetchedPolicyType = fetchedPolicyTypeIterator.next();
144         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0", "3.0.0");
145         fetchedPolicyType = fetchedPolicyTypeIterator.next();
146         checkEqualsPolicyType(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1",
147                 "3.0.0", fetchedServiceTemplate, 1);
148
149         fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1.2", null);
150         assertLatestDataTypesAreReturned(fetchedServiceTemplate);
151         assertEquals(3, fetchedServiceTemplate.getPolicyTypes().size());
152         fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
153         fetchedPolicyType = fetchedPolicyTypeIterator.next();
154         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0", "3.0.0");
155         fetchedPolicyType = fetchedPolicyTypeIterator.next();
156         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1", "3.0.0");
157         fetchedPolicyType = fetchedPolicyTypeIterator.next();
158         checkEqualsPolicyType(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1.2",
159                 "3.0.0", fetchedServiceTemplate, 3);
160
161         fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1.2", "1.0.0");
162         assertLatestDataTypesAreReturned(fetchedServiceTemplate);
163         assertEquals(3, fetchedServiceTemplate.getPolicyTypes().size());
164         fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
165         fetchedPolicyType = fetchedPolicyTypeIterator.next();
166         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0", "3.0.0");
167         fetchedPolicyType = fetchedPolicyTypeIterator.next();
168         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1", "3.0.0");
169         fetchedPolicyType = fetchedPolicyTypeIterator.next();
170         checkEqualsPolicyType(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1.2",
171                 "1.0.0", fetchedServiceTemplate, 1);
172
173         fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1.2", "1.1.0");
174         assertLatestDataTypesAreReturned(fetchedServiceTemplate);
175         assertEquals(3, fetchedServiceTemplate.getPolicyTypes().size());
176         fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
177         fetchedPolicyType = fetchedPolicyTypeIterator.next();
178         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0", "3.0.0");
179         fetchedPolicyType = fetchedPolicyTypeIterator.next();
180         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1", "3.0.0");
181         fetchedPolicyType = fetchedPolicyTypeIterator.next();
182         checkEqualsPolicyType(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1.2",
183                 "2.0.0", fetchedServiceTemplate, 1);
184
185         fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1.2", "1.2.0");
186         assertLatestDataTypesAreReturned(fetchedServiceTemplate);
187         assertEquals(3, fetchedServiceTemplate.getPolicyTypes().size());
188         fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
189         fetchedPolicyType = fetchedPolicyTypeIterator.next();
190         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0", "3.0.0");
191         fetchedPolicyType = fetchedPolicyTypeIterator.next();
192         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1", "3.0.0");
193         fetchedPolicyType = fetchedPolicyTypeIterator.next();
194         checkEqualsPolicyType(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1.2",
195                 "3.0.0", fetchedServiceTemplate, 1);
196
197         fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1.2.3", null);
198         assertLatestDataTypesAreReturned(fetchedServiceTemplate);
199         assertEquals(4, fetchedServiceTemplate.getPolicyTypes().size());
200         fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
201         fetchedPolicyType = fetchedPolicyTypeIterator.next();
202         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0", "3.0.0");
203         fetchedPolicyType = fetchedPolicyTypeIterator.next();
204         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1", "3.0.0");
205         fetchedPolicyType = fetchedPolicyTypeIterator.next();
206         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1.2", "3.0.0");
207         fetchedPolicyType = fetchedPolicyTypeIterator.next();
208         checkEqualsPolicyType(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1.2.3",
209                 "3.0.0", fetchedServiceTemplate, 3);
210
211         fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1.2.3", "1.0.0");
212         assertLatestDataTypesAreReturned(fetchedServiceTemplate);
213         assertEquals(4, fetchedServiceTemplate.getPolicyTypes().size());
214         fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
215         fetchedPolicyType = fetchedPolicyTypeIterator.next();
216         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0", "3.0.0");
217         fetchedPolicyType = fetchedPolicyTypeIterator.next();
218         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1", "3.0.0");
219         fetchedPolicyType = fetchedPolicyTypeIterator.next();
220         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1.2", "3.0.0");
221         fetchedPolicyType = fetchedPolicyTypeIterator.next();
222         checkEqualsPolicyType(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1.2.3",
223                 "1.0.0", fetchedServiceTemplate, 1);
224
225         fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1.2.3", "1.1.0");
226         assertLatestDataTypesAreReturned(fetchedServiceTemplate);
227         assertEquals(4, fetchedServiceTemplate.getPolicyTypes().size());
228         fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
229         fetchedPolicyType = fetchedPolicyTypeIterator.next();
230         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0", "3.0.0");
231         fetchedPolicyType = fetchedPolicyTypeIterator.next();
232         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1", "3.0.0");
233         fetchedPolicyType = fetchedPolicyTypeIterator.next();
234         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1.2", "3.0.0");
235         fetchedPolicyType = fetchedPolicyTypeIterator.next();
236         checkEqualsPolicyType(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1.2.3",
237                 "2.0.0", fetchedServiceTemplate, 1);
238
239         fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1.2.3", "1.2.0");
240         assertLatestDataTypesAreReturned(fetchedServiceTemplate);
241         assertEquals(4, fetchedServiceTemplate.getPolicyTypes().size());
242         fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
243         fetchedPolicyType = fetchedPolicyTypeIterator.next();
244         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0", "3.0.0");
245         fetchedPolicyType = fetchedPolicyTypeIterator.next();
246         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1", "3.0.0");
247         fetchedPolicyType = fetchedPolicyTypeIterator.next();
248         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1.2", "3.0.0");
249         fetchedPolicyType = fetchedPolicyTypeIterator.next();
250         checkEqualsPolicyType(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1.2.3",
251                 "3.0.0", fetchedServiceTemplate, 1);
252
253         databaseProvider.close();
254     }
255
256     private void checkNameVersion(ToscaPolicyType fetchedPolicyType, String name, String ver) {
257         assertEquals(name, fetchedPolicyType.getName());
258         assertEquals(ver, fetchedPolicyType.getVersion());
259     }
260
261     private void checkEqualsPolicyType(ToscaPolicyType fetchedPolicyType, String name, String ver,
262             ToscaServiceTemplate fetchedServiceTemplate, int policies) {
263         checkNameVersion(fetchedPolicyType, name, ver);
264         assertEquals(policies, countReturnedPolicies(fetchedServiceTemplate));
265     }
266
267     private void assertOldDataTypesAreReturned(final ToscaServiceTemplate fetchedServiceTemplate) {
268         assertEquals(6, fetchedServiceTemplate.getDataTypes().size());
269         assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType0").getVersion());
270         assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType1").getVersion());
271         assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType2").getVersion());
272         assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType3").getVersion());
273         assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType4").getVersion());
274         assertEquals("3.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType5").getVersion());
275     }
276
277     private void assertLatestDataTypesAreReturned(final ToscaServiceTemplate fetchedServiceTemplate) {
278         assertEquals(7, fetchedServiceTemplate.getDataTypes().size());
279         assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType0").getVersion());
280         assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType1").getVersion());
281         assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType2").getVersion());
282         assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType3").getVersion());
283         assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType4").getVersion());
284         assertEquals("3.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType5").getVersion());
285         assertEquals("2.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType6").getVersion());
286     }
287
288     private void assertLatestPolicyTypesAreReturned(final ToscaServiceTemplate fetchedServiceTemplate) {
289         assertEquals(4, fetchedServiceTemplate.getPolicyTypes().size());
290
291         for (ToscaPolicyType policyType : fetchedServiceTemplate.getPolicyTypes().values()) {
292             assertEquals("3.0.0", policyType.getVersion());
293         }
294     }
295
296     private int countReturnedPolicies(final ToscaServiceTemplate fetchedServiceTemplate) {
297         List<Map<String, ToscaPolicy>> policyMapList = fetchedServiceTemplate.getToscaTopologyTemplate().getPolicies();
298
299         int totalPolicies = 0;
300         for (Map<String, ToscaPolicy> policyMap : policyMapList) {
301             totalPolicies += policyMap.size();
302         }
303
304         return totalPolicies;
305     }
306 }