Changes for Checkstyle 8.32
[policy/models.git] / models-provider / src / test / java / org / onap / policy / models / provider / impl / DatabasePolicyModelsProviderTest.java
1 /*-
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
9  *
10  *      http://www.apache.org/licenses/LICENSE-2.0
11  *
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.
17  *
18  * SPDX-License-Identifier: Apache-2.0
19  * ============LICENSE_END=========================================================
20  */
21
22 package org.onap.policy.models.provider.impl;
23
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;
28
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;
52
53 /**
54  * Test the database models provider implementation.
55  *
56  * @author Liam Fallon (liam.fallon@est.tech)
57  */
58 public class DatabasePolicyModelsProviderTest {
59     private static final String NAME = "name";
60
61     private static final String TEMPLATE_IS_NULL = "^serviceTemplate is marked .*on.*ull but is null$";
62
63     private static final String POLICY_ID_IS_NULL = "^policyId is marked .*on.*ull but is null$";
64
65     private static final String SUBGROUP_IS_NULL = "^pdpSubGroup is marked .*on.*ull but is null$";
66
67     private static final String GROUP_IS_NULL = "^pdpGroupName is marked .*on.*ull but is null$";
68
69     private static final String NAME_IS_NULL = "^name is marked .*on.*ull but is null$";
70
71     private static final String FILTER_IS_NULL = "^filter is marked .*on.*ull but is null$";
72
73     private static final String POLICY_ID = "policy_id";
74
75     private static final String GROUP = "group";
76
77     private static final String VERSION_100 = "1.0.0";
78
79     private static final Date TIMESTAMP = new Date();
80
81     private static final String ORDER = "DESC";
82
83     PolicyModelsProviderParameters parameters;
84
85     /**
86      * Initialize parameters.
87      */
88     @Before
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");
96     }
97
98     @Test
99     public void testInitAndClose() throws Exception {
100         assertThatThrownBy(() -> {
101             new DatabasePolicyModelsProviderImpl(null);
102         }).hasMessageMatching("^parameters is marked .*on.*ull but is null$");
103
104         PolicyModelsProvider databaseProvider =
105             new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
106
107         parameters.setDatabaseUrl("jdbc://www.acmecorp.nonexist");
108
109         databaseProvider.close();
110         databaseProvider.init();
111
112         databaseProvider.close();
113
114         parameters.setDatabaseUrl("jdbc:h2:mem:testdb");
115
116         parameters.setPersistenceUnit("WileECoyote");
117
118         assertThatThrownBy(databaseProvider::init).hasMessageContaining("could not create Data Access Object (DAO)");
119
120         parameters.setPersistenceUnit("ToscaConceptTest");
121
122         databaseProvider.init();
123         databaseProvider.close();
124
125         assertThatThrownBy(() -> {
126             databaseProvider.init();
127             databaseProvider.init();
128         }).hasMessage("provider is already initialized");
129
130         databaseProvider.close();
131
132         databaseProvider.close();
133     }
134
135     @Test
136     public void testProviderMethodsNull() throws Exception {
137
138         PolicyModelsProvider databaseProvider =
139             new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
140
141         assertThatThrownBy(() -> {
142             databaseProvider.getFilteredPolicyTypes(null);
143         }).hasMessageMatching(FILTER_IS_NULL);
144
145         assertThatThrownBy(() -> {
146             databaseProvider.getFilteredPolicyTypeList(null);
147         }).hasMessageMatching(FILTER_IS_NULL);
148
149         assertThatThrownBy(() -> {
150             databaseProvider.createPolicyTypes(null);
151         }).hasMessageMatching(TEMPLATE_IS_NULL);
152
153         assertThatThrownBy(() -> {
154             databaseProvider.updatePolicyTypes(null);
155         }).hasMessageMatching(TEMPLATE_IS_NULL);
156
157         assertThatThrownBy(() -> {
158             databaseProvider.deletePolicyType(null, null);
159         }).hasMessageMatching(NAME_IS_NULL);
160
161         assertThatThrownBy(() -> {
162             databaseProvider.deletePolicyType("aaa", null);
163         }).hasMessageMatching("^version is marked .*on.*ull but is null$");
164
165         assertThatThrownBy(() -> {
166             databaseProvider.deletePolicyType(null, "aaa");
167         }).hasMessageMatching(NAME_IS_NULL);
168
169         assertThatThrownBy(() -> {
170             databaseProvider.getFilteredPolicies(null);
171         }).hasMessageMatching(FILTER_IS_NULL);
172
173         assertThatThrownBy(() -> {
174             databaseProvider.getFilteredPolicyList(null);
175         }).hasMessageMatching(FILTER_IS_NULL);
176
177         assertThatThrownBy(() -> {
178             databaseProvider.createPolicies(null);
179         }).hasMessageMatching(TEMPLATE_IS_NULL);
180
181         assertThatThrownBy(() -> {
182             databaseProvider.updatePolicies(null);
183         }).hasMessageMatching(TEMPLATE_IS_NULL);
184
185         assertThatThrownBy(() -> {
186             databaseProvider.deletePolicy(null, null);
187         }).hasMessageMatching(NAME_IS_NULL);
188
189         assertThatThrownBy(() -> {
190             databaseProvider.deletePolicy(null, "aaa");
191         }).hasMessageMatching(NAME_IS_NULL);
192
193         assertThatThrownBy(() -> {
194             databaseProvider.deletePolicy("aaa", null);
195         }).hasMessageMatching("^version is marked .*on.*ull but is null$");
196
197         assertThatThrownBy(() -> {
198             databaseProvider.getOperationalPolicy(null, null);
199         }).hasMessageMatching(POLICY_ID_IS_NULL);
200
201         assertThatThrownBy(() -> {
202             databaseProvider.getOperationalPolicy(null, "");
203         }).hasMessageMatching(POLICY_ID_IS_NULL);
204
205         assertThatThrownBy(() -> {
206             databaseProvider.getOperationalPolicy("", null);
207         }).hasMessage("service template not found in database");
208
209         assertThatThrownBy(() -> {
210             databaseProvider.createOperationalPolicy(null);
211         }).hasMessageMatching("^legacyOperationalPolicy is marked .*on.*ull but is null$");
212
213         assertThatThrownBy(() -> {
214             databaseProvider.updateOperationalPolicy(null);
215         }).hasMessageMatching("^legacyOperationalPolicy is marked .*on.*ull but is null$");
216
217         assertThatThrownBy(() -> {
218             databaseProvider.deleteOperationalPolicy(null, null);
219         }).hasMessageMatching(POLICY_ID_IS_NULL);
220
221         assertThatThrownBy(() -> {
222             databaseProvider.deleteOperationalPolicy(null, "");
223         }).hasMessageMatching(POLICY_ID_IS_NULL);
224
225         assertThatThrownBy(() -> {
226             databaseProvider.deleteOperationalPolicy("", null);
227         }).hasMessageMatching("^policyVersion is marked .*on.*ull but is null$");
228
229         assertThatThrownBy(() -> {
230             databaseProvider.getFilteredPdpGroups(null);
231         }).hasMessageMatching(FILTER_IS_NULL);
232
233         assertThatThrownBy(() -> {
234             databaseProvider.createPdpGroups(null);
235         }).hasMessageMatching("^pdpGroups is marked .*on.*ull but is null$");
236
237         assertThatThrownBy(() -> {
238             databaseProvider.updatePdpGroups(null);
239         }).hasMessageMatching("^pdpGroups is marked .*on.*ull but is null$");
240
241         assertThatThrownBy(() -> {
242             databaseProvider.updatePdpSubGroup(null, null);
243         }).hasMessageMatching(GROUP_IS_NULL);
244
245         assertThatThrownBy(() -> {
246             databaseProvider.updatePdpSubGroup(null, new PdpSubGroup());
247         }).hasMessageMatching(GROUP_IS_NULL);
248
249         assertThatThrownBy(() -> {
250             databaseProvider.updatePdpSubGroup(NAME, null);
251         }).hasMessageMatching(SUBGROUP_IS_NULL);
252
253         assertThatThrownBy(() -> {
254             databaseProvider.updatePdpSubGroup(NAME, new PdpSubGroup());
255         }).hasMessage("parameter \"localName\" is null");
256
257         assertThatThrownBy(() -> {
258             databaseProvider.updatePdp(null, null, null);
259         }).hasMessageMatching(GROUP_IS_NULL);
260
261         assertThatThrownBy(() -> {
262             databaseProvider.updatePdp(null, null, new Pdp());
263         }).hasMessageMatching(GROUP_IS_NULL);
264
265         assertThatThrownBy(() -> {
266             databaseProvider.updatePdp(null, "sub", null);
267         }).hasMessageMatching(GROUP_IS_NULL);
268
269         assertThatThrownBy(() -> {
270             databaseProvider.updatePdp(null, "sub", new Pdp());
271         }).hasMessageMatching(GROUP_IS_NULL);
272
273         assertThatThrownBy(() -> {
274             databaseProvider.updatePdp(NAME, null, null);
275         }).hasMessageMatching(SUBGROUP_IS_NULL);
276
277         assertThatThrownBy(() -> {
278             databaseProvider.updatePdp(NAME, null, new Pdp());
279         }).hasMessageMatching(SUBGROUP_IS_NULL);
280
281         assertThatThrownBy(() -> {
282             databaseProvider.updatePdp(NAME, "sub", null);
283         }).hasMessageMatching("^pdp is marked .*on.*ull but is null$");
284
285         assertThatThrownBy(() -> {
286             databaseProvider.updatePdp(NAME, "sub", new Pdp());
287         }).hasMessage("parameter \"localName\" is null");
288
289         assertThatThrownBy(() -> {
290             databaseProvider.deletePdpGroup(null);
291         }).hasMessageMatching(NAME_IS_NULL);
292
293         assertThatThrownBy(() -> {
294             databaseProvider.getFilteredPdpStatistics(NAME, null, "sub", TIMESTAMP, TIMESTAMP, ORDER, 0);
295         }).hasMessageMatching(GROUP_IS_NULL);
296
297         assertThatThrownBy(() -> {
298             databaseProvider.createPdpStatistics(null);
299         }).hasMessageMatching("^pdpStatisticsList is marked .*on.*ull but is null$");
300
301         assertThatThrownBy(() -> {
302             databaseProvider.updatePdpStatistics(null);
303         }).hasMessageMatching("^pdpStatisticsList is marked .*on.*ull but is null$");
304
305         assertThatThrownBy(() -> {
306             databaseProvider.deletePdpStatistics(null, TIMESTAMP);
307         }).hasMessageMatching(NAME_IS_NULL);
308
309         databaseProvider.close();
310     }
311
312     @Test
313     public void testProviderMethodsNotInit() throws Exception {
314         PolicyModelsProvider databaseProvider =
315             new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
316
317         databaseProvider.close();
318
319         assertThatThrownBy(() -> {
320             databaseProvider.getPolicyTypes(NAME, "version");
321         }).hasMessage("policy models provider is not initilaized");
322     }
323
324     @Test
325     public void testProviderMethods() throws PfModelException {
326         PolicyModelsProvider databaseProvider =
327             new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
328
329         assertThatThrownBy(() -> databaseProvider.getPolicyTypes(NAME, VERSION_100))
330             .hasMessage("service template not found in database");
331
332         assertTrue(databaseProvider.getPolicyTypeList(NAME, VERSION_100).isEmpty());
333
334         assertThatThrownBy(() -> databaseProvider.getFilteredPolicyTypes(ToscaPolicyTypeFilter.builder().build()))
335             .hasMessage("service template not found in database");
336
337         assertTrue(databaseProvider.getFilteredPolicyTypeList(ToscaPolicyTypeFilter.builder().build()).isEmpty());
338
339         assertThatThrownBy(() -> {
340             databaseProvider.createPolicyTypes(new ToscaServiceTemplate());
341         }).hasMessage("no policy types specified on service template");
342
343         assertThatThrownBy(() -> {
344             databaseProvider.updatePolicyTypes(new ToscaServiceTemplate());
345         }).hasMessage("no policy types specified on service template");
346
347         assertThatThrownBy(() -> databaseProvider.deletePolicyType(NAME, VERSION_100))
348             .hasMessage("service template not found in database");
349
350         assertThatThrownBy(() -> databaseProvider.getPolicies(NAME, VERSION_100))
351             .hasMessage("service template not found in database");
352
353         assertTrue(databaseProvider.getPolicyList(NAME, VERSION_100).isEmpty());
354
355         assertThatThrownBy(() -> databaseProvider.getFilteredPolicies(ToscaPolicyFilter.builder().build()))
356             .hasMessage("service template not found in database");
357
358         assertTrue(databaseProvider.getFilteredPolicyList(ToscaPolicyFilter.builder().build()).isEmpty());
359
360         assertThatThrownBy(() -> {
361             databaseProvider.createPolicies(new ToscaServiceTemplate());
362         }).hasMessage("topology template not specified on service template");
363
364         assertThatThrownBy(() -> {
365             databaseProvider.updatePolicies(new ToscaServiceTemplate());
366         }).hasMessage("topology template not specified on service template");
367
368         assertThatThrownBy(() -> databaseProvider.deletePolicy("Policy", "0.0.0").getToscaTopologyTemplate())
369             .hasMessage("service template not found in database");
370
371         assertThatThrownBy(() -> {
372             databaseProvider.getOperationalPolicy(POLICY_ID, null);
373         }).hasMessage("service template not found in database");
374
375         assertThatThrownBy(() -> {
376             databaseProvider.getOperationalPolicy(POLICY_ID, "10");
377         }).hasMessage("service template not found in database");
378
379         assertThatThrownBy(() -> {
380             databaseProvider.createOperationalPolicy(new LegacyOperationalPolicy());
381         }).hasMessageMatching(NAME_IS_NULL);
382
383         assertThatThrownBy(() -> {
384             databaseProvider.updateOperationalPolicy(new LegacyOperationalPolicy());
385         }).hasMessageMatching(NAME_IS_NULL);
386
387         assertThatThrownBy(() -> {
388             databaseProvider.deleteOperationalPolicy(POLICY_ID, "55");
389         }).hasMessage("service template not found in database");
390
391         assertEquals(0, databaseProvider.getPdpGroups(NAME).size());
392         assertEquals(0, databaseProvider.getFilteredPdpGroups(PdpGroupFilter.builder().build()).size());
393
394         assertNotNull(databaseProvider.createPdpGroups(new ArrayList<>()));
395         assertNotNull(databaseProvider.updatePdpGroups(new ArrayList<>()));
396
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);
404
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);
411
412         Pdp pdp = new Pdp();
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);
419
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);
427
428         assertEquals(123,
429             databaseProvider.createPdpGroups(groupList).get(0).getPdpSubgroups().get(0).getDesiredInstanceCount());
430         assertEquals(1, databaseProvider.getPdpGroups(GROUP).size());
431
432         pdpSubGroup.setDesiredInstanceCount(234);
433         databaseProvider.updatePdpSubGroup(GROUP, pdpSubGroup);
434         assertEquals(234,
435             databaseProvider.getPdpGroups(GROUP).get(0).getPdpSubgroups().get(0).getDesiredInstanceCount());
436
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());
443
444         assertThatThrownBy(() -> {
445             databaseProvider.deletePdpGroup(NAME);
446         }).hasMessage("delete of PDP group \"name:0.0.0\" failed, PDP group does not exist");
447
448         assertEquals(pdpGroup.getName(), databaseProvider.deletePdpGroup(GROUP).getName());
449
450         assertEquals(0, databaseProvider.getPdpStatistics(null, null).size());
451         assertEquals(1, databaseProvider.createPdpStatistics(statisticsArrayList).size());
452         assertEquals(1, databaseProvider.updatePdpStatistics(statisticsArrayList).size());
453
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());
457         assertEquals(0,
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());
461         assertEquals(0,
462             databaseProvider.getFilteredPdpStatistics(null, GROUP, null, new Date(), new Date(), ORDER, 0).size());
463
464         assertEquals(NAME, databaseProvider.getFilteredPdpStatistics(NAME, GROUP, null, null, null, ORDER, 0).get(0)
465             .getPdpInstanceId());
466         assertEquals(0,
467             databaseProvider.getFilteredPdpStatistics(NAME, GROUP, null, new Date(), new Date(), ORDER, 0).size());
468
469         assertEquals(NAME, databaseProvider.getFilteredPdpStatistics(NAME, GROUP, "type", null, null, ORDER, 0).get(0)
470             .getPdpInstanceId());
471         assertEquals(0,
472             databaseProvider.getFilteredPdpStatistics(NAME, GROUP, "type", new Date(), new Date(), ORDER, 0).size());
473
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());
478         assertEquals(0,
479             databaseProvider.getFilteredPdpStatistics(NAME, GROUP, "type", new Date(), new Date(), ORDER, 5).size());
480
481         assertEquals(NAME, databaseProvider.deletePdpStatistics(NAME, null).get(0).getPdpInstanceId());
482         assertEquals(0, databaseProvider.getPdpStatistics(null, null).size());
483
484         databaseProvider.close();
485     }
486
487     @Test
488     public void testDeletePolicyDeployedInSubgroup() throws PfModelException {
489         List<ToscaPolicyIdentifier> policies = new ArrayList<>();
490
491         policies.add(new ToscaPolicyIdentifier("p0", "0.0.1"));
492         policies.add(new ToscaPolicyIdentifier("p1", "0.0.1"));
493
494         List<ToscaPolicyTypeIdentifier> supportedPolicyTypes = new ArrayList<>();
495         supportedPolicyTypes.add(new ToscaPolicyTypeIdentifier("pt2", "0.0.1"));
496
497         PdpSubGroup subGroup = new PdpSubGroup();
498         subGroup.setPdpType("pdpType");
499         subGroup.setSupportedPolicyTypes(supportedPolicyTypes);
500         subGroup.setPolicies(policies);
501
502         List<PdpSubGroup> pdpSubgroups = new ArrayList<>();
503         pdpSubgroups.add(subGroup);
504
505         PdpGroup pdpGroup = new PdpGroup();
506         pdpGroup.setName("pdpGroup");
507         pdpGroup.setPdpGroupState(PdpState.PASSIVE);
508         pdpGroup.setPdpSubgroups(pdpSubgroups);
509
510         List<PdpGroup> pdpGroups = new ArrayList<>();
511         pdpGroups.add(pdpGroup);
512
513         PolicyModelsProvider databaseProvider =
514             new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
515
516         databaseProvider.createPdpGroups(pdpGroups);
517
518         assertThatThrownBy(() -> databaseProvider.deletePolicy("p0", "0.0.1"))
519             .hasMessageContaining("policy is in use, it is deployed in PDP group pdpGroup subgroup pdpType");
520
521         assertThatThrownBy(() -> databaseProvider.deletePolicy("p3", "0.0.1"))
522             .hasMessageContaining("service template not found in database");
523
524         databaseProvider.close();
525     }
526
527     @Test
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"));
532
533         PdpSubGroup subGroup = new PdpSubGroup();
534         subGroup.setPdpType("pdpType");
535         subGroup.setSupportedPolicyTypes(supportedPolicyTypes);
536
537         List<PdpSubGroup> pdpSubgroups = new ArrayList<>();
538         pdpSubgroups.add(subGroup);
539
540         PdpGroup pdpGroup = new PdpGroup();
541         pdpGroup.setName("pdpGroup");
542         pdpGroup.setPdpGroupState(PdpState.PASSIVE);
543         pdpGroup.setPdpSubgroups(pdpSubgroups);
544
545         List<PdpGroup> pdpGroups = new ArrayList<>();
546         pdpGroups.add(pdpGroup);
547
548         PolicyModelsProvider databaseProvider =
549             new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
550
551         databaseProvider.createPdpGroups(pdpGroups);
552
553         assertThatThrownBy(() -> databaseProvider.deletePolicyType("pt2", "0.0.1"))
554             .hasMessageContaining("policy type is in use, it is referenced in PDP group pdpGroup subgroup pdpType");
555
556         assertThatThrownBy(() -> databaseProvider.deletePolicyType("pt0", "0.0.1"))
557             .hasMessageContaining("service template not found in database");
558
559         databaseProvider.close();
560     }
561 }