Use distinct names in DB junits
[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  *  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.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:HierarchyFetchTest");
51         parameters.setDatabaseUser("policy");
52         parameters.setDatabasePassword("P01icY");
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         checkEqualsPolicyType(fetchedPolicyType, "onap.policies.PolicyTypeLevel0",
85                 "3.0.0", fetchedServiceTemplate, 3);
86
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         checkEqualsPolicyType(fetchedPolicyType, "onap.policies.PolicyTypeLevel0",
93                 "1.0.0", fetchedServiceTemplate, 1);
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         checkEqualsPolicyType(fetchedPolicyType, "onap.policies.PolicyTypeLevel0",
100                 "2.0.0", fetchedServiceTemplate, 1);
101
102         fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0", "1.2.0");
103         assertLatestDataTypesAreReturned(fetchedServiceTemplate);
104         assertEquals(1, fetchedServiceTemplate.getPolicyTypes().size());
105         fetchedPolicyType = fetchedServiceTemplate.getPolicyTypes().values().iterator().next();
106         checkEqualsPolicyType(fetchedPolicyType, "onap.policies.PolicyTypeLevel0",
107                 "3.0.0", fetchedServiceTemplate, 1);
108
109         fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1", null);
110         assertLatestDataTypesAreReturned(fetchedServiceTemplate);
111         assertEquals(2, fetchedServiceTemplate.getPolicyTypes().size());
112         Iterator<ToscaPolicyType> fetchedPolicyTypeIterator =
113             fetchedServiceTemplate.getPolicyTypes().values().iterator();
114         fetchedPolicyType = fetchedPolicyTypeIterator.next();
115         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0", "3.0.0");
116         fetchedPolicyType = fetchedPolicyTypeIterator.next();
117         checkEqualsPolicyType(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1",
118                 "3.0.0", fetchedServiceTemplate, 3);
119
120         fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1", "1.0.0");
121         assertLatestDataTypesAreReturned(fetchedServiceTemplate);
122         assertEquals(2, fetchedServiceTemplate.getPolicyTypes().size());
123         fetchedPolicyTypeIterator = 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                 "1.0.0", fetchedServiceTemplate, 1);
129
130         fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1", "1.1.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                 "2.0.0", fetchedServiceTemplate, 1);
139
140         fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1", "1.2.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                 "3.0.0", fetchedServiceTemplate, 1);
149
150         fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1.2", null);
151         assertLatestDataTypesAreReturned(fetchedServiceTemplate);
152         assertEquals(3, 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         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1", "3.0.0");
158         fetchedPolicyType = fetchedPolicyTypeIterator.next();
159         checkEqualsPolicyType(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1.2",
160                 "3.0.0", fetchedServiceTemplate, 3);
161
162         fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1.2", "1.0.0");
163         assertLatestDataTypesAreReturned(fetchedServiceTemplate);
164         assertEquals(3, fetchedServiceTemplate.getPolicyTypes().size());
165         fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
166         fetchedPolicyType = fetchedPolicyTypeIterator.next();
167         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0", "3.0.0");
168         fetchedPolicyType = fetchedPolicyTypeIterator.next();
169         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1", "3.0.0");
170         fetchedPolicyType = fetchedPolicyTypeIterator.next();
171         checkEqualsPolicyType(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1.2",
172                 "1.0.0", fetchedServiceTemplate, 1);
173
174         fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1.2", "1.1.0");
175         assertLatestDataTypesAreReturned(fetchedServiceTemplate);
176         assertEquals(3, fetchedServiceTemplate.getPolicyTypes().size());
177         fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
178         fetchedPolicyType = fetchedPolicyTypeIterator.next();
179         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0", "3.0.0");
180         fetchedPolicyType = fetchedPolicyTypeIterator.next();
181         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1", "3.0.0");
182         fetchedPolicyType = fetchedPolicyTypeIterator.next();
183         checkEqualsPolicyType(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1.2",
184                 "2.0.0", fetchedServiceTemplate, 1);
185
186         fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1.2", "1.2.0");
187         assertLatestDataTypesAreReturned(fetchedServiceTemplate);
188         assertEquals(3, fetchedServiceTemplate.getPolicyTypes().size());
189         fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
190         fetchedPolicyType = fetchedPolicyTypeIterator.next();
191         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0", "3.0.0");
192         fetchedPolicyType = fetchedPolicyTypeIterator.next();
193         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1", "3.0.0");
194         fetchedPolicyType = fetchedPolicyTypeIterator.next();
195         checkEqualsPolicyType(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1.2",
196                 "3.0.0", fetchedServiceTemplate, 1);
197
198         fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1.2.3", null);
199         assertLatestDataTypesAreReturned(fetchedServiceTemplate);
200         assertEquals(4, fetchedServiceTemplate.getPolicyTypes().size());
201         fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
202         fetchedPolicyType = fetchedPolicyTypeIterator.next();
203         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0", "3.0.0");
204         fetchedPolicyType = fetchedPolicyTypeIterator.next();
205         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1", "3.0.0");
206         fetchedPolicyType = fetchedPolicyTypeIterator.next();
207         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1.2", "3.0.0");
208         fetchedPolicyType = fetchedPolicyTypeIterator.next();
209         checkEqualsPolicyType(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1.2.3",
210                 "3.0.0", fetchedServiceTemplate, 3);
211
212         fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1.2.3", "1.0.0");
213         assertLatestDataTypesAreReturned(fetchedServiceTemplate);
214         assertEquals(4, fetchedServiceTemplate.getPolicyTypes().size());
215         fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
216         fetchedPolicyType = fetchedPolicyTypeIterator.next();
217         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0", "3.0.0");
218         fetchedPolicyType = fetchedPolicyTypeIterator.next();
219         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1", "3.0.0");
220         fetchedPolicyType = fetchedPolicyTypeIterator.next();
221         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1.2", "3.0.0");
222         fetchedPolicyType = fetchedPolicyTypeIterator.next();
223         checkEqualsPolicyType(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1.2.3",
224                 "1.0.0", fetchedServiceTemplate, 1);
225
226         fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1.2.3", "1.1.0");
227         assertLatestDataTypesAreReturned(fetchedServiceTemplate);
228         assertEquals(4, fetchedServiceTemplate.getPolicyTypes().size());
229         fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
230         fetchedPolicyType = fetchedPolicyTypeIterator.next();
231         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0", "3.0.0");
232         fetchedPolicyType = fetchedPolicyTypeIterator.next();
233         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1", "3.0.0");
234         fetchedPolicyType = fetchedPolicyTypeIterator.next();
235         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1.2", "3.0.0");
236         fetchedPolicyType = fetchedPolicyTypeIterator.next();
237         checkEqualsPolicyType(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1.2.3",
238                 "2.0.0", fetchedServiceTemplate, 1);
239
240         fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1.2.3", "1.2.0");
241         assertLatestDataTypesAreReturned(fetchedServiceTemplate);
242         assertEquals(4, fetchedServiceTemplate.getPolicyTypes().size());
243         fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
244         fetchedPolicyType = fetchedPolicyTypeIterator.next();
245         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0", "3.0.0");
246         fetchedPolicyType = fetchedPolicyTypeIterator.next();
247         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1", "3.0.0");
248         fetchedPolicyType = fetchedPolicyTypeIterator.next();
249         checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1.2", "3.0.0");
250         fetchedPolicyType = fetchedPolicyTypeIterator.next();
251         checkEqualsPolicyType(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1.2.3",
252                 "3.0.0", fetchedServiceTemplate, 1);
253
254         databaseProvider.close();
255     }
256
257     private void checkNameVersion(ToscaPolicyType fetchedPolicyType, String name, String ver) {
258         assertEquals(name, fetchedPolicyType.getName());
259         assertEquals(ver, fetchedPolicyType.getVersion());
260     }
261
262     private void checkEqualsPolicyType(ToscaPolicyType fetchedPolicyType, String name, String ver,
263             ToscaServiceTemplate fetchedServiceTemplate, int policies) {
264         checkNameVersion(fetchedPolicyType, name, ver);
265         assertEquals(policies, countReturnedPolicies(fetchedServiceTemplate));
266     }
267
268     private void assertOldDataTypesAreReturned(final ToscaServiceTemplate fetchedServiceTemplate) {
269         assertEquals(6, fetchedServiceTemplate.getDataTypes().size());
270         assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType0").getVersion());
271         assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType1").getVersion());
272         assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType2").getVersion());
273         assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType3").getVersion());
274         assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType4").getVersion());
275         assertEquals("3.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType5").getVersion());
276     }
277
278     private void assertLatestDataTypesAreReturned(final ToscaServiceTemplate fetchedServiceTemplate) {
279         assertEquals(7, 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         assertEquals("2.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType6").getVersion());
287     }
288
289     private void assertLatestPolicyTypesAreReturned(final ToscaServiceTemplate fetchedServiceTemplate) {
290         assertEquals(4, fetchedServiceTemplate.getPolicyTypes().size());
291
292         for (ToscaPolicyType policyType : fetchedServiceTemplate.getPolicyTypes().values()) {
293             assertEquals("3.0.0", policyType.getVersion());
294         }
295     }
296
297     private int countReturnedPolicies(final ToscaServiceTemplate fetchedServiceTemplate) {
298         List<Map<String, ToscaPolicy>> policyMapList = fetchedServiceTemplate.getToscaTopologyTemplate().getPolicies();
299
300         int totalPolicies = 0;
301         for (Map<String, ToscaPolicy> policyMap : policyMapList) {
302             totalPolicies += policyMap.size();
303         }
304
305         return totalPolicies;
306     }
307 }