f005ba230b17ae159c412e58e4b192e25909123b
[policy/models.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2020-2021, 2023-2025 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.jupiter.api.Assertions.assertEquals;
27
28 import java.util.Iterator;
29 import java.util.List;
30 import java.util.Map;
31 import org.junit.jupiter.api.AfterAll;
32 import org.junit.jupiter.api.BeforeAll;
33 import org.junit.jupiter.api.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 class HierarchyFetchTest {
45
46     private static PolicyModelsProviderParameters parameters;
47
48     private static PolicyModelsProvider databaseProvider;
49
50     @BeforeAll
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     }
59
60     /**
61      * Closes the DB.
62      */
63     @AfterAll
64     public static void tearDown() throws PfModelException {
65         if (databaseProvider != null) {
66             databaseProvider.close();
67         }
68     }
69
70     @Test
71     void testMultipleVersions() throws Exception {
72         databaseProvider = new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
73
74         ToscaServiceTemplate serviceTemplate = new YamlJsonTranslator().fromYaml(
75             TextFileUtils
76                 .getTextFileAsString("src/test/resources/servicetemplates/MultipleRevisionServiceTemplate.yaml"),
77             ToscaServiceTemplate.class);
78
79         assertThatCode(() -> databaseProvider.createPolicies(serviceTemplate)).doesNotThrowAnyException();
80
81         ToscaServiceTemplate fetchedServiceTemplate = databaseProvider.getPolicies(null, null);
82
83         assertLatestDataTypesAreReturned(fetchedServiceTemplate);
84         assertLatestPolicyTypesAreReturned(fetchedServiceTemplate);
85         assertEquals(12, countReturnedPolicies(fetchedServiceTemplate));
86
87         fetchedServiceTemplate = databaseProvider.getPolicyTypes(null, null);
88         assertLatestDataTypesAreReturned(fetchedServiceTemplate);
89         assertLatestPolicyTypesAreReturned(fetchedServiceTemplate);
90
91         fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0", null);
92         assertLatestDataTypesAreReturned(fetchedServiceTemplate);
93         assertEquals(1, fetchedServiceTemplate.getPolicyTypes().size());
94         ToscaPolicyType fetchedPolicyType = fetchedServiceTemplate.getPolicyTypes().values().iterator().next();
95         checkEqualsPolicyType(fetchedPolicyType, "onap.policies.PolicyTypeLevel0",
96             "3.0.0", fetchedServiceTemplate, 3);
97
98         fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0", "1.0.0");
99         assertOldDataTypesAreReturned(fetchedServiceTemplate);
100         assertEquals(1, fetchedServiceTemplate.getPolicyTypes().size());
101         fetchedPolicyType = fetchedServiceTemplate.getPolicyTypes().values().iterator().next();
102         checkEqualsPolicyType(fetchedPolicyType, "onap.policies.PolicyTypeLevel0",
103             "1.0.0", fetchedServiceTemplate, 1);
104
105         fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0", "1.1.0");
106         assertOldDataTypesAreReturned(fetchedServiceTemplate);
107         assertEquals(1, fetchedServiceTemplate.getPolicyTypes().size());
108         fetchedPolicyType = fetchedServiceTemplate.getPolicyTypes().values().iterator().next();
109         checkEqualsPolicyType(fetchedPolicyType, "onap.policies.PolicyTypeLevel0",
110             "2.0.0", fetchedServiceTemplate, 1);
111
112         fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0", "1.2.0");
113         assertLatestDataTypesAreReturned(fetchedServiceTemplate);
114         assertEquals(1, fetchedServiceTemplate.getPolicyTypes().size());
115         fetchedPolicyType = fetchedServiceTemplate.getPolicyTypes().values().iterator().next();
116         checkEqualsPolicyType(fetchedPolicyType, "onap.policies.PolicyTypeLevel0",
117             "3.0.0", fetchedServiceTemplate, 1);
118
119         fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1", null);
120         assertLatestDataTypesAreReturned(fetchedServiceTemplate);
121         assertEquals(2, fetchedServiceTemplate.getPolicyTypes().size());
122         Iterator<ToscaPolicyType> fetchedPolicyTypeIterator =
123             fetchedServiceTemplate.getPolicyTypes().values().iterator();
124         fetchedPolicyType = fetchedPolicyTypeIterator.next();
125         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0", "3.0.0");
126         fetchedPolicyType = fetchedPolicyTypeIterator.next();
127         checkEqualsPolicyType(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1",
128             "3.0.0", fetchedServiceTemplate, 3);
129
130         fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1", "1.0.0");
131         assertLatestDataTypesAreReturned(fetchedServiceTemplate);
132         assertEquals(2, fetchedServiceTemplate.getPolicyTypes().size());
133         fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
134         fetchedPolicyType = fetchedPolicyTypeIterator.next();
135         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0", "3.0.0");
136         fetchedPolicyType = fetchedPolicyTypeIterator.next();
137         checkEqualsPolicyType(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1",
138             "1.0.0", fetchedServiceTemplate, 1);
139
140         fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1", "1.1.0");
141         assertLatestDataTypesAreReturned(fetchedServiceTemplate);
142         assertEquals(2, fetchedServiceTemplate.getPolicyTypes().size());
143         fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
144         fetchedPolicyType = fetchedPolicyTypeIterator.next();
145         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0", "3.0.0");
146         fetchedPolicyType = fetchedPolicyTypeIterator.next();
147         checkEqualsPolicyType(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1",
148             "2.0.0", fetchedServiceTemplate, 1);
149
150         fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1", "1.2.0");
151         assertLatestDataTypesAreReturned(fetchedServiceTemplate);
152         assertEquals(2, fetchedServiceTemplate.getPolicyTypes().size());
153         fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
154         fetchedPolicyType = fetchedPolicyTypeIterator.next();
155         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0", "3.0.0");
156         fetchedPolicyType = fetchedPolicyTypeIterator.next();
157         checkEqualsPolicyType(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1",
158             "3.0.0", fetchedServiceTemplate, 1);
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         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0", "3.0.0");
166         fetchedPolicyType = fetchedPolicyTypeIterator.next();
167         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1", "3.0.0");
168         fetchedPolicyType = fetchedPolicyTypeIterator.next();
169         checkEqualsPolicyType(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1.2",
170             "3.0.0", fetchedServiceTemplate, 3);
171
172         fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1.2", "1.0.0");
173         assertLatestDataTypesAreReturned(fetchedServiceTemplate);
174         assertEquals(3, fetchedServiceTemplate.getPolicyTypes().size());
175         fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
176         fetchedPolicyType = fetchedPolicyTypeIterator.next();
177         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0", "3.0.0");
178         fetchedPolicyType = fetchedPolicyTypeIterator.next();
179         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1", "3.0.0");
180         fetchedPolicyType = fetchedPolicyTypeIterator.next();
181         checkEqualsPolicyType(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1.2",
182             "1.0.0", fetchedServiceTemplate, 1);
183
184         fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1.2", "1.1.0");
185         assertLatestDataTypesAreReturned(fetchedServiceTemplate);
186         assertEquals(3, fetchedServiceTemplate.getPolicyTypes().size());
187         fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
188         fetchedPolicyType = fetchedPolicyTypeIterator.next();
189         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0", "3.0.0");
190         fetchedPolicyType = fetchedPolicyTypeIterator.next();
191         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1", "3.0.0");
192         fetchedPolicyType = fetchedPolicyTypeIterator.next();
193         checkEqualsPolicyType(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1.2",
194             "2.0.0", fetchedServiceTemplate, 1);
195
196         fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1.2", "1.2.0");
197         assertLatestDataTypesAreReturned(fetchedServiceTemplate);
198         assertEquals(3, fetchedServiceTemplate.getPolicyTypes().size());
199         fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
200         fetchedPolicyType = fetchedPolicyTypeIterator.next();
201         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0", "3.0.0");
202         fetchedPolicyType = fetchedPolicyTypeIterator.next();
203         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1", "3.0.0");
204         fetchedPolicyType = fetchedPolicyTypeIterator.next();
205         checkEqualsPolicyType(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1.2",
206             "3.0.0", fetchedServiceTemplate, 1);
207
208         fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1.2.3", null);
209         assertLatestDataTypesAreReturned(fetchedServiceTemplate);
210         assertEquals(4, fetchedServiceTemplate.getPolicyTypes().size());
211         fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
212         fetchedPolicyType = fetchedPolicyTypeIterator.next();
213         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0", "3.0.0");
214         fetchedPolicyType = fetchedPolicyTypeIterator.next();
215         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1", "3.0.0");
216         fetchedPolicyType = fetchedPolicyTypeIterator.next();
217         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1.2", "3.0.0");
218         fetchedPolicyType = fetchedPolicyTypeIterator.next();
219         checkEqualsPolicyType(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1.2.3",
220             "3.0.0", fetchedServiceTemplate, 3);
221
222         fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1.2.3", "1.0.0");
223         assertLatestDataTypesAreReturned(fetchedServiceTemplate);
224         assertEquals(4, fetchedServiceTemplate.getPolicyTypes().size());
225         fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
226         fetchedPolicyType = fetchedPolicyTypeIterator.next();
227         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0", "3.0.0");
228         fetchedPolicyType = fetchedPolicyTypeIterator.next();
229         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1", "3.0.0");
230         fetchedPolicyType = fetchedPolicyTypeIterator.next();
231         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1.2", "3.0.0");
232         fetchedPolicyType = fetchedPolicyTypeIterator.next();
233         checkEqualsPolicyType(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1.2.3",
234             "1.0.0", fetchedServiceTemplate, 1);
235
236         fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1.2.3", "1.1.0");
237         assertLatestDataTypesAreReturned(fetchedServiceTemplate);
238         assertEquals(4, fetchedServiceTemplate.getPolicyTypes().size());
239         fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
240         fetchedPolicyType = fetchedPolicyTypeIterator.next();
241         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0", "3.0.0");
242         fetchedPolicyType = fetchedPolicyTypeIterator.next();
243         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1", "3.0.0");
244         fetchedPolicyType = fetchedPolicyTypeIterator.next();
245         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1.2", "3.0.0");
246         fetchedPolicyType = fetchedPolicyTypeIterator.next();
247         checkEqualsPolicyType(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1.2.3",
248             "2.0.0", fetchedServiceTemplate, 1);
249
250         fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1.2.3", "1.2.0");
251         assertLatestDataTypesAreReturned(fetchedServiceTemplate);
252         assertEquals(4, fetchedServiceTemplate.getPolicyTypes().size());
253         fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
254         fetchedPolicyType = fetchedPolicyTypeIterator.next();
255         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0", "3.0.0");
256         fetchedPolicyType = fetchedPolicyTypeIterator.next();
257         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1", "3.0.0");
258         fetchedPolicyType = fetchedPolicyTypeIterator.next();
259         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1.2", "3.0.0");
260         fetchedPolicyType = fetchedPolicyTypeIterator.next();
261         checkEqualsPolicyType(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1.2.3",
262             "3.0.0", fetchedServiceTemplate, 1);
263
264         databaseProvider.close();
265     }
266
267     private void checkNameVersion(ToscaPolicyType fetchedPolicyType, String name, String ver) {
268         assertEquals(name, fetchedPolicyType.getName());
269         assertEquals(ver, fetchedPolicyType.getVersion());
270     }
271
272     private void checkEqualsPolicyType(ToscaPolicyType fetchedPolicyType, String name, String ver,
273         ToscaServiceTemplate fetchedServiceTemplate, int policies) {
274         checkNameVersion(fetchedPolicyType, name, ver);
275         assertEquals(policies, countReturnedPolicies(fetchedServiceTemplate));
276     }
277
278     private void assertOldDataTypesAreReturned(final ToscaServiceTemplate fetchedServiceTemplate) {
279         assertEquals(6, fetchedServiceTemplate.getDataTypes().size());
280         assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType0").getVersion());
281         assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType1").getVersion());
282         assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType2").getVersion());
283         assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType3").getVersion());
284         assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType4").getVersion());
285         assertEquals("3.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType5").getVersion());
286     }
287
288     private void assertLatestDataTypesAreReturned(final ToscaServiceTemplate fetchedServiceTemplate) {
289         assertEquals(7, fetchedServiceTemplate.getDataTypes().size());
290         assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType0").getVersion());
291         assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType1").getVersion());
292         assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType2").getVersion());
293         assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType3").getVersion());
294         assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType4").getVersion());
295         assertEquals("3.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType5").getVersion());
296         assertEquals("2.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType6").getVersion());
297     }
298
299     private void assertLatestPolicyTypesAreReturned(final ToscaServiceTemplate fetchedServiceTemplate) {
300         assertEquals(4, fetchedServiceTemplate.getPolicyTypes().size());
301
302         for (ToscaPolicyType policyType : fetchedServiceTemplate.getPolicyTypes().values()) {
303             assertEquals("3.0.0", policyType.getVersion());
304         }
305     }
306
307     private int countReturnedPolicies(final ToscaServiceTemplate fetchedServiceTemplate) {
308         List<Map<String, ToscaPolicy>> policyMapList = fetchedServiceTemplate.getToscaTopologyTemplate().getPolicies();
309
310         int totalPolicies = 0;
311         for (Map<String, ToscaPolicy> policyMap : policyMapList) {
312             totalPolicies += policyMap.size();
313         }
314
315         return totalPolicies;
316     }
317 }