c107f1273cc73f1ce9219072a97a281d1afcab83
[policy/models.git] / models-provider / src / test / java / org / onap / policy / models / provider / revisionhierarchy / HierarchyFetchTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2020 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         assertEquals("onap.policies.PolicyTypeLevel0", fetchedPolicyType.getName());
84         assertEquals("3.0.0", fetchedPolicyType.getVersion());
85         assertEquals(3, countReturnedPolicies(fetchedServiceTemplate));
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         assertEquals("onap.policies.PolicyTypeLevel0", fetchedPolicyType.getName());
92         assertEquals("1.0.0", fetchedPolicyType.getVersion());
93         assertEquals(1, countReturnedPolicies(fetchedServiceTemplate));
94
95         fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0", "1.1.0");
96         assertOldDataTypesAreReturned(fetchedServiceTemplate);
97         assertEquals(1, fetchedServiceTemplate.getPolicyTypes().size());
98         fetchedPolicyType = fetchedServiceTemplate.getPolicyTypes().values().iterator().next();
99         assertEquals("onap.policies.PolicyTypeLevel0", fetchedPolicyType.getName());
100         assertEquals("2.0.0", fetchedPolicyType.getVersion());
101         assertEquals(1, countReturnedPolicies(fetchedServiceTemplate));
102
103         fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0", "1.2.0");
104         assertLatestDataTypesAreReturned(fetchedServiceTemplate);
105         assertEquals(1, fetchedServiceTemplate.getPolicyTypes().size());
106         fetchedPolicyType = fetchedServiceTemplate.getPolicyTypes().values().iterator().next();
107         assertEquals("onap.policies.PolicyTypeLevel0", fetchedPolicyType.getName());
108         assertEquals("3.0.0", fetchedPolicyType.getVersion());
109         assertEquals(1, countReturnedPolicies(fetchedServiceTemplate));
110
111         fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1", null);
112         assertLatestDataTypesAreReturned(fetchedServiceTemplate);
113         assertEquals(2, fetchedServiceTemplate.getPolicyTypes().size());
114         Iterator<ToscaPolicyType> fetchedPolicyTypeIterator =
115             fetchedServiceTemplate.getPolicyTypes().values().iterator();
116         fetchedPolicyType = fetchedPolicyTypeIterator.next();
117         assertEquals("onap.policies.PolicyTypeLevel0", fetchedPolicyType.getName());
118         assertEquals("3.0.0", fetchedPolicyType.getVersion());
119         fetchedPolicyType = fetchedPolicyTypeIterator.next();
120         assertEquals("onap.policies.PolicyTypeLevel0.1", fetchedPolicyType.getName());
121         assertEquals("3.0.0", fetchedPolicyType.getVersion());
122         assertEquals(3, countReturnedPolicies(fetchedServiceTemplate));
123
124         fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1", "1.0.0");
125         assertLatestDataTypesAreReturned(fetchedServiceTemplate);
126         assertEquals(2, fetchedServiceTemplate.getPolicyTypes().size());
127         fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
128         fetchedPolicyType = fetchedPolicyTypeIterator.next();
129         assertEquals("onap.policies.PolicyTypeLevel0", fetchedPolicyType.getName());
130         assertEquals("3.0.0", fetchedPolicyType.getVersion());
131         fetchedPolicyType = fetchedPolicyTypeIterator.next();
132         assertEquals("onap.policies.PolicyTypeLevel0.1", fetchedPolicyType.getName());
133         assertEquals("1.0.0", fetchedPolicyType.getVersion());
134         assertEquals(1, countReturnedPolicies(fetchedServiceTemplate));
135
136         fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1", "1.1.0");
137         assertLatestDataTypesAreReturned(fetchedServiceTemplate);
138         assertEquals(2, fetchedServiceTemplate.getPolicyTypes().size());
139         fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
140         fetchedPolicyType = fetchedPolicyTypeIterator.next();
141         assertEquals("onap.policies.PolicyTypeLevel0", fetchedPolicyType.getName());
142         assertEquals("3.0.0", fetchedPolicyType.getVersion());
143         fetchedPolicyType = fetchedPolicyTypeIterator.next();
144         assertEquals("onap.policies.PolicyTypeLevel0.1", fetchedPolicyType.getName());
145         assertEquals("2.0.0", fetchedPolicyType.getVersion());
146         assertEquals(1, countReturnedPolicies(fetchedServiceTemplate));
147
148         fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1", "1.2.0");
149         assertLatestDataTypesAreReturned(fetchedServiceTemplate);
150         assertEquals(2, fetchedServiceTemplate.getPolicyTypes().size());
151         fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
152         fetchedPolicyType = fetchedPolicyTypeIterator.next();
153         assertEquals("onap.policies.PolicyTypeLevel0", fetchedPolicyType.getName());
154         assertEquals("3.0.0", fetchedPolicyType.getVersion());
155         fetchedPolicyType = fetchedPolicyTypeIterator.next();
156         assertEquals("onap.policies.PolicyTypeLevel0.1", fetchedPolicyType.getName());
157         assertEquals("3.0.0", fetchedPolicyType.getVersion());
158         assertEquals(1, countReturnedPolicies(fetchedServiceTemplate));
159
160         fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1.2", null);
161         assertLatestDataTypesAreReturned(fetchedServiceTemplate);
162         assertEquals(3, fetchedServiceTemplate.getPolicyTypes().size());
163         fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
164         fetchedPolicyType = fetchedPolicyTypeIterator.next();
165         assertEquals("onap.policies.PolicyTypeLevel0", fetchedPolicyType.getName());
166         assertEquals("3.0.0", fetchedPolicyType.getVersion());
167         fetchedPolicyType = fetchedPolicyTypeIterator.next();
168         assertEquals("onap.policies.PolicyTypeLevel0.1", fetchedPolicyType.getName());
169         assertEquals("3.0.0", fetchedPolicyType.getVersion());
170         fetchedPolicyType = fetchedPolicyTypeIterator.next();
171         assertEquals("onap.policies.PolicyTypeLevel0.1.2", fetchedPolicyType.getName());
172         assertEquals("3.0.0", fetchedPolicyType.getVersion());
173         assertEquals(3, countReturnedPolicies(fetchedServiceTemplate));
174
175         fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1.2", "1.0.0");
176         assertLatestDataTypesAreReturned(fetchedServiceTemplate);
177         assertEquals(3, fetchedServiceTemplate.getPolicyTypes().size());
178         fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
179         fetchedPolicyType = fetchedPolicyTypeIterator.next();
180         assertEquals("onap.policies.PolicyTypeLevel0", fetchedPolicyType.getName());
181         assertEquals("3.0.0", fetchedPolicyType.getVersion());
182         fetchedPolicyType = fetchedPolicyTypeIterator.next();
183         assertEquals("onap.policies.PolicyTypeLevel0.1", fetchedPolicyType.getName());
184         assertEquals("3.0.0", fetchedPolicyType.getVersion());
185         fetchedPolicyType = fetchedPolicyTypeIterator.next();
186         assertEquals("onap.policies.PolicyTypeLevel0.1.2", fetchedPolicyType.getName());
187         assertEquals("1.0.0", fetchedPolicyType.getVersion());
188         assertEquals(1, countReturnedPolicies(fetchedServiceTemplate));
189
190         fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1.2", "1.1.0");
191         assertLatestDataTypesAreReturned(fetchedServiceTemplate);
192         assertEquals(3, fetchedServiceTemplate.getPolicyTypes().size());
193         fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
194         fetchedPolicyType = fetchedPolicyTypeIterator.next();
195         assertEquals("onap.policies.PolicyTypeLevel0", fetchedPolicyType.getName());
196         assertEquals("3.0.0", fetchedPolicyType.getVersion());
197         fetchedPolicyType = fetchedPolicyTypeIterator.next();
198         assertEquals("onap.policies.PolicyTypeLevel0.1", fetchedPolicyType.getName());
199         assertEquals("3.0.0", fetchedPolicyType.getVersion());
200         fetchedPolicyType = fetchedPolicyTypeIterator.next();
201         assertEquals("onap.policies.PolicyTypeLevel0.1.2", fetchedPolicyType.getName());
202         assertEquals("2.0.0", fetchedPolicyType.getVersion());
203         assertEquals(1, countReturnedPolicies(fetchedServiceTemplate));
204
205         fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1.2", "1.2.0");
206         assertLatestDataTypesAreReturned(fetchedServiceTemplate);
207         assertEquals(3, fetchedServiceTemplate.getPolicyTypes().size());
208         fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
209         fetchedPolicyType = fetchedPolicyTypeIterator.next();
210         assertEquals("onap.policies.PolicyTypeLevel0", fetchedPolicyType.getName());
211         assertEquals("3.0.0", fetchedPolicyType.getVersion());
212         fetchedPolicyType = fetchedPolicyTypeIterator.next();
213         assertEquals("onap.policies.PolicyTypeLevel0.1", fetchedPolicyType.getName());
214         assertEquals("3.0.0", fetchedPolicyType.getVersion());
215         fetchedPolicyType = fetchedPolicyTypeIterator.next();
216         assertEquals("onap.policies.PolicyTypeLevel0.1.2", fetchedPolicyType.getName());
217         assertEquals("3.0.0", fetchedPolicyType.getVersion());
218         assertEquals(1, countReturnedPolicies(fetchedServiceTemplate));
219
220         fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1.2.3", null);
221         assertLatestDataTypesAreReturned(fetchedServiceTemplate);
222         assertEquals(4, fetchedServiceTemplate.getPolicyTypes().size());
223         fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
224         fetchedPolicyType = fetchedPolicyTypeIterator.next();
225         assertEquals("onap.policies.PolicyTypeLevel0", fetchedPolicyType.getName());
226         assertEquals("3.0.0", fetchedPolicyType.getVersion());
227         fetchedPolicyType = fetchedPolicyTypeIterator.next();
228         assertEquals("onap.policies.PolicyTypeLevel0.1", fetchedPolicyType.getName());
229         assertEquals("3.0.0", fetchedPolicyType.getVersion());
230         fetchedPolicyType = fetchedPolicyTypeIterator.next();
231         assertEquals("onap.policies.PolicyTypeLevel0.1.2", fetchedPolicyType.getName());
232         assertEquals("3.0.0", fetchedPolicyType.getVersion());
233         fetchedPolicyType = fetchedPolicyTypeIterator.next();
234         assertEquals("onap.policies.PolicyTypeLevel0.1.2.3", fetchedPolicyType.getName());
235         assertEquals("3.0.0", fetchedPolicyType.getVersion());
236         assertEquals(3, countReturnedPolicies(fetchedServiceTemplate));
237
238         fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1.2.3", "1.0.0");
239         assertLatestDataTypesAreReturned(fetchedServiceTemplate);
240         assertEquals(4, fetchedServiceTemplate.getPolicyTypes().size());
241         fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
242         fetchedPolicyType = fetchedPolicyTypeIterator.next();
243         assertEquals("onap.policies.PolicyTypeLevel0", fetchedPolicyType.getName());
244         assertEquals("3.0.0", fetchedPolicyType.getVersion());
245         fetchedPolicyType = fetchedPolicyTypeIterator.next();
246         assertEquals("onap.policies.PolicyTypeLevel0.1", fetchedPolicyType.getName());
247         assertEquals("3.0.0", fetchedPolicyType.getVersion());
248         fetchedPolicyType = fetchedPolicyTypeIterator.next();
249         assertEquals("onap.policies.PolicyTypeLevel0.1.2", fetchedPolicyType.getName());
250         assertEquals("3.0.0", fetchedPolicyType.getVersion());
251         fetchedPolicyType = fetchedPolicyTypeIterator.next();
252         assertEquals("onap.policies.PolicyTypeLevel0.1.2.3", fetchedPolicyType.getName());
253         assertEquals("1.0.0", fetchedPolicyType.getVersion());
254         assertEquals(1, countReturnedPolicies(fetchedServiceTemplate));
255
256         fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1.2.3", "1.1.0");
257         assertLatestDataTypesAreReturned(fetchedServiceTemplate);
258         assertEquals(4, fetchedServiceTemplate.getPolicyTypes().size());
259         fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
260         fetchedPolicyType = fetchedPolicyTypeIterator.next();
261         assertEquals("onap.policies.PolicyTypeLevel0", fetchedPolicyType.getName());
262         assertEquals("3.0.0", fetchedPolicyType.getVersion());
263         fetchedPolicyType = fetchedPolicyTypeIterator.next();
264         assertEquals("onap.policies.PolicyTypeLevel0.1", fetchedPolicyType.getName());
265         assertEquals("3.0.0", fetchedPolicyType.getVersion());
266         fetchedPolicyType = fetchedPolicyTypeIterator.next();
267         assertEquals("onap.policies.PolicyTypeLevel0.1.2", fetchedPolicyType.getName());
268         assertEquals("3.0.0", fetchedPolicyType.getVersion());
269         fetchedPolicyType = fetchedPolicyTypeIterator.next();
270         assertEquals("onap.policies.PolicyTypeLevel0.1.2.3", fetchedPolicyType.getName());
271         assertEquals("2.0.0", fetchedPolicyType.getVersion());
272         assertEquals(1, countReturnedPolicies(fetchedServiceTemplate));
273
274         fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1.2.3", "1.2.0");
275         assertLatestDataTypesAreReturned(fetchedServiceTemplate);
276         assertEquals(4, fetchedServiceTemplate.getPolicyTypes().size());
277         fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
278         fetchedPolicyType = fetchedPolicyTypeIterator.next();
279         assertEquals("onap.policies.PolicyTypeLevel0", fetchedPolicyType.getName());
280         assertEquals("3.0.0", fetchedPolicyType.getVersion());
281         fetchedPolicyType = fetchedPolicyTypeIterator.next();
282         assertEquals("onap.policies.PolicyTypeLevel0.1", fetchedPolicyType.getName());
283         assertEquals("3.0.0", fetchedPolicyType.getVersion());
284         fetchedPolicyType = fetchedPolicyTypeIterator.next();
285         assertEquals("onap.policies.PolicyTypeLevel0.1.2", fetchedPolicyType.getName());
286         assertEquals("3.0.0", fetchedPolicyType.getVersion());
287         fetchedPolicyType = fetchedPolicyTypeIterator.next();
288         assertEquals("onap.policies.PolicyTypeLevel0.1.2.3", fetchedPolicyType.getName());
289         assertEquals("3.0.0", fetchedPolicyType.getVersion());
290         assertEquals(1, countReturnedPolicies(fetchedServiceTemplate));
291
292         databaseProvider.close();
293     }
294
295     private void assertOldDataTypesAreReturned(final ToscaServiceTemplate fetchedServiceTemplate) {
296         assertEquals(6, fetchedServiceTemplate.getDataTypes().size());
297         assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType0").getVersion());
298         assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType1").getVersion());
299         assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType2").getVersion());
300         assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType3").getVersion());
301         assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType4").getVersion());
302         assertEquals("3.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType5").getVersion());
303     }
304
305     private void assertLatestDataTypesAreReturned(final ToscaServiceTemplate fetchedServiceTemplate) {
306         assertEquals(7, fetchedServiceTemplate.getDataTypes().size());
307         assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType0").getVersion());
308         assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType1").getVersion());
309         assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType2").getVersion());
310         assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType3").getVersion());
311         assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType4").getVersion());
312         assertEquals("3.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType5").getVersion());
313         assertEquals("2.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType6").getVersion());
314     }
315
316     private void assertLatestPolicyTypesAreReturned(final ToscaServiceTemplate fetchedServiceTemplate) {
317         assertEquals(4, fetchedServiceTemplate.getPolicyTypes().size());
318
319         for (ToscaPolicyType policyType : fetchedServiceTemplate.getPolicyTypes().values()) {
320             assertEquals("3.0.0", policyType.getVersion());
321         }
322     }
323
324     private int countReturnedPolicies(final ToscaServiceTemplate fetchedServiceTemplate) {
325         List<Map<String, ToscaPolicy>> policyMapList = fetchedServiceTemplate.getToscaTopologyTemplate().getPolicies();
326
327         int totalPolicies = 0;
328         for (Map<String, ToscaPolicy> policyMap : policyMapList) {
329             totalPolicies += policyMap.size();
330         }
331
332         return totalPolicies;
333     }
334 }