ad394e3311024736b880d43dab6dda6fdfe58a6f
[policy/api.git] / main / src / test / java / org / onap / policy / api / main / rest / provider / TestPolicyProvider.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.rest.provider;
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.assertEquals;
31 import static org.junit.Assert.assertFalse;
32 import static org.junit.Assert.assertNotNull;
33 import static org.junit.Assert.fail;
34
35 import java.util.ArrayList;
36 import java.util.List;
37 import org.junit.Ignore;
38 import org.junit.Test;
39 import org.junit.runner.RunWith;
40 import org.onap.policy.api.main.PolicyApiApplication;
41 import org.onap.policy.common.utils.coder.CoderException;
42 import org.onap.policy.common.utils.coder.StandardCoder;
43 import org.onap.policy.common.utils.coder.StandardYamlCoder;
44 import org.onap.policy.common.utils.resources.ResourceUtils;
45 import org.onap.policy.models.base.PfModelException;
46 import org.onap.policy.models.pdp.concepts.Pdp;
47 import org.onap.policy.models.pdp.concepts.PdpGroup;
48 import org.onap.policy.models.pdp.concepts.PdpGroupFilter;
49 import org.onap.policy.models.pdp.concepts.PdpSubGroup;
50 import org.onap.policy.models.pdp.enums.PdpHealthStatus;
51 import org.onap.policy.models.pdp.enums.PdpState;
52 import org.onap.policy.models.provider.PolicyModelsProvider;
53 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
54 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
55 import org.springframework.beans.factory.annotation.Autowired;
56 import org.springframework.boot.test.context.SpringBootTest;
57 import org.springframework.test.annotation.DirtiesContext;
58 import org.springframework.test.annotation.DirtiesContext.ClassMode;
59 import org.springframework.test.context.ActiveProfiles;
60 import org.springframework.test.context.junit4.SpringRunner;
61
62 /**
63  * This class performs unit test of {@link PolicyProvider}.
64  *
65  * @author Chenfei Gao (cgao@research.att.com)
66  */
67 // Provider classes will be obsolete upon migration to Hibernate
68 @Ignore
69 @RunWith(SpringRunner.class)
70 @SpringBootTest(classes = PolicyApiApplication.class, properties = {"database.initialize=false"})
71 @ActiveProfiles("test")
72 @DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD)
73 public class TestPolicyProvider {
74
75     private static StandardCoder standardCoder = new StandardCoder();
76     private static StandardYamlCoder standardYamlCoder = new StandardYamlCoder();
77
78     private static final String POLICY_RESOURCE = "policies/vCPE.policy.monitoring.input.tosca.json";
79     private static final String POLICY_TYPE_RESOURCE = "policytypes/onap.policies.monitoring.tcagen2.yaml";
80     private static final String POLICY_RESOURCE_WITH_BAD_POLICYTYPE_ID = "policies/vCPE.policy.bad.policytypeid.json";
81     private static final String POLICY_RESOURCE_WITH_BAD_POLICYTYPE_VERSION =
82             "policies/vCPE.policy.bad.policytypeversion.json";
83     private static final String POLICY_RESOURCE_WITH_NO_POLICY_VERSION = "policies/vCPE.policy.no.policyversion.json";
84     private static final String POLICY_RESOURCE_WITH_DIFFERENT_FIELDS =
85             "policies/vCPE.policy.different.policy.fields.json";
86     private static final String MULTIPLE_POLICIES_RESOURCE = "policies/vCPE.policies.optimization.input.tosca.json";
87
88     private static final String POLICY_TYPE_RESOURCE_OPERATIONAL_COMMON =
89             "policytypes/onap.policies.controlloop.operational.Common.yaml";
90     private static final String POLICY_TYPE_RESOURCE_OPERATIONAL_DROOLS =
91             "policytypes/onap.policies.controlloop.operational.common.Drools.yaml";
92     private static final String POLICY_RESOURCE_OPERATIONAL = "policies/vCPE.policy.operational.input.tosca.json";
93     private static final String POLICY_TYPE_OPERATIONAL_DROOLS = "onap.policies.controlloop.operational.common.Drools";
94
95     @Autowired
96     private PolicyProvider policyProvider;
97     @Autowired
98     private PolicyTypeProvider policyTypeProvider;
99     @Autowired
100     private PolicyModelsProvider databaseProvider;
101
102     @Test
103     public void testFetchPolicies() {
104
105         assertThatThrownBy(() -> {
106             policyProvider.fetchPolicies("dummy", "1.0.0", null, null, null);
107         }).hasMessage("service template not found in database");
108
109         assertThatThrownBy(() -> {
110             policyProvider.fetchPolicies("dummy", "1.0.0", "dummy", null, null);
111         }).hasMessage("service template not found in database");
112
113         assertThatThrownBy(() -> {
114             policyProvider.fetchPolicies("dummy", "1.0.0", "dummy", "1.0.0", null);
115         }).hasMessage("service template not found in database");
116
117         assertThatThrownBy(() -> {
118             policyProvider.fetchPolicies(null, null, "dummy", "1.0.0", null);
119         }).hasMessage("service template not found in database");
120     }
121
122     @Test
123     public void testFetchLatestPolicies() {
124
125         assertThatThrownBy(() -> {
126             policyProvider.fetchLatestPolicies("dummy", "dummy", "dummy", null);
127         }).hasMessage("service template not found in database");
128     }
129
130     @Test
131     public void testFetchDeployedPolicies() {
132         String policyId = "onap.restart.tca";
133         String policyVersion = "1.0.0";
134         String policyTypeVersion = "1.0.0";
135         String policyTypeId = "onap.policies.monitoring.cdap.tca.hi.lo.app";
136
137         try {
138             assertEquals(0, databaseProvider.getPdpGroups("name").size());
139             assertEquals(0, databaseProvider.getFilteredPdpGroups(PdpGroupFilter.builder().build()).size());
140
141             assertNotNull(databaseProvider.createPdpGroups(new ArrayList<>()));
142             assertNotNull(databaseProvider.updatePdpGroups(new ArrayList<>()));
143
144             PdpGroup pdpGroup = new PdpGroup();
145             pdpGroup.setName("group");
146             pdpGroup.setVersion("1.2.3");
147             pdpGroup.setPdpGroupState(PdpState.ACTIVE);
148             pdpGroup.setPdpSubgroups(new ArrayList<>());
149             List<PdpGroup> groupList = new ArrayList<>();
150             groupList.add(pdpGroup);
151
152             PdpSubGroup pdpSubGroup = new PdpSubGroup();
153             pdpSubGroup.setPdpType("type");
154             pdpSubGroup.setDesiredInstanceCount(123);
155             pdpSubGroup.setSupportedPolicyTypes(new ArrayList<>());
156             pdpSubGroup.getSupportedPolicyTypes().add(new ToscaConceptIdentifier(policyTypeId, policyTypeVersion));
157             pdpGroup.getPdpSubgroups().add(pdpSubGroup);
158
159             Pdp pdp = new Pdp();
160             pdp.setInstanceId("type-0");
161             pdp.setMessage("Hello");
162             pdp.setPdpState(PdpState.ACTIVE);
163             pdp.setHealthy(PdpHealthStatus.UNKNOWN);
164             pdpSubGroup.setPdpInstances(new ArrayList<>());
165             pdpSubGroup.getPdpInstances().add(pdp);
166
167             // Create Pdp Groups
168             assertEquals(123, databaseProvider.createPdpGroups(groupList).get(0).getPdpSubgroups().get(0)
169                     .getDesiredInstanceCount());
170             assertEquals(1, databaseProvider.getPdpGroups("group").size());
171
172             // Create Policy Type
173             assertThatCode(() -> {
174                 ToscaServiceTemplate policyTypeServiceTemplate = standardYamlCoder
175                         .decode(ResourceUtils.getResourceAsString(POLICY_TYPE_RESOURCE), ToscaServiceTemplate.class);
176                 policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
177             }).doesNotThrowAnyException();
178
179             // Create Policy
180             assertThatCode(() -> {
181                 String policyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE);
182                 ToscaServiceTemplate policyServiceTemplate =
183                         standardCoder.decode(policyString, ToscaServiceTemplate.class);
184                 ToscaServiceTemplate serviceTemplate =
185                         policyProvider.createPolicy(policyTypeId, policyTypeVersion, policyServiceTemplate);
186                 assertFalse(serviceTemplate.getToscaTopologyTemplate().getPolicies().get(0).isEmpty());
187             }).doesNotThrowAnyException();
188
189             // Update pdpSubGroup
190             pdpSubGroup.setPolicies(new ArrayList<>());
191             pdpSubGroup.getPolicies().add(new ToscaConceptIdentifier(policyId, policyVersion));
192             assertEquals(1,
193                     databaseProvider.createPdpGroups(groupList).get(0).getPdpSubgroups().get(0).getPolicies().size());
194
195             // Test validateDeleteEligibility exception path(!pdpGroups.isEmpty())
196             assertThatThrownBy(() -> {
197                 policyProvider.deletePolicy("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0", "onap.restart.tca",
198                         "1.0.0");
199             }).hasMessageContaining("policy is in use, it is deployed in PDP group group subgroup type");
200         } catch (Exception exc) {
201             fail("Test should not throw an exception");
202         }
203     }
204
205     @Test
206     public void testCreatePolicy() throws Exception {
207
208         assertThatThrownBy(() -> {
209             policyProvider.createPolicy("dummy", "1.0.0", new ToscaServiceTemplate());
210         }).hasMessage("topology template not specified on service template");
211
212         ToscaServiceTemplate policyTypeServiceTemplate = standardYamlCoder
213                 .decode(ResourceUtils.getResourceAsString(POLICY_TYPE_RESOURCE), ToscaServiceTemplate.class);
214         policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
215
216         assertThatCode(() -> policyTypeProvider.createPolicyType(policyTypeServiceTemplate)).doesNotThrowAnyException();
217
218         assertThatThrownBy(() -> {
219             String badPolicyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE_WITH_BAD_POLICYTYPE_ID);
220             ToscaServiceTemplate badPolicyServiceTemplate =
221                     standardCoder.decode(badPolicyString, ToscaServiceTemplate.class);
222             policyProvider.createPolicy("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0",
223                     badPolicyServiceTemplate);
224         }).hasMessage(
225                 "Version not specified, the version of this TOSCA entity must be specified in "
226                         + "the type_version field");
227
228         assertThatThrownBy(() -> {
229             String badPolicyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE_WITH_BAD_POLICYTYPE_VERSION);
230             ToscaServiceTemplate badPolicyServiceTemplate =
231                     standardCoder.decode(badPolicyString, ToscaServiceTemplate.class);
232             policyProvider.createPolicy("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0",
233                     badPolicyServiceTemplate);
234         }).hasMessageContaining(
235                 "item \"policy type\" value \"onap.policies.monitoring.cdap.tca.hi.lo.app:2.0.0\" INVALID, not found");
236
237         assertThatThrownBy(() -> {
238             String badPolicyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE_WITH_NO_POLICY_VERSION);
239             ToscaServiceTemplate badPolicyServiceTemplate =
240                     standardCoder.decode(badPolicyString, ToscaServiceTemplate.class);
241             policyProvider.createPolicy("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0",
242                     badPolicyServiceTemplate);
243         }).hasMessageContaining("item \"version\" value \"0.0.0\" INVALID, is null");
244
245         String policyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE);
246         ToscaServiceTemplate policyServiceTemplate = standardCoder.decode(policyString, ToscaServiceTemplate.class);
247         ToscaServiceTemplate serviceTemplate = policyProvider
248                 .createPolicy("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0", policyServiceTemplate);
249         assertFalse(serviceTemplate.getToscaTopologyTemplate().getPolicies().get(0).isEmpty());
250
251         assertThatThrownBy(() -> {
252             String badPolicyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE_WITH_DIFFERENT_FIELDS);
253             ToscaServiceTemplate badPolicyServiceTemplate =
254                     standardCoder.decode(badPolicyString, ToscaServiceTemplate.class);
255             policyProvider.createPolicy("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0",
256                     badPolicyServiceTemplate);
257         }).hasMessageContaining(
258                 "item \"entity\" value \"onap.restart.tca:1.0.0\" INVALID, " + "does not equal existing entity");
259     }
260
261     @Test
262     public void testCreateOperationalDroolsPolicy() throws CoderException, PfModelException {
263         ToscaServiceTemplate policyTypeServiceTemplate = standardYamlCoder.decode(
264                 ResourceUtils.getResourceAsString(POLICY_TYPE_RESOURCE_OPERATIONAL_COMMON), ToscaServiceTemplate.class);
265
266         policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
267
268         policyTypeServiceTemplate = standardYamlCoder.decode(
269                 ResourceUtils.getResourceAsString(POLICY_TYPE_RESOURCE_OPERATIONAL_DROOLS), ToscaServiceTemplate.class);
270         policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
271
272         String policyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE_OPERATIONAL);
273         ToscaServiceTemplate policyServiceTemplate = standardCoder.decode(policyString, ToscaServiceTemplate.class);
274         ToscaServiceTemplate serviceTemplate =
275                 policyProvider.createPolicy(POLICY_TYPE_OPERATIONAL_DROOLS, "1.0.0", policyServiceTemplate);
276         assertFalse(serviceTemplate.getToscaTopologyTemplate().getPolicies().get(0).isEmpty());
277     }
278
279     @Test
280     public void testSimpleCreatePolicy() throws Exception {
281
282         assertThatThrownBy(() -> {
283             String multiPoliciesString = ResourceUtils.getResourceAsString(MULTIPLE_POLICIES_RESOURCE);
284             ToscaServiceTemplate multiPoliciesServiceTemplate =
285                     standardCoder.decode(multiPoliciesString, ToscaServiceTemplate.class);
286             policyProvider.createPolicies(multiPoliciesServiceTemplate);
287         }).hasMessageContaining(
288                 "no policy types are defined on the service template for the policies in the topology template");
289
290         // Create required policy types
291         ToscaServiceTemplate policyTypeServiceTemplate = standardYamlCoder.decode(
292                 ResourceUtils.getResourceAsString("policytypes/onap.policies.Optimization.yaml"),
293                 ToscaServiceTemplate.class);
294         policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
295
296         policyTypeServiceTemplate = standardYamlCoder.decode(
297                 ResourceUtils.getResourceAsString("policytypes/onap.policies.optimization.Resource.yaml"),
298                 ToscaServiceTemplate.class);
299         policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
300
301         policyTypeServiceTemplate = standardYamlCoder.decode(
302                 ResourceUtils
303                         .getResourceAsString("policytypes/onap.policies.optimization.resource.AffinityPolicy.yaml"),
304                 ToscaServiceTemplate.class);
305         policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
306
307         policyTypeServiceTemplate = standardYamlCoder.decode(
308                 ResourceUtils
309                         .getResourceAsString("policytypes/onap.policies.optimization.resource.DistancePolicy.yaml"),
310                 ToscaServiceTemplate.class);
311         policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
312
313         policyTypeServiceTemplate = standardYamlCoder.decode(
314                 ResourceUtils.getResourceAsString("policytypes/onap.policies.optimization.resource.Vim_fit.yaml"),
315                 ToscaServiceTemplate.class);
316         policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
317
318         policyTypeServiceTemplate = standardYamlCoder.decode(
319                 ResourceUtils.getResourceAsString("policytypes/onap.policies.optimization.resource.HpaPolicy.yaml"),
320                 ToscaServiceTemplate.class);
321         policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
322
323         policyTypeServiceTemplate = standardYamlCoder.decode(
324                 ResourceUtils.getResourceAsString("policytypes/onap.policies.optimization.resource.VnfPolicy.yaml"),
325                 ToscaServiceTemplate.class);
326         policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
327
328         policyTypeServiceTemplate = standardYamlCoder.decode(
329                 ResourceUtils.getResourceAsString("policytypes/onap.policies.optimization.Service.yaml"),
330                 ToscaServiceTemplate.class);
331         policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
332
333         policyTypeServiceTemplate = standardYamlCoder.decode(
334                 ResourceUtils
335                         .getResourceAsString("policytypes/onap.policies.optimization.service.SubscriberPolicy.yaml"),
336                 ToscaServiceTemplate.class);
337         policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
338
339         policyTypeServiceTemplate = standardYamlCoder.decode(
340                 ResourceUtils.getResourceAsString("policytypes/onap.policies.optimization.service.QueryPolicy.yaml"),
341                 ToscaServiceTemplate.class);
342         policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
343
344         policyTypeServiceTemplate = standardYamlCoder.decode(
345                 ResourceUtils.getResourceAsString("policytypes/onap.policies.monitoring.tcagen2.yaml"),
346                 ToscaServiceTemplate.class);
347         policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
348
349         // Create multiple policies in one call
350         String multiPoliciesString = ResourceUtils.getResourceAsString(MULTIPLE_POLICIES_RESOURCE);
351         ToscaServiceTemplate multiPoliciesServiceTemplate =
352                 standardCoder.decode(multiPoliciesString, ToscaServiceTemplate.class);
353
354         assertThatCode(() -> {
355             policyProvider.createPolicies(multiPoliciesServiceTemplate);
356             policyProvider.createPolicies(multiPoliciesServiceTemplate);
357         }).doesNotThrowAnyException();
358     }
359
360     @Test
361     public void testDeletePolicy() {
362
363         assertThatThrownBy(() -> {
364             policyProvider.deletePolicy("dummy", "1.0.0", "dummy", "1.0.0");
365         }).hasMessage("service template not found in database");
366
367         assertThatCode(() -> {
368             ToscaServiceTemplate policyTypeServiceTemplate = standardYamlCoder
369                     .decode(ResourceUtils.getResourceAsString(POLICY_TYPE_RESOURCE), ToscaServiceTemplate.class);
370             policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
371         }).doesNotThrowAnyException();
372
373         assertThatCode(() -> {
374             String policyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE);
375             ToscaServiceTemplate policyServiceTemplate = standardCoder.decode(policyString, ToscaServiceTemplate.class);
376             ToscaServiceTemplate serviceTemplate = policyProvider
377                     .createPolicy("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0", policyServiceTemplate);
378             assertFalse(serviceTemplate.getToscaTopologyTemplate().getPolicies().get(0).isEmpty());
379         }).doesNotThrowAnyException();
380
381         assertThatCode(() -> {
382             ToscaServiceTemplate serviceTemplate = policyProvider
383                     .deletePolicy("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0", "onap.restart.tca", "1.0.0");
384             assertFalse(serviceTemplate.getToscaTopologyTemplate().getPolicies().get(0).isEmpty());
385         }).doesNotThrowAnyException();
386
387         assertThatThrownBy(() -> {
388             policyProvider.deletePolicy("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0", "onap.restart.tca",
389                     "1.0.0");
390         }).hasMessageContaining("no policies found");
391     }
392
393     @Test
394     public void testFetchAllPolicies() throws Exception {
395         // Create Policy Type
396         ToscaServiceTemplate policyTypeServiceTemplate = standardYamlCoder
397                 .decode(ResourceUtils.getResourceAsString(POLICY_TYPE_RESOURCE), ToscaServiceTemplate.class);
398         policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
399
400         // Create Policy
401         String policyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE);
402         ToscaServiceTemplate policyServiceTemplate = standardCoder.decode(policyString, ToscaServiceTemplate.class);
403         ToscaServiceTemplate serviceTemplate = policyProvider
404                 .createPolicy("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0", policyServiceTemplate);
405
406         assertThat(serviceTemplate.getToscaTopologyTemplate().getPolicies()).hasSize(1);
407
408         // Test fetch all policies
409         policyTypeServiceTemplate = policyProvider.fetchPolicies(null, null, null, null, null);
410
411         assertThat(policyTypeServiceTemplate.getToscaTopologyTemplate().getPolicies()).hasSize(1);
412     }
413
414     @Test
415     public void testFetchSpecificPolicy_availablePolicy() throws Exception {
416         // Create Policy Type
417         ToscaServiceTemplate policyTypeServiceTemplate = standardYamlCoder
418                 .decode(ResourceUtils.getResourceAsString(POLICY_TYPE_RESOURCE), ToscaServiceTemplate.class);
419         policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
420
421         // Create Policy
422         String policyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE);
423         ToscaServiceTemplate policyServiceTemplate = standardCoder.decode(policyString, ToscaServiceTemplate.class);
424         ToscaServiceTemplate serviceTemplate = policyProvider
425                 .createPolicy("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0", policyServiceTemplate);
426
427         assertThat(serviceTemplate.getToscaTopologyTemplate().getPolicies()).hasSize(1);
428
429         // Test fetch specific policy
430         assertThat(policyProvider.fetchPolicies(null, null, "onap.restart.tca", "1.0.0", null)
431                 .getToscaTopologyTemplate().getPolicies()).hasSize(1);
432     }
433
434     @Test
435     public void testFetchSpecificPolicy_unavailablePolicy() throws Exception {
436         // Create Policy Type
437         ToscaServiceTemplate policyTypeServiceTemplate = standardYamlCoder
438                 .decode(ResourceUtils.getResourceAsString(POLICY_TYPE_RESOURCE), ToscaServiceTemplate.class);
439         policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
440
441         // Create Policy
442         String policyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE);
443         ToscaServiceTemplate policyServiceTemplate = standardCoder.decode(policyString, ToscaServiceTemplate.class);
444         ToscaServiceTemplate serviceTemplate = policyProvider
445                 .createPolicy("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0", policyServiceTemplate);
446         assertNotNull(serviceTemplate.getToscaTopologyTemplate().getPolicies());
447         assertThat(serviceTemplate.getToscaTopologyTemplate().getPolicies()).hasSize(1);
448
449         // Test fetch specific policy
450         assertThatThrownBy(() -> policyProvider.fetchPolicies(null, null, "onap.restart.tca", "2.0.0", null))
451                 .hasMessageContaining("policies for onap.restart.tca:2.0.0 do not exist");
452     }
453
454     @Test
455     public void testDeleteSpecificPolicy_availablePolicy() throws Exception {
456         ToscaServiceTemplate policyTypeServiceTemplate = standardYamlCoder
457                 .decode(ResourceUtils.getResourceAsString(POLICY_TYPE_RESOURCE), ToscaServiceTemplate.class);
458         policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
459
460         String policyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE);
461         ToscaServiceTemplate policyServiceTemplate = standardCoder.decode(policyString, ToscaServiceTemplate.class);
462         ToscaServiceTemplate serviceTemplate = policyProvider
463                 .createPolicy("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0", policyServiceTemplate);
464         assertThat(serviceTemplate.getToscaTopologyTemplate().getPolicies()).hasSize(1);
465
466         ToscaServiceTemplate svcTemplate = policyProvider.deletePolicy(null, null, "onap.restart.tca", "1.0.0");
467         assertThat(svcTemplate.getToscaTopologyTemplate().getPolicies()).hasSize(1);
468     }
469
470     @Test
471     public void testDeleteSpecificPolicy_unavailablePolicy() throws Exception {
472         ToscaServiceTemplate policyTypeServiceTemplate = standardYamlCoder
473                 .decode(ResourceUtils.getResourceAsString(POLICY_TYPE_RESOURCE), ToscaServiceTemplate.class);
474         policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
475
476         String policyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE);
477         ToscaServiceTemplate policyServiceTemplate = standardCoder.decode(policyString, ToscaServiceTemplate.class);
478         ToscaServiceTemplate serviceTemplate = policyProvider
479                 .createPolicy("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0", policyServiceTemplate);
480         assertThat(serviceTemplate.getToscaTopologyTemplate().getPolicies()).hasSize(1);
481
482         assertThatThrownBy(() -> policyProvider.deletePolicy(null, null, "onap.restart.tca", "2.0.0"))
483                 .hasMessageContaining("not found");
484
485         assertThatThrownBy(() -> policyProvider.deletePolicy(null, null, "onap.restart.tca.unavailable", "1.0.0"))
486                 .hasMessageContaining("not found");
487     }
488 }