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;
34 import org.junit.Before;
35 import org.junit.Test;
36 import org.onap.policy.models.base.PfModelException;
37 import org.onap.policy.models.pdp.concepts.Pdp;
38 import org.onap.policy.models.pdp.concepts.PdpGroup;
39 import org.onap.policy.models.pdp.concepts.PdpGroupFilter;
40 import org.onap.policy.models.pdp.concepts.PdpStatistics;
41 import org.onap.policy.models.pdp.concepts.PdpSubGroup;
42 import org.onap.policy.models.pdp.enums.PdpHealthStatus;
43 import org.onap.policy.models.pdp.enums.PdpState;
44 import org.onap.policy.models.provider.PolicyModelsProvider;
45 import org.onap.policy.models.provider.PolicyModelsProviderFactory;
46 import org.onap.policy.models.provider.PolicyModelsProviderParameters;
47 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyFilter;
48 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyIdentifier;
49 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeFilter;
50 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifier;
51 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
52 import org.onap.policy.models.tosca.legacy.concepts.LegacyOperationalPolicy;
55 * Test the database models provider implementation.
57 * @author Liam Fallon (liam.fallon@est.tech)
59 public class DatabasePolicyModelsProviderTest {
60 private static final String NAME = "name";
62 private static final String TEMPLATE_IS_NULL = "^serviceTemplate is marked .*on.*ull but is null$";
64 private static final String POLICY_ID_IS_NULL = "^policyId is marked .*on.*ull but is null$";
66 private static final String SUBGROUP_IS_NULL = "^pdpSubGroup is marked .*on.*ull but is null$";
68 private static final String GROUP_IS_NULL = "^pdpGroupName is marked .*on.*ull but is null$";
70 private static final String NAME_IS_NULL = "^name is marked .*on.*ull but is null$";
72 private static final String FILTER_IS_NULL = "^filter is marked .*on.*ull but is null$";
74 private static final String POLICY_ID = "policy_id";
76 private static final String GROUP = "group";
78 private static final String VERSION_100 = "1.0.0";
80 private static final Date TIMESTAMP = new Date();
82 private static final String ORDER = "DESC";
84 PolicyModelsProviderParameters parameters;
87 * Initialize parameters.
90 public void setupParameters() {
91 parameters = new PolicyModelsProviderParameters();
92 parameters.setDatabaseDriver("org.h2.Driver");
93 parameters.setDatabaseUrl("jdbc:h2:mem:testdb");
94 parameters.setDatabaseUser("policy");
95 parameters.setDatabasePassword(Base64.getEncoder().encodeToString("P01icY".getBytes()));
96 parameters.setPersistenceUnit("ToscaConceptTest");
100 public void testInitAndClose() throws Exception {
101 assertThatThrownBy(() -> {
102 new DatabasePolicyModelsProviderImpl(null);
103 }).hasMessageMatching("^parameters is marked .*on.*ull but is null$");
105 PolicyModelsProvider databaseProvider =
106 new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
108 parameters.setDatabaseUrl("jdbc://www.acmecorp.nonexist");
110 databaseProvider.close();
111 databaseProvider.init();
113 databaseProvider.close();
115 parameters.setDatabaseUrl("jdbc:h2:mem:testdb");
117 parameters.setPersistenceUnit("WileECoyote");
119 assertThatThrownBy(databaseProvider::init).hasMessageContaining("could not create Data Access Object (DAO)");
121 parameters.setPersistenceUnit("ToscaConceptTest");
123 databaseProvider.init();
124 databaseProvider.close();
126 assertThatThrownBy(() -> {
127 databaseProvider.init();
128 databaseProvider.init();
129 }).hasMessage("provider is already initialized");
131 databaseProvider.close();
133 databaseProvider.close();
137 public void testProviderMethodsNull() throws Exception {
139 PolicyModelsProvider databaseProvider =
140 new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
142 assertThatThrownBy(() -> {
143 databaseProvider.getFilteredPolicyTypes(null);
144 }).hasMessageMatching(FILTER_IS_NULL);
146 assertThatThrownBy(() -> {
147 databaseProvider.getFilteredPolicyTypeList(null);
148 }).hasMessageMatching(FILTER_IS_NULL);
150 assertThatThrownBy(() -> {
151 databaseProvider.createPolicyTypes(null);
152 }).hasMessageMatching(TEMPLATE_IS_NULL);
154 assertThatThrownBy(() -> {
155 databaseProvider.updatePolicyTypes(null);
156 }).hasMessageMatching(TEMPLATE_IS_NULL);
158 assertThatThrownBy(() -> {
159 databaseProvider.deletePolicyType(null, null);
160 }).hasMessageMatching(NAME_IS_NULL);
162 assertThatThrownBy(() -> {
163 databaseProvider.deletePolicyType("aaa", null);
164 }).hasMessageMatching("^version is marked .*on.*ull but is null$");
166 assertThatThrownBy(() -> {
167 databaseProvider.deletePolicyType(null, "aaa");
168 }).hasMessageMatching(NAME_IS_NULL);
170 assertThatThrownBy(() -> {
171 databaseProvider.getFilteredPolicies(null);
172 }).hasMessageMatching(FILTER_IS_NULL);
174 assertThatThrownBy(() -> {
175 databaseProvider.getFilteredPolicyList(null);
176 }).hasMessageMatching(FILTER_IS_NULL);
178 assertThatThrownBy(() -> {
179 databaseProvider.createPolicies(null);
180 }).hasMessageMatching(TEMPLATE_IS_NULL);
182 assertThatThrownBy(() -> {
183 databaseProvider.updatePolicies(null);
184 }).hasMessageMatching(TEMPLATE_IS_NULL);
186 assertThatThrownBy(() -> {
187 databaseProvider.deletePolicy(null, null);
188 }).hasMessageMatching(NAME_IS_NULL);
190 assertThatThrownBy(() -> {
191 databaseProvider.deletePolicy(null, "aaa");
192 }).hasMessageMatching(NAME_IS_NULL);
194 assertThatThrownBy(() -> {
195 databaseProvider.deletePolicy("aaa", null);
196 }).hasMessageMatching("^version is marked .*on.*ull but is null$");
198 assertThatThrownBy(() -> {
199 databaseProvider.getOperationalPolicy(null, null);
200 }).hasMessageMatching(POLICY_ID_IS_NULL);
202 assertThatThrownBy(() -> {
203 databaseProvider.getOperationalPolicy(null, "");
204 }).hasMessageMatching(POLICY_ID_IS_NULL);
206 assertThatThrownBy(() -> {
207 databaseProvider.getOperationalPolicy("", null);
208 }).hasMessage("service template not found in database");
210 assertThatThrownBy(() -> {
211 databaseProvider.createOperationalPolicy(null);
212 }).hasMessageMatching("^legacyOperationalPolicy is marked .*on.*ull but is null$");
214 assertThatThrownBy(() -> {
215 databaseProvider.updateOperationalPolicy(null);
216 }).hasMessageMatching("^legacyOperationalPolicy is marked .*on.*ull but is null$");
218 assertThatThrownBy(() -> {
219 databaseProvider.deleteOperationalPolicy(null, null);
220 }).hasMessageMatching(POLICY_ID_IS_NULL);
222 assertThatThrownBy(() -> {
223 databaseProvider.deleteOperationalPolicy(null, "");
224 }).hasMessageMatching(POLICY_ID_IS_NULL);
226 assertThatThrownBy(() -> {
227 databaseProvider.deleteOperationalPolicy("", null);
228 }).hasMessageMatching("^policyVersion is marked .*on.*ull but is null$");
230 assertThatThrownBy(() -> {
231 databaseProvider.getFilteredPdpGroups(null);
232 }).hasMessageMatching(FILTER_IS_NULL);
234 assertThatThrownBy(() -> {
235 databaseProvider.createPdpGroups(null);
236 }).hasMessageMatching("^pdpGroups is marked .*on.*ull but is null$");
238 assertThatThrownBy(() -> {
239 databaseProvider.updatePdpGroups(null);
240 }).hasMessageMatching("^pdpGroups is marked .*on.*ull but is null$");
242 assertThatThrownBy(() -> {
243 databaseProvider.updatePdpSubGroup(null, null);
244 }).hasMessageMatching(GROUP_IS_NULL);
246 assertThatThrownBy(() -> {
247 databaseProvider.updatePdpSubGroup(null, new PdpSubGroup());
248 }).hasMessageMatching(GROUP_IS_NULL);
250 assertThatThrownBy(() -> {
251 databaseProvider.updatePdpSubGroup(NAME, null);
252 }).hasMessageMatching(SUBGROUP_IS_NULL);
254 assertThatThrownBy(() -> {
255 databaseProvider.updatePdpSubGroup(NAME, new PdpSubGroup());
256 }).hasMessage("parameter \"localName\" is null");
258 assertThatThrownBy(() -> {
259 databaseProvider.updatePdp(null, null, null);
260 }).hasMessageMatching(GROUP_IS_NULL);
262 assertThatThrownBy(() -> {
263 databaseProvider.updatePdp(null, null, new Pdp());
264 }).hasMessageMatching(GROUP_IS_NULL);
266 assertThatThrownBy(() -> {
267 databaseProvider.updatePdp(null, "sub", null);
268 }).hasMessageMatching(GROUP_IS_NULL);
270 assertThatThrownBy(() -> {
271 databaseProvider.updatePdp(null, "sub", new Pdp());
272 }).hasMessageMatching(GROUP_IS_NULL);
274 assertThatThrownBy(() -> {
275 databaseProvider.updatePdp(NAME, null, null);
276 }).hasMessageMatching(SUBGROUP_IS_NULL);
278 assertThatThrownBy(() -> {
279 databaseProvider.updatePdp(NAME, null, new Pdp());
280 }).hasMessageMatching(SUBGROUP_IS_NULL);
282 assertThatThrownBy(() -> {
283 databaseProvider.updatePdp(NAME, "sub", null);
284 }).hasMessageMatching("^pdp is marked .*on.*ull but is null$");
286 assertThatThrownBy(() -> {
287 databaseProvider.updatePdp(NAME, "sub", new Pdp());
288 }).hasMessage("parameter \"localName\" is null");
290 assertThatThrownBy(() -> {
291 databaseProvider.deletePdpGroup(null);
292 }).hasMessageMatching(NAME_IS_NULL);
294 assertThatThrownBy(() -> {
295 databaseProvider.getFilteredPdpStatistics(NAME, null, "sub", TIMESTAMP, TIMESTAMP, ORDER, 0);
296 }).hasMessageMatching(GROUP_IS_NULL);
298 assertThatThrownBy(() -> {
299 databaseProvider.createPdpStatistics(null);
300 }).hasMessageMatching("^pdpStatisticsList is marked .*on.*ull but is null$");
302 assertThatThrownBy(() -> {
303 databaseProvider.updatePdpStatistics(null);
304 }).hasMessageMatching("^pdpStatisticsList is marked .*on.*ull but is null$");
306 assertThatThrownBy(() -> {
307 databaseProvider.deletePdpStatistics(null, TIMESTAMP);
308 }).hasMessageMatching(NAME_IS_NULL);
310 databaseProvider.close();
314 public void testProviderMethodsNotInit() throws Exception {
315 PolicyModelsProvider databaseProvider =
316 new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
318 databaseProvider.close();
320 assertThatThrownBy(() -> {
321 databaseProvider.getPolicyTypes(NAME, "version");
322 }).hasMessage("policy models provider is not initilaized");
326 public void testProviderMethods() throws PfModelException {
327 PolicyModelsProvider databaseProvider =
328 new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
330 assertThatThrownBy(() -> databaseProvider.getPolicyTypes(NAME, VERSION_100))
331 .hasMessage("service template not found in database");
333 assertTrue(databaseProvider.getPolicyTypeList(NAME, VERSION_100).isEmpty());
335 assertThatThrownBy(() -> databaseProvider.getFilteredPolicyTypes(ToscaPolicyTypeFilter.builder().build()))
336 .hasMessage("service template not found in database");
338 assertTrue(databaseProvider.getFilteredPolicyTypeList(ToscaPolicyTypeFilter.builder().build()).isEmpty());
340 assertThatThrownBy(() -> {
341 databaseProvider.createPolicyTypes(new ToscaServiceTemplate());
342 }).hasMessage("no policy types specified on service template");
344 assertThatThrownBy(() -> {
345 databaseProvider.updatePolicyTypes(new ToscaServiceTemplate());
346 }).hasMessage("no policy types specified on service template");
348 assertThatThrownBy(() -> databaseProvider.deletePolicyType(NAME, VERSION_100))
349 .hasMessage("service template not found in database");
351 assertThatThrownBy(() -> databaseProvider.getPolicies(NAME, VERSION_100))
352 .hasMessage("service template not found in database");
354 assertTrue(databaseProvider.getPolicyList(NAME, VERSION_100).isEmpty());
356 assertThatThrownBy(() -> databaseProvider.getFilteredPolicies(ToscaPolicyFilter.builder().build()))
357 .hasMessage("service template not found in database");
359 assertTrue(databaseProvider.getFilteredPolicyList(ToscaPolicyFilter.builder().build()).isEmpty());
361 assertThatThrownBy(() -> {
362 databaseProvider.createPolicies(new ToscaServiceTemplate());
363 }).hasMessage("topology template not specified on service template");
365 assertThatThrownBy(() -> {
366 databaseProvider.updatePolicies(new ToscaServiceTemplate());
367 }).hasMessage("topology template not specified on service template");
369 assertThatThrownBy(() -> databaseProvider.deletePolicy("Policy", "0.0.0").getToscaTopologyTemplate())
370 .hasMessage("service template not found in database");
372 assertThatThrownBy(() -> {
373 databaseProvider.getOperationalPolicy(POLICY_ID, null);
374 }).hasMessage("service template not found in database");
376 assertThatThrownBy(() -> {
377 databaseProvider.getOperationalPolicy(POLICY_ID, "10");
378 }).hasMessage("service template not found in database");
380 assertThatThrownBy(() -> {
381 databaseProvider.createOperationalPolicy(new LegacyOperationalPolicy());
382 }).hasMessageMatching(NAME_IS_NULL);
384 assertThatThrownBy(() -> {
385 databaseProvider.updateOperationalPolicy(new LegacyOperationalPolicy());
386 }).hasMessageMatching(NAME_IS_NULL);
388 assertThatThrownBy(() -> {
389 databaseProvider.deleteOperationalPolicy(POLICY_ID, "55");
390 }).hasMessage("service template not found in database");
392 assertEquals(0, databaseProvider.getPdpGroups(NAME).size());
393 assertEquals(0, databaseProvider.getFilteredPdpGroups(PdpGroupFilter.builder().build()).size());
395 assertNotNull(databaseProvider.createPdpGroups(new ArrayList<>()));
396 assertNotNull(databaseProvider.updatePdpGroups(new ArrayList<>()));
398 PdpGroup pdpGroup = new PdpGroup();
399 pdpGroup.setName(GROUP);
400 pdpGroup.setVersion("1.2.3");
401 pdpGroup.setPdpGroupState(PdpState.ACTIVE);
402 pdpGroup.setPdpSubgroups(new ArrayList<>());
403 List<PdpGroup> groupList = new ArrayList<>();
404 groupList.add(pdpGroup);
406 PdpSubGroup pdpSubGroup = new PdpSubGroup();
407 pdpSubGroup.setPdpType("type");
408 pdpSubGroup.setDesiredInstanceCount(123);
409 pdpSubGroup.setSupportedPolicyTypes(new ArrayList<>());
410 pdpSubGroup.getSupportedPolicyTypes().add(new ToscaPolicyTypeIdentifier("type", "7.8.9"));
411 pdpGroup.getPdpSubgroups().add(pdpSubGroup);
414 pdp.setInstanceId("type-0");
415 pdp.setMessage("Hello");
416 pdp.setPdpState(PdpState.ACTIVE);
417 pdp.setHealthy(PdpHealthStatus.UNKNOWN);
418 pdpSubGroup.setPdpInstances(new ArrayList<>());
419 pdpSubGroup.getPdpInstances().add(pdp);
421 PdpStatistics pdpStatistics = new PdpStatistics();
422 pdpStatistics.setPdpInstanceId(NAME);
423 pdpStatistics.setTimeStamp(new Date());
424 pdpStatistics.setPdpGroupName(GROUP);
425 pdpStatistics.setPdpSubGroupName("type");
426 ArrayList<PdpStatistics> statisticsArrayList = new ArrayList<>();
427 statisticsArrayList.add(pdpStatistics);
430 databaseProvider.createPdpGroups(groupList).get(0).getPdpSubgroups().get(0).getDesiredInstanceCount());
431 assertEquals(1, databaseProvider.getPdpGroups(GROUP).size());
433 pdpSubGroup.setDesiredInstanceCount(234);
434 databaseProvider.updatePdpSubGroup(GROUP, pdpSubGroup);
436 databaseProvider.getPdpGroups(GROUP).get(0).getPdpSubgroups().get(0).getDesiredInstanceCount());
438 assertEquals("Hello",
439 databaseProvider.getPdpGroups(GROUP).get(0).getPdpSubgroups().get(0).getPdpInstances().get(0).getMessage());
440 pdp.setMessage("Howdy");
441 databaseProvider.updatePdp(GROUP, "type", pdp);
442 assertEquals("Howdy",
443 databaseProvider.getPdpGroups(GROUP).get(0).getPdpSubgroups().get(0).getPdpInstances().get(0).getMessage());
445 assertThatThrownBy(() -> {
446 databaseProvider.deletePdpGroup(NAME);
447 }).hasMessage("delete of PDP group \"name:0.0.0\" failed, PDP group does not exist");
449 assertEquals(pdpGroup.getName(), databaseProvider.deletePdpGroup(GROUP).getName());
451 assertEquals(0, databaseProvider.getPdpStatistics(null, null).size());
452 assertEquals(1, databaseProvider.createPdpStatistics(statisticsArrayList).size());
453 assertEquals(1, databaseProvider.updatePdpStatistics(statisticsArrayList).size());
455 assertEquals(NAME, databaseProvider.getPdpStatistics(null, null).get(0).getPdpInstanceId());
456 assertEquals(NAME, databaseProvider.getFilteredPdpStatistics(null, GROUP, null, null, null, ORDER, 0).get(0)
457 .getPdpInstanceId());
459 databaseProvider.getFilteredPdpStatistics(null, GROUP, null, new Date(), null, ORDER, 0).size());
460 assertEquals(NAME, databaseProvider.getFilteredPdpStatistics(null, GROUP, null, null, new Date(), ORDER, 0)
461 .get(0).getPdpInstanceId());
463 databaseProvider.getFilteredPdpStatistics(null, GROUP, null, new Date(), new Date(), ORDER, 0).size());
465 assertEquals(NAME, databaseProvider.getFilteredPdpStatistics(NAME, GROUP, null, null, null, ORDER, 0).get(0)
466 .getPdpInstanceId());
468 databaseProvider.getFilteredPdpStatistics(NAME, GROUP, null, new Date(), new Date(), ORDER, 0).size());
470 assertEquals(NAME, databaseProvider.getFilteredPdpStatistics(NAME, GROUP, "type", null, null, ORDER, 0).get(0)
471 .getPdpInstanceId());
473 databaseProvider.getFilteredPdpStatistics(NAME, GROUP, "type", new Date(), new Date(), ORDER, 0).size());
475 assertEquals(NAME, databaseProvider.getFilteredPdpStatistics(NAME, GROUP, "type", null, null, ORDER, 1).get(0)
476 .getPdpInstanceId());
477 assertEquals(NAME, databaseProvider.getFilteredPdpStatistics(NAME, GROUP, "type", null, null, ORDER, 5).get(0)
478 .getPdpInstanceId());
480 databaseProvider.getFilteredPdpStatistics(NAME, GROUP, "type", new Date(), new Date(), ORDER, 5).size());
482 assertEquals(NAME, databaseProvider.deletePdpStatistics(NAME, null).get(0).getPdpInstanceId());
483 assertEquals(0, databaseProvider.getPdpStatistics(null, null).size());
485 databaseProvider.close();
489 public void testDeletePolicyDeployedInSubgroup() throws PfModelException {
490 List<ToscaPolicyIdentifier> policies = new ArrayList<>();
492 policies.add(new ToscaPolicyIdentifier("p0", "0.0.1"));
493 policies.add(new ToscaPolicyIdentifier("p1", "0.0.1"));
495 List<ToscaPolicyTypeIdentifier> supportedPolicyTypes = new ArrayList<>();
496 supportedPolicyTypes.add(new ToscaPolicyTypeIdentifier("pt2", "0.0.1"));
498 PdpSubGroup subGroup = new PdpSubGroup();
499 subGroup.setPdpType("pdpType");
500 subGroup.setSupportedPolicyTypes(supportedPolicyTypes);
501 subGroup.setPolicies(policies);
503 List<PdpSubGroup> pdpSubgroups = new ArrayList<>();
504 pdpSubgroups.add(subGroup);
506 PdpGroup pdpGroup = new PdpGroup();
507 pdpGroup.setName("pdpGroup");
508 pdpGroup.setPdpGroupState(PdpState.PASSIVE);
509 pdpGroup.setPdpSubgroups(pdpSubgroups);
511 List<PdpGroup> pdpGroups = new ArrayList<>();
512 pdpGroups.add(pdpGroup);
514 PolicyModelsProvider databaseProvider =
515 new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
517 databaseProvider.createPdpGroups(pdpGroups);
519 assertThatThrownBy(() -> databaseProvider.deletePolicy("p0", "0.0.1"))
520 .hasMessageContaining("policy is in use, it is deployed in PDP group pdpGroup subgroup pdpType");
522 assertThatThrownBy(() -> databaseProvider.deletePolicy("p3", "0.0.1"))
523 .hasMessageContaining("service template not found in database");
525 databaseProvider.close();
529 public void testDeletePolicyTypeSupportedInSubgroup() throws PfModelException {
530 List<ToscaPolicyTypeIdentifier> supportedPolicyTypes = new ArrayList<>();
531 supportedPolicyTypes.add(new ToscaPolicyTypeIdentifier("pt1", "0.0.1"));
532 supportedPolicyTypes.add(new ToscaPolicyTypeIdentifier("pt2", "0.0.1"));
534 PdpSubGroup subGroup = new PdpSubGroup();
535 subGroup.setPdpType("pdpType");
536 subGroup.setSupportedPolicyTypes(supportedPolicyTypes);
538 List<PdpSubGroup> pdpSubgroups = new ArrayList<>();
539 pdpSubgroups.add(subGroup);
541 PdpGroup pdpGroup = new PdpGroup();
542 pdpGroup.setName("pdpGroup");
543 pdpGroup.setPdpGroupState(PdpState.PASSIVE);
544 pdpGroup.setPdpSubgroups(pdpSubgroups);
546 List<PdpGroup> pdpGroups = new ArrayList<>();
547 pdpGroups.add(pdpGroup);
549 PolicyModelsProvider databaseProvider =
550 new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
552 databaseProvider.createPdpGroups(pdpGroups);
554 assertThatThrownBy(() -> databaseProvider.deletePolicyType("pt2", "0.0.1"))
555 .hasMessageContaining("policy type is in use, it is referenced in PDP group pdpGroup subgroup pdpType");
557 assertThatThrownBy(() -> databaseProvider.deletePolicyType("pt0", "0.0.1"))
558 .hasMessageContaining("service template not found in database");
560 databaseProvider.close();