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