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