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
11 * http://www.apache.org/licenses/LICENSE-2.0
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.
19 * SPDX-License-Identifier: Apache-2.0
20 * ============LICENSE_END=========================================================
23 package org.onap.policy.models.provider.revisionhierarchy;
25 import static org.assertj.core.api.Assertions.assertThatCode;
26 import static org.junit.Assert.assertEquals;
28 import java.util.Iterator;
29 import java.util.List;
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;
44 public class HierarchyFetchTest {
46 private static PolicyModelsProviderParameters parameters;
48 private PolicyModelsProvider databaseProvider;
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");
65 public void tearDown() throws PfModelException {
66 if (databaseProvider != null) {
67 databaseProvider.close();
72 public void testMultipleVersions() throws Exception {
73 databaseProvider = new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
75 ToscaServiceTemplate serviceTemplate = new YamlJsonTranslator().fromYaml(
77 .getTextFileAsString("src/test/resources/servicetemplates/MultipleRevisionServiceTemplate.yaml"),
78 ToscaServiceTemplate.class);
80 assertThatCode(() -> {
81 databaseProvider.createPolicies(serviceTemplate);
82 }).doesNotThrowAnyException();
84 ToscaServiceTemplate fetchedServiceTemplate = databaseProvider.getPolicies(null, null);
86 assertLatestDataTypesAreReturned(fetchedServiceTemplate);
87 assertLatestPolicyTypesAreReturned(fetchedServiceTemplate);
88 assertEquals(12, countReturnedPolicies(fetchedServiceTemplate));
90 fetchedServiceTemplate = databaseProvider.getPolicyTypes(null, null);
91 assertLatestDataTypesAreReturned(fetchedServiceTemplate);
92 assertLatestPolicyTypesAreReturned(fetchedServiceTemplate);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
267 databaseProvider.close();
270 private void checkNameVersion(ToscaPolicyType fetchedPolicyType, String name, String ver) {
271 assertEquals(name, fetchedPolicyType.getName());
272 assertEquals(ver, fetchedPolicyType.getVersion());
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));
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());
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());
302 private void assertLatestPolicyTypesAreReturned(final ToscaServiceTemplate fetchedServiceTemplate) {
303 assertEquals(4, fetchedServiceTemplate.getPolicyTypes().size());
305 for (ToscaPolicyType policyType : fetchedServiceTemplate.getPolicyTypes().values()) {
306 assertEquals("3.0.0", policyType.getVersion());
310 private int countReturnedPolicies(final ToscaServiceTemplate fetchedServiceTemplate) {
311 List<Map<String, ToscaPolicy>> policyMapList = fetchedServiceTemplate.getToscaTopologyTemplate().getPolicies();
313 int totalPolicies = 0;
314 for (Map<String, ToscaPolicy> policyMap : policyMapList) {
315 totalPolicies += policyMap.size();
318 return totalPolicies;