2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2020 Nordix Foundation.
4 * ================================================================================
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
17 * SPDX-License-Identifier: Apache-2.0
18 * ============LICENSE_END=========================================================
21 package org.onap.policy.models.provider.revisionhierarchy;
23 import static org.assertj.core.api.Assertions.assertThatCode;
24 import static org.junit.Assert.assertEquals;
26 import java.util.Base64;
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(Base64.getEncoder().encodeToString("P01icY".getBytes()));
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 assertEquals("onap.policies.PolicyTypeLevel0", fetchedPolicyType.getName());
84 assertEquals("3.0.0", fetchedPolicyType.getVersion());
85 assertEquals(3, countReturnedPolicies(fetchedServiceTemplate));
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 assertEquals("onap.policies.PolicyTypeLevel0", fetchedPolicyType.getName());
92 assertEquals("1.0.0", fetchedPolicyType.getVersion());
93 assertEquals(1, countReturnedPolicies(fetchedServiceTemplate));
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 assertEquals("onap.policies.PolicyTypeLevel0", fetchedPolicyType.getName());
100 assertEquals("2.0.0", fetchedPolicyType.getVersion());
101 assertEquals(1, countReturnedPolicies(fetchedServiceTemplate));
103 fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0", "1.2.0");
104 assertLatestDataTypesAreReturned(fetchedServiceTemplate);
105 assertEquals(1, fetchedServiceTemplate.getPolicyTypes().size());
106 fetchedPolicyType = fetchedServiceTemplate.getPolicyTypes().values().iterator().next();
107 assertEquals("onap.policies.PolicyTypeLevel0", fetchedPolicyType.getName());
108 assertEquals("3.0.0", fetchedPolicyType.getVersion());
109 assertEquals(1, countReturnedPolicies(fetchedServiceTemplate));
111 fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1", null);
112 assertLatestDataTypesAreReturned(fetchedServiceTemplate);
113 assertEquals(2, fetchedServiceTemplate.getPolicyTypes().size());
114 Iterator<ToscaPolicyType> fetchedPolicyTypeIterator =
115 fetchedServiceTemplate.getPolicyTypes().values().iterator();
116 fetchedPolicyType = fetchedPolicyTypeIterator.next();
117 assertEquals("onap.policies.PolicyTypeLevel0", fetchedPolicyType.getName());
118 assertEquals("3.0.0", fetchedPolicyType.getVersion());
119 fetchedPolicyType = fetchedPolicyTypeIterator.next();
120 assertEquals("onap.policies.PolicyTypeLevel0.1", fetchedPolicyType.getName());
121 assertEquals("3.0.0", fetchedPolicyType.getVersion());
122 assertEquals(3, countReturnedPolicies(fetchedServiceTemplate));
124 fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1", "1.0.0");
125 assertLatestDataTypesAreReturned(fetchedServiceTemplate);
126 assertEquals(2, fetchedServiceTemplate.getPolicyTypes().size());
127 fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
128 fetchedPolicyType = fetchedPolicyTypeIterator.next();
129 assertEquals("onap.policies.PolicyTypeLevel0", fetchedPolicyType.getName());
130 assertEquals("3.0.0", fetchedPolicyType.getVersion());
131 fetchedPolicyType = fetchedPolicyTypeIterator.next();
132 assertEquals("onap.policies.PolicyTypeLevel0.1", fetchedPolicyType.getName());
133 assertEquals("1.0.0", fetchedPolicyType.getVersion());
134 assertEquals(1, countReturnedPolicies(fetchedServiceTemplate));
136 fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1", "1.1.0");
137 assertLatestDataTypesAreReturned(fetchedServiceTemplate);
138 assertEquals(2, fetchedServiceTemplate.getPolicyTypes().size());
139 fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
140 fetchedPolicyType = fetchedPolicyTypeIterator.next();
141 assertEquals("onap.policies.PolicyTypeLevel0", fetchedPolicyType.getName());
142 assertEquals("3.0.0", fetchedPolicyType.getVersion());
143 fetchedPolicyType = fetchedPolicyTypeIterator.next();
144 assertEquals("onap.policies.PolicyTypeLevel0.1", fetchedPolicyType.getName());
145 assertEquals("2.0.0", fetchedPolicyType.getVersion());
146 assertEquals(1, countReturnedPolicies(fetchedServiceTemplate));
148 fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1", "1.2.0");
149 assertLatestDataTypesAreReturned(fetchedServiceTemplate);
150 assertEquals(2, fetchedServiceTemplate.getPolicyTypes().size());
151 fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
152 fetchedPolicyType = fetchedPolicyTypeIterator.next();
153 assertEquals("onap.policies.PolicyTypeLevel0", fetchedPolicyType.getName());
154 assertEquals("3.0.0", fetchedPolicyType.getVersion());
155 fetchedPolicyType = fetchedPolicyTypeIterator.next();
156 assertEquals("onap.policies.PolicyTypeLevel0.1", fetchedPolicyType.getName());
157 assertEquals("3.0.0", fetchedPolicyType.getVersion());
158 assertEquals(1, countReturnedPolicies(fetchedServiceTemplate));
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 assertEquals("onap.policies.PolicyTypeLevel0", fetchedPolicyType.getName());
166 assertEquals("3.0.0", fetchedPolicyType.getVersion());
167 fetchedPolicyType = fetchedPolicyTypeIterator.next();
168 assertEquals("onap.policies.PolicyTypeLevel0.1", fetchedPolicyType.getName());
169 assertEquals("3.0.0", fetchedPolicyType.getVersion());
170 fetchedPolicyType = fetchedPolicyTypeIterator.next();
171 assertEquals("onap.policies.PolicyTypeLevel0.1.2", fetchedPolicyType.getName());
172 assertEquals("3.0.0", fetchedPolicyType.getVersion());
173 assertEquals(3, countReturnedPolicies(fetchedServiceTemplate));
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 assertEquals("onap.policies.PolicyTypeLevel0", fetchedPolicyType.getName());
181 assertEquals("3.0.0", fetchedPolicyType.getVersion());
182 fetchedPolicyType = fetchedPolicyTypeIterator.next();
183 assertEquals("onap.policies.PolicyTypeLevel0.1", fetchedPolicyType.getName());
184 assertEquals("3.0.0", fetchedPolicyType.getVersion());
185 fetchedPolicyType = fetchedPolicyTypeIterator.next();
186 assertEquals("onap.policies.PolicyTypeLevel0.1.2", fetchedPolicyType.getName());
187 assertEquals("1.0.0", fetchedPolicyType.getVersion());
188 assertEquals(1, countReturnedPolicies(fetchedServiceTemplate));
190 fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1.2", "1.1.0");
191 assertLatestDataTypesAreReturned(fetchedServiceTemplate);
192 assertEquals(3, fetchedServiceTemplate.getPolicyTypes().size());
193 fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
194 fetchedPolicyType = fetchedPolicyTypeIterator.next();
195 assertEquals("onap.policies.PolicyTypeLevel0", fetchedPolicyType.getName());
196 assertEquals("3.0.0", fetchedPolicyType.getVersion());
197 fetchedPolicyType = fetchedPolicyTypeIterator.next();
198 assertEquals("onap.policies.PolicyTypeLevel0.1", fetchedPolicyType.getName());
199 assertEquals("3.0.0", fetchedPolicyType.getVersion());
200 fetchedPolicyType = fetchedPolicyTypeIterator.next();
201 assertEquals("onap.policies.PolicyTypeLevel0.1.2", fetchedPolicyType.getName());
202 assertEquals("2.0.0", fetchedPolicyType.getVersion());
203 assertEquals(1, countReturnedPolicies(fetchedServiceTemplate));
205 fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1.2", "1.2.0");
206 assertLatestDataTypesAreReturned(fetchedServiceTemplate);
207 assertEquals(3, fetchedServiceTemplate.getPolicyTypes().size());
208 fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
209 fetchedPolicyType = fetchedPolicyTypeIterator.next();
210 assertEquals("onap.policies.PolicyTypeLevel0", fetchedPolicyType.getName());
211 assertEquals("3.0.0", fetchedPolicyType.getVersion());
212 fetchedPolicyType = fetchedPolicyTypeIterator.next();
213 assertEquals("onap.policies.PolicyTypeLevel0.1", fetchedPolicyType.getName());
214 assertEquals("3.0.0", fetchedPolicyType.getVersion());
215 fetchedPolicyType = fetchedPolicyTypeIterator.next();
216 assertEquals("onap.policies.PolicyTypeLevel0.1.2", fetchedPolicyType.getName());
217 assertEquals("3.0.0", fetchedPolicyType.getVersion());
218 assertEquals(1, countReturnedPolicies(fetchedServiceTemplate));
220 fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1.2.3", null);
221 assertLatestDataTypesAreReturned(fetchedServiceTemplate);
222 assertEquals(4, fetchedServiceTemplate.getPolicyTypes().size());
223 fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
224 fetchedPolicyType = fetchedPolicyTypeIterator.next();
225 assertEquals("onap.policies.PolicyTypeLevel0", fetchedPolicyType.getName());
226 assertEquals("3.0.0", fetchedPolicyType.getVersion());
227 fetchedPolicyType = fetchedPolicyTypeIterator.next();
228 assertEquals("onap.policies.PolicyTypeLevel0.1", fetchedPolicyType.getName());
229 assertEquals("3.0.0", fetchedPolicyType.getVersion());
230 fetchedPolicyType = fetchedPolicyTypeIterator.next();
231 assertEquals("onap.policies.PolicyTypeLevel0.1.2", fetchedPolicyType.getName());
232 assertEquals("3.0.0", fetchedPolicyType.getVersion());
233 fetchedPolicyType = fetchedPolicyTypeIterator.next();
234 assertEquals("onap.policies.PolicyTypeLevel0.1.2.3", fetchedPolicyType.getName());
235 assertEquals("3.0.0", fetchedPolicyType.getVersion());
236 assertEquals(3, countReturnedPolicies(fetchedServiceTemplate));
238 fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1.2.3", "1.0.0");
239 assertLatestDataTypesAreReturned(fetchedServiceTemplate);
240 assertEquals(4, fetchedServiceTemplate.getPolicyTypes().size());
241 fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
242 fetchedPolicyType = fetchedPolicyTypeIterator.next();
243 assertEquals("onap.policies.PolicyTypeLevel0", fetchedPolicyType.getName());
244 assertEquals("3.0.0", fetchedPolicyType.getVersion());
245 fetchedPolicyType = fetchedPolicyTypeIterator.next();
246 assertEquals("onap.policies.PolicyTypeLevel0.1", fetchedPolicyType.getName());
247 assertEquals("3.0.0", fetchedPolicyType.getVersion());
248 fetchedPolicyType = fetchedPolicyTypeIterator.next();
249 assertEquals("onap.policies.PolicyTypeLevel0.1.2", fetchedPolicyType.getName());
250 assertEquals("3.0.0", fetchedPolicyType.getVersion());
251 fetchedPolicyType = fetchedPolicyTypeIterator.next();
252 assertEquals("onap.policies.PolicyTypeLevel0.1.2.3", fetchedPolicyType.getName());
253 assertEquals("1.0.0", fetchedPolicyType.getVersion());
254 assertEquals(1, countReturnedPolicies(fetchedServiceTemplate));
256 fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1.2.3", "1.1.0");
257 assertLatestDataTypesAreReturned(fetchedServiceTemplate);
258 assertEquals(4, fetchedServiceTemplate.getPolicyTypes().size());
259 fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
260 fetchedPolicyType = fetchedPolicyTypeIterator.next();
261 assertEquals("onap.policies.PolicyTypeLevel0", fetchedPolicyType.getName());
262 assertEquals("3.0.0", fetchedPolicyType.getVersion());
263 fetchedPolicyType = fetchedPolicyTypeIterator.next();
264 assertEquals("onap.policies.PolicyTypeLevel0.1", fetchedPolicyType.getName());
265 assertEquals("3.0.0", fetchedPolicyType.getVersion());
266 fetchedPolicyType = fetchedPolicyTypeIterator.next();
267 assertEquals("onap.policies.PolicyTypeLevel0.1.2", fetchedPolicyType.getName());
268 assertEquals("3.0.0", fetchedPolicyType.getVersion());
269 fetchedPolicyType = fetchedPolicyTypeIterator.next();
270 assertEquals("onap.policies.PolicyTypeLevel0.1.2.3", fetchedPolicyType.getName());
271 assertEquals("2.0.0", fetchedPolicyType.getVersion());
272 assertEquals(1, countReturnedPolicies(fetchedServiceTemplate));
274 fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1.2.3", "1.2.0");
275 assertLatestDataTypesAreReturned(fetchedServiceTemplate);
276 assertEquals(4, fetchedServiceTemplate.getPolicyTypes().size());
277 fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
278 fetchedPolicyType = fetchedPolicyTypeIterator.next();
279 assertEquals("onap.policies.PolicyTypeLevel0", fetchedPolicyType.getName());
280 assertEquals("3.0.0", fetchedPolicyType.getVersion());
281 fetchedPolicyType = fetchedPolicyTypeIterator.next();
282 assertEquals("onap.policies.PolicyTypeLevel0.1", fetchedPolicyType.getName());
283 assertEquals("3.0.0", fetchedPolicyType.getVersion());
284 fetchedPolicyType = fetchedPolicyTypeIterator.next();
285 assertEquals("onap.policies.PolicyTypeLevel0.1.2", fetchedPolicyType.getName());
286 assertEquals("3.0.0", fetchedPolicyType.getVersion());
287 fetchedPolicyType = fetchedPolicyTypeIterator.next();
288 assertEquals("onap.policies.PolicyTypeLevel0.1.2.3", fetchedPolicyType.getName());
289 assertEquals("3.0.0", fetchedPolicyType.getVersion());
290 assertEquals(1, countReturnedPolicies(fetchedServiceTemplate));
292 databaseProvider.close();
295 private void assertOldDataTypesAreReturned(final ToscaServiceTemplate fetchedServiceTemplate) {
296 assertEquals(6, fetchedServiceTemplate.getDataTypes().size());
297 assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType0").getVersion());
298 assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType1").getVersion());
299 assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType2").getVersion());
300 assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType3").getVersion());
301 assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType4").getVersion());
302 assertEquals("3.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType5").getVersion());
305 private void assertLatestDataTypesAreReturned(final ToscaServiceTemplate fetchedServiceTemplate) {
306 assertEquals(7, fetchedServiceTemplate.getDataTypes().size());
307 assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType0").getVersion());
308 assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType1").getVersion());
309 assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType2").getVersion());
310 assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType3").getVersion());
311 assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType4").getVersion());
312 assertEquals("3.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType5").getVersion());
313 assertEquals("2.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType6").getVersion());
316 private void assertLatestPolicyTypesAreReturned(final ToscaServiceTemplate fetchedServiceTemplate) {
317 assertEquals(4, fetchedServiceTemplate.getPolicyTypes().size());
319 for (ToscaPolicyType policyType : fetchedServiceTemplate.getPolicyTypes().values()) {
320 assertEquals("3.0.0", policyType.getVersion());
324 private int countReturnedPolicies(final ToscaServiceTemplate fetchedServiceTemplate) {
325 List<Map<String, ToscaPolicy>> policyMapList = fetchedServiceTemplate.getToscaTopologyTemplate().getPolicies();
327 int totalPolicies = 0;
328 for (Map<String, ToscaPolicy> policyMap : policyMapList) {
329 totalPolicies += policyMap.size();
332 return totalPolicies;