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;
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:testdb");
51 parameters.setDatabaseUser("policy");
52 parameters.setDatabasePassword(Base64.getEncoder().encodeToString("P01icY".getBytes()));
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 assertEquals("onap.policies.PolicyTypeLevel0", fetchedPolicyType.getName());
85 assertEquals("3.0.0", fetchedPolicyType.getVersion());
86 assertEquals(3, countReturnedPolicies(fetchedServiceTemplate));
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 assertEquals("onap.policies.PolicyTypeLevel0", fetchedPolicyType.getName());
93 assertEquals("1.0.0", fetchedPolicyType.getVersion());
94 assertEquals(1, countReturnedPolicies(fetchedServiceTemplate));
96 fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0", "1.1.0");
97 assertOldDataTypesAreReturned(fetchedServiceTemplate);
98 assertEquals(1, fetchedServiceTemplate.getPolicyTypes().size());
99 fetchedPolicyType = fetchedServiceTemplate.getPolicyTypes().values().iterator().next();
100 assertEquals("onap.policies.PolicyTypeLevel0", fetchedPolicyType.getName());
101 assertEquals("2.0.0", fetchedPolicyType.getVersion());
102 assertEquals(1, countReturnedPolicies(fetchedServiceTemplate));
104 fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0", "1.2.0");
105 assertLatestDataTypesAreReturned(fetchedServiceTemplate);
106 assertEquals(1, fetchedServiceTemplate.getPolicyTypes().size());
107 fetchedPolicyType = fetchedServiceTemplate.getPolicyTypes().values().iterator().next();
108 assertEquals("onap.policies.PolicyTypeLevel0", fetchedPolicyType.getName());
109 assertEquals("3.0.0", fetchedPolicyType.getVersion());
110 assertEquals(1, countReturnedPolicies(fetchedServiceTemplate));
112 fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1", null);
113 assertLatestDataTypesAreReturned(fetchedServiceTemplate);
114 assertEquals(2, fetchedServiceTemplate.getPolicyTypes().size());
115 Iterator<ToscaPolicyType> fetchedPolicyTypeIterator =
116 fetchedServiceTemplate.getPolicyTypes().values().iterator();
117 fetchedPolicyType = fetchedPolicyTypeIterator.next();
118 assertEquals("onap.policies.PolicyTypeLevel0", fetchedPolicyType.getName());
119 assertEquals("3.0.0", fetchedPolicyType.getVersion());
120 fetchedPolicyType = fetchedPolicyTypeIterator.next();
121 assertEquals("onap.policies.PolicyTypeLevel0.1", fetchedPolicyType.getName());
122 assertEquals("3.0.0", fetchedPolicyType.getVersion());
123 assertEquals(3, countReturnedPolicies(fetchedServiceTemplate));
125 fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1", "1.0.0");
126 assertLatestDataTypesAreReturned(fetchedServiceTemplate);
127 assertEquals(2, fetchedServiceTemplate.getPolicyTypes().size());
128 fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
129 fetchedPolicyType = fetchedPolicyTypeIterator.next();
130 assertEquals("onap.policies.PolicyTypeLevel0", fetchedPolicyType.getName());
131 assertEquals("3.0.0", fetchedPolicyType.getVersion());
132 fetchedPolicyType = fetchedPolicyTypeIterator.next();
133 assertEquals("onap.policies.PolicyTypeLevel0.1", fetchedPolicyType.getName());
134 assertEquals("1.0.0", fetchedPolicyType.getVersion());
135 assertEquals(1, countReturnedPolicies(fetchedServiceTemplate));
137 fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1", "1.1.0");
138 assertLatestDataTypesAreReturned(fetchedServiceTemplate);
139 assertEquals(2, fetchedServiceTemplate.getPolicyTypes().size());
140 fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
141 fetchedPolicyType = fetchedPolicyTypeIterator.next();
142 assertEquals("onap.policies.PolicyTypeLevel0", fetchedPolicyType.getName());
143 assertEquals("3.0.0", fetchedPolicyType.getVersion());
144 fetchedPolicyType = fetchedPolicyTypeIterator.next();
145 assertEquals("onap.policies.PolicyTypeLevel0.1", fetchedPolicyType.getName());
146 assertEquals("2.0.0", fetchedPolicyType.getVersion());
147 assertEquals(1, countReturnedPolicies(fetchedServiceTemplate));
149 fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1", "1.2.0");
150 assertLatestDataTypesAreReturned(fetchedServiceTemplate);
151 assertEquals(2, fetchedServiceTemplate.getPolicyTypes().size());
152 fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
153 fetchedPolicyType = fetchedPolicyTypeIterator.next();
154 assertEquals("onap.policies.PolicyTypeLevel0", fetchedPolicyType.getName());
155 assertEquals("3.0.0", fetchedPolicyType.getVersion());
156 fetchedPolicyType = fetchedPolicyTypeIterator.next();
157 assertEquals("onap.policies.PolicyTypeLevel0.1", fetchedPolicyType.getName());
158 assertEquals("3.0.0", fetchedPolicyType.getVersion());
159 assertEquals(1, countReturnedPolicies(fetchedServiceTemplate));
161 fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1.2", null);
162 assertLatestDataTypesAreReturned(fetchedServiceTemplate);
163 assertEquals(3, fetchedServiceTemplate.getPolicyTypes().size());
164 fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
165 fetchedPolicyType = fetchedPolicyTypeIterator.next();
166 assertEquals("onap.policies.PolicyTypeLevel0", fetchedPolicyType.getName());
167 assertEquals("3.0.0", fetchedPolicyType.getVersion());
168 fetchedPolicyType = fetchedPolicyTypeIterator.next();
169 assertEquals("onap.policies.PolicyTypeLevel0.1", fetchedPolicyType.getName());
170 assertEquals("3.0.0", fetchedPolicyType.getVersion());
171 fetchedPolicyType = fetchedPolicyTypeIterator.next();
172 assertEquals("onap.policies.PolicyTypeLevel0.1.2", fetchedPolicyType.getName());
173 assertEquals("3.0.0", fetchedPolicyType.getVersion());
174 assertEquals(3, countReturnedPolicies(fetchedServiceTemplate));
176 fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1.2", "1.0.0");
177 assertLatestDataTypesAreReturned(fetchedServiceTemplate);
178 assertEquals(3, fetchedServiceTemplate.getPolicyTypes().size());
179 fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
180 fetchedPolicyType = fetchedPolicyTypeIterator.next();
181 assertEquals("onap.policies.PolicyTypeLevel0", fetchedPolicyType.getName());
182 assertEquals("3.0.0", fetchedPolicyType.getVersion());
183 fetchedPolicyType = fetchedPolicyTypeIterator.next();
184 assertEquals("onap.policies.PolicyTypeLevel0.1", fetchedPolicyType.getName());
185 assertEquals("3.0.0", fetchedPolicyType.getVersion());
186 fetchedPolicyType = fetchedPolicyTypeIterator.next();
187 assertEquals("onap.policies.PolicyTypeLevel0.1.2", fetchedPolicyType.getName());
188 assertEquals("1.0.0", fetchedPolicyType.getVersion());
189 assertEquals(1, countReturnedPolicies(fetchedServiceTemplate));
191 fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1.2", "1.1.0");
192 assertLatestDataTypesAreReturned(fetchedServiceTemplate);
193 assertEquals(3, fetchedServiceTemplate.getPolicyTypes().size());
194 fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
195 fetchedPolicyType = fetchedPolicyTypeIterator.next();
196 assertEquals("onap.policies.PolicyTypeLevel0", fetchedPolicyType.getName());
197 assertEquals("3.0.0", fetchedPolicyType.getVersion());
198 fetchedPolicyType = fetchedPolicyTypeIterator.next();
199 assertEquals("onap.policies.PolicyTypeLevel0.1", fetchedPolicyType.getName());
200 assertEquals("3.0.0", fetchedPolicyType.getVersion());
201 fetchedPolicyType = fetchedPolicyTypeIterator.next();
202 assertEquals("onap.policies.PolicyTypeLevel0.1.2", fetchedPolicyType.getName());
203 assertEquals("2.0.0", fetchedPolicyType.getVersion());
204 assertEquals(1, countReturnedPolicies(fetchedServiceTemplate));
206 fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1.2", "1.2.0");
207 assertLatestDataTypesAreReturned(fetchedServiceTemplate);
208 assertEquals(3, fetchedServiceTemplate.getPolicyTypes().size());
209 fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
210 fetchedPolicyType = fetchedPolicyTypeIterator.next();
211 assertEquals("onap.policies.PolicyTypeLevel0", fetchedPolicyType.getName());
212 assertEquals("3.0.0", fetchedPolicyType.getVersion());
213 fetchedPolicyType = fetchedPolicyTypeIterator.next();
214 assertEquals("onap.policies.PolicyTypeLevel0.1", fetchedPolicyType.getName());
215 assertEquals("3.0.0", fetchedPolicyType.getVersion());
216 fetchedPolicyType = fetchedPolicyTypeIterator.next();
217 assertEquals("onap.policies.PolicyTypeLevel0.1.2", fetchedPolicyType.getName());
218 assertEquals("3.0.0", fetchedPolicyType.getVersion());
219 assertEquals(1, countReturnedPolicies(fetchedServiceTemplate));
221 fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1.2.3", null);
222 assertLatestDataTypesAreReturned(fetchedServiceTemplate);
223 assertEquals(4, fetchedServiceTemplate.getPolicyTypes().size());
224 fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
225 fetchedPolicyType = fetchedPolicyTypeIterator.next();
226 assertEquals("onap.policies.PolicyTypeLevel0", fetchedPolicyType.getName());
227 assertEquals("3.0.0", fetchedPolicyType.getVersion());
228 fetchedPolicyType = fetchedPolicyTypeIterator.next();
229 assertEquals("onap.policies.PolicyTypeLevel0.1", fetchedPolicyType.getName());
230 assertEquals("3.0.0", fetchedPolicyType.getVersion());
231 fetchedPolicyType = fetchedPolicyTypeIterator.next();
232 assertEquals("onap.policies.PolicyTypeLevel0.1.2", fetchedPolicyType.getName());
233 assertEquals("3.0.0", fetchedPolicyType.getVersion());
234 fetchedPolicyType = fetchedPolicyTypeIterator.next();
235 assertEquals("onap.policies.PolicyTypeLevel0.1.2.3", fetchedPolicyType.getName());
236 assertEquals("3.0.0", fetchedPolicyType.getVersion());
237 assertEquals(3, countReturnedPolicies(fetchedServiceTemplate));
239 fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1.2.3", "1.0.0");
240 assertLatestDataTypesAreReturned(fetchedServiceTemplate);
241 assertEquals(4, fetchedServiceTemplate.getPolicyTypes().size());
242 fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
243 fetchedPolicyType = fetchedPolicyTypeIterator.next();
244 assertEquals("onap.policies.PolicyTypeLevel0", fetchedPolicyType.getName());
245 assertEquals("3.0.0", fetchedPolicyType.getVersion());
246 fetchedPolicyType = fetchedPolicyTypeIterator.next();
247 assertEquals("onap.policies.PolicyTypeLevel0.1", fetchedPolicyType.getName());
248 assertEquals("3.0.0", fetchedPolicyType.getVersion());
249 fetchedPolicyType = fetchedPolicyTypeIterator.next();
250 assertEquals("onap.policies.PolicyTypeLevel0.1.2", fetchedPolicyType.getName());
251 assertEquals("3.0.0", fetchedPolicyType.getVersion());
252 fetchedPolicyType = fetchedPolicyTypeIterator.next();
253 assertEquals("onap.policies.PolicyTypeLevel0.1.2.3", fetchedPolicyType.getName());
254 assertEquals("1.0.0", fetchedPolicyType.getVersion());
255 assertEquals(1, countReturnedPolicies(fetchedServiceTemplate));
257 fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1.2.3", "1.1.0");
258 assertLatestDataTypesAreReturned(fetchedServiceTemplate);
259 assertEquals(4, fetchedServiceTemplate.getPolicyTypes().size());
260 fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
261 fetchedPolicyType = fetchedPolicyTypeIterator.next();
262 assertEquals("onap.policies.PolicyTypeLevel0", fetchedPolicyType.getName());
263 assertEquals("3.0.0", fetchedPolicyType.getVersion());
264 fetchedPolicyType = fetchedPolicyTypeIterator.next();
265 assertEquals("onap.policies.PolicyTypeLevel0.1", fetchedPolicyType.getName());
266 assertEquals("3.0.0", fetchedPolicyType.getVersion());
267 fetchedPolicyType = fetchedPolicyTypeIterator.next();
268 assertEquals("onap.policies.PolicyTypeLevel0.1.2", fetchedPolicyType.getName());
269 assertEquals("3.0.0", fetchedPolicyType.getVersion());
270 fetchedPolicyType = fetchedPolicyTypeIterator.next();
271 assertEquals("onap.policies.PolicyTypeLevel0.1.2.3", fetchedPolicyType.getName());
272 assertEquals("2.0.0", fetchedPolicyType.getVersion());
273 assertEquals(1, countReturnedPolicies(fetchedServiceTemplate));
275 fetchedServiceTemplate = databaseProvider.getPolicies("onap.policies.PolicyLevel0.1.2.3", "1.2.0");
276 assertLatestDataTypesAreReturned(fetchedServiceTemplate);
277 assertEquals(4, fetchedServiceTemplate.getPolicyTypes().size());
278 fetchedPolicyTypeIterator = fetchedServiceTemplate.getPolicyTypes().values().iterator();
279 fetchedPolicyType = fetchedPolicyTypeIterator.next();
280 assertEquals("onap.policies.PolicyTypeLevel0", fetchedPolicyType.getName());
281 assertEquals("3.0.0", fetchedPolicyType.getVersion());
282 fetchedPolicyType = fetchedPolicyTypeIterator.next();
283 assertEquals("onap.policies.PolicyTypeLevel0.1", fetchedPolicyType.getName());
284 assertEquals("3.0.0", fetchedPolicyType.getVersion());
285 fetchedPolicyType = fetchedPolicyTypeIterator.next();
286 assertEquals("onap.policies.PolicyTypeLevel0.1.2", fetchedPolicyType.getName());
287 assertEquals("3.0.0", fetchedPolicyType.getVersion());
288 fetchedPolicyType = fetchedPolicyTypeIterator.next();
289 assertEquals("onap.policies.PolicyTypeLevel0.1.2.3", fetchedPolicyType.getName());
290 assertEquals("3.0.0", fetchedPolicyType.getVersion());
291 assertEquals(1, countReturnedPolicies(fetchedServiceTemplate));
293 databaseProvider.close();
296 private void assertOldDataTypesAreReturned(final ToscaServiceTemplate fetchedServiceTemplate) {
297 assertEquals(6, fetchedServiceTemplate.getDataTypes().size());
298 assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType0").getVersion());
299 assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType1").getVersion());
300 assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType2").getVersion());
301 assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType3").getVersion());
302 assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType4").getVersion());
303 assertEquals("3.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType5").getVersion());
306 private void assertLatestDataTypesAreReturned(final ToscaServiceTemplate fetchedServiceTemplate) {
307 assertEquals(7, fetchedServiceTemplate.getDataTypes().size());
308 assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType0").getVersion());
309 assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType1").getVersion());
310 assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType2").getVersion());
311 assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType3").getVersion());
312 assertEquals("1.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType4").getVersion());
313 assertEquals("3.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType5").getVersion());
314 assertEquals("2.0.0", fetchedServiceTemplate.getDataTypes().get("policy.data.DataType6").getVersion());
317 private void assertLatestPolicyTypesAreReturned(final ToscaServiceTemplate fetchedServiceTemplate) {
318 assertEquals(4, fetchedServiceTemplate.getPolicyTypes().size());
320 for (ToscaPolicyType policyType : fetchedServiceTemplate.getPolicyTypes().values()) {
321 assertEquals("3.0.0", policyType.getVersion());
325 private int countReturnedPolicies(final ToscaServiceTemplate fetchedServiceTemplate) {
326 List<Map<String, ToscaPolicy>> policyMapList = fetchedServiceTemplate.getToscaTopologyTemplate().getPolicies();
328 int totalPolicies = 0;
329 for (Map<String, ToscaPolicy> policyMap : policyMapList) {
330 totalPolicies += policyMap.size();
333 return totalPolicies;