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