Set default and check existance of Policy Type
[policy/models.git] / models-tosca / src / test / java / org / onap / policy / models / tosca / simple / provider / SimpleToscaProviderTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2019 Nordix Foundation.
4  * ================================================================================
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  * SPDX-License-Identifier: Apache-2.0
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.onap.policy.models.tosca.simple.provider;
22
23 import static org.assertj.core.api.Assertions.assertThatThrownBy;
24 import static org.junit.Assert.assertEquals;
25 import static org.junit.Assert.assertNotNull;
26 import static org.junit.Assert.assertTrue;
27 import static org.junit.Assert.fail;
28
29 import java.util.Properties;
30
31 import org.eclipse.persistence.config.PersistenceUnitProperties;
32 import org.junit.After;
33 import org.junit.Before;
34 import org.junit.Test;
35 import org.onap.policy.common.utils.coder.CoderException;
36 import org.onap.policy.common.utils.coder.StandardCoder;
37 import org.onap.policy.common.utils.resources.ResourceUtils;
38 import org.onap.policy.models.base.PfConceptKey;
39 import org.onap.policy.models.base.PfModelException;
40 import org.onap.policy.models.dao.DaoParameters;
41 import org.onap.policy.models.dao.PfDao;
42 import org.onap.policy.models.dao.PfDaoFactory;
43 import org.onap.policy.models.dao.impl.DefaultPfDao;
44 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
45 import org.onap.policy.models.tosca.authorative.provider.AuthorativeToscaProvider;
46 import org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicies;
47 import org.onap.policy.models.tosca.simple.concepts.JpaToscaServiceTemplate;
48 import org.onap.policy.models.tosca.simple.concepts.JpaToscaTopologyTemplate;
49 import org.yaml.snakeyaml.Yaml;
50
51 /**
52  * Test the {@link SimpleToscaProvider} class.
53  *
54  * @author Liam Fallon (liam.fallon@est.tech)
55  */
56 public class SimpleToscaProviderTest {
57     private PfDao pfDao;
58     private StandardCoder standardCoder;
59
60     /**
61      * Set up the DAO towards the database.
62      *
63      * @throws Exception on database errors
64      */
65     @Before
66     public void setupDao() throws Exception {
67         final DaoParameters daoParameters = new DaoParameters();
68         daoParameters.setPluginClass(DefaultPfDao.class.getCanonicalName());
69
70         daoParameters.setPersistenceUnit("ToscaConceptTest");
71
72         Properties jdbcProperties = new Properties();
73         jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_USER, "policy");
74         jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_PASSWORD, "P01icY");
75
76         // H2, use "org.mariadb.jdbc.Driver" and "jdbc:mariadb://localhost:3306/policy" for locally installed MariaDB
77         jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_DRIVER, "org.h2.Driver");
78         jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_URL, "jdbc:h2:mem:testdb");
79
80         daoParameters.setJdbcProperties(jdbcProperties);
81
82         pfDao = new PfDaoFactory().createPfDao(daoParameters);
83         pfDao.init(daoParameters);
84     }
85
86     /**
87      * Set up GSON.
88      */
89     @Before
90     public void setupGson() {
91         standardCoder = new StandardCoder();
92     }
93
94     @After
95     public void teardown() throws Exception {
96         pfDao.close();
97     }
98
99     @Test
100     public void testPoliciesGet() throws Exception {
101         ToscaServiceTemplate toscaServiceTemplate = standardCoder.decode(
102                 ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.json"),
103                 ToscaServiceTemplate.class);
104
105         createPolicyTypes();
106
107         JpaToscaServiceTemplate originalServiceTemplate = new JpaToscaServiceTemplate();
108         originalServiceTemplate.fromAuthorative(toscaServiceTemplate);
109
110         assertNotNull(originalServiceTemplate);
111         JpaToscaServiceTemplate createdServiceTemplate =
112                 new SimpleToscaProvider().createPolicies(pfDao, originalServiceTemplate);
113
114         assertEquals(originalServiceTemplate, createdServiceTemplate);
115
116         PfConceptKey policyKey = new PfConceptKey("onap.restart.tca:1.0.0");
117
118         JpaToscaServiceTemplate gotServiceTemplate =
119                 new SimpleToscaProvider().getPolicies(pfDao, policyKey.getName(), policyKey.getVersion());
120
121         assertEquals(originalServiceTemplate.getTopologyTemplate().getPolicies().get(policyKey),
122                 gotServiceTemplate.getTopologyTemplate().getPolicies().get(policyKey));
123
124     }
125
126     @Test
127     public void testPolicyCreate() throws Exception {
128         ToscaServiceTemplate toscaServiceTemplate = standardCoder.decode(
129                 ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.json"),
130                 ToscaServiceTemplate.class);
131
132         createPolicyTypes();
133
134         JpaToscaServiceTemplate originalServiceTemplate = new JpaToscaServiceTemplate();
135         originalServiceTemplate.fromAuthorative(toscaServiceTemplate);
136
137         assertNotNull(originalServiceTemplate);
138         JpaToscaServiceTemplate createdServiceTemplate =
139                 new SimpleToscaProvider().createPolicies(pfDao, originalServiceTemplate);
140
141         assertEquals(originalServiceTemplate, createdServiceTemplate);
142     }
143
144     @Test
145     public void testPolicyUpdate() throws Exception {
146         ToscaServiceTemplate toscaServiceTemplate = standardCoder.decode(
147                 ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.json"),
148                 ToscaServiceTemplate.class);
149
150         createPolicyTypes();
151
152         JpaToscaServiceTemplate originalServiceTemplate = new JpaToscaServiceTemplate();
153         originalServiceTemplate.fromAuthorative(toscaServiceTemplate);
154
155         assertNotNull(originalServiceTemplate);
156         JpaToscaServiceTemplate updatedServiceTemplate =
157                 new SimpleToscaProvider().updatePolicies(pfDao, originalServiceTemplate);
158
159         assertEquals(originalServiceTemplate, updatedServiceTemplate);
160     }
161
162     @Test
163     public void testPoliciesDelete() throws Exception {
164         ToscaServiceTemplate toscaServiceTemplate = standardCoder.decode(
165                 ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.json"),
166                 ToscaServiceTemplate.class);
167
168         createPolicyTypes();
169
170         JpaToscaServiceTemplate originalServiceTemplate = new JpaToscaServiceTemplate();
171         originalServiceTemplate.fromAuthorative(toscaServiceTemplate);
172
173         assertNotNull(originalServiceTemplate);
174         JpaToscaServiceTemplate createdServiceTemplate =
175                 new SimpleToscaProvider().createPolicies(pfDao, originalServiceTemplate);
176
177         assertEquals(originalServiceTemplate, createdServiceTemplate);
178
179         PfConceptKey policyKey = new PfConceptKey("onap.restart.tca:1.0.0");
180
181         JpaToscaServiceTemplate deletedServiceTemplate =
182                 new SimpleToscaProvider().deletePolicy(pfDao, new PfConceptKey(policyKey));
183
184         assertEquals(originalServiceTemplate.getTopologyTemplate().getPolicies().get(policyKey),
185                 deletedServiceTemplate.getTopologyTemplate().getPolicies().get(policyKey));
186
187         assertTrue(new SimpleToscaProvider().getPolicies(pfDao, policyKey.getName(), policyKey.getVersion())
188                 .getTopologyTemplate().getPolicies().getConceptMap().isEmpty());
189     }
190
191     @Test
192     public void testAssertPoliciesExist() throws PfModelException {
193         JpaToscaServiceTemplate testServiceTemplate = new JpaToscaServiceTemplate();
194
195         try {
196             new SimpleToscaProvider().createPolicies(pfDao, testServiceTemplate);
197             fail("test should throw an exception here");
198         } catch (Exception exc) {
199             assertEquals("topology template not specified on service template", exc.getMessage());
200         }
201
202         testServiceTemplate.setTopologyTemplate(new JpaToscaTopologyTemplate());
203         try {
204             new SimpleToscaProvider().createPolicies(pfDao, testServiceTemplate);
205             fail("test should throw an exception here");
206         } catch (Exception exc) {
207             assertEquals("no policies specified on topology template of service template", exc.getMessage());
208         }
209
210         testServiceTemplate.getTopologyTemplate().setPolicies(new JpaToscaPolicies());
211         try {
212             new SimpleToscaProvider().createPolicies(pfDao, testServiceTemplate);
213             fail("test should throw an exception here");
214         } catch (Exception exc) {
215             assertEquals("list of policies specified on topology template of service template is empty",
216                     exc.getMessage());
217         }
218     }
219
220     @Test
221     public void testNonNulls() {
222         assertThatThrownBy(() -> {
223             new SimpleToscaProvider().getPolicyTypes(null, null, null);
224         }).hasMessage("dao is marked @NonNull but is null");
225
226         assertThatThrownBy(() -> {
227             new SimpleToscaProvider().createPolicyTypes(null, null);
228         }).hasMessage("dao is marked @NonNull but is null");
229
230         assertThatThrownBy(() -> {
231             new SimpleToscaProvider().createPolicyTypes(null, new JpaToscaServiceTemplate());
232         }).hasMessage("dao is marked @NonNull but is null");
233
234         assertThatThrownBy(() -> {
235             new SimpleToscaProvider().createPolicyTypes(pfDao, null);
236         }).hasMessage("serviceTemplate is marked @NonNull but is null");
237
238         assertThatThrownBy(() -> {
239             new SimpleToscaProvider().updatePolicyTypes(null, null);
240         }).hasMessage("dao is marked @NonNull but is null");
241
242         assertThatThrownBy(() -> {
243             new SimpleToscaProvider().updatePolicyTypes(null, new JpaToscaServiceTemplate());
244         }).hasMessage("dao is marked @NonNull but is null");
245
246         assertThatThrownBy(() -> {
247             new SimpleToscaProvider().updatePolicyTypes(pfDao, null);
248         }).hasMessage("serviceTemplate is marked @NonNull but is null");
249
250         assertThatThrownBy(() -> {
251             new SimpleToscaProvider().deletePolicyType(null, null);
252         }).hasMessage("dao is marked @NonNull but is null");
253
254         assertThatThrownBy(() -> {
255             new SimpleToscaProvider().deletePolicyType(null, new PfConceptKey());
256         }).hasMessage("dao is marked @NonNull but is null");
257
258         assertThatThrownBy(() -> {
259             new SimpleToscaProvider().deletePolicyType(pfDao, null);
260         }).hasMessage("policyTypeKey is marked @NonNull but is null");
261
262         assertThatThrownBy(() -> {
263             new SimpleToscaProvider().getPolicies(null, null, null);
264         }).hasMessage("dao is marked @NonNull but is null");
265
266         assertThatThrownBy(() -> {
267             new SimpleToscaProvider().createPolicies(null, null);
268         }).hasMessage("dao is marked @NonNull but is null");
269
270         assertThatThrownBy(() -> {
271             new SimpleToscaProvider().createPolicies(null, new JpaToscaServiceTemplate());
272         }).hasMessage("dao is marked @NonNull but is null");
273
274         assertThatThrownBy(() -> {
275             new SimpleToscaProvider().createPolicies(pfDao, null);
276         }).hasMessage("serviceTemplate is marked @NonNull but is null");
277
278         assertThatThrownBy(() -> {
279             new SimpleToscaProvider().updatePolicies(null, null);
280         }).hasMessage("dao is marked @NonNull but is null");
281
282         assertThatThrownBy(() -> {
283             new SimpleToscaProvider().updatePolicies(null, new JpaToscaServiceTemplate());
284         }).hasMessage("dao is marked @NonNull but is null");
285
286         assertThatThrownBy(() -> {
287             new SimpleToscaProvider().updatePolicies(pfDao, null);
288         }).hasMessage("serviceTemplate is marked @NonNull but is null");
289
290         assertThatThrownBy(() -> {
291             new SimpleToscaProvider().deletePolicy(null, null);
292         }).hasMessage("dao is marked @NonNull but is null");
293
294         assertThatThrownBy(() -> {
295             new SimpleToscaProvider().deletePolicy(null, new PfConceptKey());
296         }).hasMessage("dao is marked @NonNull but is null");
297
298         assertThatThrownBy(() -> {
299             new SimpleToscaProvider().deletePolicy(pfDao, null);
300         }).hasMessage("policyKey is marked @NonNull but is null");
301     }
302
303     private void createPolicyTypes() throws CoderException, PfModelException {
304         Object yamlObject = new Yaml().load(
305                 ResourceUtils.getResourceAsString("policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app.yaml"));
306         String yamlAsJsonString = new StandardCoder().encode(yamlObject);
307
308         ToscaServiceTemplate toscaServiceTemplatePolicyType =
309                 standardCoder.decode(yamlAsJsonString, ToscaServiceTemplate.class);
310
311         assertNotNull(toscaServiceTemplatePolicyType);
312         new AuthorativeToscaProvider().createPolicyTypes(pfDao, toscaServiceTemplatePolicyType);
313     }
314 }