Exposing the Audit provider through Models provider.
[policy/models.git] / models-provider / src / test / java / org / onap / policy / models / provider / impl / DatabasePolicyModelsProviderTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2019-2021 Nordix Foundation.
4  *  Modifications Copyright (C) 2019, 2021 AT&T Intellectual Property. All rights reserved.
5  *  Modifications Copyright (C) 2020 Bell Canada. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19  * SPDX-License-Identifier: Apache-2.0
20  * ============LICENSE_END=========================================================
21  */
22
23 package org.onap.policy.models.provider.impl;
24
25 import static org.assertj.core.api.Assertions.assertThat;
26 import static org.assertj.core.api.Assertions.assertThatCode;
27 import static org.assertj.core.api.Assertions.assertThatThrownBy;
28 import static org.junit.Assert.assertEquals;
29 import static org.junit.Assert.assertNotNull;
30 import static org.junit.Assert.assertTrue;
31
32 import java.time.Instant;
33 import java.util.ArrayList;
34 import java.util.List;
35 import org.junit.After;
36 import org.junit.Before;
37 import org.junit.Test;
38 import org.onap.policy.models.base.PfModelException;
39 import org.onap.policy.models.pap.concepts.PolicyAudit;
40 import org.onap.policy.models.pap.concepts.PolicyAudit.AuditAction;
41 import org.onap.policy.models.pap.persistence.provider.PolicyAuditProvider.AuditFilter;
42 import org.onap.policy.models.pdp.concepts.Pdp;
43 import org.onap.policy.models.pdp.concepts.PdpGroup;
44 import org.onap.policy.models.pdp.concepts.PdpGroupFilter;
45 import org.onap.policy.models.pdp.concepts.PdpStatistics;
46 import org.onap.policy.models.pdp.concepts.PdpSubGroup;
47 import org.onap.policy.models.pdp.enums.PdpHealthStatus;
48 import org.onap.policy.models.pdp.enums.PdpState;
49 import org.onap.policy.models.provider.PolicyModelsProvider;
50 import org.onap.policy.models.provider.PolicyModelsProviderFactory;
51 import org.onap.policy.models.provider.PolicyModelsProviderParameters;
52 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
53 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifierOptVersion;
54 import org.onap.policy.models.tosca.authorative.concepts.ToscaEntityFilter;
55 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
56 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyType;
57 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
58 import org.onap.policy.models.tosca.authorative.concepts.ToscaTypedEntityFilter;
59
60 /**
61  * Test the database models provider implementation.
62  *
63  * @author Liam Fallon (liam.fallon@est.tech)
64  */
65 public class DatabasePolicyModelsProviderTest {
66     private static final String NAME = "name";
67
68     private static final String TEMPLATE_IS_NULL = "^serviceTemplate is marked .*on.*ull but is null$";
69
70     private static final String SUBGROUP_IS_NULL = "^pdpSubGroup is marked .*on.*ull but is null$";
71
72     private static final String GROUP_IS_NULL = "^pdpGroupName is marked .*on.*ull but is null$";
73
74     private static final String NAME_IS_NULL = "^name is marked .*on.*ull but is null$";
75
76     private static final String FILTER_IS_NULL = "^filter is marked .*on.*ull but is null$";
77
78     private static final String GROUP = "group";
79
80     private static final String VERSION_100 = "1.0.0";
81
82     private static final Instant TIMESTAMP = Instant.EPOCH;
83
84     private static final String ORDER = "DESC";
85
86     private PolicyModelsProviderParameters parameters;
87
88     private PolicyModelsProvider databaseProvider;
89
90     /**
91      * Initialize parameters.
92      */
93     @Before
94     public void setupParameters() {
95         parameters = new PolicyModelsProviderParameters();
96         parameters.setDatabaseDriver("org.h2.Driver");
97         parameters.setDatabaseUrl("jdbc:h2:mem:DatabasePolicyModelsProviderTest");
98         parameters.setDatabaseUser("policy");
99         parameters.setDatabasePassword("P01icY");
100         parameters.setPersistenceUnit("ToscaConceptTest");
101     }
102
103     /**
104      * Closes the DB.
105      */
106     @After
107     public void tearDown() throws PfModelException {
108         if (databaseProvider != null) {
109             databaseProvider.close();
110         }
111     }
112
113     @Test
114     public void testInitAndClose() throws Exception {
115         assertThatThrownBy(() -> {
116             new DatabasePolicyModelsProviderImpl(null);
117         }).hasMessageMatching("^parameters is marked .*on.*ull but is null$");
118
119         databaseProvider = new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
120
121         parameters.setDatabaseUrl("jdbc://www.acmecorp.nonexist");
122
123         databaseProvider.close();
124         databaseProvider.init();
125
126         databaseProvider.close();
127
128         parameters.setDatabaseUrl("jdbc:h2:mem:DatabasePolicyModelsProviderTest");
129
130         parameters.setPersistenceUnit("WileECoyote");
131
132         assertThatThrownBy(databaseProvider::init).hasMessageContaining("could not create Data Access Object (DAO)");
133
134         parameters.setPersistenceUnit("ToscaConceptTest");
135
136         databaseProvider.init();
137         databaseProvider.close();
138
139         assertThatThrownBy(() -> {
140             databaseProvider.init();
141             databaseProvider.init();
142         }).hasMessage("provider is already initialized");
143
144         databaseProvider.close();
145
146         databaseProvider.close();
147     }
148
149     @Test
150     public void testProviderMethodsNull() throws Exception {
151
152         databaseProvider = new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
153
154         assertThatThrownBy(() -> {
155             databaseProvider.getFilteredPolicyTypes(null);
156         }).hasMessageMatching(FILTER_IS_NULL);
157
158         assertThatThrownBy(() -> {
159             databaseProvider.getFilteredPolicyTypeList(null);
160         }).hasMessageMatching(FILTER_IS_NULL);
161
162         assertThatThrownBy(() -> {
163             databaseProvider.createPolicyTypes(null);
164         }).hasMessageMatching(TEMPLATE_IS_NULL);
165
166         assertThatThrownBy(() -> {
167             databaseProvider.updatePolicyTypes(null);
168         }).hasMessageMatching(TEMPLATE_IS_NULL);
169
170         assertThatThrownBy(() -> {
171             databaseProvider.deletePolicyType(null, null);
172         }).hasMessageMatching(NAME_IS_NULL);
173
174         assertThatThrownBy(() -> {
175             databaseProvider.deletePolicyType("aaa", null);
176         }).hasMessageMatching("^version is marked .*on.*ull but is null$");
177
178         assertThatThrownBy(() -> {
179             databaseProvider.deletePolicyType(null, "aaa");
180         }).hasMessageMatching(NAME_IS_NULL);
181
182         assertThatThrownBy(() -> {
183             databaseProvider.getFilteredPolicies(null);
184         }).hasMessageMatching(FILTER_IS_NULL);
185
186         assertThatThrownBy(() -> {
187             databaseProvider.getFilteredPolicyList(null);
188         }).hasMessageMatching(FILTER_IS_NULL);
189
190         assertThatThrownBy(() -> {
191             databaseProvider.createPolicies(null);
192         }).hasMessageMatching(TEMPLATE_IS_NULL);
193
194         assertThatThrownBy(() -> {
195             databaseProvider.updatePolicies(null);
196         }).hasMessageMatching(TEMPLATE_IS_NULL);
197
198         assertThatThrownBy(() -> {
199             databaseProvider.deletePolicy(null, null);
200         }).hasMessageMatching(NAME_IS_NULL);
201
202         assertThatThrownBy(() -> {
203             databaseProvider.deletePolicy(null, "aaa");
204         }).hasMessageMatching(NAME_IS_NULL);
205
206         assertThatThrownBy(() -> {
207             databaseProvider.deletePolicy("aaa", null);
208         }).hasMessageMatching("^version is marked .*on.*ull but is null$");
209     }
210
211     @Test
212     public void testProviderMethodsNullGroup() throws Exception {
213
214         databaseProvider = new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
215
216         assertThatThrownBy(() -> {
217             databaseProvider.getFilteredPdpGroups(null);
218         }).hasMessageMatching(FILTER_IS_NULL);
219
220         assertThatThrownBy(() -> {
221             databaseProvider.createPdpGroups(null);
222         }).hasMessageMatching("^pdpGroups is marked .*on.*ull but is null$");
223
224         assertThatThrownBy(() -> {
225             databaseProvider.updatePdpGroups(null);
226         }).hasMessageMatching("^pdpGroups is marked .*on.*ull but is null$");
227
228         assertThatThrownBy(() -> {
229             databaseProvider.updatePdpSubGroup(null, null);
230         }).hasMessageMatching(GROUP_IS_NULL);
231
232         assertThatThrownBy(() -> {
233             databaseProvider.updatePdpSubGroup(null, new PdpSubGroup());
234         }).hasMessageMatching(GROUP_IS_NULL);
235
236         assertThatThrownBy(() -> {
237             databaseProvider.updatePdpSubGroup(NAME, null);
238         }).hasMessageMatching(SUBGROUP_IS_NULL);
239
240         assertThatThrownBy(() -> {
241             databaseProvider.updatePdpSubGroup(NAME, new PdpSubGroup());
242         }).hasMessage("parameter \"localName\" is null");
243
244         assertThatThrownBy(() -> {
245             databaseProvider.updatePdp(null, null, null);
246         }).hasMessageMatching(GROUP_IS_NULL);
247
248         assertThatThrownBy(() -> {
249             databaseProvider.updatePdp(null, null, new Pdp());
250         }).hasMessageMatching(GROUP_IS_NULL);
251
252         assertThatThrownBy(() -> {
253             databaseProvider.updatePdp(null, "sub", null);
254         }).hasMessageMatching(GROUP_IS_NULL);
255
256         assertThatThrownBy(() -> {
257             databaseProvider.updatePdp(null, "sub", new Pdp());
258         }).hasMessageMatching(GROUP_IS_NULL);
259
260         assertThatThrownBy(() -> {
261             databaseProvider.updatePdp(NAME, null, null);
262         }).hasMessageMatching(SUBGROUP_IS_NULL);
263
264         assertThatThrownBy(() -> {
265             databaseProvider.updatePdp(NAME, null, new Pdp());
266         }).hasMessageMatching(SUBGROUP_IS_NULL);
267
268         assertThatThrownBy(() -> {
269             databaseProvider.updatePdp(NAME, "sub", null);
270         }).hasMessageMatching("^pdp is marked .*on.*ull but is null$");
271
272         assertThatThrownBy(() -> {
273             databaseProvider.updatePdp(NAME, "sub", new Pdp());
274         }).hasMessage("parameter \"localName\" is null");
275
276         assertThatThrownBy(() -> {
277             databaseProvider.deletePdpGroup(null);
278         }).hasMessageMatching(NAME_IS_NULL);
279
280         assertThatThrownBy(() -> {
281             databaseProvider.getFilteredPdpStatistics(NAME, null, "sub", TIMESTAMP, TIMESTAMP, ORDER, 0);
282         }).hasMessageMatching(GROUP_IS_NULL);
283
284         assertThatThrownBy(() -> {
285             databaseProvider.createPdpStatistics(null);
286         }).hasMessageMatching("^pdpStatisticsList is marked .*on.*ull but is null$");
287
288         assertThatThrownBy(() -> {
289             databaseProvider.updatePdpStatistics(null);
290         }).hasMessageMatching("^pdpStatisticsList is marked .*on.*ull but is null$");
291
292         assertThatThrownBy(() -> {
293             databaseProvider.deletePdpStatistics(null, TIMESTAMP);
294         }).hasMessageMatching(NAME_IS_NULL);
295
296         databaseProvider.close();
297     }
298
299     @Test
300     public void testProviderMethodsNotInit() throws Exception {
301         databaseProvider = new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
302
303         databaseProvider.close();
304
305         assertThatThrownBy(() -> {
306             databaseProvider.getPolicyTypes(NAME, "version");
307         }).hasMessage("policy models provider is not initilaized");
308     }
309
310     @Test
311     public void testProviderMethods() throws PfModelException {
312         databaseProvider = new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
313
314         assertThatThrownBy(() -> databaseProvider.getPolicyTypes(NAME, VERSION_100))
315                 .hasMessage("service template not found in database");
316
317         assertTrue(databaseProvider.getPolicyTypeList(NAME, VERSION_100).isEmpty());
318
319         assertThatThrownBy(
320             () -> databaseProvider.getFilteredPolicyTypes(ToscaEntityFilter.<ToscaPolicyType>builder().build()))
321                         .hasMessage("service template not found in database");
322
323         assertTrue(databaseProvider.getFilteredPolicyTypeList(ToscaEntityFilter.<ToscaPolicyType>builder().build())
324                 .isEmpty());
325
326         assertThatThrownBy(() -> {
327             databaseProvider.createPolicyTypes(new ToscaServiceTemplate());
328         }).hasMessage("no policy types specified on service template");
329
330         assertThatThrownBy(() -> {
331             databaseProvider.updatePolicyTypes(new ToscaServiceTemplate());
332         }).hasMessage("no policy types specified on service template");
333
334         assertThatThrownBy(() -> databaseProvider.deletePolicyType(NAME, VERSION_100))
335                 .hasMessage("service template not found in database");
336
337         assertThatThrownBy(() -> databaseProvider.getPolicies(NAME, VERSION_100))
338                 .hasMessage("service template not found in database");
339
340         assertTrue(databaseProvider.getPolicyList(NAME, VERSION_100).isEmpty());
341
342         assertThatThrownBy(
343             () -> databaseProvider.getFilteredPolicies(ToscaTypedEntityFilter.<ToscaPolicy>builder().build()))
344                         .hasMessage("service template not found in database");
345
346         assertTrue(databaseProvider.getFilteredPolicyList(ToscaTypedEntityFilter.<ToscaPolicy>builder().build())
347                 .isEmpty());
348
349         assertThatThrownBy(() -> {
350             databaseProvider.createPolicies(new ToscaServiceTemplate());
351         }).hasMessage("topology template not specified on service template");
352
353         assertThatThrownBy(() -> {
354             databaseProvider.updatePolicies(new ToscaServiceTemplate());
355         }).hasMessage("topology template not specified on service template");
356
357         assertThatThrownBy(() -> databaseProvider.deletePolicy("Policy", "0.0.0").getToscaTopologyTemplate())
358                 .hasMessage("service template not found in database");
359
360         assertEquals(0, databaseProvider.getPdpGroups(NAME).size());
361         assertEquals(0, databaseProvider.getFilteredPdpGroups(PdpGroupFilter.builder().build()).size());
362
363         assertNotNull(databaseProvider.createPdpGroups(new ArrayList<>()));
364         assertNotNull(databaseProvider.updatePdpGroups(new ArrayList<>()));
365     }
366
367     @Test
368     public void testProviderMethodsInGroups() throws PfModelException {
369         PdpGroup pdpGroup = new PdpGroup();
370         pdpGroup.setName(GROUP);
371         pdpGroup.setVersion("1.2.3");
372         pdpGroup.setPdpGroupState(PdpState.ACTIVE);
373         pdpGroup.setPdpSubgroups(new ArrayList<>());
374         List<PdpGroup> groupList = new ArrayList<>();
375         groupList.add(pdpGroup);
376
377         PdpSubGroup pdpSubGroup = new PdpSubGroup();
378         pdpSubGroup.setPdpType("type");
379         pdpSubGroup.setDesiredInstanceCount(123);
380         pdpSubGroup.setSupportedPolicyTypes(new ArrayList<>());
381         pdpSubGroup.getSupportedPolicyTypes().add(new ToscaConceptIdentifier("type", "7.8.9"));
382         pdpGroup.getPdpSubgroups().add(pdpSubGroup);
383
384         Pdp pdp = new Pdp();
385         pdp.setInstanceId("type-0");
386         pdp.setMessage("Hello");
387         pdp.setPdpState(PdpState.ACTIVE);
388         pdp.setHealthy(PdpHealthStatus.UNKNOWN);
389         pdpSubGroup.setPdpInstances(new ArrayList<>());
390         pdpSubGroup.getPdpInstances().add(pdp);
391
392         databaseProvider = new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
393
394         assertEquals(123,
395                 databaseProvider.createPdpGroups(groupList).get(0).getPdpSubgroups().get(0).getDesiredInstanceCount());
396         assertEquals(1, databaseProvider.getPdpGroups(GROUP).size());
397
398         pdpSubGroup.setDesiredInstanceCount(234);
399         databaseProvider.updatePdpSubGroup(GROUP, pdpSubGroup);
400         assertEquals(234,
401                 databaseProvider.getPdpGroups(GROUP).get(0).getPdpSubgroups().get(0).getDesiredInstanceCount());
402
403         assertEquals("Hello", databaseProvider.getPdpGroups(GROUP).get(0).getPdpSubgroups().get(0).getPdpInstances()
404                 .get(0).getMessage());
405         pdp.setMessage("Howdy");
406         databaseProvider.updatePdp(GROUP, "type", pdp);
407         assertEquals("Howdy", databaseProvider.getPdpGroups(GROUP).get(0).getPdpSubgroups().get(0).getPdpInstances()
408                 .get(0).getMessage());
409
410         assertThatThrownBy(() -> {
411             databaseProvider.deletePdpGroup(NAME);
412         }).hasMessage("delete of PDP group \"name:0.0.0\" failed, PDP group does not exist");
413
414         assertEquals(pdpGroup.getName(), databaseProvider.deletePdpGroup(GROUP).getName());
415
416         List<PdpStatistics> statisticsArrayList = makePdpStatisticsList();
417
418         assertThat(databaseProvider.getPdpStatistics(null, null)).isEmpty();
419         assertThat(databaseProvider.createPdpStatistics(statisticsArrayList)).hasSize(1);
420         assertThat(databaseProvider.updatePdpStatistics(statisticsArrayList)).hasSize(1);
421     }
422
423     @Test
424     public void testProviderMethodsStatistics() throws PfModelException {
425         databaseProvider = new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
426         databaseProvider.createPdpStatistics(makePdpStatisticsList());
427
428         assertEquals(NAME, databaseProvider.getPdpStatistics(null, null).get(0).getPdpInstanceId());
429         assertEquals(NAME, databaseProvider.getFilteredPdpStatistics(null, GROUP, null,
430             null, null, ORDER, 0).get(0).getPdpInstanceId());
431         assertEquals(0, databaseProvider.getFilteredPdpStatistics(null, GROUP, null,
432             Instant.now(), null, ORDER, 0).size());
433         assertEquals(NAME, databaseProvider.getFilteredPdpStatistics(null, GROUP, null,
434             null, TIMESTAMP, ORDER, 0).get(0).getPdpInstanceId());
435         assertEquals(0,
436                 databaseProvider.getFilteredPdpStatistics(null, GROUP, null, Instant.now(),
437                     Instant.now(), ORDER, 0).size());
438
439         assertEquals(NAME, databaseProvider.getFilteredPdpStatistics(NAME, GROUP, null, null,
440             null, ORDER, 0).get(0).getPdpInstanceId());
441         assertEquals(0,
442                 databaseProvider.getFilteredPdpStatistics(NAME, GROUP, null, Instant.now(), Instant.now(),
443                     ORDER, 0).size());
444
445         assertEquals(NAME, databaseProvider.getFilteredPdpStatistics(NAME, GROUP, "type",
446             null, null, ORDER, 0).get(0).getPdpInstanceId());
447
448         assertEquals(0, databaseProvider.getFilteredPdpStatistics(NAME, GROUP, "type",
449             Instant.now(), Instant.now(), ORDER, 0).size());
450
451         assertEquals(NAME, databaseProvider.getFilteredPdpStatistics(NAME, GROUP, "type",
452             null, null, ORDER, 1).get(0).getPdpInstanceId());
453         assertEquals(NAME, databaseProvider.getFilteredPdpStatistics(NAME, GROUP, "type",
454             null, null, ORDER, 5).get(0).getPdpInstanceId());
455         assertEquals(0, databaseProvider.getFilteredPdpStatistics(NAME, GROUP, "type",
456             Instant.now(), Instant.now(), ORDER, 5).size());
457
458         assertEquals(NAME, databaseProvider.deletePdpStatistics(NAME, null).get(0).getPdpInstanceId());
459         assertEquals(0, databaseProvider.getPdpStatistics(null, null).size());
460
461         assertThat(databaseProvider.getAllPolicyStatus()).isEmpty();
462         assertThat(databaseProvider.getAllPolicyStatus(new ToscaConceptIdentifierOptVersion("MyPolicy", null)))
463                 .isEmpty();
464         assertThat(databaseProvider.getGroupPolicyStatus(GROUP)).isEmpty();
465         assertThatCode(() -> databaseProvider.cudPolicyStatus(null, null, null))
466             .doesNotThrowAnyException();
467
468         databaseProvider.close();
469     }
470
471     @Test
472     public void testDeletePolicyDeployedInSubgroup() throws PfModelException {
473         List<ToscaConceptIdentifier> policies = new ArrayList<>();
474
475         policies.add(new ToscaConceptIdentifier("p0", "0.0.1"));
476         policies.add(new ToscaConceptIdentifier("p1", "0.0.1"));
477
478         List<ToscaConceptIdentifier> supportedPolicyTypes = new ArrayList<>();
479         supportedPolicyTypes.add(new ToscaConceptIdentifier("pt2", "0.0.1"));
480
481         PdpSubGroup subGroup = new PdpSubGroup();
482         subGroup.setPdpType("pdpType");
483         subGroup.setSupportedPolicyTypes(supportedPolicyTypes);
484         subGroup.setPolicies(policies);
485
486         List<PdpSubGroup> pdpSubgroups = new ArrayList<>();
487         pdpSubgroups.add(subGroup);
488
489         PdpGroup pdpGroup = new PdpGroup();
490         pdpGroup.setName("pdpGroup");
491         pdpGroup.setPdpGroupState(PdpState.PASSIVE);
492         pdpGroup.setPdpSubgroups(pdpSubgroups);
493
494         List<PdpGroup> pdpGroups = new ArrayList<>();
495         pdpGroups.add(pdpGroup);
496
497         databaseProvider = new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
498
499         databaseProvider.createPdpGroups(pdpGroups);
500
501         assertThatThrownBy(() -> databaseProvider.deletePolicy("p0", "0.0.1"))
502                 .hasMessageContaining("policy is in use, it is deployed in PDP group pdpGroup subgroup pdpType");
503
504         assertThatThrownBy(() -> databaseProvider.deletePolicy("p3", "0.0.1"))
505                 .hasMessageContaining("service template not found in database");
506
507         databaseProvider.close();
508     }
509
510     @Test
511     public void testDeletePolicyTypeSupportedInSubgroup() throws PfModelException {
512         List<ToscaConceptIdentifier> supportedPolicyTypes = new ArrayList<>();
513         supportedPolicyTypes.add(new ToscaConceptIdentifier("pt1", "0.0.1"));
514         supportedPolicyTypes.add(new ToscaConceptIdentifier("pt2", "0.0.1"));
515
516         PdpSubGroup subGroup = new PdpSubGroup();
517         subGroup.setPdpType("pdpType");
518         subGroup.setSupportedPolicyTypes(supportedPolicyTypes);
519
520         List<PdpSubGroup> pdpSubgroups = new ArrayList<>();
521         pdpSubgroups.add(subGroup);
522
523         PdpGroup pdpGroup = new PdpGroup();
524         pdpGroup.setName("pdpGroup");
525         pdpGroup.setPdpGroupState(PdpState.PASSIVE);
526         pdpGroup.setPdpSubgroups(pdpSubgroups);
527
528         List<PdpGroup> pdpGroups = new ArrayList<>();
529         pdpGroups.add(pdpGroup);
530
531         databaseProvider = new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
532
533         databaseProvider.createPdpGroups(pdpGroups);
534
535         assertThatThrownBy(() -> databaseProvider.deletePolicyType("pt2", "0.0.1"))
536                 .hasMessageContaining("policy type is in use, it is referenced in PDP group pdpGroup subgroup pdpType");
537
538         assertThatThrownBy(() -> databaseProvider.deletePolicyType("pt0", "0.0.1"))
539                 .hasMessageContaining("service template not found in database");
540
541         databaseProvider.close();
542     }
543
544     @Test
545     public void testCreateAuditRecords() throws PfModelException {
546         PolicyAudit audit = PolicyAudit.builder().action(AuditAction.DEPLOYMENT).pdpGroup(GROUP).pdpType(GROUP)
547                 .policy(new ToscaConceptIdentifier(NAME, VERSION_100)).user("user").build();
548
549         databaseProvider = new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
550
551         databaseProvider.createAuditRecords(List.of(audit));
552         List<PolicyAudit> createdAudits = databaseProvider.getAuditRecords(null, 10);
553         assertThat(createdAudits).hasSize(1);
554
555         createdAudits = databaseProvider.getAuditRecords(AuditFilter.builder().build(), 10);
556         assertThat(createdAudits).hasSize(1);
557
558         List<PolicyAudit> emptyList =
559                 databaseProvider.getAuditRecords(AuditFilter.builder().action(AuditAction.UNDEPLOYMENT).build(), 10);
560         assertThat(emptyList).isEmpty();
561
562         assertThatThrownBy(() -> databaseProvider.createAuditRecords(null))
563                 .hasMessageContaining("audits is marked non-null but is null");
564
565         assertThatThrownBy(() -> databaseProvider.getAuditRecords(null, null))
566                 .hasMessageContaining("numRecords is marked non-null but is null");
567
568         databaseProvider.close();
569     }
570
571     private List<PdpStatistics> makePdpStatisticsList() {
572         PdpStatistics pdpStatistics = new PdpStatistics();
573         pdpStatistics.setPdpInstanceId(NAME);
574         pdpStatistics.setTimeStamp(TIMESTAMP);
575         pdpStatistics.setPdpGroupName(GROUP);
576         pdpStatistics.setPdpSubGroupName("type");
577         List<PdpStatistics> statisticsArrayList = List.of(pdpStatistics);
578         return statisticsArrayList;
579     }
580 }