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