03c7f9b1bb749611a2a7bd332ff5cf84a59930c1
[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-2020 Nordix Foundation.
4  *  Modifications Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
5  * ================================================================================
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  *      http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  *
18  * SPDX-License-Identifier: Apache-2.0
19  * ============LICENSE_END=========================================================
20  */
21
22 package org.onap.policy.models.tosca.simple.provider;
23
24 import static org.assertj.core.api.Assertions.assertThatThrownBy;
25 import static org.junit.Assert.assertEquals;
26 import static org.junit.Assert.assertNotNull;
27 import static org.junit.Assert.assertTrue;
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.JpaToscaDataType;
47 import org.onap.policy.models.tosca.simple.concepts.JpaToscaDataTypes;
48 import org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicies;
49 import org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicyType;
50 import org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicyTypes;
51 import org.onap.policy.models.tosca.simple.concepts.JpaToscaServiceTemplate;
52 import org.onap.policy.models.tosca.simple.concepts.JpaToscaTopologyTemplate;
53 import org.yaml.snakeyaml.Yaml;
54
55 /**
56  * Test the {@link SimpleToscaProvider} class.
57  *
58  * @author Liam Fallon (liam.fallon@est.tech)
59  */
60 public class SimpleToscaProviderTest {
61     private static final String TEMPLATE_IS_NULL = "^serviceTemplate is marked .*on.*ull but is null$";
62     private static final String VCPE_INPUT_JSON = "policies/vCPE.policy.monitoring.input.tosca.json";
63     private static final String DAO_IS_NULL = "^dao is marked .*on.*ull but is null$";
64
65     private PfDao pfDao;
66     private StandardCoder standardCoder;
67
68     /**
69      * Set up the DAO towards the database.
70      *
71      * @throws Exception on database errors
72      */
73     @Before
74     public void setupDao() throws Exception {
75         final DaoParameters daoParameters = new DaoParameters();
76         daoParameters.setPluginClass(DefaultPfDao.class.getName());
77
78         daoParameters.setPersistenceUnit("ToscaConceptTest");
79
80         Properties jdbcProperties = new Properties();
81         jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_USER, "policy");
82         jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_PASSWORD, "P01icY");
83
84         // H2, use "org.mariadb.jdbc.Driver" and "jdbc:mariadb://localhost:3306/policy" for locally installed MariaDB
85         jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_DRIVER, "org.h2.Driver");
86         jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_URL, "jdbc:h2:mem:testdb");
87
88         daoParameters.setJdbcProperties(jdbcProperties);
89
90         pfDao = new PfDaoFactory().createPfDao(daoParameters);
91         pfDao.init(daoParameters);
92     }
93
94     /**
95      * Set up GSON.
96      */
97     @Before
98     public void setupGson() {
99         standardCoder = new StandardCoder();
100     }
101
102     @After
103     public void teardown() {
104         pfDao.close();
105     }
106
107     @Test
108     public void testCreateUpdateGetDeleteDataType() throws PfModelException {
109         JpaToscaServiceTemplate serviceTemplate = new JpaToscaServiceTemplate();
110
111         PfConceptKey dataType0Key = new PfConceptKey("DataType0", "0.0.1");
112         JpaToscaDataType dataType0 = new JpaToscaDataType();
113         dataType0.setKey(dataType0Key);
114         serviceTemplate.setDataTypes(new JpaToscaDataTypes());
115         serviceTemplate.getDataTypes().getConceptMap().put(dataType0Key, dataType0);
116
117         JpaToscaServiceTemplate createdServiceTemplate =
118                 new SimpleToscaProvider().createDataTypes(pfDao, serviceTemplate);
119
120         assertEquals(1, createdServiceTemplate.getDataTypes().getConceptMap().size());
121         assertEquals(dataType0, createdServiceTemplate.getDataTypes().get(dataType0Key));
122         assertEquals(null, createdServiceTemplate.getDataTypes().get(dataType0Key).getDescription());
123
124         dataType0.setDescription("Updated Description");
125
126         JpaToscaServiceTemplate updatedServiceTemplate =
127                 new SimpleToscaProvider().updateDataTypes(pfDao, serviceTemplate);
128
129         assertEquals(dataType0, updatedServiceTemplate.getDataTypes().get(dataType0Key));
130         assertEquals("Updated Description", updatedServiceTemplate.getDataTypes().get(dataType0Key).getDescription());
131
132         JpaToscaServiceTemplate gotServiceTemplate =
133                 new SimpleToscaProvider().getDataTypes(pfDao, dataType0Key.getName(), dataType0Key.getVersion());
134
135         assertEquals(dataType0, gotServiceTemplate.getDataTypes().get(dataType0Key));
136         assertEquals("Updated Description", gotServiceTemplate.getDataTypes().get(dataType0Key).getDescription());
137
138         JpaToscaServiceTemplate deletedServiceTemplate = new SimpleToscaProvider().deleteDataType(pfDao, dataType0Key);
139
140         assertEquals(dataType0, deletedServiceTemplate.getDataTypes().get(dataType0Key));
141         assertEquals("Updated Description", deletedServiceTemplate.getDataTypes().get(dataType0Key).getDescription());
142
143         JpaToscaServiceTemplate doesNotExistServiceTemplate =
144                 new SimpleToscaProvider().deleteDataType(pfDao, dataType0Key);
145
146         assertEquals(null, doesNotExistServiceTemplate.getDataTypes().get(dataType0Key));
147     }
148
149     @Test
150     public void testCreateUpdateGetDeletePolicyType() throws PfModelException {
151         JpaToscaServiceTemplate serviceTemplate = new JpaToscaServiceTemplate();
152
153         PfConceptKey dataType0Key = new PfConceptKey("DataType0", "0.0.1");
154         JpaToscaDataType dataType0 = new JpaToscaDataType();
155         dataType0.setKey(dataType0Key);
156         serviceTemplate.setDataTypes(new JpaToscaDataTypes());
157         serviceTemplate.getDataTypes().getConceptMap().put(dataType0Key, dataType0);
158
159         PfConceptKey policyType0Key = new PfConceptKey("PolicyType0", "0.0.1");
160         JpaToscaPolicyType policyType0 = new JpaToscaPolicyType();
161         policyType0.setKey(policyType0Key);
162         serviceTemplate.setPolicyTypes(new JpaToscaPolicyTypes());
163         serviceTemplate.getPolicyTypes().getConceptMap().put(policyType0Key, policyType0);
164
165         JpaToscaServiceTemplate createdServiceTemplate =
166                 new SimpleToscaProvider().createPolicyTypes(pfDao, serviceTemplate);
167
168         assertEquals(1, createdServiceTemplate.getPolicyTypes().getConceptMap().size());
169         assertEquals(policyType0, createdServiceTemplate.getPolicyTypes().get(policyType0Key));
170         assertEquals(null, createdServiceTemplate.getPolicyTypes().get(policyType0Key).getDescription());
171
172         policyType0.setDescription("Updated Description");
173
174         JpaToscaServiceTemplate updatedServiceTemplate =
175                 new SimpleToscaProvider().updatePolicyTypes(pfDao, serviceTemplate);
176
177         assertEquals(policyType0, updatedServiceTemplate.getPolicyTypes().get(policyType0Key));
178         assertEquals("Updated Description",
179                 updatedServiceTemplate.getPolicyTypes().get(policyType0Key).getDescription());
180
181         JpaToscaServiceTemplate gotServiceTemplate =
182                 new SimpleToscaProvider().getPolicyTypes(pfDao, policyType0Key.getName(), policyType0Key.getVersion());
183
184         assertEquals(policyType0, gotServiceTemplate.getPolicyTypes().get(policyType0Key));
185         assertEquals("Updated Description", gotServiceTemplate.getPolicyTypes().get(policyType0Key).getDescription());
186
187         JpaToscaServiceTemplate deletedServiceTemplate =
188                 new SimpleToscaProvider().deletePolicyType(pfDao, policyType0Key);
189
190         assertEquals(policyType0, deletedServiceTemplate.getPolicyTypes().get(policyType0Key));
191         assertEquals("Updated Description",
192                 deletedServiceTemplate.getPolicyTypes().get(policyType0Key).getDescription());
193
194         JpaToscaServiceTemplate doesNotExistServiceTemplate =
195                 new SimpleToscaProvider().deletePolicyType(pfDao, policyType0Key);
196
197         assertEquals(null, doesNotExistServiceTemplate.getPolicyTypes().get(policyType0Key));
198     }
199
200     @Test
201     public void testCreateUpdateGetDeletePolicyTypeWithDataType() throws PfModelException {
202         JpaToscaServiceTemplate serviceTemplate = new JpaToscaServiceTemplate();
203
204         PfConceptKey policyType0Key = new PfConceptKey("PolicyType0", "0.0.1");
205         JpaToscaPolicyType policyType0 = new JpaToscaPolicyType();
206         policyType0.setKey(policyType0Key);
207         serviceTemplate.setPolicyTypes(new JpaToscaPolicyTypes());
208         serviceTemplate.getPolicyTypes().getConceptMap().put(policyType0Key, policyType0);
209
210         JpaToscaServiceTemplate createdServiceTemplate =
211                 new SimpleToscaProvider().createPolicyTypes(pfDao, serviceTemplate);
212
213         assertEquals(policyType0, createdServiceTemplate.getPolicyTypes().get(policyType0Key));
214         assertEquals(null, createdServiceTemplate.getPolicyTypes().get(policyType0Key).getDescription());
215
216         policyType0.setDescription("Updated Description");
217
218         JpaToscaServiceTemplate updatedServiceTemplate =
219                 new SimpleToscaProvider().updatePolicyTypes(pfDao, serviceTemplate);
220
221         assertEquals(policyType0, updatedServiceTemplate.getPolicyTypes().get(policyType0Key));
222         assertEquals("Updated Description",
223                 updatedServiceTemplate.getPolicyTypes().get(policyType0Key).getDescription());
224
225         JpaToscaServiceTemplate gotServiceTemplate =
226                 new SimpleToscaProvider().getPolicyTypes(pfDao, policyType0Key.getName(), policyType0Key.getVersion());
227
228         assertEquals(policyType0, gotServiceTemplate.getPolicyTypes().get(policyType0Key));
229         assertEquals("Updated Description", gotServiceTemplate.getPolicyTypes().get(policyType0Key).getDescription());
230
231         JpaToscaServiceTemplate deletedServiceTemplate =
232                 new SimpleToscaProvider().deletePolicyType(pfDao, policyType0Key);
233
234         assertEquals(policyType0, deletedServiceTemplate.getPolicyTypes().get(policyType0Key));
235         assertEquals("Updated Description",
236                 deletedServiceTemplate.getPolicyTypes().get(policyType0Key).getDescription());
237
238         JpaToscaServiceTemplate doesNotExistServiceTemplate =
239                 new SimpleToscaProvider().deletePolicyType(pfDao, policyType0Key);
240
241         assertEquals(null, doesNotExistServiceTemplate.getPolicyTypes().get(policyType0Key));
242     }
243
244     @Test
245     public void testPoliciesGet() throws Exception {
246         ToscaServiceTemplate toscaServiceTemplate =
247                 standardCoder.decode(ResourceUtils.getResourceAsString(VCPE_INPUT_JSON), ToscaServiceTemplate.class);
248
249         createPolicyTypes();
250
251         JpaToscaServiceTemplate originalServiceTemplate = new JpaToscaServiceTemplate();
252         originalServiceTemplate.fromAuthorative(toscaServiceTemplate);
253
254         assertNotNull(originalServiceTemplate);
255         JpaToscaServiceTemplate createdServiceTemplate =
256                 new SimpleToscaProvider().createPolicies(pfDao, originalServiceTemplate);
257
258         assertEquals(originalServiceTemplate, createdServiceTemplate);
259
260         PfConceptKey policyKey = new PfConceptKey("onap.restart.tca:1.0.0");
261
262         JpaToscaServiceTemplate gotServiceTemplate =
263                 new SimpleToscaProvider().getPolicies(pfDao, policyKey.getName(), policyKey.getVersion());
264
265         assertEquals(originalServiceTemplate.getTopologyTemplate().getPolicies().get(policyKey),
266                 gotServiceTemplate.getTopologyTemplate().getPolicies().get(policyKey));
267
268     }
269
270     @Test
271     public void testPolicyCreate() throws Exception {
272         ToscaServiceTemplate toscaServiceTemplate =
273                 standardCoder.decode(ResourceUtils.getResourceAsString(VCPE_INPUT_JSON), ToscaServiceTemplate.class);
274
275         createPolicyTypes();
276
277         JpaToscaServiceTemplate originalServiceTemplate = new JpaToscaServiceTemplate();
278         originalServiceTemplate.fromAuthorative(toscaServiceTemplate);
279
280         assertNotNull(originalServiceTemplate);
281         JpaToscaServiceTemplate createdServiceTemplate =
282                 new SimpleToscaProvider().createPolicies(pfDao, originalServiceTemplate);
283
284         assertEquals(originalServiceTemplate, createdServiceTemplate);
285     }
286
287     @Test
288     public void testPolicyUpdate() throws Exception {
289         ToscaServiceTemplate toscaServiceTemplate =
290                 standardCoder.decode(ResourceUtils.getResourceAsString(VCPE_INPUT_JSON), ToscaServiceTemplate.class);
291
292         createPolicyTypes();
293
294         JpaToscaServiceTemplate originalServiceTemplate = new JpaToscaServiceTemplate();
295         originalServiceTemplate.fromAuthorative(toscaServiceTemplate);
296
297         assertNotNull(originalServiceTemplate);
298         JpaToscaServiceTemplate updatedServiceTemplate =
299                 new SimpleToscaProvider().updatePolicies(pfDao, originalServiceTemplate);
300
301         assertEquals(originalServiceTemplate, updatedServiceTemplate);
302     }
303
304     @Test
305     public void testPoliciesDelete() throws Exception {
306         ToscaServiceTemplate toscaServiceTemplate =
307                 standardCoder.decode(ResourceUtils.getResourceAsString(VCPE_INPUT_JSON), ToscaServiceTemplate.class);
308
309         createPolicyTypes();
310
311         JpaToscaServiceTemplate originalServiceTemplate = new JpaToscaServiceTemplate();
312         originalServiceTemplate.fromAuthorative(toscaServiceTemplate);
313
314         assertNotNull(originalServiceTemplate);
315         JpaToscaServiceTemplate createdServiceTemplate =
316                 new SimpleToscaProvider().createPolicies(pfDao, originalServiceTemplate);
317
318         assertEquals(originalServiceTemplate, createdServiceTemplate);
319
320         PfConceptKey policyKey = new PfConceptKey("onap.restart.tca:1.0.0");
321
322         JpaToscaServiceTemplate deletedServiceTemplate =
323                 new SimpleToscaProvider().deletePolicy(pfDao, new PfConceptKey(policyKey));
324
325         assertEquals(originalServiceTemplate.getTopologyTemplate().getPolicies().get(policyKey),
326                 deletedServiceTemplate.getTopologyTemplate().getPolicies().get(policyKey));
327
328         assertTrue(new SimpleToscaProvider().getPolicies(pfDao, policyKey.getName(), policyKey.getVersion())
329                 .getTopologyTemplate().getPolicies().getConceptMap().isEmpty());
330     }
331
332     @Test
333     public void testAssertPoliciesExist() {
334         JpaToscaServiceTemplate testServiceTemplate = new JpaToscaServiceTemplate();
335
336         assertThatThrownBy(() -> new SimpleToscaProvider().createPolicies(pfDao, testServiceTemplate))
337                 .hasMessage("topology template not specified on service template");
338
339         testServiceTemplate.setTopologyTemplate(new JpaToscaTopologyTemplate());
340         assertThatThrownBy(() -> new SimpleToscaProvider().createPolicies(pfDao, testServiceTemplate))
341                 .hasMessage("no policies specified on topology template of service template");
342
343         testServiceTemplate.getTopologyTemplate().setPolicies(new JpaToscaPolicies());
344         assertThatThrownBy(() -> new SimpleToscaProvider().createPolicies(pfDao, testServiceTemplate))
345                 .hasMessage("list of policies specified on topology template of service template is empty");
346     }
347
348     @Test
349     public void testNonNulls() {
350         assertThatThrownBy(() -> {
351             new SimpleToscaProvider().getDataTypes(null, null, null);
352         }).hasMessageMatching(DAO_IS_NULL);
353
354         assertThatThrownBy(() -> {
355             new SimpleToscaProvider().createDataTypes(null, null);
356         }).hasMessageMatching(DAO_IS_NULL);
357
358         assertThatThrownBy(() -> {
359             new SimpleToscaProvider().createDataTypes(null, new JpaToscaServiceTemplate());
360         }).hasMessageMatching(DAO_IS_NULL);
361
362         assertThatThrownBy(() -> {
363             new SimpleToscaProvider().createDataTypes(pfDao, null);
364         }).hasMessageMatching(TEMPLATE_IS_NULL);
365
366         assertThatThrownBy(() -> {
367             new SimpleToscaProvider().updateDataTypes(null, null);
368         }).hasMessageMatching(DAO_IS_NULL);
369
370         assertThatThrownBy(() -> {
371             new SimpleToscaProvider().updateDataTypes(null, new JpaToscaServiceTemplate());
372         }).hasMessageMatching(DAO_IS_NULL);
373
374         assertThatThrownBy(() -> {
375             new SimpleToscaProvider().updateDataTypes(pfDao, null);
376         }).hasMessageMatching(TEMPLATE_IS_NULL);
377
378         assertThatThrownBy(() -> {
379             new SimpleToscaProvider().deleteDataType(null, null);
380         }).hasMessageMatching(DAO_IS_NULL);
381
382         assertThatThrownBy(() -> {
383             new SimpleToscaProvider().deleteDataType(null, new PfConceptKey());
384         }).hasMessageMatching(DAO_IS_NULL);
385
386         assertThatThrownBy(() -> {
387             new SimpleToscaProvider().deleteDataType(pfDao, null);
388         }).hasMessageMatching("^dataTypeKey is marked .*on.*ull but is null$");
389
390         assertThatThrownBy(() -> {
391             new SimpleToscaProvider().getPolicyTypes(null, null, null);
392         }).hasMessageMatching(DAO_IS_NULL);
393
394         assertThatThrownBy(() -> {
395             new SimpleToscaProvider().createPolicyTypes(null, null);
396         }).hasMessageMatching(DAO_IS_NULL);
397
398         assertThatThrownBy(() -> {
399             new SimpleToscaProvider().createPolicyTypes(null, new JpaToscaServiceTemplate());
400         }).hasMessageMatching(DAO_IS_NULL);
401
402         assertThatThrownBy(() -> {
403             new SimpleToscaProvider().createPolicyTypes(pfDao, null);
404         }).hasMessageMatching(TEMPLATE_IS_NULL);
405
406         assertThatThrownBy(() -> {
407             new SimpleToscaProvider().updatePolicyTypes(null, null);
408         }).hasMessageMatching(DAO_IS_NULL);
409
410         assertThatThrownBy(() -> {
411             new SimpleToscaProvider().updatePolicyTypes(null, new JpaToscaServiceTemplate());
412         }).hasMessageMatching(DAO_IS_NULL);
413
414         assertThatThrownBy(() -> {
415             new SimpleToscaProvider().updatePolicyTypes(pfDao, null);
416         }).hasMessageMatching(TEMPLATE_IS_NULL);
417
418         assertThatThrownBy(() -> {
419             new SimpleToscaProvider().deletePolicyType(null, null);
420         }).hasMessageMatching(DAO_IS_NULL);
421
422         assertThatThrownBy(() -> {
423             new SimpleToscaProvider().deletePolicyType(null, new PfConceptKey());
424         }).hasMessageMatching(DAO_IS_NULL);
425
426         assertThatThrownBy(() -> {
427             new SimpleToscaProvider().deletePolicyType(pfDao, null);
428         }).hasMessageMatching("^policyTypeKey is marked .*on.*ull but is null$");
429
430         assertThatThrownBy(() -> {
431             new SimpleToscaProvider().getPolicies(null, null, null);
432         }).hasMessageMatching(DAO_IS_NULL);
433
434         assertThatThrownBy(() -> {
435             new SimpleToscaProvider().createPolicies(null, null);
436         }).hasMessageMatching(DAO_IS_NULL);
437
438         assertThatThrownBy(() -> {
439             new SimpleToscaProvider().createPolicies(null, new JpaToscaServiceTemplate());
440         }).hasMessageMatching(DAO_IS_NULL);
441
442         assertThatThrownBy(() -> {
443             new SimpleToscaProvider().createPolicies(pfDao, null);
444         }).hasMessageMatching(TEMPLATE_IS_NULL);
445
446         assertThatThrownBy(() -> {
447             new SimpleToscaProvider().updatePolicies(null, null);
448         }).hasMessageMatching(DAO_IS_NULL);
449
450         assertThatThrownBy(() -> {
451             new SimpleToscaProvider().updatePolicies(null, new JpaToscaServiceTemplate());
452         }).hasMessageMatching(DAO_IS_NULL);
453
454         assertThatThrownBy(() -> {
455             new SimpleToscaProvider().updatePolicies(pfDao, null);
456         }).hasMessageMatching(TEMPLATE_IS_NULL);
457
458         assertThatThrownBy(() -> {
459             new SimpleToscaProvider().deletePolicy(null, null);
460         }).hasMessageMatching(DAO_IS_NULL);
461
462         assertThatThrownBy(() -> {
463             new SimpleToscaProvider().deletePolicy(null, new PfConceptKey());
464         }).hasMessageMatching(DAO_IS_NULL);
465
466         assertThatThrownBy(() -> {
467             new SimpleToscaProvider().deletePolicy(pfDao, null);
468         }).hasMessageMatching("^policyKey is marked .*on.*ull but is null$");
469     }
470
471     private void createPolicyTypes() throws CoderException, PfModelException {
472         Object yamlObject = new Yaml().load(
473                 ResourceUtils.getResourceAsString("policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app.yaml"));
474         String yamlAsJsonString = new StandardCoder().encode(yamlObject);
475
476         ToscaServiceTemplate toscaServiceTemplatePolicyType =
477                 standardCoder.decode(yamlAsJsonString, ToscaServiceTemplate.class);
478
479         assertNotNull(toscaServiceTemplatePolicyType);
480         new AuthorativeToscaProvider().createPolicyTypes(pfDao, toscaServiceTemplatePolicyType);
481     }
482 }