5eee1e674ef06f381306d3abce9160506a80f667
[policy/api.git] / main / src / test / java / org / onap / policy / api / main / rest / provider / TestLegacyOperationalPolicyProvider.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP Policy API
4  * ================================================================================
5  * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19  * SPDX-License-Identifier: Apache-2.0
20  * ============LICENSE_END=========================================================
21  */
22
23 package org.onap.policy.api.main.rest.provider;
24
25 import static org.assertj.core.api.Assertions.assertThatCode;
26 import static org.assertj.core.api.Assertions.assertThatThrownBy;
27 import static org.junit.Assert.assertEquals;
28 import static org.junit.Assert.assertNotNull;
29 import static org.junit.Assert.assertTrue;
30
31 import java.util.Base64;
32 import org.junit.AfterClass;
33 import org.junit.BeforeClass;
34 import org.junit.Test;
35 import org.onap.policy.api.main.parameters.ApiParameterGroup;
36 import org.onap.policy.common.parameters.ParameterService;
37 import org.onap.policy.common.utils.coder.StandardCoder;
38 import org.onap.policy.common.utils.resources.ResourceUtils;
39 import org.onap.policy.models.base.PfModelException;
40 import org.onap.policy.models.provider.PolicyModelsProviderParameters;
41 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
42 import org.onap.policy.models.tosca.legacy.concepts.LegacyOperationalPolicy;
43
44 /**
45  * This class performs unit test of {@link LegacyOperationalPolicyProvider}
46  *
47  * @author Chenfei Gao (cgao@research.att.com)
48  */
49 public class TestLegacyOperationalPolicyProvider {
50
51     private static LegacyOperationalPolicyProvider operationalPolicyProvider;
52     private static PolicyTypeProvider policyTypeProvider;
53     private static PolicyModelsProviderParameters providerParams;
54     private static ApiParameterGroup apiParamGroup;
55     private static StandardCoder standardCoder;
56
57     private static final String POLICY_RESOURCE = "policies/vCPE.policy.operational.input.json";
58     private static final String POLICY_TYPE_RESOURCE = "policytypes/onap.policies.controlloop.Operational.json";
59     private static final String POLICY_TYPE_ID = "onap.policies.controlloop.Operational:1.0.0";
60     private static final String POLICY_ID = "operational.restart:1.0.0";
61
62     /**
63      * Initializes parameters.
64      *
65      * @throws PfModelException the PfModel parsing exception
66      */
67     @BeforeClass
68     public static void setupParameters() throws PfModelException {
69
70         standardCoder = new StandardCoder();
71         providerParams = new PolicyModelsProviderParameters();
72         providerParams.setDatabaseDriver("org.h2.Driver");
73         providerParams.setDatabaseUrl("jdbc:h2:mem:testdb");
74         providerParams.setDatabaseUser("policy");
75         providerParams.setDatabasePassword(Base64.getEncoder().encodeToString("P01icY".getBytes()));
76         providerParams.setPersistenceUnit("ToscaConceptTest");
77         apiParamGroup = new ApiParameterGroup("ApiGroup", null, providerParams);
78         ParameterService.register(apiParamGroup, true);
79         operationalPolicyProvider = new LegacyOperationalPolicyProvider();
80         policyTypeProvider = new PolicyTypeProvider();
81     }
82
83     /**
84      * Closes up DB connections and deregisters API parameter group.
85      *
86      * @throws PfModelException the PfModel parsing exception
87      */
88     @AfterClass
89     public static void tearDown() throws PfModelException {
90
91         operationalPolicyProvider.close();
92         policyTypeProvider.close();
93         ParameterService.deregister(apiParamGroup);
94     }
95
96     @Test
97     public void testFetchOperationalPolicy() {
98
99         assertThatThrownBy(() -> {
100             operationalPolicyProvider.fetchOperationalPolicy("dummy", null);
101         }).hasMessage("no policy found for policy: dummy:null");
102
103         assertThatThrownBy(() -> {
104             operationalPolicyProvider.fetchOperationalPolicy("dummy", "dummy");
105         }).hasMessage("legacy policy version is not an integer");
106
107         assertThatCode(() -> {
108             String policyTypeString = ResourceUtils.getResourceAsString(POLICY_TYPE_RESOURCE);
109             ToscaServiceTemplate policyTypeServiceTemplate =
110                     standardCoder.decode(policyTypeString, ToscaServiceTemplate.class);
111             policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
112
113             String policyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE);
114             LegacyOperationalPolicy policyToCreate = standardCoder.decode(policyString, LegacyOperationalPolicy.class);
115             LegacyOperationalPolicy createdPolicy = operationalPolicyProvider.createOperationalPolicy(policyToCreate);
116             assertNotNull(createdPolicy);
117
118             policyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE);
119             policyToCreate = standardCoder.decode(policyString, LegacyOperationalPolicy.class);
120             createdPolicy = operationalPolicyProvider.createOperationalPolicy(policyToCreate);
121             assertNotNull(createdPolicy);
122
123             LegacyOperationalPolicy firstVersion =
124                     operationalPolicyProvider.fetchOperationalPolicy("operational.restart", "1");
125             assertNotNull(firstVersion);
126             assertEquals("1",
127                     firstVersion.getPolicyVersion());
128
129             LegacyOperationalPolicy latestVersion =
130                     operationalPolicyProvider.fetchOperationalPolicy("operational.restart", null);
131             assertNotNull(latestVersion);
132             assertEquals("2",
133                     latestVersion.getPolicyVersion());
134         }).doesNotThrowAnyException();
135
136         assertThatThrownBy(() -> {
137             operationalPolicyProvider.fetchOperationalPolicy("operational.restart", "1.0.0");
138         }).hasMessage("legacy policy version is not an integer");
139
140         assertThatThrownBy(() -> {
141             operationalPolicyProvider.fetchOperationalPolicy("operational.restart", "latest");;
142         }).hasMessage("legacy policy version is not an integer");
143
144         assertThatCode(() -> {
145             operationalPolicyProvider.deleteOperationalPolicy("operational.restart", "1");
146             operationalPolicyProvider.deleteOperationalPolicy("operational.restart", "2");
147             policyTypeProvider.deletePolicyType("onap.policies.controlloop.Operational", "1.0.0");
148         }).doesNotThrowAnyException();
149     }
150
151     @Test
152     public void testCreateOperationalPolicy() {
153
154         assertThatThrownBy(() -> {
155             String policyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE);
156             LegacyOperationalPolicy policyToCreate = standardCoder.decode(policyString, LegacyOperationalPolicy.class);
157             operationalPolicyProvider.createOperationalPolicy(policyToCreate);
158         }).hasMessage("policy type " + POLICY_TYPE_ID + " for policy " + POLICY_ID + " does not exist");
159
160         assertThatCode(() -> {
161             String policyTypeString = ResourceUtils.getResourceAsString(POLICY_TYPE_RESOURCE);
162             ToscaServiceTemplate policyTypeServiceTemplate =
163                     standardCoder.decode(policyTypeString, ToscaServiceTemplate.class);
164             policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
165
166             String policyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE);
167             LegacyOperationalPolicy policyToCreate = standardCoder.decode(policyString, LegacyOperationalPolicy.class);
168             LegacyOperationalPolicy createdPolicy = operationalPolicyProvider.createOperationalPolicy(policyToCreate);
169             assertNotNull(createdPolicy);
170             assertEquals("operational.restart", createdPolicy.getPolicyId());
171             assertTrue(createdPolicy.getContent()
172                     .startsWith("controlLoop%3A%0A%20%20version%3A%202.0.0%0A%20%20"));
173         }).doesNotThrowAnyException();
174     }
175
176     @Test
177     public void testDeleteOperationalPolicy() {
178
179         assertThatThrownBy(() -> {
180             operationalPolicyProvider.deleteOperationalPolicy("dummy", null);
181         }).hasMessage("version is marked @NonNull but is null");
182
183         assertThatThrownBy(() -> {
184             operationalPolicyProvider.deleteOperationalPolicy("dummy", "dummy");
185         }).hasMessage("legacy policy version is not an integer");
186
187         assertThatCode(() -> {
188             String policyTypeString = ResourceUtils.getResourceAsString(POLICY_TYPE_RESOURCE);
189             ToscaServiceTemplate policyTypeServiceTemplate =
190                     standardCoder.decode(policyTypeString, ToscaServiceTemplate.class);
191             policyTypeProvider.createPolicyType(policyTypeServiceTemplate);
192
193             String policyString = ResourceUtils.getResourceAsString(POLICY_RESOURCE);
194             LegacyOperationalPolicy policyToCreate = standardCoder.decode(policyString, LegacyOperationalPolicy.class);
195             LegacyOperationalPolicy createdPolicy = operationalPolicyProvider.createOperationalPolicy(policyToCreate);
196             assertNotNull(createdPolicy);
197
198             LegacyOperationalPolicy deletedPolicy = operationalPolicyProvider
199                     .deleteOperationalPolicy("operational.restart", "1");
200             assertNotNull(deletedPolicy);
201             assertEquals("operational.restart", deletedPolicy.getPolicyId());
202             assertTrue(deletedPolicy.getContent()
203                     .startsWith("controlLoop%3A%0A%20%20version%3A%202.0.0%0A%20%20"));
204         }).doesNotThrowAnyException();
205
206         assertThatThrownBy(() -> {
207             operationalPolicyProvider.deleteOperationalPolicy("operational.restart", "1");
208         }).hasMessage("no policy found for policy: operational.restart:1");
209
210         assertThatCode(() -> {
211             policyTypeProvider.deletePolicyType("onap.policies.controlloop.Operational", "1.0.0");
212         }).doesNotThrowAnyException();
213     }
214 }