Java 17 / Spring 6 / Spring Boot 3 Upgrade
[policy/api.git] / main / src / test / java / org / onap / policy / api / main / service / TestToscaServiceTemplateServiceForPolicyCrud.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP Policy API
4  * ================================================================================
5  * Copyright (C) 2019-2021 AT&T Intellectual Property. All rights reserved.
6  * Modifications Copyright (C) 2019-2021, 2023 Nordix Foundation.
7  * Modifications Copyright (C) 2020, 2022 Bell Canada.
8  * ================================================================================
9  * Licensed under the Apache License, Version 2.0 (the "License");
10  * you may not use this file except in compliance with the License.
11  * You may obtain a copy of the License at
12  *
13  *      http://www.apache.org/licenses/LICENSE-2.0
14  *
15  * Unless required by applicable law or agreed to in writing, software
16  * distributed under the License is distributed on an "AS IS" BASIS,
17  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18  * See the License for the specific language governing permissions and
19  * limitations under the License.
20  *
21  * SPDX-License-Identifier: Apache-2.0
22  * ============LICENSE_END=========================================================
23  */
24
25 package org.onap.policy.api.main.service;
26
27 import static org.assertj.core.api.Assertions.assertThat;
28 import static org.assertj.core.api.Assertions.assertThatCode;
29 import static org.assertj.core.api.Assertions.assertThatThrownBy;
30 import static org.junit.Assert.assertFalse;
31 import static org.junit.Assert.assertNotNull;
32
33 import jakarta.ws.rs.core.Response;
34 import java.util.Optional;
35 import org.junit.jupiter.api.BeforeEach;
36 import org.junit.jupiter.api.Test;
37 import org.junit.runner.RunWith;
38 import org.mockito.InjectMocks;
39 import org.mockito.Mock;
40 import org.mockito.Mockito;
41 import org.mockito.junit.MockitoJUnitRunner;
42 import org.onap.policy.common.utils.coder.CoderException;
43 import org.onap.policy.common.utils.coder.StandardCoder;
44 import org.onap.policy.common.utils.coder.StandardYamlCoder;
45 import org.onap.policy.common.utils.resources.ResourceUtils;
46 import org.onap.policy.models.base.PfConceptKey;
47 import org.onap.policy.models.base.PfModelRuntimeException;
48 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
49 import org.onap.policy.models.tosca.simple.concepts.JpaToscaServiceTemplate;
50
51 /**
52  * This class performs unit test of Policy CRUD operations as implemented in {@link ToscaServiceTemplateService}.
53  *
54  * @author Chenfei Gao (cgao@research.att.com)
55  */
56 @RunWith(MockitoJUnitRunner.class)
57 class TestToscaServiceTemplateServiceForPolicyCrud extends TestCommonToscaServiceTemplateService {
58
59     private static final StandardCoder standardCoder = new StandardCoder();
60     private static final StandardYamlCoder standardYamlCoder = new StandardYamlCoder();
61
62     private static final String POLICY_RESOURCE = "policies/vCPE.policy.monitoring.input.tosca.json";
63     private static final String POLICY_TYPE_RESOURCE = "policytypes/onap.policies.monitoring.tcagen2.yaml";
64     private static final String POLICY_RESOURCE_WITH_BAD_POLICYTYPE_ID = "policies/vCPE.policy.bad.policytypeid.json";
65     private static final String POLICY_RESOURCE_WITH_BAD_POLICYTYPE_VERSION =
66         "policies/vCPE.policy.bad.policytypeversion.json";
67     private static final String POLICY_RESOURCE_WITH_NO_POLICY_VERSION = "policies/vCPE.policy.no.policyversion.json";
68     private static final String POLICY_RESOURCE_WITH_DIFFERENT_FIELDS =
69         "policies/vCPE.policy.different.policy.fields.json";
70     private static final String MULTIPLE_POLICIES_RESOURCE = "policies/vCPE.policies.optimization.input.tosca.json";
71
72     private static final String POLICY_TYPE_RESOURCE_OPERATIONAL_COMMON =
73         "policytypes/onap.policies.controlloop.operational.Common.yaml";
74     private static final String POLICY_TYPE_RESOURCE_OPERATIONAL_DROOLS =
75         "policytypes/onap.policies.controlloop.operational.common.Drools.yaml";
76     private static final String POLICY_RESOURCE_OPERATIONAL = "policies/vCPE.policy.operational.input.tosca.json";
77     private static final String POLICY_TYPE_OPERATIONAL_DROOLS = "onap.policies.controlloop.operational.common.Drools";
78
79     @Mock
80     private PdpGroupService pdpGroupService;
81
82     @InjectMocks
83     private ToscaServiceTemplateService toscaServiceTemplateService;
84
85     @BeforeEach
86     public void setUp() {
87         super.setUp();
88     }
89
90     @Test
91     void testFetchPolicies() {
92         Mockito.when(toscaServiceTemplateRepository.findById(new PfConceptKey(JpaToscaServiceTemplate.DEFAULT_NAME,
93             JpaToscaServiceTemplate.DEFAULT_VERSION))).thenReturn(Optional.empty());
94
95         assertThatThrownBy(() -> toscaServiceTemplateService.fetchPolicies("dummy", "1.0.0", null, null, null))
96             .hasMessage("service template not found in database");
97
98         assertThatThrownBy(() -> toscaServiceTemplateService.fetchPolicies("dummy", "1.0.0", "dummy", null, null))
99             .hasMessage("service template not found in database");
100
101         assertThatThrownBy(() -> toscaServiceTemplateService.fetchPolicies("dummy", "1.0.0", "dummy", "1.0.0", null))
102             .hasMessage("service template not found in database");
103
104         assertThatThrownBy(() -> toscaServiceTemplateService.fetchPolicies(null, null, "dummy", "1.0.0", null))
105             .hasMessage("service template not found in database");
106     }
107
108     @Test
109     void testFetchLatestPolicies() {
110         Mockito.when(toscaServiceTemplateRepository.findById(new PfConceptKey(JpaToscaServiceTemplate.DEFAULT_NAME,
111             JpaToscaServiceTemplate.DEFAULT_VERSION))).thenReturn(Optional.empty());
112
113         assertThatThrownBy(() -> toscaServiceTemplateService.fetchLatestPolicies("dummy", "dummy", "dummy", null))
114             .hasMessage("service template not found in database");
115     }
116
117     @Test
118     void testCreatePolicy() throws Exception {
119         assertThatThrownBy(() -> toscaServiceTemplateService
120             .createPolicy("dummy", "1.0.0", new ToscaServiceTemplate()))
121             .hasMessage("topology template not specified on service template");
122
123         var policyTypeServiceTemplate = standardYamlCoder
124             .decode(ResourceUtils.getResourceAsString(POLICY_TYPE_RESOURCE), ToscaServiceTemplate.class);
125         var serviceTemplate = toscaServiceTemplateService.createPolicyType(policyTypeServiceTemplate);
126         mockDbServiceTemplate(serviceTemplate, null, null);
127
128         assertThatCode(() -> toscaServiceTemplateService.createPolicyType(policyTypeServiceTemplate))
129             .doesNotThrowAnyException();
130
131         assertThatThrownBy(() -> {
132             var badPolicyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE_WITH_BAD_POLICYTYPE_ID);
133             var badPolicyServiceTemplate =
134                 standardCoder.decode(badPolicyString, ToscaServiceTemplate.class);
135             toscaServiceTemplateService.createPolicy("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0",
136                 badPolicyServiceTemplate);
137         }).hasMessage(
138             "Version not specified, the version of this TOSCA entity must be specified in "
139                 + "the type_version field");
140
141         assertThatThrownBy(() -> {
142             var badPolicyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE_WITH_BAD_POLICYTYPE_VERSION);
143             var badPolicyServiceTemplate =
144                 standardCoder.decode(badPolicyString, ToscaServiceTemplate.class);
145             toscaServiceTemplateService.createPolicy("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0",
146                 badPolicyServiceTemplate);
147         }).hasMessageContaining(
148             "item \"policy type\" value \"onap.policies.monitoring.cdap.tca.hi.lo.app:2.0.0\" INVALID, not found");
149
150         assertThatThrownBy(() -> {
151             var badPolicyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE_WITH_NO_POLICY_VERSION);
152             var badPolicyServiceTemplate =
153                 standardCoder.decode(badPolicyString, ToscaServiceTemplate.class);
154             toscaServiceTemplateService.createPolicy("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0",
155                 badPolicyServiceTemplate);
156         }).hasMessageContaining("item \"version\" value \"0.0.0\" INVALID, is null");
157
158         var policyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE);
159         var policyServiceTemplate = standardCoder.decode(policyString, ToscaServiceTemplate.class);
160         var createPolicyResponseFragment = toscaServiceTemplateService
161             .createPolicy("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0", policyServiceTemplate);
162         assertFalse(createPolicyResponseFragment.getToscaTopologyTemplate().getPolicies().get(0).isEmpty());
163         mockDbServiceTemplate(serviceTemplate, createPolicyResponseFragment, Operation.CREATE_POLICY);
164
165         assertThatThrownBy(() -> {
166             var badPolicyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE_WITH_DIFFERENT_FIELDS);
167             var badPolicyServiceTemplate =
168                 standardCoder.decode(badPolicyString, ToscaServiceTemplate.class);
169             toscaServiceTemplateService.createPolicy("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0",
170                 badPolicyServiceTemplate);
171         }).hasMessageContaining(
172             "item \"entity\" value \"onap.restart.tca:1.0.0\" INVALID, " + "does not equal existing entity");
173     }
174
175     @Test
176     void testCreateOperationalDroolsPolicy() throws CoderException {
177         var policyTypeServiceTemplate = standardYamlCoder.decode(
178             ResourceUtils.getResourceAsString(POLICY_TYPE_RESOURCE_OPERATIONAL_COMMON), ToscaServiceTemplate.class);
179
180         var serviceTemplate = toscaServiceTemplateService.createPolicyType(policyTypeServiceTemplate);
181         mockDbServiceTemplate(serviceTemplate, null, null);
182
183         policyTypeServiceTemplate = standardYamlCoder.decode(
184             ResourceUtils.getResourceAsString(POLICY_TYPE_RESOURCE_OPERATIONAL_DROOLS), ToscaServiceTemplate.class);
185         var createPolicyTypeResponseFragment = toscaServiceTemplateService.createPolicyType(policyTypeServiceTemplate);
186         mockDbServiceTemplate(serviceTemplate, createPolicyTypeResponseFragment, Operation.CREATE_POLICY_TYPE);
187
188         var policyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE_OPERATIONAL);
189         var policyServiceTemplate = standardCoder.decode(policyString, ToscaServiceTemplate.class);
190         serviceTemplate =
191             toscaServiceTemplateService.createPolicy(POLICY_TYPE_OPERATIONAL_DROOLS, "1.0.0", policyServiceTemplate);
192         assertFalse(serviceTemplate.getToscaTopologyTemplate().getPolicies().get(0).isEmpty());
193     }
194
195     @Test
196     void testSimpleCreatePolicy() throws Exception {
197
198         assertThatThrownBy(() -> {
199             String multiPoliciesString = ResourceUtils.getResourceAsString(MULTIPLE_POLICIES_RESOURCE);
200             ToscaServiceTemplate multiPoliciesServiceTemplate =
201                 standardCoder.decode(multiPoliciesString, ToscaServiceTemplate.class);
202             toscaServiceTemplateService.createPolicies(multiPoliciesServiceTemplate);
203         }).hasMessageContaining(
204             "no policy types are defined on the service template for the policies in the topology template");
205
206         // Create required policy types
207         var policyTypeServiceTemplate = standardYamlCoder.decode(
208             ResourceUtils.getResourceAsString("policytypes/onap.policies.Optimization.yaml"),
209             ToscaServiceTemplate.class);
210         var serviceTemplate = toscaServiceTemplateService.createPolicyType(policyTypeServiceTemplate);
211         mockDbServiceTemplate(serviceTemplate, null, null);
212
213         policyTypeServiceTemplate = standardYamlCoder.decode(
214             ResourceUtils.getResourceAsString("policytypes/onap.policies.optimization.Resource.yaml"),
215             ToscaServiceTemplate.class);
216         var createPolicyTypeResponseFragment = toscaServiceTemplateService.createPolicyType(policyTypeServiceTemplate);
217         mockDbServiceTemplate(serviceTemplate, createPolicyTypeResponseFragment, Operation.CREATE_POLICY_TYPE);
218
219         policyTypeServiceTemplate = standardYamlCoder.decode(
220             ResourceUtils
221                 .getResourceAsString("policytypes/onap.policies.optimization.resource.AffinityPolicy.yaml"),
222             ToscaServiceTemplate.class);
223         createPolicyTypeResponseFragment = toscaServiceTemplateService.createPolicyType(policyTypeServiceTemplate);
224         mockDbServiceTemplate(serviceTemplate, createPolicyTypeResponseFragment, Operation.CREATE_POLICY_TYPE);
225
226         policyTypeServiceTemplate = standardYamlCoder.decode(
227             ResourceUtils
228                 .getResourceAsString("policytypes/onap.policies.optimization.resource.DistancePolicy.yaml"),
229             ToscaServiceTemplate.class);
230         createPolicyTypeResponseFragment = toscaServiceTemplateService.createPolicyType(policyTypeServiceTemplate);
231         mockDbServiceTemplate(serviceTemplate, createPolicyTypeResponseFragment, Operation.CREATE_POLICY_TYPE);
232
233         policyTypeServiceTemplate = standardYamlCoder.decode(
234             ResourceUtils.getResourceAsString("policytypes/onap.policies.optimization.resource.Vim_fit.yaml"),
235             ToscaServiceTemplate.class);
236         createPolicyTypeResponseFragment = toscaServiceTemplateService.createPolicyType(policyTypeServiceTemplate);
237         mockDbServiceTemplate(serviceTemplate, createPolicyTypeResponseFragment, Operation.CREATE_POLICY_TYPE);
238
239         policyTypeServiceTemplate = standardYamlCoder.decode(
240             ResourceUtils.getResourceAsString("policytypes/onap.policies.optimization.resource.HpaPolicy.yaml"),
241             ToscaServiceTemplate.class);
242         createPolicyTypeResponseFragment = toscaServiceTemplateService.createPolicyType(policyTypeServiceTemplate);
243         mockDbServiceTemplate(serviceTemplate, createPolicyTypeResponseFragment, Operation.CREATE_POLICY_TYPE);
244
245         policyTypeServiceTemplate = standardYamlCoder.decode(
246             ResourceUtils.getResourceAsString("policytypes/onap.policies.optimization.resource.VnfPolicy.yaml"),
247             ToscaServiceTemplate.class);
248         createPolicyTypeResponseFragment = toscaServiceTemplateService.createPolicyType(policyTypeServiceTemplate);
249         mockDbServiceTemplate(serviceTemplate, createPolicyTypeResponseFragment, Operation.CREATE_POLICY_TYPE);
250
251         policyTypeServiceTemplate = standardYamlCoder.decode(
252             ResourceUtils.getResourceAsString("policytypes/onap.policies.optimization.Service.yaml"),
253             ToscaServiceTemplate.class);
254         createPolicyTypeResponseFragment = toscaServiceTemplateService.createPolicyType(policyTypeServiceTemplate);
255         mockDbServiceTemplate(serviceTemplate, createPolicyTypeResponseFragment, Operation.CREATE_POLICY_TYPE);
256
257         policyTypeServiceTemplate = standardYamlCoder.decode(
258             ResourceUtils
259                 .getResourceAsString("policytypes/onap.policies.optimization.service.SubscriberPolicy.yaml"),
260             ToscaServiceTemplate.class);
261         createPolicyTypeResponseFragment = toscaServiceTemplateService.createPolicyType(policyTypeServiceTemplate);
262         mockDbServiceTemplate(serviceTemplate, createPolicyTypeResponseFragment, Operation.CREATE_POLICY_TYPE);
263
264         policyTypeServiceTemplate = standardYamlCoder.decode(
265             ResourceUtils.getResourceAsString("policytypes/onap.policies.optimization.service.QueryPolicy.yaml"),
266             ToscaServiceTemplate.class);
267         createPolicyTypeResponseFragment = toscaServiceTemplateService.createPolicyType(policyTypeServiceTemplate);
268         mockDbServiceTemplate(serviceTemplate, createPolicyTypeResponseFragment, Operation.CREATE_POLICY_TYPE);
269
270         policyTypeServiceTemplate = standardYamlCoder.decode(
271             ResourceUtils.getResourceAsString("policytypes/onap.policies.monitoring.tcagen2.yaml"),
272             ToscaServiceTemplate.class);
273         createPolicyTypeResponseFragment = toscaServiceTemplateService.createPolicyType(policyTypeServiceTemplate);
274         mockDbServiceTemplate(serviceTemplate, createPolicyTypeResponseFragment, Operation.CREATE_POLICY_TYPE);
275
276         // Create multiple policies in one call
277         var multiPoliciesString = ResourceUtils.getResourceAsString(MULTIPLE_POLICIES_RESOURCE);
278         var multiPoliciesServiceTemplate =
279             standardCoder.decode(multiPoliciesString, ToscaServiceTemplate.class);
280
281         assertThatCode(() -> {
282             toscaServiceTemplateService.createPolicies(multiPoliciesServiceTemplate);
283             toscaServiceTemplateService.createPolicies(multiPoliciesServiceTemplate);
284         }).doesNotThrowAnyException();
285     }
286
287     @Test
288     void testDeletePolicy() throws CoderException {
289
290         assertThatThrownBy(() -> toscaServiceTemplateService.deletePolicy("dummy", "1.0.0", "dummy", "1.0.0"))
291             .hasMessage("no policies found");
292
293         var policyTypeServiceTemplate = standardYamlCoder
294             .decode(ResourceUtils.getResourceAsString(POLICY_TYPE_RESOURCE), ToscaServiceTemplate.class);
295         var serviceTemplate = toscaServiceTemplateService.createPolicyType(policyTypeServiceTemplate);
296         mockDbServiceTemplate(serviceTemplate, null, null);
297
298         var policyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE);
299         var policyServiceTemplate = standardCoder.decode(policyString, ToscaServiceTemplate.class);
300         var createPolicyResponseFragment = toscaServiceTemplateService
301             .createPolicy("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0", policyServiceTemplate);
302         assertFalse(createPolicyResponseFragment.getToscaTopologyTemplate().getPolicies().get(0).isEmpty());
303         mockDbServiceTemplate(serviceTemplate, createPolicyResponseFragment, Operation.CREATE_POLICY);
304
305         var exceptionMessage = "policy is in use, it is deployed in PDP group dummy subgroup dummy";
306         Mockito.doThrow(new PfModelRuntimeException(Response.Status.NOT_ACCEPTABLE, exceptionMessage))
307             .when(pdpGroupService).assertPolicyNotDeployedInPdpGroup("onap.restart.tca", "1.0.0");
308         assertThatThrownBy(() -> toscaServiceTemplateService
309             .deletePolicy("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0", "onap.restart.tca", "1.0.0"))
310             .hasMessage(exceptionMessage);
311
312         Mockito.doNothing().when(pdpGroupService).assertPolicyNotDeployedInPdpGroup("onap.restart.tca", "1.0.0");
313
314         var deletePolicyResponseFragment = toscaServiceTemplateService
315             .deletePolicy("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0", "onap.restart.tca", "1.0.0");
316         assertFalse(deletePolicyResponseFragment.getToscaTopologyTemplate().getPolicies().get(0).isEmpty());
317
318         mockDbServiceTemplate(serviceTemplate, deletePolicyResponseFragment, Operation.DELETE_POLICY);
319         assertThatThrownBy(() -> toscaServiceTemplateService
320             .deletePolicy("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0", "onap.restart.tca", "1.0.0"))
321             .hasMessageContaining("no policies found");
322     }
323
324     @Test
325     void testFetchAllPolicies() throws Exception {
326         // Create Policy Type
327         var policyTypeServiceTemplate = standardYamlCoder
328             .decode(ResourceUtils.getResourceAsString(POLICY_TYPE_RESOURCE), ToscaServiceTemplate.class);
329         var serviceTemplate = toscaServiceTemplateService.createPolicyType(policyTypeServiceTemplate);
330         mockDbServiceTemplate(serviceTemplate, null, null);
331
332         // Create Policy
333         var policyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE);
334         var policyServiceTemplate = standardCoder.decode(policyString, ToscaServiceTemplate.class);
335         var createPolicyResponseFragment = toscaServiceTemplateService
336             .createPolicy("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0", policyServiceTemplate);
337         mockDbServiceTemplate(serviceTemplate, createPolicyResponseFragment, Operation.CREATE_POLICY);
338
339         assertThat(serviceTemplate.getToscaTopologyTemplate().getPolicies()).hasSize(1);
340
341         // Test fetch all policies
342         serviceTemplate = toscaServiceTemplateService.fetchPolicies(null, null, null, null, null);
343
344         assertThat(serviceTemplate.getToscaTopologyTemplate().getPolicies()).hasSize(1);
345     }
346
347     @Test
348     void testFetchSpecificPolicy_availablePolicy() throws Exception {
349         // Create Policy Type
350         var policyTypeServiceTemplate = standardYamlCoder
351             .decode(ResourceUtils.getResourceAsString(POLICY_TYPE_RESOURCE), ToscaServiceTemplate.class);
352         var serviceTemplate = toscaServiceTemplateService.createPolicyType(policyTypeServiceTemplate);
353         mockDbServiceTemplate(serviceTemplate, null, null);
354
355         // Create Policy
356         var policyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE);
357         var policyServiceTemplate = standardCoder.decode(policyString, ToscaServiceTemplate.class);
358         var createPolicyResponseFragment = toscaServiceTemplateService
359             .createPolicy("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0", policyServiceTemplate);
360         mockDbServiceTemplate(serviceTemplate, createPolicyResponseFragment, Operation.CREATE_POLICY);
361
362         assertThat(serviceTemplate.getToscaTopologyTemplate().getPolicies()).hasSize(1);
363
364         // Test fetch specific policy
365         assertThat(toscaServiceTemplateService.fetchPolicies(null, null, "onap.restart.tca", "1.0.0", null)
366             .getToscaTopologyTemplate().getPolicies()).hasSize(1);
367     }
368
369     @Test
370     void testFetchSpecificPolicy_unavailablePolicy() throws Exception {
371         // Create Policy Type
372         var policyTypeServiceTemplate = standardYamlCoder
373             .decode(ResourceUtils.getResourceAsString(POLICY_TYPE_RESOURCE), ToscaServiceTemplate.class);
374         var serviceTemplate = toscaServiceTemplateService.createPolicyType(policyTypeServiceTemplate);
375         mockDbServiceTemplate(serviceTemplate, null, null);
376
377         // Create Policy
378         var policyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE);
379         var policyServiceTemplate = standardCoder.decode(policyString, ToscaServiceTemplate.class);
380         var createPolicyResponseFragment = toscaServiceTemplateService
381             .createPolicy("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0", policyServiceTemplate);
382         mockDbServiceTemplate(serviceTemplate, createPolicyResponseFragment, Operation.CREATE_POLICY);
383         assertNotNull(serviceTemplate.getToscaTopologyTemplate().getPolicies());
384         assertThat(serviceTemplate.getToscaTopologyTemplate().getPolicies()).hasSize(1);
385
386         // Test fetch specific policy
387         assertThatThrownBy(() -> toscaServiceTemplateService.fetchPolicies(null, null, "onap.restart.tca",
388             "2.0.0", null)).hasMessageContaining("policies for onap.restart.tca:2.0.0 do not exist");
389     }
390
391     @Test
392     void testDeleteSpecificPolicy_availablePolicy() throws Exception {
393         var policyTypeServiceTemplate = standardYamlCoder
394             .decode(ResourceUtils.getResourceAsString(POLICY_TYPE_RESOURCE), ToscaServiceTemplate.class);
395         var serviceTemplate = toscaServiceTemplateService.createPolicyType(policyTypeServiceTemplate);
396         mockDbServiceTemplate(serviceTemplate, null, null);
397
398         var policyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE);
399         var policyServiceTemplate = standardCoder.decode(policyString, ToscaServiceTemplate.class);
400         var createPolicyResponseFragment = toscaServiceTemplateService
401             .createPolicy("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0", policyServiceTemplate);
402         assertThat(createPolicyResponseFragment.getToscaTopologyTemplate().getPolicies()).hasSize(1);
403         mockDbServiceTemplate(serviceTemplate, createPolicyResponseFragment, Operation.CREATE_POLICY);
404
405         serviceTemplate = toscaServiceTemplateService.deletePolicy(null, null, "onap.restart.tca", "1.0.0");
406         assertThat(serviceTemplate.getToscaTopologyTemplate().getPolicies()).hasSize(1);
407     }
408
409     @Test
410     void testDeleteSpecificPolicy_unavailablePolicy() throws Exception {
411         var policyTypeServiceTemplate = standardYamlCoder
412             .decode(ResourceUtils.getResourceAsString(POLICY_TYPE_RESOURCE), ToscaServiceTemplate.class);
413         var serviceTemplate = toscaServiceTemplateService.createPolicyType(policyTypeServiceTemplate);
414         mockDbServiceTemplate(serviceTemplate, null, null);
415
416         var policyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE);
417         var policyServiceTemplate = standardCoder.decode(policyString, ToscaServiceTemplate.class);
418         var createPolicyResponseFragment = toscaServiceTemplateService
419             .createPolicy("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0", policyServiceTemplate);
420         assertThat(createPolicyResponseFragment.getToscaTopologyTemplate().getPolicies()).hasSize(1);
421         mockDbServiceTemplate(serviceTemplate, createPolicyResponseFragment, Operation.CREATE_POLICY);
422
423         assertThatThrownBy(() -> toscaServiceTemplateService.deletePolicy(null, null, "onap.restart.tca", "2.0.0"))
424             .hasMessageContaining("not found");
425
426         assertThatThrownBy(() -> toscaServiceTemplateService.deletePolicy(null, null,
427             "onap.restart.tca.unavailable", "1.0.0")).hasMessageContaining("not found");
428     }
429 }