2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2019-2020 Nordix Foundation.
4 * Modifications Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
5 * ================================================================================
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
18 * SPDX-License-Identifier: Apache-2.0
19 * ============LICENSE_END=========================================================
22 package org.onap.policy.models.provider.impl;
24 import static org.assertj.core.api.Assertions.assertThatThrownBy;
25 import static org.junit.Assert.assertEquals;
26 import static org.junit.Assert.assertNotNull;
27 import static org.junit.Assert.assertTrue;
29 import java.util.ArrayList;
30 import java.util.Base64;
31 import java.util.Date;
32 import java.util.List;
33 import org.junit.Before;
34 import org.junit.Test;
35 import org.onap.policy.models.base.PfModelException;
36 import org.onap.policy.models.pdp.concepts.Pdp;
37 import org.onap.policy.models.pdp.concepts.PdpGroup;
38 import org.onap.policy.models.pdp.concepts.PdpGroupFilter;
39 import org.onap.policy.models.pdp.concepts.PdpStatistics;
40 import org.onap.policy.models.pdp.concepts.PdpSubGroup;
41 import org.onap.policy.models.pdp.enums.PdpHealthStatus;
42 import org.onap.policy.models.pdp.enums.PdpState;
43 import org.onap.policy.models.provider.PolicyModelsProvider;
44 import org.onap.policy.models.provider.PolicyModelsProviderFactory;
45 import org.onap.policy.models.provider.PolicyModelsProviderParameters;
46 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyFilter;
47 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyIdentifier;
48 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeFilter;
49 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifier;
50 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
51 import org.onap.policy.models.tosca.legacy.concepts.LegacyOperationalPolicy;
54 * Test the database models provider implementation.
56 * @author Liam Fallon (liam.fallon@est.tech)
58 public class DatabasePolicyModelsProviderTest {
59 private static final String NAME = "name";
61 private static final String TEMPLATE_IS_NULL = "^serviceTemplate is marked .*on.*ull but is null$";
63 private static final String POLICY_ID_IS_NULL = "^policyId is marked .*on.*ull but is null$";
65 private static final String SUBGROUP_IS_NULL = "^pdpSubGroup is marked .*on.*ull but is null$";
67 private static final String GROUP_IS_NULL = "^pdpGroupName is marked .*on.*ull but is null$";
69 private static final String NAME_IS_NULL = "^name is marked .*on.*ull but is null$";
71 private static final String FILTER_IS_NULL = "^filter is marked .*on.*ull but is null$";
73 private static final String POLICY_ID = "policy_id";
75 private static final String GROUP = "group";
77 private static final String VERSION_100 = "1.0.0";
79 private static final Date TIMESTAMP = new Date();
81 private static final String ORDER = "DESC";
83 PolicyModelsProviderParameters parameters;
86 * Initialize parameters.
89 public void setupParameters() {
90 parameters = new PolicyModelsProviderParameters();
91 parameters.setDatabaseDriver("org.h2.Driver");
92 parameters.setDatabaseUrl("jdbc:h2:mem:testdb");
93 parameters.setDatabaseUser("policy");
94 parameters.setDatabasePassword(Base64.getEncoder().encodeToString("P01icY".getBytes()));
95 parameters.setPersistenceUnit("ToscaConceptTest");
99 public void testInitAndClose() throws Exception {
100 assertThatThrownBy(() -> {
101 new DatabasePolicyModelsProviderImpl(null);
102 }).hasMessageMatching("^parameters is marked .*on.*ull but is null$");
104 PolicyModelsProvider databaseProvider =
105 new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
107 parameters.setDatabaseUrl("jdbc://www.acmecorp.nonexist");
109 databaseProvider.close();
110 databaseProvider.init();
112 databaseProvider.close();
114 parameters.setDatabaseUrl("jdbc:h2:mem:testdb");
116 parameters.setPersistenceUnit("WileECoyote");
118 assertThatThrownBy(databaseProvider::init).hasMessageContaining("could not create Data Access Object (DAO)");
120 parameters.setPersistenceUnit("ToscaConceptTest");
122 databaseProvider.init();
123 databaseProvider.close();
125 assertThatThrownBy(() -> {
126 databaseProvider.init();
127 databaseProvider.init();
128 }).hasMessage("provider is already initialized");
130 databaseProvider.close();
132 databaseProvider.close();
136 public void testProviderMethodsNull() throws Exception {
138 PolicyModelsProvider databaseProvider =
139 new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
141 assertThatThrownBy(() -> {
142 databaseProvider.getFilteredPolicyTypes(null);
143 }).hasMessageMatching(FILTER_IS_NULL);
145 assertThatThrownBy(() -> {
146 databaseProvider.getFilteredPolicyTypeList(null);
147 }).hasMessageMatching(FILTER_IS_NULL);
149 assertThatThrownBy(() -> {
150 databaseProvider.createPolicyTypes(null);
151 }).hasMessageMatching(TEMPLATE_IS_NULL);
153 assertThatThrownBy(() -> {
154 databaseProvider.updatePolicyTypes(null);
155 }).hasMessageMatching(TEMPLATE_IS_NULL);
157 assertThatThrownBy(() -> {
158 databaseProvider.deletePolicyType(null, null);
159 }).hasMessageMatching(NAME_IS_NULL);
161 assertThatThrownBy(() -> {
162 databaseProvider.deletePolicyType("aaa", null);
163 }).hasMessageMatching("^version is marked .*on.*ull but is null$");
165 assertThatThrownBy(() -> {
166 databaseProvider.deletePolicyType(null, "aaa");
167 }).hasMessageMatching(NAME_IS_NULL);
169 assertThatThrownBy(() -> {
170 databaseProvider.getFilteredPolicies(null);
171 }).hasMessageMatching(FILTER_IS_NULL);
173 assertThatThrownBy(() -> {
174 databaseProvider.getFilteredPolicyList(null);
175 }).hasMessageMatching(FILTER_IS_NULL);
177 assertThatThrownBy(() -> {
178 databaseProvider.createPolicies(null);
179 }).hasMessageMatching(TEMPLATE_IS_NULL);
181 assertThatThrownBy(() -> {
182 databaseProvider.updatePolicies(null);
183 }).hasMessageMatching(TEMPLATE_IS_NULL);
185 assertThatThrownBy(() -> {
186 databaseProvider.deletePolicy(null, null);
187 }).hasMessageMatching(NAME_IS_NULL);
189 assertThatThrownBy(() -> {
190 databaseProvider.deletePolicy(null, "aaa");
191 }).hasMessageMatching(NAME_IS_NULL);
193 assertThatThrownBy(() -> {
194 databaseProvider.deletePolicy("aaa", null);
195 }).hasMessageMatching("^version is marked .*on.*ull but is null$");
197 assertThatThrownBy(() -> {
198 databaseProvider.getOperationalPolicy(null, null);
199 }).hasMessageMatching(POLICY_ID_IS_NULL);
201 assertThatThrownBy(() -> {
202 databaseProvider.getOperationalPolicy(null, "");
203 }).hasMessageMatching(POLICY_ID_IS_NULL);
205 assertThatThrownBy(() -> {
206 databaseProvider.getOperationalPolicy("", null);
207 }).hasMessage("service template not found in database");
209 assertThatThrownBy(() -> {
210 databaseProvider.createOperationalPolicy(null);
211 }).hasMessageMatching("^legacyOperationalPolicy is marked .*on.*ull but is null$");
213 assertThatThrownBy(() -> {
214 databaseProvider.updateOperationalPolicy(null);
215 }).hasMessageMatching("^legacyOperationalPolicy is marked .*on.*ull but is null$");
217 assertThatThrownBy(() -> {
218 databaseProvider.deleteOperationalPolicy(null, null);
219 }).hasMessageMatching(POLICY_ID_IS_NULL);
221 assertThatThrownBy(() -> {
222 databaseProvider.deleteOperationalPolicy(null, "");
223 }).hasMessageMatching(POLICY_ID_IS_NULL);
225 assertThatThrownBy(() -> {
226 databaseProvider.deleteOperationalPolicy("", null);
227 }).hasMessageMatching("^policyVersion is marked .*on.*ull but is null$");
229 assertThatThrownBy(() -> {
230 databaseProvider.getFilteredPdpGroups(null);
231 }).hasMessageMatching(FILTER_IS_NULL);
233 assertThatThrownBy(() -> {
234 databaseProvider.createPdpGroups(null);
235 }).hasMessageMatching("^pdpGroups is marked .*on.*ull but is null$");
237 assertThatThrownBy(() -> {
238 databaseProvider.updatePdpGroups(null);
239 }).hasMessageMatching("^pdpGroups is marked .*on.*ull but is null$");
241 assertThatThrownBy(() -> {
242 databaseProvider.updatePdpSubGroup(null, null);
243 }).hasMessageMatching(GROUP_IS_NULL);
245 assertThatThrownBy(() -> {
246 databaseProvider.updatePdpSubGroup(null, new PdpSubGroup());
247 }).hasMessageMatching(GROUP_IS_NULL);
249 assertThatThrownBy(() -> {
250 databaseProvider.updatePdpSubGroup(NAME, null);
251 }).hasMessageMatching(SUBGROUP_IS_NULL);
253 assertThatThrownBy(() -> {
254 databaseProvider.updatePdpSubGroup(NAME, new PdpSubGroup());
255 }).hasMessage("parameter \"localName\" is null");
257 assertThatThrownBy(() -> {
258 databaseProvider.updatePdp(null, null, null);
259 }).hasMessageMatching(GROUP_IS_NULL);
261 assertThatThrownBy(() -> {
262 databaseProvider.updatePdp(null, null, new Pdp());
263 }).hasMessageMatching(GROUP_IS_NULL);
265 assertThatThrownBy(() -> {
266 databaseProvider.updatePdp(null, "sub", null);
267 }).hasMessageMatching(GROUP_IS_NULL);
269 assertThatThrownBy(() -> {
270 databaseProvider.updatePdp(null, "sub", new Pdp());
271 }).hasMessageMatching(GROUP_IS_NULL);
273 assertThatThrownBy(() -> {
274 databaseProvider.updatePdp(NAME, null, null);
275 }).hasMessageMatching(SUBGROUP_IS_NULL);
277 assertThatThrownBy(() -> {
278 databaseProvider.updatePdp(NAME, null, new Pdp());
279 }).hasMessageMatching(SUBGROUP_IS_NULL);
281 assertThatThrownBy(() -> {
282 databaseProvider.updatePdp(NAME, "sub", null);
283 }).hasMessageMatching("^pdp is marked .*on.*ull but is null$");
285 assertThatThrownBy(() -> {
286 databaseProvider.updatePdp(NAME, "sub", new Pdp());
287 }).hasMessage("parameter \"localName\" is null");
289 assertThatThrownBy(() -> {
290 databaseProvider.deletePdpGroup(null);
291 }).hasMessageMatching(NAME_IS_NULL);
293 assertThatThrownBy(() -> {
294 databaseProvider.getFilteredPdpStatistics(NAME, null, "sub", TIMESTAMP, TIMESTAMP, ORDER, 0);
295 }).hasMessageMatching(GROUP_IS_NULL);
297 assertThatThrownBy(() -> {
298 databaseProvider.createPdpStatistics(null);
299 }).hasMessageMatching("^pdpStatisticsList is marked .*on.*ull but is null$");
301 assertThatThrownBy(() -> {
302 databaseProvider.updatePdpStatistics(null);
303 }).hasMessageMatching("^pdpStatisticsList is marked .*on.*ull but is null$");
305 assertThatThrownBy(() -> {
306 databaseProvider.deletePdpStatistics(null, TIMESTAMP);
307 }).hasMessageMatching(NAME_IS_NULL);
309 databaseProvider.close();
313 public void testProviderMethodsNotInit() throws Exception {
314 PolicyModelsProvider databaseProvider =
315 new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
317 databaseProvider.close();
319 assertThatThrownBy(() -> {
320 databaseProvider.getPolicyTypes(NAME, "version");
321 }).hasMessage("policy models provider is not initilaized");
325 public void testProviderMethods() throws PfModelException {
326 PolicyModelsProvider databaseProvider =
327 new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
329 assertThatThrownBy(() -> databaseProvider.getPolicyTypes(NAME, VERSION_100))
330 .hasMessage("service template not found in database");
332 assertTrue(databaseProvider.getPolicyTypeList(NAME, VERSION_100).isEmpty());
334 assertThatThrownBy(() -> databaseProvider.getFilteredPolicyTypes(ToscaPolicyTypeFilter.builder().build()))
335 .hasMessage("service template not found in database");
337 assertTrue(databaseProvider.getFilteredPolicyTypeList(ToscaPolicyTypeFilter.builder().build()).isEmpty());
339 assertThatThrownBy(() -> {
340 databaseProvider.createPolicyTypes(new ToscaServiceTemplate());
341 }).hasMessage("no policy types specified on service template");
343 assertThatThrownBy(() -> {
344 databaseProvider.updatePolicyTypes(new ToscaServiceTemplate());
345 }).hasMessage("no policy types specified on service template");
347 assertThatThrownBy(() -> databaseProvider.deletePolicyType(NAME, VERSION_100))
348 .hasMessage("service template not found in database");
350 assertThatThrownBy(() -> databaseProvider.getPolicies(NAME, VERSION_100))
351 .hasMessage("service template not found in database");
353 assertTrue(databaseProvider.getPolicyList(NAME, VERSION_100).isEmpty());
355 assertThatThrownBy(() -> databaseProvider.getFilteredPolicies(ToscaPolicyFilter.builder().build()))
356 .hasMessage("service template not found in database");
358 assertTrue(databaseProvider.getFilteredPolicyList(ToscaPolicyFilter.builder().build()).isEmpty());
360 assertThatThrownBy(() -> {
361 databaseProvider.createPolicies(new ToscaServiceTemplate());
362 }).hasMessage("topology template not specified on service template");
364 assertThatThrownBy(() -> {
365 databaseProvider.updatePolicies(new ToscaServiceTemplate());
366 }).hasMessage("topology template not specified on service template");
368 assertThatThrownBy(() -> databaseProvider.deletePolicy("Policy", "0.0.0").getToscaTopologyTemplate())
369 .hasMessage("service template not found in database");
371 assertThatThrownBy(() -> {
372 databaseProvider.getOperationalPolicy(POLICY_ID, null);
373 }).hasMessage("service template not found in database");
375 assertThatThrownBy(() -> {
376 databaseProvider.getOperationalPolicy(POLICY_ID, "10");
377 }).hasMessage("service template not found in database");
379 assertThatThrownBy(() -> {
380 databaseProvider.createOperationalPolicy(new LegacyOperationalPolicy());
381 }).hasMessageMatching(NAME_IS_NULL);
383 assertThatThrownBy(() -> {
384 databaseProvider.updateOperationalPolicy(new LegacyOperationalPolicy());
385 }).hasMessageMatching(NAME_IS_NULL);
387 assertThatThrownBy(() -> {
388 databaseProvider.deleteOperationalPolicy(POLICY_ID, "55");
389 }).hasMessage("service template not found in database");
391 assertEquals(0, databaseProvider.getPdpGroups(NAME).size());
392 assertEquals(0, databaseProvider.getFilteredPdpGroups(PdpGroupFilter.builder().build()).size());
394 assertNotNull(databaseProvider.createPdpGroups(new ArrayList<>()));
395 assertNotNull(databaseProvider.updatePdpGroups(new ArrayList<>()));
397 PdpGroup pdpGroup = new PdpGroup();
398 pdpGroup.setName(GROUP);
399 pdpGroup.setVersion("1.2.3");
400 pdpGroup.setPdpGroupState(PdpState.ACTIVE);
401 pdpGroup.setPdpSubgroups(new ArrayList<>());
402 List<PdpGroup> groupList = new ArrayList<>();
403 groupList.add(pdpGroup);
405 PdpSubGroup pdpSubGroup = new PdpSubGroup();
406 pdpSubGroup.setPdpType("type");
407 pdpSubGroup.setDesiredInstanceCount(123);
408 pdpSubGroup.setSupportedPolicyTypes(new ArrayList<>());
409 pdpSubGroup.getSupportedPolicyTypes().add(new ToscaPolicyTypeIdentifier("type", "7.8.9"));
410 pdpGroup.getPdpSubgroups().add(pdpSubGroup);
413 pdp.setInstanceId("type-0");
414 pdp.setMessage("Hello");
415 pdp.setPdpState(PdpState.ACTIVE);
416 pdp.setHealthy(PdpHealthStatus.UNKNOWN);
417 pdpSubGroup.setPdpInstances(new ArrayList<>());
418 pdpSubGroup.getPdpInstances().add(pdp);
420 PdpStatistics pdpStatistics = new PdpStatistics();
421 pdpStatistics.setPdpInstanceId(NAME);
422 pdpStatistics.setTimeStamp(new Date());
423 pdpStatistics.setPdpGroupName(GROUP);
424 pdpStatistics.setPdpSubGroupName("type");
425 ArrayList<PdpStatistics> statisticsArrayList = new ArrayList<>();
426 statisticsArrayList.add(pdpStatistics);
429 databaseProvider.createPdpGroups(groupList).get(0).getPdpSubgroups().get(0).getDesiredInstanceCount());
430 assertEquals(1, databaseProvider.getPdpGroups(GROUP).size());
432 pdpSubGroup.setDesiredInstanceCount(234);
433 databaseProvider.updatePdpSubGroup(GROUP, pdpSubGroup);
435 databaseProvider.getPdpGroups(GROUP).get(0).getPdpSubgroups().get(0).getDesiredInstanceCount());
437 assertEquals("Hello",
438 databaseProvider.getPdpGroups(GROUP).get(0).getPdpSubgroups().get(0).getPdpInstances().get(0).getMessage());
439 pdp.setMessage("Howdy");
440 databaseProvider.updatePdp(GROUP, "type", pdp);
441 assertEquals("Howdy",
442 databaseProvider.getPdpGroups(GROUP).get(0).getPdpSubgroups().get(0).getPdpInstances().get(0).getMessage());
444 assertThatThrownBy(() -> {
445 databaseProvider.deletePdpGroup(NAME);
446 }).hasMessage("delete of PDP group \"name:0.0.0\" failed, PDP group does not exist");
448 assertEquals(pdpGroup.getName(), databaseProvider.deletePdpGroup(GROUP).getName());
450 assertEquals(0, databaseProvider.getPdpStatistics(null, null).size());
451 assertEquals(1, databaseProvider.createPdpStatistics(statisticsArrayList).size());
452 assertEquals(1, databaseProvider.updatePdpStatistics(statisticsArrayList).size());
454 assertEquals(NAME, databaseProvider.getPdpStatistics(null, null).get(0).getPdpInstanceId());
455 assertEquals(NAME, databaseProvider.getFilteredPdpStatistics(null, GROUP, null, null, null, ORDER, 0).get(0)
456 .getPdpInstanceId());
458 databaseProvider.getFilteredPdpStatistics(null, GROUP, null, new Date(), null, ORDER, 0).size());
459 assertEquals(NAME, databaseProvider.getFilteredPdpStatistics(null, GROUP, null, null, new Date(), ORDER, 0)
460 .get(0).getPdpInstanceId());
462 databaseProvider.getFilteredPdpStatistics(null, GROUP, null, new Date(), new Date(), ORDER, 0).size());
464 assertEquals(NAME, databaseProvider.getFilteredPdpStatistics(NAME, GROUP, null, null, null, ORDER, 0).get(0)
465 .getPdpInstanceId());
467 databaseProvider.getFilteredPdpStatistics(NAME, GROUP, null, new Date(), new Date(), ORDER, 0).size());
469 assertEquals(NAME, databaseProvider.getFilteredPdpStatistics(NAME, GROUP, "type", null, null, ORDER, 0).get(0)
470 .getPdpInstanceId());
472 databaseProvider.getFilteredPdpStatistics(NAME, GROUP, "type", new Date(), new Date(), ORDER, 0).size());
474 assertEquals(NAME, databaseProvider.getFilteredPdpStatistics(NAME, GROUP, "type", null, null, ORDER, 1).get(0)
475 .getPdpInstanceId());
476 assertEquals(NAME, databaseProvider.getFilteredPdpStatistics(NAME, GROUP, "type", null, null, ORDER, 5).get(0)
477 .getPdpInstanceId());
479 databaseProvider.getFilteredPdpStatistics(NAME, GROUP, "type", new Date(), new Date(), ORDER, 5).size());
481 assertEquals(NAME, databaseProvider.deletePdpStatistics(NAME, null).get(0).getPdpInstanceId());
482 assertEquals(0, databaseProvider.getPdpStatistics(null, null).size());
484 databaseProvider.close();
488 public void testDeletePolicyDeployedInSubgroup() throws PfModelException {
489 List<ToscaPolicyIdentifier> policies = new ArrayList<>();
491 policies.add(new ToscaPolicyIdentifier("p0", "0.0.1"));
492 policies.add(new ToscaPolicyIdentifier("p1", "0.0.1"));
494 List<ToscaPolicyTypeIdentifier> supportedPolicyTypes = new ArrayList<>();
495 supportedPolicyTypes.add(new ToscaPolicyTypeIdentifier("pt2", "0.0.1"));
497 PdpSubGroup subGroup = new PdpSubGroup();
498 subGroup.setPdpType("pdpType");
499 subGroup.setSupportedPolicyTypes(supportedPolicyTypes);
500 subGroup.setPolicies(policies);
502 List<PdpSubGroup> pdpSubgroups = new ArrayList<>();
503 pdpSubgroups.add(subGroup);
505 PdpGroup pdpGroup = new PdpGroup();
506 pdpGroup.setName("pdpGroup");
507 pdpGroup.setPdpGroupState(PdpState.PASSIVE);
508 pdpGroup.setPdpSubgroups(pdpSubgroups);
510 List<PdpGroup> pdpGroups = new ArrayList<>();
511 pdpGroups.add(pdpGroup);
513 PolicyModelsProvider databaseProvider =
514 new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
516 databaseProvider.createPdpGroups(pdpGroups);
518 assertThatThrownBy(() -> databaseProvider.deletePolicy("p0", "0.0.1"))
519 .hasMessageContaining("policy is in use, it is deployed in PDP group pdpGroup subgroup pdpType");
521 assertThatThrownBy(() -> databaseProvider.deletePolicy("p3", "0.0.1"))
522 .hasMessageContaining("service template not found in database");
524 databaseProvider.close();
528 public void testDeletePolicyTypeSupportedInSubgroup() throws PfModelException {
529 List<ToscaPolicyTypeIdentifier> supportedPolicyTypes = new ArrayList<>();
530 supportedPolicyTypes.add(new ToscaPolicyTypeIdentifier("pt1", "0.0.1"));
531 supportedPolicyTypes.add(new ToscaPolicyTypeIdentifier("pt2", "0.0.1"));
533 PdpSubGroup subGroup = new PdpSubGroup();
534 subGroup.setPdpType("pdpType");
535 subGroup.setSupportedPolicyTypes(supportedPolicyTypes);
537 List<PdpSubGroup> pdpSubgroups = new ArrayList<>();
538 pdpSubgroups.add(subGroup);
540 PdpGroup pdpGroup = new PdpGroup();
541 pdpGroup.setName("pdpGroup");
542 pdpGroup.setPdpGroupState(PdpState.PASSIVE);
543 pdpGroup.setPdpSubgroups(pdpSubgroups);
545 List<PdpGroup> pdpGroups = new ArrayList<>();
546 pdpGroups.add(pdpGroup);
548 PolicyModelsProvider databaseProvider =
549 new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
551 databaseProvider.createPdpGroups(pdpGroups);
553 assertThatThrownBy(() -> databaseProvider.deletePolicyType("pt2", "0.0.1"))
554 .hasMessageContaining("policy type is in use, it is referenced in PDP group pdpGroup subgroup pdpType");
556 assertThatThrownBy(() -> databaseProvider.deletePolicyType("pt0", "0.0.1"))
557 .hasMessageContaining("service template not found in database");
559 databaseProvider.close();