2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2019 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.impl;
23 import static org.assertj.core.api.Assertions.assertThatThrownBy;
24 import static org.junit.Assert.assertEquals;
25 import static org.junit.Assert.assertNotNull;
26 import static org.junit.Assert.fail;
28 import java.util.ArrayList;
29 import java.util.Base64;
30 import java.util.List;
32 import org.junit.Before;
33 import org.junit.Test;
34 import org.onap.policy.models.pdp.concepts.Pdp;
35 import org.onap.policy.models.pdp.concepts.PdpGroup;
36 import org.onap.policy.models.pdp.concepts.PdpGroupFilter;
37 import org.onap.policy.models.pdp.concepts.PdpStatistics;
38 import org.onap.policy.models.pdp.concepts.PdpSubGroup;
39 import org.onap.policy.models.pdp.enums.PdpHealthStatus;
40 import org.onap.policy.models.pdp.enums.PdpState;
41 import org.onap.policy.models.provider.PolicyModelsProvider;
42 import org.onap.policy.models.provider.PolicyModelsProviderFactory;
43 import org.onap.policy.models.provider.PolicyModelsProviderParameters;
44 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyFilter;
45 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeFilter;
46 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifier;
47 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
48 import org.onap.policy.models.tosca.legacy.concepts.LegacyGuardPolicyInput;
49 import org.onap.policy.models.tosca.legacy.concepts.LegacyOperationalPolicy;
50 import org.slf4j.Logger;
51 import org.slf4j.LoggerFactory;
54 * Test the database models provider implementation.
56 * @author Liam Fallon (liam.fallon@est.tech)
58 public class DatabasePolicyModelsProviderTest {
59 private static final Logger LOGGER = LoggerFactory.getLogger(DatabasePolicyModelsProviderTest.class);
61 PolicyModelsProviderParameters parameters;
64 * Initialize parameters.
67 public void setupParameters() {
68 parameters = new PolicyModelsProviderParameters();
69 parameters.setDatabaseDriver("org.h2.Driver");
70 parameters.setDatabaseUrl("jdbc:h2:mem:testdb");
71 parameters.setDatabaseUser("policy");
72 parameters.setDatabasePassword(Base64.getEncoder().encodeToString("P01icY".getBytes()));
73 parameters.setPersistenceUnit("ToscaConceptTest");
77 public void testInitAndClose() throws Exception {
78 assertThatThrownBy(() -> {
79 new DatabasePolicyModelsProviderImpl(null);
80 }).hasMessage("parameters is marked @NonNull but is null");
82 PolicyModelsProvider databaseProvider =
83 new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
85 parameters.setDatabaseUrl("jdbc://www.acmecorp.nonexist");
88 databaseProvider.close();
89 databaseProvider.init();
90 } catch (Exception pfme) {
91 fail("test shold not throw an exception here");
93 databaseProvider.close();
95 parameters.setDatabaseUrl("jdbc:h2:mem:testdb");
97 parameters.setPersistenceUnit("WileECoyote");
99 assertThatThrownBy(() -> {
100 databaseProvider.init();
101 }).hasMessageContaining("could not create Data Access Object (DAO)");
103 parameters.setPersistenceUnit("ToscaConceptTest");
106 databaseProvider.init();
107 databaseProvider.close();
108 } catch (Exception pfme) {
109 pfme.printStackTrace();
110 fail("test shold not throw an exception here");
113 assertThatThrownBy(() -> {
114 databaseProvider.init();
115 databaseProvider.init();
116 }).hasMessage("provider is already initialized");
119 databaseProvider.close();
120 } catch (Exception pfme) {
121 fail("test shold not throw an exception here");
125 databaseProvider.close();
126 } catch (Exception pfme) {
127 fail("test shold not throw an exception here");
132 public void testProviderMethodsNull() throws Exception {
133 PolicyModelsProvider databaseProvider =
134 new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
136 assertThatThrownBy(() -> {
137 databaseProvider.getFilteredPolicyTypes(null);
138 }).hasMessage("filter is marked @NonNull but is null");
140 assertThatThrownBy(() -> {
141 databaseProvider.getFilteredPolicyTypeList(null);
142 }).hasMessage("filter is marked @NonNull but is null");
144 assertThatThrownBy(() -> {
145 databaseProvider.createPolicyTypes(null);
146 }).hasMessage("serviceTemplate is marked @NonNull but is null");
148 assertThatThrownBy(() -> {
149 databaseProvider.updatePolicyTypes(null);
150 }).hasMessage("serviceTemplate is marked @NonNull but is null");
152 assertThatThrownBy(() -> {
153 databaseProvider.deletePolicyType(null, null);
154 }).hasMessage("name is marked @NonNull but is null");
156 assertThatThrownBy(() -> {
157 databaseProvider.deletePolicyType("aaa", null);
158 }).hasMessage("version is marked @NonNull but is null");
160 assertThatThrownBy(() -> {
161 databaseProvider.deletePolicyType(null, "aaa");
162 }).hasMessage("name is marked @NonNull but is null");
164 assertThatThrownBy(() -> {
165 databaseProvider.getFilteredPolicies(null);
166 }).hasMessage("filter is marked @NonNull but is null");
168 assertThatThrownBy(() -> {
169 databaseProvider.getFilteredPolicyList(null);
170 }).hasMessage("filter is marked @NonNull but is null");
172 assertThatThrownBy(() -> {
173 databaseProvider.createPolicies(null);
174 }).hasMessage("serviceTemplate is marked @NonNull but is null");
176 assertThatThrownBy(() -> {
177 databaseProvider.updatePolicies(null);
178 }).hasMessage("serviceTemplate is marked @NonNull but is null");
180 assertThatThrownBy(() -> {
181 databaseProvider.deletePolicy(null, null);
182 }).hasMessage("name is marked @NonNull but is null");
184 assertThatThrownBy(() -> {
185 databaseProvider.deletePolicy(null, "aaa");
186 }).hasMessage("name is marked @NonNull but is null");
188 assertThatThrownBy(() -> {
189 databaseProvider.deletePolicy("aaa", null);
190 }).hasMessage("version is marked @NonNull but is null");
192 assertThatThrownBy(() -> {
193 databaseProvider.getOperationalPolicy(null, null);
194 }).hasMessage("policyId is marked @NonNull but is null");
196 assertThatThrownBy(() -> {
197 databaseProvider.getOperationalPolicy(null, "");
198 }).hasMessage("policyId is marked @NonNull but is null");
200 assertThatThrownBy(() -> {
201 databaseProvider.getOperationalPolicy("", null);
202 }).hasMessage("no policy found for policy: :null");
204 assertThatThrownBy(() -> {
205 databaseProvider.createOperationalPolicy(null);
206 }).hasMessage("legacyOperationalPolicy is marked @NonNull but is null");
208 assertThatThrownBy(() -> {
209 databaseProvider.updateOperationalPolicy(null);
210 }).hasMessage("legacyOperationalPolicy is marked @NonNull but is null");
212 assertThatThrownBy(() -> {
213 databaseProvider.deleteOperationalPolicy(null, null);
214 }).hasMessage("policyId is marked @NonNull but is null");
216 assertThatThrownBy(() -> {
217 databaseProvider.deleteOperationalPolicy(null, "");
218 }).hasMessage("policyId is marked @NonNull but is null");
220 assertThatThrownBy(() -> {
221 databaseProvider.deleteOperationalPolicy("", null);
222 }).hasMessage("policyVersion is marked @NonNull but is null");
224 assertThatThrownBy(() -> {
225 databaseProvider.getGuardPolicy(null, null);
226 }).hasMessage("policyId is marked @NonNull but is null");
228 assertThatThrownBy(() -> {
229 databaseProvider.getGuardPolicy(null, "");
230 }).hasMessage("policyId is marked @NonNull but is null");
232 assertThatThrownBy(() -> {
233 databaseProvider.getGuardPolicy("", null);
234 }).hasMessage("no policy found for policy: :null");
236 assertThatThrownBy(() -> {
237 databaseProvider.createGuardPolicy(null);
238 }).hasMessage("legacyGuardPolicy is marked @NonNull but is null");
240 assertThatThrownBy(() -> {
241 databaseProvider.updateGuardPolicy(null);
242 }).hasMessage("legacyGuardPolicy is marked @NonNull but is null");
244 assertThatThrownBy(() -> {
245 databaseProvider.deleteGuardPolicy(null, null);
246 }).hasMessage("policyId is marked @NonNull but is null");
248 assertThatThrownBy(() -> {
249 databaseProvider.deleteGuardPolicy(null, "");
250 }).hasMessage("policyId is marked @NonNull but is null");
252 assertThatThrownBy(() -> {
253 databaseProvider.deleteGuardPolicy("", null);
254 }).hasMessage("policyVersion is marked @NonNull but is null");
256 assertThatThrownBy(() -> {
257 databaseProvider.getFilteredPdpGroups(null);
258 }).hasMessage("filter is marked @NonNull but is null");
260 assertThatThrownBy(() -> {
261 databaseProvider.createPdpGroups(null);
262 }).hasMessage("pdpGroups is marked @NonNull but is null");
264 assertThatThrownBy(() -> {
265 databaseProvider.updatePdpGroups(null);
266 }).hasMessage("pdpGroups is marked @NonNull but is null");
268 assertThatThrownBy(() -> {
269 databaseProvider.updatePdpSubGroup(null, null);
270 }).hasMessage("pdpGroupName is marked @NonNull but is null");
272 assertThatThrownBy(() -> {
273 databaseProvider.updatePdpSubGroup(null, new PdpSubGroup());
274 }).hasMessage("pdpGroupName is marked @NonNull but is null");
276 assertThatThrownBy(() -> {
277 databaseProvider.updatePdpSubGroup("name", null);
278 }).hasMessage("pdpSubGroup is marked @NonNull but is null");
280 assertThatThrownBy(() -> {
281 databaseProvider.updatePdpSubGroup("name", new PdpSubGroup());
282 }).hasMessage("parameter \"localName\" is null");
284 assertThatThrownBy(() -> {
285 databaseProvider.updatePdp(null, null, null);
286 }).hasMessage("pdpGroupName is marked @NonNull but is null");
288 assertThatThrownBy(() -> {
289 databaseProvider.updatePdp(null, null, new Pdp());
290 }).hasMessage("pdpGroupName is marked @NonNull but is null");
292 assertThatThrownBy(() -> {
293 databaseProvider.updatePdp(null, "sub", null);
294 }).hasMessage("pdpGroupName is marked @NonNull but is null");
296 assertThatThrownBy(() -> {
297 databaseProvider.updatePdp(null, "sub", new Pdp());
298 }).hasMessage("pdpGroupName is marked @NonNull but is null");
300 assertThatThrownBy(() -> {
301 databaseProvider.updatePdp("name", null, null);
302 }).hasMessage("pdpSubGroup is marked @NonNull but is null");
304 assertThatThrownBy(() -> {
305 databaseProvider.updatePdp("name", null, new Pdp());
306 }).hasMessage("pdpSubGroup is marked @NonNull but is null");
308 assertThatThrownBy(() -> {
309 databaseProvider.updatePdp("name", "sub", null);
310 }).hasMessage("pdp is marked @NonNull but is null");
312 assertThatThrownBy(() -> {
313 databaseProvider.updatePdp("name", "sub", new Pdp());
314 }).hasMessage("parameter \"localName\" is null");
316 assertThatThrownBy(() -> {
317 databaseProvider.deletePdpGroup(null);
318 }).hasMessage("name is marked @NonNull but is null");
320 assertThatThrownBy(() -> {
321 databaseProvider.updatePdpStatistics(null, null, null, null);
322 }).hasMessage("pdpGroupName is marked @NonNull but is null");
324 assertThatThrownBy(() -> {
325 databaseProvider.updatePdpStatistics(null, null, null, new PdpStatistics());
326 }).hasMessage("pdpGroupName is marked @NonNull but is null");
328 assertThatThrownBy(() -> {
329 databaseProvider.updatePdpStatistics(null, null, "Instance", null);
330 }).hasMessage("pdpGroupName is marked @NonNull but is null");
332 assertThatThrownBy(() -> {
333 databaseProvider.updatePdpStatistics(null, null, "Instance", new PdpStatistics());
334 }).hasMessage("pdpGroupName is marked @NonNull but is null");
336 assertThatThrownBy(() -> {
337 databaseProvider.updatePdpStatistics(null, "type", null, null);
338 }).hasMessage("pdpGroupName is marked @NonNull but is null");
340 assertThatThrownBy(() -> {
341 databaseProvider.updatePdpStatistics(null, "type", null, new PdpStatistics());
342 }).hasMessage("pdpGroupName is marked @NonNull but is null");
344 assertThatThrownBy(() -> {
345 databaseProvider.updatePdpStatistics(null, "type", "Instance", null);
346 }).hasMessage("pdpGroupName is marked @NonNull but is null");
348 assertThatThrownBy(() -> {
349 databaseProvider.updatePdpStatistics(null, "type", "Instance", new PdpStatistics());
350 }).hasMessage("pdpGroupName is marked @NonNull but is null");
352 assertThatThrownBy(() -> {
353 databaseProvider.updatePdpStatistics("name", null, null, null);
354 }).hasMessage("pdpType is marked @NonNull but is null");
356 assertThatThrownBy(() -> {
357 databaseProvider.updatePdpStatistics("name", null, null, new PdpStatistics());
358 }).hasMessage("pdpType is marked @NonNull but is null");
360 assertThatThrownBy(() -> {
361 databaseProvider.updatePdpStatistics("name", null, "Instance", null);
362 }).hasMessage("pdpType is marked @NonNull but is null");
364 assertThatThrownBy(() -> {
365 databaseProvider.updatePdpStatistics("name", null, "Instance", new PdpStatistics());
366 }).hasMessage("pdpType is marked @NonNull but is null");
368 assertThatThrownBy(() -> {
369 databaseProvider.updatePdpStatistics("name", "type", null, null);
370 }).hasMessage("pdpInstanceId is marked @NonNull but is null");
372 assertThatThrownBy(() -> {
373 databaseProvider.updatePdpStatistics("name", "type", null, new PdpStatistics());
374 }).hasMessage("pdpInstanceId is marked @NonNull but is null");
376 assertThatThrownBy(() -> {
377 databaseProvider.updatePdpStatistics("name", "type", "Instance", null);
378 }).hasMessage("pdpStatistics is marked @NonNull but is null");
380 databaseProvider.updatePdpStatistics("name", "type", "Instance", new PdpStatistics());
382 databaseProvider.close();
386 public void testProviderMethodsNotInit() throws Exception {
387 PolicyModelsProvider databaseProvider =
388 new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
390 databaseProvider.close();
392 assertThatThrownBy(() -> {
393 databaseProvider.getPolicyTypes("name", "version");
394 }).hasMessage("policy models provider is not initilaized");
398 public void testProviderMethods() {
399 try (PolicyModelsProvider databaseProvider =
400 new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters)) {
402 assertEquals(0, databaseProvider.getPolicyTypes("name", "1.0.0").getPolicyTypes().get(0).size());
403 assertEquals(0, databaseProvider.getPolicyTypeList("name", "1.0.0").size());
404 assertEquals(0, databaseProvider.getFilteredPolicyTypes(ToscaPolicyTypeFilter.builder().build())
405 .getPolicyTypes().get(0).size());
406 assertEquals(0, databaseProvider.getFilteredPolicyTypeList(ToscaPolicyTypeFilter.builder().build()).size());
408 assertThatThrownBy(() -> {
409 databaseProvider.createPolicyTypes(new ToscaServiceTemplate());
410 }).hasMessage("no policy types specified on service template");
412 assertThatThrownBy(() -> {
413 databaseProvider.updatePolicyTypes(new ToscaServiceTemplate());
414 }).hasMessage("no policy types specified on service template");
416 assertEquals(0, databaseProvider.deletePolicyType("name", "1.0.0").getPolicyTypes().get(0).size());
418 assertEquals(0, databaseProvider.deletePolicyType("name", "1.0.0").getPolicyTypes().get(0).size());
420 assertEquals(0, databaseProvider.getPolicies("name", "1.0.0").getToscaTopologyTemplate().getPolicies()
422 assertEquals(0, databaseProvider.getPolicyList("name", "1.0.0").size());
423 assertEquals(0, databaseProvider.getFilteredPolicies(ToscaPolicyFilter.builder().build())
424 .getToscaTopologyTemplate().getPolicies().get(0).size());
425 assertEquals(0, databaseProvider.getFilteredPolicyList(ToscaPolicyFilter.builder().build()).size());
427 assertThatThrownBy(() -> {
428 databaseProvider.createPolicies(new ToscaServiceTemplate());
429 }).hasMessage("topology template not specified on service template");
431 assertThatThrownBy(() -> {
432 databaseProvider.updatePolicies(new ToscaServiceTemplate());
433 }).hasMessage("topology template not specified on service template");
435 assertEquals(0, databaseProvider.deletePolicy("Policy", "0.0.0").getToscaTopologyTemplate().getPolicies()
438 assertThatThrownBy(() -> {
439 databaseProvider.getOperationalPolicy("policy_id", null);
440 }).hasMessage("no policy found for policy: policy_id:null");
442 assertThatThrownBy(() -> {
443 databaseProvider.getOperationalPolicy("policy_id", "10");
444 }).hasMessage("no policy found for policy: policy_id:10");
446 assertThatThrownBy(() -> {
447 databaseProvider.createOperationalPolicy(new LegacyOperationalPolicy());
448 }).hasMessage("name is marked @NonNull but is null");
450 assertThatThrownBy(() -> {
451 databaseProvider.updateOperationalPolicy(new LegacyOperationalPolicy());
452 }).hasMessage("name is marked @NonNull but is null");
454 assertThatThrownBy(() -> {
455 databaseProvider.deleteOperationalPolicy("policy_id", "55");
456 }).hasMessage("no policy found for policy: policy_id:55");
458 assertThatThrownBy(() -> {
459 databaseProvider.getGuardPolicy("policy_id", null);
460 }).hasMessage("no policy found for policy: policy_id:null");
462 assertThatThrownBy(() -> {
463 databaseProvider.getGuardPolicy("policy_id", "6");
464 }).hasMessage("no policy found for policy: policy_id:6");
466 assertThatThrownBy(() -> {
467 databaseProvider.createGuardPolicy(new LegacyGuardPolicyInput());
468 }).hasMessage("policy type for guard policy \"null\" unknown");
470 assertThatThrownBy(() -> {
471 databaseProvider.updateGuardPolicy(new LegacyGuardPolicyInput());
472 }).hasMessage("policy type for guard policy \"null\" unknown");
474 assertThatThrownBy(() -> {
475 databaseProvider.deleteGuardPolicy("policy_id", "33");
476 }).hasMessage("no policy found for policy: policy_id:33");
478 assertEquals(0, databaseProvider.getPdpGroups("name").size());
479 assertEquals(0, databaseProvider.getFilteredPdpGroups(PdpGroupFilter.builder().build()).size());
481 assertNotNull(databaseProvider.createPdpGroups(new ArrayList<>()));
482 assertNotNull(databaseProvider.updatePdpGroups(new ArrayList<>()));
484 PdpGroup pdpGroup = new PdpGroup();
485 pdpGroup.setName("group");
486 pdpGroup.setVersion("1.2.3");
487 pdpGroup.setPdpGroupState(PdpState.ACTIVE);
488 pdpGroup.setPdpSubgroups(new ArrayList<>());
489 List<PdpGroup> groupList = new ArrayList<>();
490 groupList.add(pdpGroup);
492 PdpSubGroup pdpSubGroup = new PdpSubGroup();
493 pdpSubGroup.setPdpType("type");
494 pdpSubGroup.setDesiredInstanceCount(123);
495 pdpSubGroup.setSupportedPolicyTypes(new ArrayList<>());
496 pdpSubGroup.getSupportedPolicyTypes().add(new ToscaPolicyTypeIdentifier("type", "7.8.9"));
497 pdpGroup.getPdpSubgroups().add(pdpSubGroup);
500 pdp.setInstanceId("type-0");
501 pdp.setMessage("Hello");
502 pdp.setPdpState(PdpState.ACTIVE);
503 pdp.setHealthy(PdpHealthStatus.UNKNOWN);
504 pdpSubGroup.setPdpInstances(new ArrayList<>());
505 pdpSubGroup.getPdpInstances().add(pdp);
507 assertEquals(123, databaseProvider.createPdpGroups(groupList).get(0).getPdpSubgroups().get(0)
508 .getDesiredInstanceCount());
509 assertEquals(1, databaseProvider.getPdpGroups("group").size());
511 pdpSubGroup.setDesiredInstanceCount(234);
512 databaseProvider.updatePdpSubGroup("group", pdpSubGroup);
513 assertEquals(234, databaseProvider.getPdpGroups("group").get(0).getPdpSubgroups()
514 .get(0).getDesiredInstanceCount());
516 assertEquals("Hello", databaseProvider.getPdpGroups("group").get(0).getPdpSubgroups()
517 .get(0).getPdpInstances().get(0).getMessage());
518 pdp.setMessage("Howdy");
519 databaseProvider.updatePdp("group", "type", pdp);
520 assertEquals("Howdy", databaseProvider.getPdpGroups("group").get(0).getPdpSubgroups()
521 .get(0).getPdpInstances().get(0).getMessage());
523 assertThatThrownBy(() -> {
524 databaseProvider.deletePdpGroup("name");
525 }).hasMessage("delete of PDP group \"name:0.0.0\" failed, PDP group does not exist");
527 assertEquals(pdpGroup.getName(), databaseProvider.deletePdpGroup("group").getName());
529 assertEquals(0, databaseProvider.getPdpStatistics(null).size());
531 databaseProvider.updatePdpStatistics("group", "type", "type-0", new PdpStatistics());
532 } catch (Exception exc) {
533 LOGGER.warn("test should not throw an exception", exc);
534 fail("test should not throw an exception");