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