Close DB in junits
[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.pdp.concepts.Pdp;
40 import org.onap.policy.models.pdp.concepts.PdpGroup;
41 import org.onap.policy.models.pdp.concepts.PdpGroupFilter;
42 import org.onap.policy.models.pdp.concepts.PdpStatistics;
43 import org.onap.policy.models.pdp.concepts.PdpSubGroup;
44 import org.onap.policy.models.pdp.enums.PdpHealthStatus;
45 import org.onap.policy.models.pdp.enums.PdpState;
46 import org.onap.policy.models.provider.PolicyModelsProvider;
47 import org.onap.policy.models.provider.PolicyModelsProviderFactory;
48 import org.onap.policy.models.provider.PolicyModelsProviderParameters;
49 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
50 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifierOptVersion;
51 import org.onap.policy.models.tosca.authorative.concepts.ToscaEntityFilter;
52 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
53 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyType;
54 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
55 import org.onap.policy.models.tosca.authorative.concepts.ToscaTypedEntityFilter;
56
57 /**
58  * Test the database models provider implementation.
59  *
60  * @author Liam Fallon (liam.fallon@est.tech)
61  */
62 public class DatabasePolicyModelsProviderTest {
63     private static final String NAME = "name";
64
65     private static final String TEMPLATE_IS_NULL = "^serviceTemplate is marked .*on.*ull but is null$";
66
67     private static final String SUBGROUP_IS_NULL = "^pdpSubGroup is marked .*on.*ull but is null$";
68
69     private static final String GROUP_IS_NULL = "^pdpGroupName is marked .*on.*ull but is null$";
70
71     private static final String NAME_IS_NULL = "^name is marked .*on.*ull but is null$";
72
73     private static final String FILTER_IS_NULL = "^filter is marked .*on.*ull but is null$";
74
75     private static final String GROUP = "group";
76
77     private static final String VERSION_100 = "1.0.0";
78
79     private static final Instant TIMESTAMP = Instant.EPOCH;
80
81     private static final String ORDER = "DESC";
82
83     private PolicyModelsProviderParameters parameters;
84
85     private PolicyModelsProvider databaseProvider;
86
87     /**
88      * Initialize parameters.
89      */
90     @Before
91     public void setupParameters() {
92         parameters = new PolicyModelsProviderParameters();
93         parameters.setDatabaseDriver("org.h2.Driver");
94         parameters.setDatabaseUrl("jdbc:h2:mem:DatabasePolicyModelsProviderTest");
95         parameters.setDatabaseUser("policy");
96         parameters.setDatabasePassword("P01icY");
97         parameters.setPersistenceUnit("ToscaConceptTest");
98     }
99
100     /**
101      * Closes the DB.
102      */
103     @After
104     public void tearDown() throws PfModelException {
105         if (databaseProvider != null) {
106             databaseProvider.close();
107         }
108     }
109
110     @Test
111     public void testInitAndClose() throws Exception {
112         assertThatThrownBy(() -> {
113             new DatabasePolicyModelsProviderImpl(null);
114         }).hasMessageMatching("^parameters is marked .*on.*ull but is null$");
115
116         databaseProvider = new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
117
118         parameters.setDatabaseUrl("jdbc://www.acmecorp.nonexist");
119
120         databaseProvider.close();
121         databaseProvider.init();
122
123         databaseProvider.close();
124
125         parameters.setDatabaseUrl("jdbc:h2:mem:DatabasePolicyModelsProviderTest");
126
127         parameters.setPersistenceUnit("WileECoyote");
128
129         assertThatThrownBy(databaseProvider::init).hasMessageContaining("could not create Data Access Object (DAO)");
130
131         parameters.setPersistenceUnit("ToscaConceptTest");
132
133         databaseProvider.init();
134         databaseProvider.close();
135
136         assertThatThrownBy(() -> {
137             databaseProvider.init();
138             databaseProvider.init();
139         }).hasMessage("provider is already initialized");
140
141         databaseProvider.close();
142
143         databaseProvider.close();
144     }
145
146     @Test
147     public void testProviderMethodsNull() throws Exception {
148
149         databaseProvider = new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
150
151         assertThatThrownBy(() -> {
152             databaseProvider.getFilteredPolicyTypes(null);
153         }).hasMessageMatching(FILTER_IS_NULL);
154
155         assertThatThrownBy(() -> {
156             databaseProvider.getFilteredPolicyTypeList(null);
157         }).hasMessageMatching(FILTER_IS_NULL);
158
159         assertThatThrownBy(() -> {
160             databaseProvider.createPolicyTypes(null);
161         }).hasMessageMatching(TEMPLATE_IS_NULL);
162
163         assertThatThrownBy(() -> {
164             databaseProvider.updatePolicyTypes(null);
165         }).hasMessageMatching(TEMPLATE_IS_NULL);
166
167         assertThatThrownBy(() -> {
168             databaseProvider.deletePolicyType(null, null);
169         }).hasMessageMatching(NAME_IS_NULL);
170
171         assertThatThrownBy(() -> {
172             databaseProvider.deletePolicyType("aaa", null);
173         }).hasMessageMatching("^version is marked .*on.*ull but is null$");
174
175         assertThatThrownBy(() -> {
176             databaseProvider.deletePolicyType(null, "aaa");
177         }).hasMessageMatching(NAME_IS_NULL);
178
179         assertThatThrownBy(() -> {
180             databaseProvider.getFilteredPolicies(null);
181         }).hasMessageMatching(FILTER_IS_NULL);
182
183         assertThatThrownBy(() -> {
184             databaseProvider.getFilteredPolicyList(null);
185         }).hasMessageMatching(FILTER_IS_NULL);
186
187         assertThatThrownBy(() -> {
188             databaseProvider.createPolicies(null);
189         }).hasMessageMatching(TEMPLATE_IS_NULL);
190
191         assertThatThrownBy(() -> {
192             databaseProvider.updatePolicies(null);
193         }).hasMessageMatching(TEMPLATE_IS_NULL);
194
195         assertThatThrownBy(() -> {
196             databaseProvider.deletePolicy(null, null);
197         }).hasMessageMatching(NAME_IS_NULL);
198
199         assertThatThrownBy(() -> {
200             databaseProvider.deletePolicy(null, "aaa");
201         }).hasMessageMatching(NAME_IS_NULL);
202
203         assertThatThrownBy(() -> {
204             databaseProvider.deletePolicy("aaa", null);
205         }).hasMessageMatching("^version is marked .*on.*ull but is null$");
206     }
207
208     @Test
209     public void testProviderMethodsNullGroup() throws Exception {
210
211         databaseProvider = new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
212
213         assertThatThrownBy(() -> {
214             databaseProvider.getFilteredPdpGroups(null);
215         }).hasMessageMatching(FILTER_IS_NULL);
216
217         assertThatThrownBy(() -> {
218             databaseProvider.createPdpGroups(null);
219         }).hasMessageMatching("^pdpGroups is marked .*on.*ull but is null$");
220
221         assertThatThrownBy(() -> {
222             databaseProvider.updatePdpGroups(null);
223         }).hasMessageMatching("^pdpGroups is marked .*on.*ull but is null$");
224
225         assertThatThrownBy(() -> {
226             databaseProvider.updatePdpSubGroup(null, null);
227         }).hasMessageMatching(GROUP_IS_NULL);
228
229         assertThatThrownBy(() -> {
230             databaseProvider.updatePdpSubGroup(null, new PdpSubGroup());
231         }).hasMessageMatching(GROUP_IS_NULL);
232
233         assertThatThrownBy(() -> {
234             databaseProvider.updatePdpSubGroup(NAME, null);
235         }).hasMessageMatching(SUBGROUP_IS_NULL);
236
237         assertThatThrownBy(() -> {
238             databaseProvider.updatePdpSubGroup(NAME, new PdpSubGroup());
239         }).hasMessage("parameter \"localName\" is null");
240
241         assertThatThrownBy(() -> {
242             databaseProvider.updatePdp(null, null, null);
243         }).hasMessageMatching(GROUP_IS_NULL);
244
245         assertThatThrownBy(() -> {
246             databaseProvider.updatePdp(null, null, new Pdp());
247         }).hasMessageMatching(GROUP_IS_NULL);
248
249         assertThatThrownBy(() -> {
250             databaseProvider.updatePdp(null, "sub", null);
251         }).hasMessageMatching(GROUP_IS_NULL);
252
253         assertThatThrownBy(() -> {
254             databaseProvider.updatePdp(null, "sub", new Pdp());
255         }).hasMessageMatching(GROUP_IS_NULL);
256
257         assertThatThrownBy(() -> {
258             databaseProvider.updatePdp(NAME, null, null);
259         }).hasMessageMatching(SUBGROUP_IS_NULL);
260
261         assertThatThrownBy(() -> {
262             databaseProvider.updatePdp(NAME, null, new Pdp());
263         }).hasMessageMatching(SUBGROUP_IS_NULL);
264
265         assertThatThrownBy(() -> {
266             databaseProvider.updatePdp(NAME, "sub", null);
267         }).hasMessageMatching("^pdp is marked .*on.*ull but is null$");
268
269         assertThatThrownBy(() -> {
270             databaseProvider.updatePdp(NAME, "sub", new Pdp());
271         }).hasMessage("parameter \"localName\" is null");
272
273         assertThatThrownBy(() -> {
274             databaseProvider.deletePdpGroup(null);
275         }).hasMessageMatching(NAME_IS_NULL);
276
277         assertThatThrownBy(() -> {
278             databaseProvider.getFilteredPdpStatistics(NAME, null, "sub", TIMESTAMP, TIMESTAMP, ORDER, 0);
279         }).hasMessageMatching(GROUP_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)).hasSize(0);
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(null, GROUP, null,
427             null, null, ORDER, 0).get(0).getPdpInstanceId());
428         assertEquals(0, databaseProvider.getFilteredPdpStatistics(null, GROUP, null,
429             Instant.now(), null, ORDER, 0).size());
430         assertEquals(NAME, databaseProvider.getFilteredPdpStatistics(null, GROUP, null,
431             null, TIMESTAMP, ORDER, 0).get(0).getPdpInstanceId());
432         assertEquals(0,
433                 databaseProvider.getFilteredPdpStatistics(null, GROUP, null, Instant.now(),
434                     Instant.now(), ORDER, 0).size());
435
436         assertEquals(NAME, databaseProvider.getFilteredPdpStatistics(NAME, GROUP, null, null,
437             null, ORDER, 0).get(0).getPdpInstanceId());
438         assertEquals(0,
439                 databaseProvider.getFilteredPdpStatistics(NAME, GROUP, null, Instant.now(), Instant.now(),
440                     ORDER, 0).size());
441
442         assertEquals(NAME, databaseProvider.getFilteredPdpStatistics(NAME, GROUP, "type",
443             null, null, ORDER, 0).get(0).getPdpInstanceId());
444
445         assertEquals(0, databaseProvider.getFilteredPdpStatistics(NAME, GROUP, "type",
446             Instant.now(), Instant.now(), ORDER, 0).size());
447
448         assertEquals(NAME, databaseProvider.getFilteredPdpStatistics(NAME, GROUP, "type",
449             null, null, ORDER, 1).get(0).getPdpInstanceId());
450         assertEquals(NAME, databaseProvider.getFilteredPdpStatistics(NAME, GROUP, "type",
451             null, null, ORDER, 5).get(0).getPdpInstanceId());
452         assertEquals(0, databaseProvider.getFilteredPdpStatistics(NAME, GROUP, "type",
453             Instant.now(), Instant.now(), ORDER, 5).size());
454
455         assertEquals(NAME, databaseProvider.deletePdpStatistics(NAME, null).get(0).getPdpInstanceId());
456         assertEquals(0, databaseProvider.getPdpStatistics(null, null).size());
457
458         assertThat(databaseProvider.getAllPolicyStatus()).isEmpty();
459         assertThat(databaseProvider.getAllPolicyStatus(new ToscaConceptIdentifierOptVersion("MyPolicy", null)))
460                 .isEmpty();
461         assertThat(databaseProvider.getGroupPolicyStatus(GROUP)).isEmpty();
462         assertThatCode(() -> databaseProvider.cudPolicyStatus(null, null, null))
463             .doesNotThrowAnyException();
464
465         databaseProvider.close();
466     }
467
468     @Test
469     public void testDeletePolicyDeployedInSubgroup() throws PfModelException {
470         List<ToscaConceptIdentifier> policies = new ArrayList<>();
471
472         policies.add(new ToscaConceptIdentifier("p0", "0.0.1"));
473         policies.add(new ToscaConceptIdentifier("p1", "0.0.1"));
474
475         List<ToscaConceptIdentifier> supportedPolicyTypes = new ArrayList<>();
476         supportedPolicyTypes.add(new ToscaConceptIdentifier("pt2", "0.0.1"));
477
478         PdpSubGroup subGroup = new PdpSubGroup();
479         subGroup.setPdpType("pdpType");
480         subGroup.setSupportedPolicyTypes(supportedPolicyTypes);
481         subGroup.setPolicies(policies);
482
483         List<PdpSubGroup> pdpSubgroups = new ArrayList<>();
484         pdpSubgroups.add(subGroup);
485
486         PdpGroup pdpGroup = new PdpGroup();
487         pdpGroup.setName("pdpGroup");
488         pdpGroup.setPdpGroupState(PdpState.PASSIVE);
489         pdpGroup.setPdpSubgroups(pdpSubgroups);
490
491         List<PdpGroup> pdpGroups = new ArrayList<>();
492         pdpGroups.add(pdpGroup);
493
494         databaseProvider = new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
495
496         databaseProvider.createPdpGroups(pdpGroups);
497
498         assertThatThrownBy(() -> databaseProvider.deletePolicy("p0", "0.0.1"))
499                 .hasMessageContaining("policy is in use, it is deployed in PDP group pdpGroup subgroup pdpType");
500
501         assertThatThrownBy(() -> databaseProvider.deletePolicy("p3", "0.0.1"))
502                 .hasMessageContaining("service template not found in database");
503
504         databaseProvider.close();
505     }
506
507     @Test
508     public void testDeletePolicyTypeSupportedInSubgroup() throws PfModelException {
509         List<ToscaConceptIdentifier> supportedPolicyTypes = new ArrayList<>();
510         supportedPolicyTypes.add(new ToscaConceptIdentifier("pt1", "0.0.1"));
511         supportedPolicyTypes.add(new ToscaConceptIdentifier("pt2", "0.0.1"));
512
513         PdpSubGroup subGroup = new PdpSubGroup();
514         subGroup.setPdpType("pdpType");
515         subGroup.setSupportedPolicyTypes(supportedPolicyTypes);
516
517         List<PdpSubGroup> pdpSubgroups = new ArrayList<>();
518         pdpSubgroups.add(subGroup);
519
520         PdpGroup pdpGroup = new PdpGroup();
521         pdpGroup.setName("pdpGroup");
522         pdpGroup.setPdpGroupState(PdpState.PASSIVE);
523         pdpGroup.setPdpSubgroups(pdpSubgroups);
524
525         List<PdpGroup> pdpGroups = new ArrayList<>();
526         pdpGroups.add(pdpGroup);
527
528         databaseProvider = new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
529
530         databaseProvider.createPdpGroups(pdpGroups);
531
532         assertThatThrownBy(() -> databaseProvider.deletePolicyType("pt2", "0.0.1"))
533                 .hasMessageContaining("policy type is in use, it is referenced in PDP group pdpGroup subgroup pdpType");
534
535         assertThatThrownBy(() -> databaseProvider.deletePolicyType("pt0", "0.0.1"))
536                 .hasMessageContaining("service template not found in database");
537
538         databaseProvider.close();
539     }
540
541     private List<PdpStatistics> makePdpStatisticsList() {
542         PdpStatistics pdpStatistics = new PdpStatistics();
543         pdpStatistics.setPdpInstanceId(NAME);
544         pdpStatistics.setTimeStamp(TIMESTAMP);
545         pdpStatistics.setPdpGroupName(GROUP);
546         pdpStatistics.setPdpSubGroupName("type");
547         List<PdpStatistics> statisticsArrayList = List.of(pdpStatistics);
548         return statisticsArrayList;
549     }
550 }