Spring repository and service layer for policy-api
[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 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 java.util.Optional;
34 import javax.ws.rs.core.Response;
35 import org.junit.Before;
36 import org.junit.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.PfModelException;
48 import org.onap.policy.models.base.PfModelRuntimeException;
49 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
50 import org.onap.policy.models.tosca.simple.concepts.JpaToscaServiceTemplate;
51
52 /**
53  * This class performs unit test of Policy CRUD operations as implemented in {@link ToscaServiceTemplateService}.
54  *
55  * @author Chenfei Gao (cgao@research.att.com)
56  */
57 @RunWith(MockitoJUnitRunner.class)
58 public class TestToscaServiceTemplateServiceForPolicyCrud extends TestCommonToscaServiceTemplateService {
59
60     private static StandardCoder standardCoder = new StandardCoder();
61     private static StandardYamlCoder standardYamlCoder = new StandardYamlCoder();
62
63     private static final String POLICY_RESOURCE = "policies/vCPE.policy.monitoring.input.tosca.json";
64     private static final String POLICY_TYPE_RESOURCE = "policytypes/onap.policies.monitoring.tcagen2.yaml";
65     private static final String POLICY_RESOURCE_WITH_BAD_POLICYTYPE_ID = "policies/vCPE.policy.bad.policytypeid.json";
66     private static final String POLICY_RESOURCE_WITH_BAD_POLICYTYPE_VERSION =
67         "policies/vCPE.policy.bad.policytypeversion.json";
68     private static final String POLICY_RESOURCE_WITH_NO_POLICY_VERSION = "policies/vCPE.policy.no.policyversion.json";
69     private static final String POLICY_RESOURCE_WITH_DIFFERENT_FIELDS =
70         "policies/vCPE.policy.different.policy.fields.json";
71     private static final String MULTIPLE_POLICIES_RESOURCE = "policies/vCPE.policies.optimization.input.tosca.json";
72
73     private static final String POLICY_TYPE_RESOURCE_OPERATIONAL_COMMON =
74         "policytypes/onap.policies.controlloop.operational.Common.yaml";
75     private static final String POLICY_TYPE_RESOURCE_OPERATIONAL_DROOLS =
76         "policytypes/onap.policies.controlloop.operational.common.Drools.yaml";
77     private static final String POLICY_RESOURCE_OPERATIONAL = "policies/vCPE.policy.operational.input.tosca.json";
78     private static final String POLICY_TYPE_OPERATIONAL_DROOLS = "onap.policies.controlloop.operational.common.Drools";
79
80     @Mock
81     private PdpGroupService pdpGroupService;
82
83     @InjectMocks
84     private ToscaServiceTemplateService toscaServiceTemplateService;
85
86     @Before
87     public void setUp() {
88         super.setUp();
89     }
90
91     @Test
92     public void testFetchPolicies() {
93         Mockito.when(toscaServiceTemplateRepository.findById(new PfConceptKey(JpaToscaServiceTemplate.DEFAULT_NAME,
94             JpaToscaServiceTemplate.DEFAULT_VERSION))).thenReturn(Optional.empty());
95
96         assertThatThrownBy(() -> {
97             toscaServiceTemplateService.fetchPolicies("dummy", "1.0.0", null, null, null);
98         }).hasMessage("service template not found in database");
99
100         assertThatThrownBy(() -> {
101             toscaServiceTemplateService.fetchPolicies("dummy", "1.0.0", "dummy", null, null);
102         }).hasMessage("service template not found in database");
103
104         assertThatThrownBy(() -> {
105             toscaServiceTemplateService.fetchPolicies("dummy", "1.0.0", "dummy", "1.0.0", null);
106         }).hasMessage("service template not found in database");
107
108         assertThatThrownBy(() -> {
109             toscaServiceTemplateService.fetchPolicies(null, null, "dummy", "1.0.0", null);
110         }).hasMessage("service template not found in database");
111     }
112
113     @Test
114     public void testFetchLatestPolicies() {
115         Mockito.when(toscaServiceTemplateRepository.findById(new PfConceptKey(JpaToscaServiceTemplate.DEFAULT_NAME,
116             JpaToscaServiceTemplate.DEFAULT_VERSION))).thenReturn(Optional.empty());
117
118         assertThatThrownBy(() -> {
119             toscaServiceTemplateService.fetchLatestPolicies("dummy", "dummy", "dummy", null);
120         }).hasMessage("service template not found in database");
121     }
122
123     @Test
124     public void testCreatePolicy() throws Exception {
125         assertThatThrownBy(() -> {
126             toscaServiceTemplateService.createPolicy("dummy", "1.0.0", new ToscaServiceTemplate());
127         }).hasMessage("topology template not specified on service template");
128
129         var policyTypeServiceTemplate = standardYamlCoder
130             .decode(ResourceUtils.getResourceAsString(POLICY_TYPE_RESOURCE), ToscaServiceTemplate.class);
131         var serviceTemplate = toscaServiceTemplateService.createPolicyType(policyTypeServiceTemplate);
132         mockDbServiceTemplate(serviceTemplate, null, null);
133
134         assertThatCode(() -> toscaServiceTemplateService.createPolicyType(policyTypeServiceTemplate))
135             .doesNotThrowAnyException();
136
137         assertThatThrownBy(() -> {
138             var badPolicyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE_WITH_BAD_POLICYTYPE_ID);
139             var badPolicyServiceTemplate =
140                 standardCoder.decode(badPolicyString, ToscaServiceTemplate.class);
141             toscaServiceTemplateService.createPolicy("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0",
142                 badPolicyServiceTemplate);
143         }).hasMessage(
144             "Version not specified, the version of this TOSCA entity must be specified in "
145                 + "the type_version field");
146
147         assertThatThrownBy(() -> {
148             var badPolicyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE_WITH_BAD_POLICYTYPE_VERSION);
149             var badPolicyServiceTemplate =
150                 standardCoder.decode(badPolicyString, ToscaServiceTemplate.class);
151             toscaServiceTemplateService.createPolicy("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0",
152                 badPolicyServiceTemplate);
153         }).hasMessageContaining(
154             "item \"policy type\" value \"onap.policies.monitoring.cdap.tca.hi.lo.app:2.0.0\" INVALID, not found");
155
156         assertThatThrownBy(() -> {
157             var badPolicyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE_WITH_NO_POLICY_VERSION);
158             var badPolicyServiceTemplate =
159                 standardCoder.decode(badPolicyString, ToscaServiceTemplate.class);
160             toscaServiceTemplateService.createPolicy("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0",
161                 badPolicyServiceTemplate);
162         }).hasMessageContaining("item \"version\" value \"0.0.0\" INVALID, is null");
163
164         var policyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE);
165         var policyServiceTemplate = standardCoder.decode(policyString, ToscaServiceTemplate.class);
166         var createPolicyResponseFragment = toscaServiceTemplateService
167             .createPolicy("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0", policyServiceTemplate);
168         assertFalse(createPolicyResponseFragment.getToscaTopologyTemplate().getPolicies().get(0).isEmpty());
169         mockDbServiceTemplate(serviceTemplate, createPolicyResponseFragment, Operation.CREATE_POLICY);
170
171         assertThatThrownBy(() -> {
172             var badPolicyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE_WITH_DIFFERENT_FIELDS);
173             var badPolicyServiceTemplate =
174                 standardCoder.decode(badPolicyString, ToscaServiceTemplate.class);
175             toscaServiceTemplateService.createPolicy("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0",
176                 badPolicyServiceTemplate);
177         }).hasMessageContaining(
178             "item \"entity\" value \"onap.restart.tca:1.0.0\" INVALID, " + "does not equal existing entity");
179     }
180
181     @Test
182     public void testCreateOperationalDroolsPolicy() throws CoderException {
183         var policyTypeServiceTemplate = standardYamlCoder.decode(
184             ResourceUtils.getResourceAsString(POLICY_TYPE_RESOURCE_OPERATIONAL_COMMON), ToscaServiceTemplate.class);
185
186         var serviceTemplate = toscaServiceTemplateService.createPolicyType(policyTypeServiceTemplate);
187         mockDbServiceTemplate(serviceTemplate, null, null);
188
189         policyTypeServiceTemplate = standardYamlCoder.decode(
190             ResourceUtils.getResourceAsString(POLICY_TYPE_RESOURCE_OPERATIONAL_DROOLS), ToscaServiceTemplate.class);
191         var createPolicyTypeResponseFragment = toscaServiceTemplateService.createPolicyType(policyTypeServiceTemplate);
192         mockDbServiceTemplate(serviceTemplate, createPolicyTypeResponseFragment, Operation.CREATE_POLICY_TYPE);
193
194         var policyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE_OPERATIONAL);
195         var policyServiceTemplate = standardCoder.decode(policyString, ToscaServiceTemplate.class);
196         serviceTemplate =
197             toscaServiceTemplateService.createPolicy(POLICY_TYPE_OPERATIONAL_DROOLS, "1.0.0", policyServiceTemplate);
198         assertFalse(serviceTemplate.getToscaTopologyTemplate().getPolicies().get(0).isEmpty());
199     }
200
201     @Test
202     public void testSimpleCreatePolicy() throws Exception {
203
204         assertThatThrownBy(() -> {
205             String multiPoliciesString = ResourceUtils.getResourceAsString(MULTIPLE_POLICIES_RESOURCE);
206             ToscaServiceTemplate multiPoliciesServiceTemplate =
207                 standardCoder.decode(multiPoliciesString, ToscaServiceTemplate.class);
208             toscaServiceTemplateService.createPolicies(multiPoliciesServiceTemplate);
209         }).hasMessageContaining(
210             "no policy types are defined on the service template for the policies in the topology template");
211
212         // Create required policy types
213         var policyTypeServiceTemplate = standardYamlCoder.decode(
214             ResourceUtils.getResourceAsString("policytypes/onap.policies.Optimization.yaml"),
215             ToscaServiceTemplate.class);
216         var serviceTemplate = toscaServiceTemplateService.createPolicyType(policyTypeServiceTemplate);
217         mockDbServiceTemplate(serviceTemplate, null, null);
218
219         policyTypeServiceTemplate = standardYamlCoder.decode(
220             ResourceUtils.getResourceAsString("policytypes/onap.policies.optimization.Resource.yaml"),
221             ToscaServiceTemplate.class);
222         var createPolicyTypeResponseFragment = toscaServiceTemplateService.createPolicyType(policyTypeServiceTemplate);
223         mockDbServiceTemplate(serviceTemplate, createPolicyTypeResponseFragment, Operation.CREATE_POLICY_TYPE);
224
225         policyTypeServiceTemplate = standardYamlCoder.decode(
226             ResourceUtils
227                 .getResourceAsString("policytypes/onap.policies.optimization.resource.AffinityPolicy.yaml"),
228             ToscaServiceTemplate.class);
229         createPolicyTypeResponseFragment = toscaServiceTemplateService.createPolicyType(policyTypeServiceTemplate);
230         mockDbServiceTemplate(serviceTemplate, createPolicyTypeResponseFragment, Operation.CREATE_POLICY_TYPE);
231
232         policyTypeServiceTemplate = standardYamlCoder.decode(
233             ResourceUtils
234                 .getResourceAsString("policytypes/onap.policies.optimization.resource.DistancePolicy.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.Vim_fit.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.HpaPolicy.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.resource.VnfPolicy.yaml"),
253             ToscaServiceTemplate.class);
254         createPolicyTypeResponseFragment = toscaServiceTemplateService.createPolicyType(policyTypeServiceTemplate);
255         mockDbServiceTemplate(serviceTemplate, createPolicyTypeResponseFragment, Operation.CREATE_POLICY_TYPE);
256
257         policyTypeServiceTemplate = standardYamlCoder.decode(
258             ResourceUtils.getResourceAsString("policytypes/onap.policies.optimization.Service.yaml"),
259             ToscaServiceTemplate.class);
260         createPolicyTypeResponseFragment = toscaServiceTemplateService.createPolicyType(policyTypeServiceTemplate);
261         mockDbServiceTemplate(serviceTemplate, createPolicyTypeResponseFragment, Operation.CREATE_POLICY_TYPE);
262
263         policyTypeServiceTemplate = standardYamlCoder.decode(
264             ResourceUtils
265                 .getResourceAsString("policytypes/onap.policies.optimization.service.SubscriberPolicy.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.optimization.service.QueryPolicy.yaml"),
272             ToscaServiceTemplate.class);
273         createPolicyTypeResponseFragment = toscaServiceTemplateService.createPolicyType(policyTypeServiceTemplate);
274         mockDbServiceTemplate(serviceTemplate, createPolicyTypeResponseFragment, Operation.CREATE_POLICY_TYPE);
275
276         policyTypeServiceTemplate = standardYamlCoder.decode(
277             ResourceUtils.getResourceAsString("policytypes/onap.policies.monitoring.tcagen2.yaml"),
278             ToscaServiceTemplate.class);
279         createPolicyTypeResponseFragment = toscaServiceTemplateService.createPolicyType(policyTypeServiceTemplate);
280         mockDbServiceTemplate(serviceTemplate, createPolicyTypeResponseFragment, Operation.CREATE_POLICY_TYPE);
281
282         // Create multiple policies in one call
283         var multiPoliciesString = ResourceUtils.getResourceAsString(MULTIPLE_POLICIES_RESOURCE);
284         var multiPoliciesServiceTemplate =
285             standardCoder.decode(multiPoliciesString, ToscaServiceTemplate.class);
286
287         assertThatCode(() -> {
288             toscaServiceTemplateService.createPolicies(multiPoliciesServiceTemplate);
289             toscaServiceTemplateService.createPolicies(multiPoliciesServiceTemplate);
290         }).doesNotThrowAnyException();
291     }
292
293     @Test
294     public void testDeletePolicy() throws CoderException, PfModelException {
295
296         assertThatThrownBy(() -> {
297             toscaServiceTemplateService.deletePolicy("dummy", "1.0.0", "dummy", "1.0.0");
298         }).hasMessage("no policies found");
299
300         var policyTypeServiceTemplate = standardYamlCoder
301             .decode(ResourceUtils.getResourceAsString(POLICY_TYPE_RESOURCE), ToscaServiceTemplate.class);
302         var serviceTemplate = toscaServiceTemplateService.createPolicyType(policyTypeServiceTemplate);
303         mockDbServiceTemplate(serviceTemplate, null, null);
304
305         var policyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE);
306         var policyServiceTemplate = standardCoder.decode(policyString, ToscaServiceTemplate.class);
307         var createPolicyResponseFragment = toscaServiceTemplateService
308             .createPolicy("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0", policyServiceTemplate);
309         assertFalse(createPolicyResponseFragment.getToscaTopologyTemplate().getPolicies().get(0).isEmpty());
310         mockDbServiceTemplate(serviceTemplate, createPolicyResponseFragment, Operation.CREATE_POLICY);
311
312         var exceptionMessage = "policy is in use, it is deployed in PDP group dummy subgroup dummy";
313         Mockito.doThrow(new PfModelRuntimeException(Response.Status.NOT_ACCEPTABLE, exceptionMessage))
314             .when(pdpGroupService).assertPolicyNotDeployedInPdpGroup("onap.restart.tca", "1.0.0");
315         assertThatThrownBy(() -> {
316             toscaServiceTemplateService.deletePolicy("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0",
317                 "onap.restart.tca", "1.0.0");
318         }).hasMessage(exceptionMessage);
319         Mockito.doNothing().when(pdpGroupService).assertPolicyNotDeployedInPdpGroup("onap.restart.tca", "1.0.0");
320
321         var deletePolicyResponseFragment = toscaServiceTemplateService
322             .deletePolicy("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0", "onap.restart.tca", "1.0.0");
323         assertFalse(deletePolicyResponseFragment.getToscaTopologyTemplate().getPolicies().get(0).isEmpty());
324
325         mockDbServiceTemplate(serviceTemplate, deletePolicyResponseFragment, Operation.DELETE_POLICY);
326         assertThatThrownBy(() -> {
327             toscaServiceTemplateService.deletePolicy("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0",
328                 "onap.restart.tca", "1.0.0");
329         }).hasMessageContaining("no policies found");
330     }
331
332     @Test
333     public void testFetchAllPolicies() throws Exception {
334         // Create Policy Type
335         var policyTypeServiceTemplate = standardYamlCoder
336             .decode(ResourceUtils.getResourceAsString(POLICY_TYPE_RESOURCE), ToscaServiceTemplate.class);
337         var serviceTemplate = toscaServiceTemplateService.createPolicyType(policyTypeServiceTemplate);
338         mockDbServiceTemplate(serviceTemplate, null, null);
339
340         // Create Policy
341         var policyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE);
342         var policyServiceTemplate = standardCoder.decode(policyString, ToscaServiceTemplate.class);
343         var createPolicyResponseFragment = toscaServiceTemplateService
344             .createPolicy("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0", policyServiceTemplate);
345         mockDbServiceTemplate(serviceTemplate, createPolicyResponseFragment, Operation.CREATE_POLICY);
346
347         assertThat(serviceTemplate.getToscaTopologyTemplate().getPolicies()).hasSize(1);
348
349         // Test fetch all policies
350         serviceTemplate = toscaServiceTemplateService.fetchPolicies(null, null, null, null, null);
351
352         assertThat(serviceTemplate.getToscaTopologyTemplate().getPolicies()).hasSize(1);
353     }
354
355     @Test
356     public void testFetchSpecificPolicy_availablePolicy() throws Exception {
357         // Create Policy Type
358         var policyTypeServiceTemplate = standardYamlCoder
359             .decode(ResourceUtils.getResourceAsString(POLICY_TYPE_RESOURCE), ToscaServiceTemplate.class);
360         var serviceTemplate = toscaServiceTemplateService.createPolicyType(policyTypeServiceTemplate);
361         mockDbServiceTemplate(serviceTemplate, null, null);
362
363         // Create Policy
364         var policyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE);
365         var policyServiceTemplate = standardCoder.decode(policyString, ToscaServiceTemplate.class);
366         var createPolicyResponseFragment = toscaServiceTemplateService
367             .createPolicy("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0", policyServiceTemplate);
368         mockDbServiceTemplate(serviceTemplate, createPolicyResponseFragment, Operation.CREATE_POLICY);
369
370         assertThat(serviceTemplate.getToscaTopologyTemplate().getPolicies()).hasSize(1);
371
372         // Test fetch specific policy
373         assertThat(toscaServiceTemplateService.fetchPolicies(null, null, "onap.restart.tca", "1.0.0", null)
374             .getToscaTopologyTemplate().getPolicies()).hasSize(1);
375     }
376
377     @Test
378     public void testFetchSpecificPolicy_unavailablePolicy() throws Exception {
379         // Create Policy Type
380         var policyTypeServiceTemplate = standardYamlCoder
381             .decode(ResourceUtils.getResourceAsString(POLICY_TYPE_RESOURCE), ToscaServiceTemplate.class);
382         var serviceTemplate = toscaServiceTemplateService.createPolicyType(policyTypeServiceTemplate);
383         mockDbServiceTemplate(serviceTemplate, null, null);
384
385         // Create Policy
386         var policyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE);
387         var policyServiceTemplate = standardCoder.decode(policyString, ToscaServiceTemplate.class);
388         var createPolicyResponseFragment = toscaServiceTemplateService
389             .createPolicy("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0", policyServiceTemplate);
390         mockDbServiceTemplate(serviceTemplate, createPolicyResponseFragment, Operation.CREATE_POLICY);
391         assertNotNull(serviceTemplate.getToscaTopologyTemplate().getPolicies());
392         assertThat(serviceTemplate.getToscaTopologyTemplate().getPolicies()).hasSize(1);
393
394         // Test fetch specific policy
395         assertThatThrownBy(() -> toscaServiceTemplateService.fetchPolicies(null, null, "onap.restart.tca",
396             "2.0.0", null)).hasMessageContaining("policies for onap.restart.tca:2.0.0 do not exist");
397     }
398
399     @Test
400     public void testDeleteSpecificPolicy_availablePolicy() throws Exception {
401         var policyTypeServiceTemplate = standardYamlCoder
402             .decode(ResourceUtils.getResourceAsString(POLICY_TYPE_RESOURCE), ToscaServiceTemplate.class);
403         var serviceTemplate = toscaServiceTemplateService.createPolicyType(policyTypeServiceTemplate);
404         mockDbServiceTemplate(serviceTemplate, null, null);
405
406         var policyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE);
407         var policyServiceTemplate = standardCoder.decode(policyString, ToscaServiceTemplate.class);
408         var createPolicyResponseFragment = toscaServiceTemplateService
409             .createPolicy("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0", policyServiceTemplate);
410         assertThat(createPolicyResponseFragment.getToscaTopologyTemplate().getPolicies()).hasSize(1);
411         mockDbServiceTemplate(serviceTemplate, createPolicyResponseFragment, Operation.CREATE_POLICY);
412
413         serviceTemplate = toscaServiceTemplateService.deletePolicy(null, null, "onap.restart.tca", "1.0.0");
414         assertThat(serviceTemplate.getToscaTopologyTemplate().getPolicies()).hasSize(1);
415     }
416
417     @Test
418     public void testDeleteSpecificPolicy_unavailablePolicy() throws Exception {
419         var policyTypeServiceTemplate = standardYamlCoder
420             .decode(ResourceUtils.getResourceAsString(POLICY_TYPE_RESOURCE), ToscaServiceTemplate.class);
421         var serviceTemplate = toscaServiceTemplateService.createPolicyType(policyTypeServiceTemplate);
422         mockDbServiceTemplate(serviceTemplate, null, null);
423
424         var policyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE);
425         var policyServiceTemplate = standardCoder.decode(policyString, ToscaServiceTemplate.class);
426         var createPolicyResponseFragment = toscaServiceTemplateService
427             .createPolicy("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0", policyServiceTemplate);
428         assertThat(createPolicyResponseFragment.getToscaTopologyTemplate().getPolicies()).hasSize(1);
429         mockDbServiceTemplate(serviceTemplate, createPolicyResponseFragment, Operation.CREATE_POLICY);
430
431         assertThatThrownBy(() -> toscaServiceTemplateService.deletePolicy(null, null, "onap.restart.tca", "2.0.0"))
432             .hasMessageContaining("not found");
433
434         assertThatThrownBy(() -> toscaServiceTemplateService.deletePolicy(null, null,
435             "onap.restart.tca.unavailable", "1.0.0")).hasMessageContaining("not found");
436     }
437 }