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