2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2019 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;
28 import static org.junit.Assert.fail;
30 import java.util.ArrayList;
31 import java.util.Base64;
32 import java.util.Date;
33 import java.util.List;
35 import org.junit.Before;
36 import org.junit.Test;
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;
53 import org.slf4j.Logger;
54 import org.slf4j.LoggerFactory;
57 * Test the database models provider implementation.
59 * @author Liam Fallon (liam.fallon@est.tech)
61 public class DatabasePolicyModelsProviderTest {
62 private static final String NAME = "name";
64 private static final String TEMPLATE_IS_NULL = "serviceTemplate is marked @NonNull but is null";
66 private static final String POLICY_ID_IS_NULL = "policyId is marked @NonNull but is null";
68 private static final String PDP_TYPE_IS_NULL = "pdpType is marked @NonNull but is null";
70 private static final String SUBGROUP_IS_NULL = "pdpSubGroup is marked @NonNull but is null";
72 private static final String GROUP_IS_NULL = "pdpGroupName is marked @NonNull but is null";
74 private static final String NAME_IS_NULL = "name is marked @NonNull but is null";
76 private static final String FILTER_IS_NULL = "filter is marked @NonNull but is null";
78 private static final String INSTANCE = "Instance";
80 private static final String POLICY_ID = "policy_id";
82 private static final String GROUP = "group";
84 private static final String VERSION_100 = "1.0.0";
86 private static final Date TIMESTAMP = new Date();
88 private static final Logger LOGGER = LoggerFactory.getLogger(DatabasePolicyModelsProviderTest.class);
90 PolicyModelsProviderParameters parameters;
93 * Initialize parameters.
96 public void setupParameters() {
97 parameters = new PolicyModelsProviderParameters();
98 parameters.setDatabaseDriver("org.h2.Driver");
99 parameters.setDatabaseUrl("jdbc:h2:mem:testdb");
100 parameters.setDatabaseUser("policy");
101 parameters.setDatabasePassword(Base64.getEncoder().encodeToString("P01icY".getBytes()));
102 parameters.setPersistenceUnit("ToscaConceptTest");
106 public void testInitAndClose() throws Exception {
107 assertThatThrownBy(() -> {
108 new DatabasePolicyModelsProviderImpl(null);
109 }).hasMessage("parameters is marked @NonNull but is null");
111 PolicyModelsProvider databaseProvider =
112 new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
114 parameters.setDatabaseUrl("jdbc://www.acmecorp.nonexist");
116 databaseProvider.close();
117 databaseProvider.init();
119 databaseProvider.close();
121 parameters.setDatabaseUrl("jdbc:h2:mem:testdb");
123 parameters.setPersistenceUnit("WileECoyote");
125 assertThatThrownBy(databaseProvider::init).hasMessageContaining("could not create Data Access Object (DAO)");
127 parameters.setPersistenceUnit("ToscaConceptTest");
129 databaseProvider.init();
130 databaseProvider.close();
132 assertThatThrownBy(() -> {
133 databaseProvider.init();
134 databaseProvider.init();
135 }).hasMessage("provider is already initialized");
137 databaseProvider.close();
139 databaseProvider.close();
143 public void testProviderMethodsNull() throws Exception {
145 try (PolicyModelsProvider databaseProvider =
146 new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters)) {
148 assertThatThrownBy(() -> {
149 databaseProvider.getFilteredPolicyTypes(null);
150 }).hasMessage(FILTER_IS_NULL);
152 assertThatThrownBy(() -> {
153 databaseProvider.getFilteredPolicyTypeList(null);
154 }).hasMessage(FILTER_IS_NULL);
156 assertThatThrownBy(() -> {
157 databaseProvider.createPolicyTypes(null);
158 }).hasMessage(TEMPLATE_IS_NULL);
160 assertThatThrownBy(() -> {
161 databaseProvider.updatePolicyTypes(null);
162 }).hasMessage(TEMPLATE_IS_NULL);
164 assertThatThrownBy(() -> {
165 databaseProvider.deletePolicyType(null, null);
166 }).hasMessage(NAME_IS_NULL);
168 assertThatThrownBy(() -> {
169 databaseProvider.deletePolicyType("aaa", null);
170 }).hasMessage("version is marked @NonNull but is null");
172 assertThatThrownBy(() -> {
173 databaseProvider.deletePolicyType(null, "aaa");
174 }).hasMessage(NAME_IS_NULL);
176 assertThatThrownBy(() -> {
177 databaseProvider.getFilteredPolicies(null);
178 }).hasMessage(FILTER_IS_NULL);
180 assertThatThrownBy(() -> {
181 databaseProvider.getFilteredPolicyList(null);
182 }).hasMessage(FILTER_IS_NULL);
184 assertThatThrownBy(() -> {
185 databaseProvider.createPolicies(null);
186 }).hasMessage(TEMPLATE_IS_NULL);
188 assertThatThrownBy(() -> {
189 databaseProvider.updatePolicies(null);
190 }).hasMessage(TEMPLATE_IS_NULL);
192 assertThatThrownBy(() -> {
193 databaseProvider.deletePolicy(null, null);
194 }).hasMessage(NAME_IS_NULL);
196 assertThatThrownBy(() -> {
197 databaseProvider.deletePolicy(null, "aaa");
198 }).hasMessage(NAME_IS_NULL);
200 assertThatThrownBy(() -> {
201 databaseProvider.deletePolicy("aaa", null);
202 }).hasMessage("version is marked @NonNull but is null");
204 assertThatThrownBy(() -> {
205 databaseProvider.getOperationalPolicy(null, null);
206 }).hasMessage(POLICY_ID_IS_NULL);
208 assertThatThrownBy(() -> {
209 databaseProvider.getOperationalPolicy(null, "");
210 }).hasMessage(POLICY_ID_IS_NULL);
212 assertThatThrownBy(() -> {
213 databaseProvider.getOperationalPolicy("", null);
214 }).hasMessage("no policy found for policy: :null");
216 assertThatThrownBy(() -> {
217 databaseProvider.createOperationalPolicy(null);
218 }).hasMessage("legacyOperationalPolicy is marked @NonNull but is null");
220 assertThatThrownBy(() -> {
221 databaseProvider.updateOperationalPolicy(null);
222 }).hasMessage("legacyOperationalPolicy is marked @NonNull but is null");
224 assertThatThrownBy(() -> {
225 databaseProvider.deleteOperationalPolicy(null, null);
226 }).hasMessage(POLICY_ID_IS_NULL);
228 assertThatThrownBy(() -> {
229 databaseProvider.deleteOperationalPolicy(null, "");
230 }).hasMessage(POLICY_ID_IS_NULL);
232 assertThatThrownBy(() -> {
233 databaseProvider.deleteOperationalPolicy("", null);
234 }).hasMessage("policyVersion is marked @NonNull but is null");
236 assertThatThrownBy(() -> {
237 databaseProvider.getGuardPolicy(null, null);
238 }).hasMessage(POLICY_ID_IS_NULL);
240 assertThatThrownBy(() -> {
241 databaseProvider.getGuardPolicy(null, "");
242 }).hasMessage(POLICY_ID_IS_NULL);
244 assertThatThrownBy(() -> {
245 databaseProvider.getGuardPolicy("", null);
246 }).hasMessage("no policy found for policy: :null");
248 assertThatThrownBy(() -> {
249 databaseProvider.createGuardPolicy(null);
250 }).hasMessage("legacyGuardPolicy is marked @NonNull but is null");
252 assertThatThrownBy(() -> {
253 databaseProvider.updateGuardPolicy(null);
254 }).hasMessage("legacyGuardPolicy is marked @NonNull but is null");
256 assertThatThrownBy(() -> {
257 databaseProvider.deleteGuardPolicy(null, null);
258 }).hasMessage(POLICY_ID_IS_NULL);
260 assertThatThrownBy(() -> {
261 databaseProvider.deleteGuardPolicy(null, "");
262 }).hasMessage(POLICY_ID_IS_NULL);
264 assertThatThrownBy(() -> {
265 databaseProvider.deleteGuardPolicy("", null);
266 }).hasMessage("policyVersion is marked @NonNull but is null");
268 assertThatThrownBy(() -> {
269 databaseProvider.getFilteredPdpGroups(null);
270 }).hasMessage(FILTER_IS_NULL);
272 assertThatThrownBy(() -> {
273 databaseProvider.createPdpGroups(null);
274 }).hasMessage("pdpGroups is marked @NonNull but is null");
276 assertThatThrownBy(() -> {
277 databaseProvider.updatePdpGroups(null);
278 }).hasMessage("pdpGroups is marked @NonNull but is null");
280 assertThatThrownBy(() -> {
281 databaseProvider.updatePdpSubGroup(null, null);
282 }).hasMessage(GROUP_IS_NULL);
284 assertThatThrownBy(() -> {
285 databaseProvider.updatePdpSubGroup(null, new PdpSubGroup());
286 }).hasMessage(GROUP_IS_NULL);
288 assertThatThrownBy(() -> {
289 databaseProvider.updatePdpSubGroup(NAME, null);
290 }).hasMessage(SUBGROUP_IS_NULL);
292 assertThatThrownBy(() -> {
293 databaseProvider.updatePdpSubGroup(NAME, new PdpSubGroup());
294 }).hasMessage("parameter \"localName\" is null");
296 assertThatThrownBy(() -> {
297 databaseProvider.updatePdp(null, null, null);
298 }).hasMessage(GROUP_IS_NULL);
300 assertThatThrownBy(() -> {
301 databaseProvider.updatePdp(null, null, new Pdp());
302 }).hasMessage(GROUP_IS_NULL);
304 assertThatThrownBy(() -> {
305 databaseProvider.updatePdp(null, "sub", null);
306 }).hasMessage(GROUP_IS_NULL);
308 assertThatThrownBy(() -> {
309 databaseProvider.updatePdp(null, "sub", new Pdp());
310 }).hasMessage(GROUP_IS_NULL);
312 assertThatThrownBy(() -> {
313 databaseProvider.updatePdp(NAME, null, null);
314 }).hasMessage(SUBGROUP_IS_NULL);
316 assertThatThrownBy(() -> {
317 databaseProvider.updatePdp(NAME, null, new Pdp());
318 }).hasMessage(SUBGROUP_IS_NULL);
320 assertThatThrownBy(() -> {
321 databaseProvider.updatePdp(NAME, "sub", null);
322 }).hasMessage("pdp is marked @NonNull but is null");
324 assertThatThrownBy(() -> {
325 databaseProvider.updatePdp(NAME, "sub", new Pdp());
326 }).hasMessage("parameter \"localName\" is null");
328 assertThatThrownBy(() -> {
329 databaseProvider.deletePdpGroup(null);
330 }).hasMessage(NAME_IS_NULL);
332 assertThatThrownBy(() -> {
333 databaseProvider.getFilteredPdpStatistics(NAME, null, "sub", TIMESTAMP, TIMESTAMP);
334 }).hasMessage(GROUP_IS_NULL);
336 assertThatThrownBy(() -> {
337 databaseProvider.createPdpStatistics(null);
338 }).hasMessage("pdpStatisticsList is marked @NonNull but is null");
340 assertThatThrownBy(() -> {
341 databaseProvider.updatePdpStatistics(null);
342 }).hasMessage("pdpStatisticsList is marked @NonNull but is null");
344 assertThatThrownBy(() -> {
345 databaseProvider.deletePdpStatistics(null, TIMESTAMP);
346 }).hasMessage(NAME_IS_NULL);
352 public void testProviderMethodsNotInit() throws Exception {
353 PolicyModelsProvider databaseProvider =
354 new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
356 databaseProvider.close();
358 assertThatThrownBy(() -> {
359 databaseProvider.getPolicyTypes(NAME, "version");
360 }).hasMessage("policy models provider is not initilaized");
364 public void testProviderMethods() {
365 try (PolicyModelsProvider databaseProvider =
366 new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters)) {
368 assertTrue(databaseProvider.getPolicyTypes(NAME, VERSION_100).getPolicyTypes().isEmpty());
369 assertTrue(databaseProvider.getPolicyTypeList(NAME, VERSION_100).isEmpty());
370 assertEquals(0, databaseProvider.getFilteredPolicyTypes(ToscaPolicyTypeFilter.builder().build())
371 .getPolicyTypes().size());
372 assertEquals(0, databaseProvider.getFilteredPolicyTypeList(ToscaPolicyTypeFilter.builder().build()).size());
374 assertThatThrownBy(() -> {
375 databaseProvider.createPolicyTypes(new ToscaServiceTemplate());
376 }).hasMessage("no policy types specified on service template");
378 assertThatThrownBy(() -> {
379 databaseProvider.updatePolicyTypes(new ToscaServiceTemplate());
380 }).hasMessage("no policy types specified on service template");
382 assertTrue(databaseProvider.deletePolicyType(NAME, VERSION_100).getPolicyTypes().isEmpty());
384 assertTrue(databaseProvider.deletePolicyType(NAME, VERSION_100).getPolicyTypes().isEmpty());
387 databaseProvider.getPolicies(NAME, VERSION_100).getToscaTopologyTemplate().getPolicies().isEmpty());
388 assertTrue(databaseProvider.getPolicyList(NAME, VERSION_100).isEmpty());
389 assertEquals(0, databaseProvider.getFilteredPolicies(ToscaPolicyFilter.builder().build())
390 .getToscaTopologyTemplate().getPolicies().size());
391 assertEquals(0, databaseProvider.getFilteredPolicyList(ToscaPolicyFilter.builder().build()).size());
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 assertTrue(databaseProvider.deletePolicy("Policy", "0.0.0").getToscaTopologyTemplate().getPolicies()
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 }).hasMessage(NAME_IS_NULL);
416 assertThatThrownBy(() -> {
417 databaseProvider.updateOperationalPolicy(new LegacyOperationalPolicy());
418 }).hasMessage(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("Pdp1");
475 pdpStatistics.setTimeStamp(new Date());
476 pdpStatistics.setPdpGroupName("DefaultGroup");
477 ArrayList<PdpStatistics> statisticsArrayList = new ArrayList<>();
478 statisticsArrayList.add(pdpStatistics);
480 assertEquals(123, databaseProvider.createPdpGroups(groupList).get(0).getPdpSubgroups().get(0)
481 .getDesiredInstanceCount());
482 assertEquals(1, databaseProvider.getPdpGroups(GROUP).size());
484 pdpSubGroup.setDesiredInstanceCount(234);
485 databaseProvider.updatePdpSubGroup(GROUP, pdpSubGroup);
486 assertEquals(234, databaseProvider.getPdpGroups(GROUP).get(0).getPdpSubgroups()
487 .get(0).getDesiredInstanceCount());
489 assertEquals("Hello", databaseProvider.getPdpGroups(GROUP).get(0).getPdpSubgroups()
490 .get(0).getPdpInstances().get(0).getMessage());
491 pdp.setMessage("Howdy");
492 databaseProvider.updatePdp(GROUP, "type", pdp);
493 assertEquals("Howdy", databaseProvider.getPdpGroups(GROUP).get(0).getPdpSubgroups()
494 .get(0).getPdpInstances().get(0).getMessage());
496 assertThatThrownBy(() -> {
497 databaseProvider.deletePdpGroup(NAME);
498 }).hasMessage("delete of PDP group \"name:0.0.0\" failed, PDP group does not exist");
500 assertEquals(pdpGroup.getName(), databaseProvider.deletePdpGroup(GROUP).getName());
502 assertEquals(0, databaseProvider.getPdpStatistics(null,null).size());
504 databaseProvider.getFilteredPdpStatistics(null, GROUP,null, null, null);
505 databaseProvider.getFilteredPdpStatistics(null, GROUP,null, new Date(), null);
506 databaseProvider.getFilteredPdpStatistics(null, GROUP,null, null, new Date());
507 databaseProvider.getFilteredPdpStatistics(null, GROUP,null, new Date(), new Date());
509 databaseProvider.getFilteredPdpStatistics(NAME, GROUP,null, null, null);
510 databaseProvider.getFilteredPdpStatistics(NAME, GROUP,null, new Date(), new Date());
512 databaseProvider.getFilteredPdpStatistics(NAME, GROUP,"type", null, null);
513 databaseProvider.getFilteredPdpStatistics(NAME, GROUP,"type", new Date(), new Date());
515 databaseProvider.createPdpStatistics(statisticsArrayList);
516 databaseProvider.updatePdpStatistics(statisticsArrayList);
518 databaseProvider.deletePdpStatistics("pdp1",null);
519 } catch (Exception exc) {
520 LOGGER.warn("test should not throw an exception", exc);
521 fail("test should not throw an exception");