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