2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2020-2021 Nordix Foundation.
4 * Modifications Copyright (C) 2020 Bell Canada. All rights reserved.
5 * ================================================================================
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
18 * SPDX-License-Identifier: Apache-2.0
19 * ============LICENSE_END=========================================================
22 package org.onap.policy.models.provider.revisionhierarchy;
24 import static org.assertj.core.api.Assertions.assertThatCode;
25 import static org.junit.Assert.assertEquals;
27 import java.util.Iterator;
28 import java.util.List;
30 import org.junit.BeforeClass;
31 import org.junit.Test;
32 import org.onap.policy.common.utils.coder.YamlJsonTranslator;
33 import org.onap.policy.common.utils.resources.TextFileUtils;
34 import org.onap.policy.models.provider.PolicyModelsProvider;
35 import org.onap.policy.models.provider.PolicyModelsProviderFactory;
36 import org.onap.policy.models.provider.PolicyModelsProviderParameters;
37 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
38 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyType;
39 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
41 public class HierarchyFetchTest {
43 private static PolicyModelsProviderParameters parameters;
46 public static void beforeSetupParameters() {
47 parameters = new PolicyModelsProviderParameters();
48 parameters.setDatabaseDriver("org.h2.Driver");
49 parameters.setDatabaseUrl("jdbc:h2:mem:testdb");
50 parameters.setDatabaseUser("policy");
51 parameters.setDatabasePassword("P01icY");
52 parameters.setPersistenceUnit("ToscaConceptTest");
56 public void testMultipleVersions() throws Exception {
57 PolicyModelsProvider databaseProvider =
58 new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
60 ToscaServiceTemplate serviceTemplate = new YamlJsonTranslator().fromYaml(
62 .getTextFileAsString("src/test/resources/servicetemplates/MultipleRevisionServiceTemplate.yaml"),
63 ToscaServiceTemplate.class);
65 assertThatCode(() -> {
66 databaseProvider.createPolicies(serviceTemplate);
67 }).doesNotThrowAnyException();
69 ToscaServiceTemplate fetchedServiceTemplate = databaseProvider.getPolicies(null, null);
71 assertLatestDataTypesAreReturned(fetchedServiceTemplate);
72 assertLatestPolicyTypesAreReturned(fetchedServiceTemplate);
73 assertEquals(12, countReturnedPolicies(fetchedServiceTemplate));
75 fetchedServiceTemplate = databaseProvider.getPolicyTypes(null, null);
76 assertLatestDataTypesAreReturned(fetchedServiceTemplate);
77 assertLatestPolicyTypesAreReturned(fetchedServiceTemplate);
79 fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0", null);
80 assertLatestDataTypesAreReturned(fetchedServiceTemplate);
81 assertEquals(1, fetchedServiceTemplate.getPolicyTypes().size());
82 ToscaPolicyType fetchedPolicyType = fetchedServiceTemplate.getPolicyTypes().values().iterator().next();
83 checkEqualsPolicyType(fetchedPolicyType, "onap.policies.PolicyTypeLevel0",
84 "3.0.0", fetchedServiceTemplate, 3);
87 fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0", "1.0.0");
88 assertOldDataTypesAreReturned(fetchedServiceTemplate);
89 assertEquals(1, fetchedServiceTemplate.getPolicyTypes().size());
90 fetchedPolicyType = fetchedServiceTemplate.getPolicyTypes().values().iterator().next();
91 checkEqualsPolicyType(fetchedPolicyType, "onap.policies.PolicyTypeLevel0",
92 "1.0.0", fetchedServiceTemplate, 1);
94 fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0", "1.1.0");
95 assertOldDataTypesAreReturned(fetchedServiceTemplate);
96 assertEquals(1, fetchedServiceTemplate.getPolicyTypes().size());
97 fetchedPolicyType = fetchedServiceTemplate.getPolicyTypes().values().iterator().next();
98 checkEqualsPolicyType(fetchedPolicyType, "onap.policies.PolicyTypeLevel0",
99 "2.0.0", fetchedServiceTemplate, 1);
101 fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0", "1.2.0");
102 assertLatestDataTypesAreReturned(fetchedServiceTemplate);
103 assertEquals(1, fetchedServiceTemplate.getPolicyTypes().size());
104 fetchedPolicyType = fetchedServiceTemplate.getPolicyTypes().values().iterator().next();
105 checkEqualsPolicyType(fetchedPolicyType, "onap.policies.PolicyTypeLevel0",
106 "3.0.0", fetchedServiceTemplate, 1);
108 fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1", null);
109 assertLatestDataTypesAreReturned(fetchedServiceTemplate);
110 assertEquals(2, fetchedServiceTemplate.getPolicyTypes().size());
111 Iterator<ToscaPolicyType> fetchedPolicyTypeIterator =
112 fetchedServiceTemplate.getPolicyTypes().values().iterator();
113 fetchedPolicyType = fetchedPolicyTypeIterator.next();
114 checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0", "3.0.0");
115 fetchedPolicyType = fetchedPolicyTypeIterator.next();
116 checkEqualsPolicyType(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1",
117 "3.0.0", fetchedServiceTemplate, 3);
119 fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1", "1.0.0");
120 assertLatestDataTypesAreReturned(fetchedServiceTemplate);
121 assertEquals(2, fetchedServiceTemplate.getPolicyTypes().size());
122 fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
123 fetchedPolicyType = fetchedPolicyTypeIterator.next();
124 checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0", "3.0.0");
125 fetchedPolicyType = fetchedPolicyTypeIterator.next();
126 checkEqualsPolicyType(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1",
127 "1.0.0", fetchedServiceTemplate, 1);
129 fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1", "1.1.0");
130 assertLatestDataTypesAreReturned(fetchedServiceTemplate);
131 assertEquals(2, fetchedServiceTemplate.getPolicyTypes().size());
132 fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
133 fetchedPolicyType = fetchedPolicyTypeIterator.next();
134 checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0", "3.0.0");
135 fetchedPolicyType = fetchedPolicyTypeIterator.next();
136 checkEqualsPolicyType(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1",
137 "2.0.0", fetchedServiceTemplate, 1);
139 fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1", "1.2.0");
140 assertLatestDataTypesAreReturned(fetchedServiceTemplate);
141 assertEquals(2, fetchedServiceTemplate.getPolicyTypes().size());
142 fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
143 fetchedPolicyType = fetchedPolicyTypeIterator.next();
144 checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0", "3.0.0");
145 fetchedPolicyType = fetchedPolicyTypeIterator.next();
146 checkEqualsPolicyType(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1",
147 "3.0.0", fetchedServiceTemplate, 1);
149 fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1.2", null);
150 assertLatestDataTypesAreReturned(fetchedServiceTemplate);
151 assertEquals(3, fetchedServiceTemplate.getPolicyTypes().size());
152 fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
153 fetchedPolicyType = fetchedPolicyTypeIterator.next();
154 checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0", "3.0.0");
155 fetchedPolicyType = fetchedPolicyTypeIterator.next();
156 checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1", "3.0.0");
157 fetchedPolicyType = fetchedPolicyTypeIterator.next();
158 checkEqualsPolicyType(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1.2",
159 "3.0.0", fetchedServiceTemplate, 3);
161 fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1.2", "1.0.0");
162 assertLatestDataTypesAreReturned(fetchedServiceTemplate);
163 assertEquals(3, fetchedServiceTemplate.getPolicyTypes().size());
164 fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
165 fetchedPolicyType = fetchedPolicyTypeIterator.next();
166 checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0", "3.0.0");
167 fetchedPolicyType = fetchedPolicyTypeIterator.next();
168 checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1", "3.0.0");
169 fetchedPolicyType = fetchedPolicyTypeIterator.next();
170 checkEqualsPolicyType(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1.2",
171 "1.0.0", fetchedServiceTemplate, 1);
173 fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1.2", "1.1.0");
174 assertLatestDataTypesAreReturned(fetchedServiceTemplate);
175 assertEquals(3, fetchedServiceTemplate.getPolicyTypes().size());
176 fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
177 fetchedPolicyType = fetchedPolicyTypeIterator.next();
178 checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0", "3.0.0");
179 fetchedPolicyType = fetchedPolicyTypeIterator.next();
180 checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1", "3.0.0");
181 fetchedPolicyType = fetchedPolicyTypeIterator.next();
182 checkEqualsPolicyType(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1.2",
183 "2.0.0", fetchedServiceTemplate, 1);
185 fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1.2", "1.2.0");
186 assertLatestDataTypesAreReturned(fetchedServiceTemplate);
187 assertEquals(3, fetchedServiceTemplate.getPolicyTypes().size());
188 fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
189 fetchedPolicyType = fetchedPolicyTypeIterator.next();
190 checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0", "3.0.0");
191 fetchedPolicyType = fetchedPolicyTypeIterator.next();
192 checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1", "3.0.0");
193 fetchedPolicyType = fetchedPolicyTypeIterator.next();
194 checkEqualsPolicyType(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1.2",
195 "3.0.0", fetchedServiceTemplate, 1);
197 fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1.2.3", null);
198 assertLatestDataTypesAreReturned(fetchedServiceTemplate);
199 assertEquals(4, fetchedServiceTemplate.getPolicyTypes().size());
200 fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
201 fetchedPolicyType = fetchedPolicyTypeIterator.next();
202 checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0", "3.0.0");
203 fetchedPolicyType = fetchedPolicyTypeIterator.next();
204 checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1", "3.0.0");
205 fetchedPolicyType = fetchedPolicyTypeIterator.next();
206 checkNameVersion(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1.2", "3.0.0");
207 fetchedPolicyType = fetchedPolicyTypeIterator.next();
208 checkEqualsPolicyType(fetchedPolicyType, "onap.policies.PolicyTypeLevel0.1.2.3",
209 "3.0.0", fetchedServiceTemplate, 3);
211 fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1.2.3", "1.0.0");
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 "1.0.0", fetchedServiceTemplate, 1);
225 fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1.2.3", "1.1.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 "2.0.0", fetchedServiceTemplate, 1);
239 fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1.2.3", "1.2.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 "3.0.0", fetchedServiceTemplate, 1);
253 databaseProvider.close();
256 private void checkNameVersion(ToscaPolicyType fetchedPolicyType, String name, String ver) {
257 assertEquals(name, fetchedPolicyType.getName());
258 assertEquals(ver, fetchedPolicyType.getVersion());
261 private void checkEqualsPolicyType(ToscaPolicyType fetchedPolicyType, String name, String ver,
262 ToscaServiceTemplate fetchedServiceTemplate, int policies) {
263 checkNameVersion(fetchedPolicyType, name, ver);
264 assertEquals(policies, countReturnedPolicies(fetchedServiceTemplate));
267 private void assertOldDataTypesAreReturned(final ToscaServiceTemplate fetchedServiceTemplate) {
268 assertEquals(6, fetchedServiceTemplate.getDataTypes().size());
269 assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType0").getVersion());
270 assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType1").getVersion());
271 assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType2").getVersion());
272 assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType3").getVersion());
273 assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType4").getVersion());
274 assertEquals("3.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType5").getVersion());
277 private void assertLatestDataTypesAreReturned(final ToscaServiceTemplate fetchedServiceTemplate) {
278 assertEquals(7, fetchedServiceTemplate.getDataTypes().size());
279 assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType0").getVersion());
280 assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType1").getVersion());
281 assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType2").getVersion());
282 assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType3").getVersion());
283 assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType4").getVersion());
284 assertEquals("3.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType5").getVersion());
285 assertEquals("2.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType6").getVersion());
288 private void assertLatestPolicyTypesAreReturned(final ToscaServiceTemplate fetchedServiceTemplate) {
289 assertEquals(4, fetchedServiceTemplate.getPolicyTypes().size());
291 for (ToscaPolicyType policyType : fetchedServiceTemplate.getPolicyTypes().values()) {
292 assertEquals("3.0.0", policyType.getVersion());
296 private int countReturnedPolicies(final ToscaServiceTemplate fetchedServiceTemplate) {
297 List<Map<String, ToscaPolicy>> policyMapList = fetchedServiceTemplate.getToscaTopologyTemplate().getPolicies();
299 int totalPolicies = 0;
300 for (Map<String, ToscaPolicy> policyMap : policyMapList) {
301 totalPolicies += policyMap.size();
304 return totalPolicies;