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