2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2019-2020 Nordix Foundation.
4 * Modifications Copyright (C) 2019 AT&T Intellectual Property. 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.impl;
24 import static org.assertj.core.api.Assertions.assertThatThrownBy;
25 import static org.junit.Assert.assertEquals;
26 import static org.junit.Assert.assertNotNull;
27 import static org.junit.Assert.assertTrue;
29 import java.util.ArrayList;
30 import java.util.Base64;
31 import java.util.Date;
32 import java.util.List;
34 import org.junit.Before;
35 import org.junit.Test;
36 import org.onap.policy.models.base.PfModelException;
37 import org.onap.policy.models.pdp.concepts.Pdp;
38 import org.onap.policy.models.pdp.concepts.PdpGroup;
39 import org.onap.policy.models.pdp.concepts.PdpGroupFilter;
40 import org.onap.policy.models.pdp.concepts.PdpStatistics;
41 import org.onap.policy.models.pdp.concepts.PdpSubGroup;
42 import org.onap.policy.models.pdp.enums.PdpHealthStatus;
43 import org.onap.policy.models.pdp.enums.PdpState;
44 import org.onap.policy.models.provider.PolicyModelsProvider;
45 import org.onap.policy.models.provider.PolicyModelsProviderFactory;
46 import org.onap.policy.models.provider.PolicyModelsProviderParameters;
47 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyFilter;
48 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeFilter;
49 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifier;
50 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
51 import org.onap.policy.models.tosca.legacy.concepts.LegacyGuardPolicyInput;
52 import org.onap.policy.models.tosca.legacy.concepts.LegacyOperationalPolicy;
55 * Test the database models provider implementation.
57 * @author Liam Fallon (liam.fallon@est.tech)
59 public class DatabasePolicyModelsProviderTest {
60 private static final String NAME = "name";
62 private static final String TEMPLATE_IS_NULL = "^serviceTemplate is marked .*on.*ull but is null$";
64 private static final String POLICY_ID_IS_NULL = "^policyId is marked .*on.*ull but is null$";
66 private static final String SUBGROUP_IS_NULL = "^pdpSubGroup is marked .*on.*ull but is null$";
68 private static final String GROUP_IS_NULL = "^pdpGroupName is marked .*on.*ull but is null$";
70 private static final String NAME_IS_NULL = "^name is marked .*on.*ull but is null$";
72 private static final String FILTER_IS_NULL = "^filter is marked .*on.*ull but is null$";
74 private static final String POLICY_ID = "policy_id";
76 private static final String GROUP = "group";
78 private static final String VERSION_100 = "1.0.0";
80 private static final Date TIMESTAMP = new Date();
82 private static final String ORDER = "DESC";
84 PolicyModelsProviderParameters parameters;
87 * Initialize parameters.
90 public void setupParameters() {
91 parameters = new PolicyModelsProviderParameters();
92 parameters.setDatabaseDriver("org.h2.Driver");
93 parameters.setDatabaseUrl("jdbc:h2:mem:testdb");
94 parameters.setDatabaseUser("policy");
95 parameters.setDatabasePassword(Base64.getEncoder().encodeToString("P01icY".getBytes()));
96 parameters.setPersistenceUnit("ToscaConceptTest");
100 public void testInitAndClose() throws Exception {
101 assertThatThrownBy(() -> {
102 new DatabasePolicyModelsProviderImpl(null);
103 }).hasMessageMatching("^parameters is marked .*on.*ull but is null$");
105 PolicyModelsProvider databaseProvider =
106 new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
108 parameters.setDatabaseUrl("jdbc://www.acmecorp.nonexist");
110 databaseProvider.close();
111 databaseProvider.init();
113 databaseProvider.close();
115 parameters.setDatabaseUrl("jdbc:h2:mem:testdb");
117 parameters.setPersistenceUnit("WileECoyote");
119 assertThatThrownBy(databaseProvider::init).hasMessageContaining("could not create Data Access Object (DAO)");
121 parameters.setPersistenceUnit("ToscaConceptTest");
123 databaseProvider.init();
124 databaseProvider.close();
126 assertThatThrownBy(() -> {
127 databaseProvider.init();
128 databaseProvider.init();
129 }).hasMessage("provider is already initialized");
131 databaseProvider.close();
133 databaseProvider.close();
137 public void testProviderMethodsNull() throws Exception {
139 PolicyModelsProvider databaseProvider =
140 new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
142 assertThatThrownBy(() -> {
143 databaseProvider.getFilteredPolicyTypes(null);
144 }).hasMessageMatching(FILTER_IS_NULL);
146 assertThatThrownBy(() -> {
147 databaseProvider.getFilteredPolicyTypeList(null);
148 }).hasMessageMatching(FILTER_IS_NULL);
150 assertThatThrownBy(() -> {
151 databaseProvider.createPolicyTypes(null);
152 }).hasMessageMatching(TEMPLATE_IS_NULL);
154 assertThatThrownBy(() -> {
155 databaseProvider.updatePolicyTypes(null);
156 }).hasMessageMatching(TEMPLATE_IS_NULL);
158 assertThatThrownBy(() -> {
159 databaseProvider.deletePolicyType(null, null);
160 }).hasMessageMatching(NAME_IS_NULL);
162 assertThatThrownBy(() -> {
163 databaseProvider.deletePolicyType("aaa", null);
164 }).hasMessageMatching("^version is marked .*on.*ull but is null$");
166 assertThatThrownBy(() -> {
167 databaseProvider.deletePolicyType(null, "aaa");
168 }).hasMessageMatching(NAME_IS_NULL);
170 assertThatThrownBy(() -> {
171 databaseProvider.getFilteredPolicies(null);
172 }).hasMessageMatching(FILTER_IS_NULL);
174 assertThatThrownBy(() -> {
175 databaseProvider.getFilteredPolicyList(null);
176 }).hasMessageMatching(FILTER_IS_NULL);
178 assertThatThrownBy(() -> {
179 databaseProvider.createPolicies(null);
180 }).hasMessageMatching(TEMPLATE_IS_NULL);
182 assertThatThrownBy(() -> {
183 databaseProvider.updatePolicies(null);
184 }).hasMessageMatching(TEMPLATE_IS_NULL);
186 assertThatThrownBy(() -> {
187 databaseProvider.deletePolicy(null, null);
188 }).hasMessageMatching(NAME_IS_NULL);
190 assertThatThrownBy(() -> {
191 databaseProvider.deletePolicy(null, "aaa");
192 }).hasMessageMatching(NAME_IS_NULL);
194 assertThatThrownBy(() -> {
195 databaseProvider.deletePolicy("aaa", null);
196 }).hasMessageMatching("^version is marked .*on.*ull but is null$");
198 assertThatThrownBy(() -> {
199 databaseProvider.getOperationalPolicy(null, null);
200 }).hasMessageMatching(POLICY_ID_IS_NULL);
202 assertThatThrownBy(() -> {
203 databaseProvider.getOperationalPolicy(null, "");
204 }).hasMessageMatching(POLICY_ID_IS_NULL);
206 assertThatThrownBy(() -> {
207 databaseProvider.getOperationalPolicy("", null);
208 }).hasMessage("no policy found for policy: :null");
210 assertThatThrownBy(() -> {
211 databaseProvider.createOperationalPolicy(null);
212 }).hasMessageMatching("^legacyOperationalPolicy is marked .*on.*ull but is null$");
214 assertThatThrownBy(() -> {
215 databaseProvider.updateOperationalPolicy(null);
216 }).hasMessageMatching("^legacyOperationalPolicy is marked .*on.*ull but is null$");
218 assertThatThrownBy(() -> {
219 databaseProvider.deleteOperationalPolicy(null, null);
220 }).hasMessageMatching(POLICY_ID_IS_NULL);
222 assertThatThrownBy(() -> {
223 databaseProvider.deleteOperationalPolicy(null, "");
224 }).hasMessageMatching(POLICY_ID_IS_NULL);
226 assertThatThrownBy(() -> {
227 databaseProvider.deleteOperationalPolicy("", null);
228 }).hasMessageMatching("^policyVersion is marked .*on.*ull but is null$");
230 assertThatThrownBy(() -> {
231 databaseProvider.getGuardPolicy(null, null);
232 }).hasMessageMatching(POLICY_ID_IS_NULL);
234 assertThatThrownBy(() -> {
235 databaseProvider.getGuardPolicy(null, "");
236 }).hasMessageMatching(POLICY_ID_IS_NULL);
238 assertThatThrownBy(() -> {
239 databaseProvider.getGuardPolicy("", null);
240 }).hasMessage("no policy found for policy: :null");
242 assertThatThrownBy(() -> {
243 databaseProvider.createGuardPolicy(null);
244 }).hasMessageMatching("^legacyGuardPolicy is marked .*on.*ull but is null$");
246 assertThatThrownBy(() -> {
247 databaseProvider.updateGuardPolicy(null);
248 }).hasMessageMatching("^legacyGuardPolicy is marked .*on.*ull but is null$");
250 assertThatThrownBy(() -> {
251 databaseProvider.deleteGuardPolicy(null, null);
252 }).hasMessageMatching(POLICY_ID_IS_NULL);
254 assertThatThrownBy(() -> {
255 databaseProvider.deleteGuardPolicy(null, "");
256 }).hasMessageMatching(POLICY_ID_IS_NULL);
258 assertThatThrownBy(() -> {
259 databaseProvider.deleteGuardPolicy("", null);
260 }).hasMessageMatching("^policyVersion is marked .*on.*ull but is null$");
262 assertThatThrownBy(() -> {
263 databaseProvider.getFilteredPdpGroups(null);
264 }).hasMessageMatching(FILTER_IS_NULL);
266 assertThatThrownBy(() -> {
267 databaseProvider.createPdpGroups(null);
268 }).hasMessageMatching("^pdpGroups is marked .*on.*ull but is null$");
270 assertThatThrownBy(() -> {
271 databaseProvider.updatePdpGroups(null);
272 }).hasMessageMatching("^pdpGroups is marked .*on.*ull but is null$");
274 assertThatThrownBy(() -> {
275 databaseProvider.updatePdpSubGroup(null, null);
276 }).hasMessageMatching(GROUP_IS_NULL);
278 assertThatThrownBy(() -> {
279 databaseProvider.updatePdpSubGroup(null, new PdpSubGroup());
280 }).hasMessageMatching(GROUP_IS_NULL);
282 assertThatThrownBy(() -> {
283 databaseProvider.updatePdpSubGroup(NAME, null);
284 }).hasMessageMatching(SUBGROUP_IS_NULL);
286 assertThatThrownBy(() -> {
287 databaseProvider.updatePdpSubGroup(NAME, new PdpSubGroup());
288 }).hasMessage("parameter \"localName\" is null");
290 assertThatThrownBy(() -> {
291 databaseProvider.updatePdp(null, null, null);
292 }).hasMessageMatching(GROUP_IS_NULL);
294 assertThatThrownBy(() -> {
295 databaseProvider.updatePdp(null, null, new Pdp());
296 }).hasMessageMatching(GROUP_IS_NULL);
298 assertThatThrownBy(() -> {
299 databaseProvider.updatePdp(null, "sub", null);
300 }).hasMessageMatching(GROUP_IS_NULL);
302 assertThatThrownBy(() -> {
303 databaseProvider.updatePdp(null, "sub", new Pdp());
304 }).hasMessageMatching(GROUP_IS_NULL);
306 assertThatThrownBy(() -> {
307 databaseProvider.updatePdp(NAME, null, null);
308 }).hasMessageMatching(SUBGROUP_IS_NULL);
310 assertThatThrownBy(() -> {
311 databaseProvider.updatePdp(NAME, null, new Pdp());
312 }).hasMessageMatching(SUBGROUP_IS_NULL);
314 assertThatThrownBy(() -> {
315 databaseProvider.updatePdp(NAME, "sub", null);
316 }).hasMessageMatching("^pdp is marked .*on.*ull but is null$");
318 assertThatThrownBy(() -> {
319 databaseProvider.updatePdp(NAME, "sub", new Pdp());
320 }).hasMessage("parameter \"localName\" is null");
322 assertThatThrownBy(() -> {
323 databaseProvider.deletePdpGroup(null);
324 }).hasMessageMatching(NAME_IS_NULL);
326 assertThatThrownBy(() -> {
327 databaseProvider.getFilteredPdpStatistics(NAME, null, "sub", TIMESTAMP, TIMESTAMP, ORDER, 0);
328 }).hasMessageMatching(GROUP_IS_NULL);
330 assertThatThrownBy(() -> {
331 databaseProvider.createPdpStatistics(null);
332 }).hasMessageMatching("^pdpStatisticsList is marked .*on.*ull but is null$");
334 assertThatThrownBy(() -> {
335 databaseProvider.updatePdpStatistics(null);
336 }).hasMessageMatching("^pdpStatisticsList is marked .*on.*ull but is null$");
338 assertThatThrownBy(() -> {
339 databaseProvider.deletePdpStatistics(null, TIMESTAMP);
340 }).hasMessageMatching(NAME_IS_NULL);
342 databaseProvider.close();
346 public void testProviderMethodsNotInit() throws Exception {
347 PolicyModelsProvider databaseProvider =
348 new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
350 databaseProvider.close();
352 assertThatThrownBy(() -> {
353 databaseProvider.getPolicyTypes(NAME, "version");
354 }).hasMessage("policy models provider is not initilaized");
358 public void testProviderMethods() throws PfModelException {
359 PolicyModelsProvider databaseProvider =
360 new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
362 assertThatThrownBy(() -> databaseProvider.getPolicyTypes(NAME, VERSION_100))
363 .hasMessage("service template not found in database");
365 assertTrue(databaseProvider.getPolicyTypeList(NAME, VERSION_100).isEmpty());
367 assertThatThrownBy(() -> databaseProvider.getFilteredPolicyTypes(ToscaPolicyTypeFilter.builder().build()))
368 .hasMessage("service template not found in database");
370 assertTrue(databaseProvider.getFilteredPolicyTypeList(ToscaPolicyTypeFilter.builder().build()).isEmpty());
372 assertThatThrownBy(() -> {
373 databaseProvider.createPolicyTypes(new ToscaServiceTemplate());
374 }).hasMessage("no policy types specified on service template");
376 assertThatThrownBy(() -> {
377 databaseProvider.updatePolicyTypes(new ToscaServiceTemplate());
378 }).hasMessage("no policy types specified on service template");
380 assertThatThrownBy(() -> databaseProvider.deletePolicyType(NAME, VERSION_100))
381 .hasMessage("service template not found in database");
383 assertThatThrownBy(() -> databaseProvider.getPolicies(NAME, VERSION_100))
384 .hasMessage("service template not found in database");
386 assertTrue(databaseProvider.getPolicyList(NAME, VERSION_100).isEmpty());
388 assertThatThrownBy(() -> databaseProvider.getFilteredPolicies(ToscaPolicyFilter.builder().build()))
389 .hasMessage("service template not found in database");
391 assertTrue(databaseProvider.getFilteredPolicyList(ToscaPolicyFilter.builder().build()).isEmpty());
393 assertThatThrownBy(() -> {
394 databaseProvider.createPolicies(new ToscaServiceTemplate());
395 }).hasMessage("topology template not specified on service template");
397 assertThatThrownBy(() -> {
398 databaseProvider.updatePolicies(new ToscaServiceTemplate());
399 }).hasMessage("topology template not specified on service template");
401 assertThatThrownBy(() -> databaseProvider.deletePolicy("Policy", "0.0.0").getToscaTopologyTemplate())
402 .hasMessage("service template not found in database");
404 assertThatThrownBy(() -> {
405 databaseProvider.getOperationalPolicy(POLICY_ID, null);
406 }).hasMessage("no policy found for policy: policy_id:null");
408 assertThatThrownBy(() -> {
409 databaseProvider.getOperationalPolicy(POLICY_ID, "10");
410 }).hasMessage("no policy found for policy: policy_id:10");
412 assertThatThrownBy(() -> {
413 databaseProvider.createOperationalPolicy(new LegacyOperationalPolicy());
414 }).hasMessageMatching(NAME_IS_NULL);
416 assertThatThrownBy(() -> {
417 databaseProvider.updateOperationalPolicy(new LegacyOperationalPolicy());
418 }).hasMessageMatching(NAME_IS_NULL);
420 assertThatThrownBy(() -> {
421 databaseProvider.deleteOperationalPolicy(POLICY_ID, "55");
422 }).hasMessage("no policy found for policy: policy_id:55");
424 assertThatThrownBy(() -> {
425 databaseProvider.getGuardPolicy(POLICY_ID, null);
426 }).hasMessage("no policy found for policy: policy_id:null");
428 assertThatThrownBy(() -> {
429 databaseProvider.getGuardPolicy(POLICY_ID, "6");
430 }).hasMessage("no policy found for policy: policy_id:6");
432 assertThatThrownBy(() -> {
433 databaseProvider.createGuardPolicy(new LegacyGuardPolicyInput());
434 }).hasMessage("policy type for guard policy \"null\" unknown");
436 assertThatThrownBy(() -> {
437 databaseProvider.updateGuardPolicy(new LegacyGuardPolicyInput());
438 }).hasMessage("policy type for guard policy \"null\" unknown");
440 assertThatThrownBy(() -> {
441 databaseProvider.deleteGuardPolicy(POLICY_ID, "33");
442 }).hasMessage("no policy found for policy: policy_id:33");
444 assertEquals(0, databaseProvider.getPdpGroups(NAME).size());
445 assertEquals(0, databaseProvider.getFilteredPdpGroups(PdpGroupFilter.builder().build()).size());
447 assertNotNull(databaseProvider.createPdpGroups(new ArrayList<>()));
448 assertNotNull(databaseProvider.updatePdpGroups(new ArrayList<>()));
450 PdpGroup pdpGroup = new PdpGroup();
451 pdpGroup.setName(GROUP);
452 pdpGroup.setVersion("1.2.3");
453 pdpGroup.setPdpGroupState(PdpState.ACTIVE);
454 pdpGroup.setPdpSubgroups(new ArrayList<>());
455 List<PdpGroup> groupList = new ArrayList<>();
456 groupList.add(pdpGroup);
458 PdpSubGroup pdpSubGroup = new PdpSubGroup();
459 pdpSubGroup.setPdpType("type");
460 pdpSubGroup.setDesiredInstanceCount(123);
461 pdpSubGroup.setSupportedPolicyTypes(new ArrayList<>());
462 pdpSubGroup.getSupportedPolicyTypes().add(new ToscaPolicyTypeIdentifier("type", "7.8.9"));
463 pdpGroup.getPdpSubgroups().add(pdpSubGroup);
466 pdp.setInstanceId("type-0");
467 pdp.setMessage("Hello");
468 pdp.setPdpState(PdpState.ACTIVE);
469 pdp.setHealthy(PdpHealthStatus.UNKNOWN);
470 pdpSubGroup.setPdpInstances(new ArrayList<>());
471 pdpSubGroup.getPdpInstances().add(pdp);
473 PdpStatistics pdpStatistics = new PdpStatistics();
474 pdpStatistics.setPdpInstanceId(NAME);
475 pdpStatistics.setTimeStamp(new Date());
476 pdpStatistics.setPdpGroupName(GROUP);
477 pdpStatistics.setPdpSubGroupName("type");
478 ArrayList<PdpStatistics> statisticsArrayList = new ArrayList<>();
479 statisticsArrayList.add(pdpStatistics);
482 databaseProvider.createPdpGroups(groupList).get(0).getPdpSubgroups().get(0).getDesiredInstanceCount());
483 assertEquals(1, databaseProvider.getPdpGroups(GROUP).size());
485 pdpSubGroup.setDesiredInstanceCount(234);
486 databaseProvider.updatePdpSubGroup(GROUP, pdpSubGroup);
488 databaseProvider.getPdpGroups(GROUP).get(0).getPdpSubgroups().get(0).getDesiredInstanceCount());
490 assertEquals("Hello", databaseProvider.getPdpGroups(GROUP).get(0).getPdpSubgroups().get(0).getPdpInstances()
491 .get(0).getMessage());
492 pdp.setMessage("Howdy");
493 databaseProvider.updatePdp(GROUP, "type", pdp);
494 assertEquals("Howdy", databaseProvider.getPdpGroups(GROUP).get(0).getPdpSubgroups().get(0).getPdpInstances()
495 .get(0).getMessage());
497 assertThatThrownBy(() -> {
498 databaseProvider.deletePdpGroup(NAME);
499 }).hasMessage("delete of PDP group \"name:0.0.0\" failed, PDP group does not exist");
501 assertEquals(pdpGroup.getName(), databaseProvider.deletePdpGroup(GROUP).getName());
503 assertEquals(0, databaseProvider.getPdpStatistics(null, null).size());
504 assertEquals(1, databaseProvider.createPdpStatistics(statisticsArrayList).size());
505 assertEquals(1, databaseProvider.updatePdpStatistics(statisticsArrayList).size());
507 assertEquals(NAME, databaseProvider.getPdpStatistics(null, null).get(0).getPdpInstanceId());
508 assertEquals(NAME, databaseProvider.getFilteredPdpStatistics(null, GROUP, null, null, null, ORDER, 0).get(0)
509 .getPdpInstanceId());
511 databaseProvider.getFilteredPdpStatistics(null, GROUP, null, new Date(), null, ORDER, 0).size());
512 assertEquals(NAME, databaseProvider.getFilteredPdpStatistics(null, GROUP, null, null, new Date(), ORDER, 0)
513 .get(0).getPdpInstanceId());
515 databaseProvider.getFilteredPdpStatistics(null, GROUP, null, new Date(), new Date(), ORDER, 0).size());
517 assertEquals(NAME, databaseProvider.getFilteredPdpStatistics(NAME, GROUP, null, null, null, ORDER, 0).get(0)
518 .getPdpInstanceId());
520 databaseProvider.getFilteredPdpStatistics(NAME, GROUP, null, new Date(), new Date(), ORDER, 0).size());
522 assertEquals(NAME, databaseProvider.getFilteredPdpStatistics(NAME, GROUP, "type", null, null, ORDER, 0).get(0)
523 .getPdpInstanceId());
524 assertEquals(0, databaseProvider.getFilteredPdpStatistics(NAME, GROUP, "type", new Date(), new Date(), ORDER, 0)
527 assertEquals(NAME, databaseProvider.getFilteredPdpStatistics(NAME, GROUP, "type", null, null, ORDER, 1).get(0)
528 .getPdpInstanceId());
529 assertEquals(NAME, databaseProvider.getFilteredPdpStatistics(NAME, GROUP, "type", null, null, ORDER, 5).get(0)
530 .getPdpInstanceId());
531 assertEquals(0, databaseProvider.getFilteredPdpStatistics(NAME, GROUP, "type", new Date(), new Date(), ORDER, 5)
534 assertEquals(NAME, databaseProvider.deletePdpStatistics(NAME, null).get(0).getPdpInstanceId());
535 assertEquals(0, databaseProvider.getPdpStatistics(null, null).size());
537 databaseProvider.close();