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