Remove base64 encoding of password from api
[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 =
109             new ApiParameterGroup("ApiGroup", null, providerParams, Collections.emptyList(), 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,
196                 databaseProvider.createPdpGroups(groupList).get(0).getPdpSubgroups().get(0).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 the "
253                 + "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             "policy type onap.policies.monitoring.cdap.tca.hi.lo.app:2.0.0 referenced in policy 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("key version is a null version");
271
272         String policyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE);
273         ToscaServiceTemplate policyServiceTemplate = standardCoder.decode(policyString, ToscaServiceTemplate.class);
274         ToscaServiceTemplate serviceTemplate =
275             policyProvider.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("entity in incoming fragment 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 =
318             standardYamlCoder.decode(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.getResourceAsString("policytypes/onap.policies.optimization.resource.AffinityPolicy.yaml"),
329             ToscaServiceTemplate.class);
330         policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
331
332         policyTypeServiceTemplate = standardYamlCoder.decode(
333             ResourceUtils.getResourceAsString("policytypes/onap.policies.optimization.resource.DistancePolicy.yaml"),
334             ToscaServiceTemplate.class);
335         policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
336
337         policyTypeServiceTemplate = standardYamlCoder.decode(
338             ResourceUtils.getResourceAsString("policytypes/onap.policies.optimization.resource.Vim_fit.yaml"),
339             ToscaServiceTemplate.class);
340         policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
341
342         policyTypeServiceTemplate = standardYamlCoder.decode(
343             ResourceUtils.getResourceAsString("policytypes/onap.policies.optimization.resource.HpaPolicy.yaml"),
344             ToscaServiceTemplate.class);
345         policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
346
347         policyTypeServiceTemplate = standardYamlCoder.decode(
348             ResourceUtils.getResourceAsString("policytypes/onap.policies.optimization.resource.VnfPolicy.yaml"),
349             ToscaServiceTemplate.class);
350         policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
351
352         policyTypeServiceTemplate = standardYamlCoder.decode(
353             ResourceUtils.getResourceAsString("policytypes/onap.policies.optimization.Service.yaml"),
354             ToscaServiceTemplate.class);
355         policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
356
357         policyTypeServiceTemplate = standardYamlCoder.decode(
358             ResourceUtils.getResourceAsString("policytypes/onap.policies.optimization.service.SubscriberPolicy.yaml"),
359             ToscaServiceTemplate.class);
360         policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
361
362         policyTypeServiceTemplate = standardYamlCoder.decode(
363             ResourceUtils.getResourceAsString("policytypes/onap.policies.optimization.service.QueryPolicy.yaml"),
364             ToscaServiceTemplate.class);
365         policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
366
367         policyTypeServiceTemplate = standardYamlCoder.decode(
368             ResourceUtils.getResourceAsString("policytypes/onap.policies.monitoring.tcagen2.yaml"),
369             ToscaServiceTemplate.class);
370         policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
371
372         // Create multiple policies in one call
373         String multiPoliciesString = ResourceUtils.getResourceAsString(MULTIPLE_POLICIES_RESOURCE);
374         ToscaServiceTemplate multiPoliciesServiceTemplate =
375             standardCoder.decode(multiPoliciesString, ToscaServiceTemplate.class);
376
377         assertThatCode(() -> {
378             policyProvider.createPolicies(multiPoliciesServiceTemplate);
379             policyProvider.createPolicies(multiPoliciesServiceTemplate);
380         }).doesNotThrowAnyException();
381     }
382
383     @Test
384     public void testDeletePolicy() {
385
386         assertThatThrownBy(() -> {
387             policyProvider.deletePolicy("dummy", "1.0.0", "dummy", "1.0.0");
388         }).hasMessage("service template not found in database");
389
390         assertThatCode(() -> {
391             ToscaServiceTemplate policyTypeServiceTemplate = standardYamlCoder
392                 .decode(ResourceUtils.getResourceAsString(POLICY_TYPE_RESOURCE), ToscaServiceTemplate.class);
393             policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
394         }).doesNotThrowAnyException();
395
396         assertThatCode(() -> {
397             String policyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE);
398             ToscaServiceTemplate policyServiceTemplate = standardCoder.decode(policyString, ToscaServiceTemplate.class);
399             ToscaServiceTemplate serviceTemplate = policyProvider
400                 .createPolicy("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0", policyServiceTemplate);
401             assertFalse(serviceTemplate.getToscaTopologyTemplate().getPolicies().get(0).isEmpty());
402         }).doesNotThrowAnyException();
403
404         assertThatCode(() -> {
405             ToscaServiceTemplate serviceTemplate = policyProvider
406                 .deletePolicy("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0", "onap.restart.tca", "1.0.0");
407             assertFalse(serviceTemplate.getToscaTopologyTemplate().getPolicies().get(0).isEmpty());
408         }).doesNotThrowAnyException();
409
410         assertThatThrownBy(() -> {
411             policyProvider.deletePolicy("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0", "onap.restart.tca",
412                 "1.0.0");
413         }).hasMessageContaining("no policies found");
414     }
415
416     @Test
417     public void testFetchAllPolicies() throws Exception {
418         // Create Policy Type
419         ToscaServiceTemplate policyTypeServiceTemplate = standardYamlCoder
420             .decode(ResourceUtils.getResourceAsString(POLICY_TYPE_RESOURCE), ToscaServiceTemplate.class);
421         policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
422
423         // Create Policy
424         String policyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE);
425         ToscaServiceTemplate policyServiceTemplate =
426             standardCoder.decode(policyString, ToscaServiceTemplate.class);
427         ToscaServiceTemplate serviceTemplate = policyProvider.createPolicy(
428             "onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0", policyServiceTemplate);
429
430         assertThat(serviceTemplate.getToscaTopologyTemplate().getPolicies()).hasSize(1);
431
432         // Test fetch all policies
433         policyTypeServiceTemplate = policyProvider
434             .fetchPolicies(null,  null, null, null, null);
435
436         assertThat(policyTypeServiceTemplate.getToscaTopologyTemplate().getPolicies()).hasSize(1);
437     }
438
439     @Test
440     public void testFetchSpecificPolicy_availablePolicy() throws Exception {
441         // Create Policy Type
442         ToscaServiceTemplate policyTypeServiceTemplate = standardYamlCoder
443             .decode(ResourceUtils.getResourceAsString(POLICY_TYPE_RESOURCE), ToscaServiceTemplate.class);
444         policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
445
446         // Create Policy
447         String policyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE);
448         ToscaServiceTemplate policyServiceTemplate =
449             standardCoder.decode(policyString, ToscaServiceTemplate.class);
450         ToscaServiceTemplate serviceTemplate = policyProvider.createPolicy(
451             "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",
457             "1.0.0", null).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 =
470             standardCoder.decode(policyString, ToscaServiceTemplate.class);
471         ToscaServiceTemplate serviceTemplate = policyProvider.createPolicy(
472             "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(
478             null,  null, "onap.restart.tca", "2.0.0", null))
479             .hasMessageContaining("policies for onap.restart.tca:2.0.0 do not exist");
480     }
481
482     @Test
483     public void testDeleteSpecificPolicy_availablePolicy() throws Exception {
484         ToscaServiceTemplate policyTypeServiceTemplate = standardYamlCoder
485             .decode(ResourceUtils.getResourceAsString(POLICY_TYPE_RESOURCE), ToscaServiceTemplate.class);
486         policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
487
488         String policyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE);
489         ToscaServiceTemplate policyServiceTemplate = standardCoder.decode(policyString, ToscaServiceTemplate.class);
490         ToscaServiceTemplate serviceTemplate = policyProvider.createPolicy(
491             "onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0", policyServiceTemplate);
492         assertThat(serviceTemplate.getToscaTopologyTemplate().getPolicies()).hasSize(1);
493
494         ToscaServiceTemplate svcTemplate = policyProvider
495             .deletePolicy(null, null, "onap.restart.tca", "1.0.0");
496         assertThat(svcTemplate.getToscaTopologyTemplate().getPolicies()).hasSize(1);
497     }
498
499     @Test
500     public void testDeleteSpecificPolicy_unavailablePolicy() throws Exception {
501         ToscaServiceTemplate policyTypeServiceTemplate = standardYamlCoder
502             .decode(ResourceUtils.getResourceAsString(POLICY_TYPE_RESOURCE), ToscaServiceTemplate.class);
503         policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
504
505         String policyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE);
506         ToscaServiceTemplate policyServiceTemplate = standardCoder.decode(policyString, ToscaServiceTemplate.class);
507         ToscaServiceTemplate serviceTemplate = policyProvider.createPolicy(
508             "onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0", policyServiceTemplate);
509         assertThat(serviceTemplate.getToscaTopologyTemplate().getPolicies()).hasSize(1);
510
511         assertThatThrownBy(() -> policyProvider
512             .deletePolicy(null, null, "onap.restart.tca", "2.0.0"))
513             .hasMessageContaining("not found");
514
515         assertThatThrownBy(() -> policyProvider.deletePolicy(
516             null, null, "onap.restart.tca.unavailable", "1.0.0"))
517             .hasMessageContaining("not found");
518     }
519 }