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
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.jupiter.api.Assertions.assertEquals;
28 import java.util.Iterator;
29 import java.util.List;
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;
44 class HierarchyFetchTest {
46 private static PolicyModelsProviderParameters parameters;
48 private static 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");
64 public static void tearDown() throws PfModelException {
65 if (databaseProvider != null) {
66 databaseProvider.close();
71 void testMultipleVersions() throws Exception {
72 databaseProvider = new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
74 ToscaServiceTemplate serviceTemplate = new YamlJsonTranslator().fromYaml(
76 .getTextFileAsString("src/test/resources/servicetemplates/MultipleRevisionServiceTemplate.yaml"),
77 ToscaServiceTemplate.class);
79 assertThatCode(() -> databaseProvider.createPolicies(serviceTemplate)).doesNotThrowAnyException();
81 ToscaServiceTemplate fetchedServiceTemplate = databaseProvider.getPolicies(null, null);
83 assertLatestDataTypesAreReturned(fetchedServiceTemplate);
84 assertLatestPolicyTypesAreReturned(fetchedServiceTemplate);
85 assertEquals(12, countReturnedPolicies(fetchedServiceTemplate));
87 fetchedServiceTemplate = databaseProvider.getPolicyTypes(null, null);
88 assertLatestDataTypesAreReturned(fetchedServiceTemplate);
89 assertLatestPolicyTypesAreReturned(fetchedServiceTemplate);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
264 databaseProvider.close();
267 private void checkNameVersion(ToscaPolicyType fetchedPolicyType, String name, String ver) {
268 assertEquals(name, fetchedPolicyType.getName());
269 assertEquals(ver, fetchedPolicyType.getVersion());
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));
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());
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());
299 private void assertLatestPolicyTypesAreReturned(final ToscaServiceTemplate fetchedServiceTemplate) {
300 assertEquals(4, fetchedServiceTemplate.getPolicyTypes().size());
302 for (ToscaPolicyType policyType : fetchedServiceTemplate.getPolicyTypes().values()) {
303 assertEquals("3.0.0", policyType.getVersion());
307 private int countReturnedPolicies(final ToscaServiceTemplate fetchedServiceTemplate) {
308 List<Map<String, ToscaPolicy>> policyMapList = fetchedServiceTemplate.getToscaTopologyTemplate().getPolicies();
310 int totalPolicies = 0;
311 for (Map<String, ToscaPolicy> policyMap : policyMapList) {
312 totalPolicies += policyMap.size();
315 return totalPolicies;