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