Preload default policies
[policy/api.git] / main / src / test / java / org / onap / policy / api / main / rest / provider / TestPolicyTypeProvider.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  * ================================================================================
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  *      http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  *
20  * SPDX-License-Identifier: Apache-2.0
21  * ============LICENSE_END=========================================================
22  */
23
24 package org.onap.policy.api.main.rest.provider;
25
26 import static org.assertj.core.api.Assertions.assertThatCode;
27 import static org.assertj.core.api.Assertions.assertThatThrownBy;
28 import static org.junit.Assert.assertFalse;
29 import static org.junit.Assert.assertNotNull;
30
31 import java.util.Base64;
32 import java.util.Collections;
33
34 import org.junit.AfterClass;
35 import org.junit.BeforeClass;
36 import org.junit.Test;
37 import org.onap.policy.api.main.parameters.ApiParameterGroup;
38 import org.onap.policy.common.parameters.ParameterService;
39 import org.onap.policy.common.utils.coder.CoderException;
40 import org.onap.policy.common.utils.coder.StandardYamlCoder;
41 import org.onap.policy.common.utils.resources.ResourceUtils;
42 import org.onap.policy.models.base.PfModelException;
43 import org.onap.policy.models.provider.PolicyModelsProviderParameters;
44 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyType;
45 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
46
47 /**
48  * This class performs unit test of {@link PolicyTypeProvider}.
49  *
50  * @author Chenfei Gao (cgao@research.att.com)
51  */
52 public class TestPolicyTypeProvider {
53
54     private static PolicyTypeProvider policyTypeProvider;
55     private static PolicyProvider policyProvider;
56     private static PolicyModelsProviderParameters providerParams;
57     private static ApiParameterGroup apiParamGroup;
58     private static StandardYamlCoder standardYamlCoder;
59
60     private static final String POLICY_TYPE_VERSION = "1.0.0";
61
62     private static final String POLICY_RESOURCE_MONITORING = "policies/vCPE.policy.monitoring.input.tosca.yaml";
63     private static final String POLICY_TYPE_RESOURCE_MONITORING =
64             "policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app.yaml";
65     private static final String POLICY_TYPE_RESOURCE_WITH_NO_VERSION =
66             "policytypes/onap.policies.optimization.Resource.no.version.yaml";
67     private static final String POLICY_TYPE_NAME_MONITORING = "onap.policies.monitoring.cdap.tca.hi.lo.app";
68
69     public static final String POLICY_TYPE_RESOURCE_OPERATIONAL_COMMON =
70             "policytypes/onap.policies.controlloop.operational.Common.yaml";
71     public static final String POLICY_TYPE_RESOURCE_OPERATIONAL_DROOLS =
72             "policytypes/onap.policies.controlloop.operational.common.Drools.yaml";
73     public static final String POLICY_TYPE_RESOURCE_OPERATIONAL_APEX =
74             "policytypes/onap.policies.controlloop.operational.common.Apex.yaml";
75     public static final String POLICY_TYPE_OPERATIONAL_COMMON = "onap.policies.controlloop.operational.Common";
76     public static final String POLICY_TYPE_OPERATIONAL_APEX = "onap.policies.controlloop.operational.common.Apex";
77     public static final String POLICY_TYPE_OPERATIONAL_DROOLS = "onap.policies.controlloop.operational.common.Drools";
78
79     /**
80      * Initializes parameters.
81      *
82      * @throws PfModelException the PfModel parsing exception
83      */
84     @BeforeClass
85     public static void setupParameters() throws PfModelException {
86
87         standardYamlCoder = new StandardYamlCoder();
88         providerParams = new PolicyModelsProviderParameters();
89         providerParams.setDatabaseDriver("org.h2.Driver");
90         providerParams.setDatabaseUrl("jdbc:h2:mem:testdb");
91         providerParams.setDatabaseUser("policy");
92         providerParams.setDatabasePassword(Base64.getEncoder().encodeToString("P01icY".getBytes()));
93         providerParams.setPersistenceUnit("ToscaConceptTest");
94         apiParamGroup = new ApiParameterGroup("ApiGroup", null, providerParams,
95                 Collections.emptyList(), Collections.emptyList());
96         ParameterService.register(apiParamGroup, true);
97         policyTypeProvider = new PolicyTypeProvider();
98         policyProvider = new PolicyProvider();
99     }
100
101     /**
102      * Closes up DB connections and deregisters API parameter group.
103      *
104      * @throws PfModelException the PfModel parsing exception
105      */
106     @AfterClass
107     public static void tearDown() throws PfModelException {
108
109         policyTypeProvider.close();
110         policyProvider.close();
111         ParameterService.deregister(apiParamGroup);
112     }
113
114     @Test
115     public void testFetchPolicyTypes() throws Exception {
116
117         ToscaServiceTemplate serviceTemplate = policyTypeProvider.fetchPolicyTypes(null, null);
118         assertFalse(serviceTemplate.getPolicyTypes().isEmpty());
119
120         assertThatThrownBy(() -> {
121             policyTypeProvider.fetchPolicyTypes("dummy", null);
122         }).hasMessage("policy types for filter ToscaPolicyTypeFilter(name=dummy, version=null) do not exist");
123
124         assertThatThrownBy(() -> {
125             policyTypeProvider.fetchPolicyTypes("dummy", "dummy");
126         }).hasMessage("policy types for filter ToscaPolicyTypeFilter(name=dummy, version=dummy) do not exist");
127     }
128
129     @Test
130     public void testFetchLatestPolicyTypes() {
131
132         assertThatThrownBy(() -> {
133             policyTypeProvider.fetchLatestPolicyTypes("dummy");
134         }).hasMessage("policy types for filter ToscaPolicyTypeFilter(name=dummy, version=LATEST) do not exist");
135     }
136
137     @Test
138     public void testCreatePolicyType() throws Exception {
139
140         ToscaServiceTemplate policyTypeServiceTemplate = standardYamlCoder
141                 .decode(ResourceUtils.getResourceAsString(POLICY_TYPE_RESOURCE_MONITORING), ToscaServiceTemplate.class);
142         ToscaServiceTemplate serviceTemplate = policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
143         assertFalse(serviceTemplate.getPolicyTypes().isEmpty());
144
145         assertThatCode(() -> {
146             policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
147         }).doesNotThrowAnyException();
148
149         ToscaPolicyType policyType =
150                 policyTypeServiceTemplate.getPolicyTypes().get("onap.policies.monitoring.cdap.tca.hi.lo.app");
151         policyType.setDescription("Some other description");
152
153         assertThatThrownBy(() -> {
154             policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
155         }).hasMessageContaining("entity in incoming fragment does not equal existing entity");
156
157         assertThatThrownBy(() -> {
158             ToscaServiceTemplate badPolicyType =
159                     standardYamlCoder.decode(ResourceUtils.getResourceAsString(POLICY_TYPE_RESOURCE_WITH_NO_VERSION),
160                             ToscaServiceTemplate.class);
161             policyTypeProvider.createPolicyType(badPolicyType);
162         }).hasMessageContaining("INVALID:key version is a null version");
163
164         policyTypeProvider.deletePolicyType(POLICY_TYPE_NAME_MONITORING, POLICY_TYPE_VERSION);
165     }
166
167     @Test
168     public void testCreateOperationalPolicyTypes() throws CoderException, PfModelException {
169         ToscaServiceTemplate policyTypeServiceTemplate = standardYamlCoder.decode(
170                 ResourceUtils.getResourceAsString(POLICY_TYPE_RESOURCE_OPERATIONAL_COMMON), ToscaServiceTemplate.class);
171         ToscaServiceTemplate serviceTemplate = policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
172
173         assertNotNull(serviceTemplate.getPolicyTypes().get(POLICY_TYPE_OPERATIONAL_COMMON));
174
175         policyTypeServiceTemplate = standardYamlCoder.decode(
176                 ResourceUtils.getResourceAsString(POLICY_TYPE_RESOURCE_OPERATIONAL_DROOLS), ToscaServiceTemplate.class);
177         serviceTemplate = policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
178         assertNotNull(serviceTemplate.getPolicyTypes().get(POLICY_TYPE_OPERATIONAL_DROOLS));
179
180         policyTypeProvider.deletePolicyType(POLICY_TYPE_OPERATIONAL_DROOLS, POLICY_TYPE_VERSION);
181         policyTypeProvider.deletePolicyType(POLICY_TYPE_OPERATIONAL_COMMON, POLICY_TYPE_VERSION);
182     }
183
184     @Test
185     public void testCreateApexOperationalPolicyTypes() throws CoderException, PfModelException {
186         ToscaServiceTemplate policyTypeServiceTemplate = standardYamlCoder.decode(
187                 ResourceUtils.getResourceAsString(POLICY_TYPE_RESOURCE_OPERATIONAL_COMMON), ToscaServiceTemplate.class);
188         ToscaServiceTemplate serviceTemplate = policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
189         policyTypeServiceTemplate = standardYamlCoder.decode(
190                 ResourceUtils.getResourceAsString(POLICY_TYPE_RESOURCE_OPERATIONAL_APEX), ToscaServiceTemplate.class);
191         serviceTemplate = policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
192         assertNotNull(serviceTemplate.getPolicyTypes().get(POLICY_TYPE_OPERATIONAL_APEX));
193         policyTypeProvider.deletePolicyType(POLICY_TYPE_OPERATIONAL_APEX, POLICY_TYPE_VERSION);
194     }
195
196     @Test
197     public void testDeletePolicyType() throws Exception {
198
199         ToscaServiceTemplate policyTypeServiceTemplate = standardYamlCoder
200                 .decode(ResourceUtils.getResourceAsString(POLICY_TYPE_RESOURCE_MONITORING), ToscaServiceTemplate.class);
201         ToscaServiceTemplate serviceTemplate = policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
202         assertFalse(serviceTemplate.getPolicyTypes().isEmpty());
203
204         ToscaServiceTemplate policyServiceTemplate = standardYamlCoder
205                 .decode(ResourceUtils.getResourceAsString(POLICY_RESOURCE_MONITORING), ToscaServiceTemplate.class);
206         policyProvider.createPolicy("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0", policyServiceTemplate);
207
208         String exceptionMessage = "policy type onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 is in use, "
209                 + "it is referenced in policy onap.restart.tca:1.0.0";
210         assertThatThrownBy(() -> {
211             policyTypeProvider.deletePolicyType("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0");
212         }).hasMessage(exceptionMessage);
213
214         serviceTemplate = policyProvider.deletePolicy("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0",
215                 "onap.restart.tca", "1.0.0");
216         assertFalse(serviceTemplate.getToscaTopologyTemplate().getPolicies().get(0).isEmpty());
217
218         serviceTemplate = policyTypeProvider.deletePolicyType("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0");
219         assertFalse(serviceTemplate.getPolicyTypes().isEmpty());
220
221         assertThatThrownBy(() -> {
222             policyTypeProvider.deletePolicyType("onap.policies.monitoring.cdap.tca.hi.lo.app", "1.0.0");
223         }).hasMessage("policy type onap.policies.monitoring.cdap.tca.hi.lo.app:1.0.0 not found");
224     }
225 }