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
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.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;
42 public class HierarchyFetchTest {
44 private static PolicyModelsProviderParameters parameters;
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");
57 public void testMultipleVersions() throws Exception {
58 PolicyModelsProvider databaseProvider =
59 new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
61 ToscaServiceTemplate serviceTemplate = new YamlJsonTranslator().fromYaml(
63 .getTextFileAsString("src/test/resources/servicetemplates/MultipleRevisionServiceTemplate.yaml"),
64 ToscaServiceTemplate.class);
66 assertThatCode(() -> {
67 databaseProvider.createPolicies(serviceTemplate);
68 }).doesNotThrowAnyException();
70 ToscaServiceTemplate fetchedServiceTemplate = databaseProvider.getPolicies(null, null);
72 assertLatestDataTypesAreReturned(fetchedServiceTemplate);
73 assertLatestPolicyTypesAreReturned(fetchedServiceTemplate);
74 assertEquals(12, countReturnedPolicies(fetchedServiceTemplate));
76 fetchedServiceTemplate = databaseProvider.getPolicyTypes(null, null);
77 assertLatestDataTypesAreReturned(fetchedServiceTemplate);
78 assertLatestPolicyTypesAreReturned(fetchedServiceTemplate);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
254 databaseProvider.close();
257 private void checkNameVersion(ToscaPolicyType fetchedPolicyType, String name, String ver) {
258 assertEquals(name, fetchedPolicyType.getName());
259 assertEquals(ver, fetchedPolicyType.getVersion());
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));
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());
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());
289 private void assertLatestPolicyTypesAreReturned(final ToscaServiceTemplate fetchedServiceTemplate) {
290 assertEquals(4, fetchedServiceTemplate.getPolicyTypes().size());
292 for (ToscaPolicyType policyType : fetchedServiceTemplate.getPolicyTypes().values()) {
293 assertEquals("3.0.0", policyType.getVersion());
297 private int countReturnedPolicies(final ToscaServiceTemplate fetchedServiceTemplate) {
298 List<Map<String, ToscaPolicy>> policyMapList = fetchedServiceTemplate.getToscaTopologyTemplate().getPolicies();
300 int totalPolicies = 0;
301 for (Map<String, ToscaPolicy> policyMap : policyMapList) {
302 totalPolicies += policyMap.size();
305 return totalPolicies;