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
10 * http://www.apache.org/licenses/LICENSE-2.0
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.
18 * SPDX-License-Identifier: Apache-2.0
19 * ============LICENSE_END=========================================================
22 package org.onap.policy.models.tosca.simple.provider;
24 import static org.assertj.core.api.Assertions.assertThatThrownBy;
25 import static org.junit.Assert.assertEquals;
26 import static org.junit.Assert.assertNotNull;
28 import java.util.Properties;
30 import org.eclipse.persistence.config.PersistenceUnitProperties;
31 import org.junit.After;
32 import org.junit.Before;
33 import org.junit.Test;
34 import org.onap.policy.common.utils.coder.CoderException;
35 import org.onap.policy.common.utils.coder.StandardCoder;
36 import org.onap.policy.common.utils.resources.ResourceUtils;
37 import org.onap.policy.models.base.PfConceptKey;
38 import org.onap.policy.models.base.PfModelException;
39 import org.onap.policy.models.dao.DaoParameters;
40 import org.onap.policy.models.dao.PfDao;
41 import org.onap.policy.models.dao.PfDaoFactory;
42 import org.onap.policy.models.dao.impl.DefaultPfDao;
43 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
44 import org.onap.policy.models.tosca.authorative.provider.AuthorativeToscaProvider;
45 import org.onap.policy.models.tosca.simple.concepts.JpaToscaDataType;
46 import org.onap.policy.models.tosca.simple.concepts.JpaToscaDataTypes;
47 import org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicies;
48 import org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicyType;
49 import org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicyTypes;
50 import org.onap.policy.models.tosca.simple.concepts.JpaToscaServiceTemplate;
51 import org.onap.policy.models.tosca.simple.concepts.JpaToscaTopologyTemplate;
52 import org.yaml.snakeyaml.Yaml;
55 * Test the {@link SimpleToscaProvider} class.
57 * @author Liam Fallon (liam.fallon@est.tech)
59 public class SimpleToscaProviderTest {
60 private static final String TEMPLATE_IS_NULL = "^serviceTemplate is marked .*on.*ull but is null$";
61 private static final String INCOMING_TEMPLATE_IS_NULL = "^incomingServiceTemplate 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$";
66 private StandardCoder standardCoder;
69 * Set up the DAO towards the database.
71 * @throws Exception on database errors
74 public void setupDao() throws Exception {
75 final DaoParameters daoParameters = new DaoParameters();
76 daoParameters.setPluginClass(DefaultPfDao.class.getName());
78 daoParameters.setPersistenceUnit("ToscaConceptTest");
80 Properties jdbcProperties = new Properties();
81 jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_USER, "policy");
82 jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_PASSWORD, "P01icY");
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");
88 daoParameters.setJdbcProperties(jdbcProperties);
90 pfDao = new PfDaoFactory().createPfDao(daoParameters);
91 pfDao.init(daoParameters);
98 public void setupGson() {
99 standardCoder = new StandardCoder();
103 public void teardown() {
108 public void testCreateUpdateGetDeleteDataType() throws PfModelException {
109 JpaToscaServiceTemplate serviceTemplate = new JpaToscaServiceTemplate();
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);
117 JpaToscaServiceTemplate createdServiceTemplate =
118 new SimpleToscaProvider().createDataTypes(pfDao, serviceTemplate);
120 assertEquals(1, createdServiceTemplate.getDataTypes().getConceptMap().size());
121 assertEquals(dataType0, createdServiceTemplate.getDataTypes().get(dataType0Key));
122 assertEquals(null, createdServiceTemplate.getDataTypes().get(dataType0Key).getDescription());
124 dataType0.setDescription("Updated Description");
126 JpaToscaServiceTemplate updatedServiceTemplate =
127 new SimpleToscaProvider().updateDataTypes(pfDao, serviceTemplate);
129 assertEquals(dataType0, updatedServiceTemplate.getDataTypes().get(dataType0Key));
130 assertEquals("Updated Description", updatedServiceTemplate.getDataTypes().get(dataType0Key).getDescription());
132 JpaToscaServiceTemplate gotServiceTemplate =
133 new SimpleToscaProvider().getDataTypes(pfDao, dataType0Key.getName(), dataType0Key.getVersion());
135 assertEquals(dataType0, gotServiceTemplate.getDataTypes().get(dataType0Key));
136 assertEquals("Updated Description", gotServiceTemplate.getDataTypes().get(dataType0Key).getDescription());
138 JpaToscaServiceTemplate deletedServiceTemplate = new SimpleToscaProvider().deleteDataType(pfDao, dataType0Key);
140 assertEquals(dataType0, deletedServiceTemplate.getDataTypes().get(dataType0Key));
141 assertEquals("Updated Description", deletedServiceTemplate.getDataTypes().get(dataType0Key).getDescription());
143 assertThatThrownBy(() -> new SimpleToscaProvider().deleteDataType(pfDao, dataType0Key))
144 .hasMessage("data types for DataType0:0.0.1 do not exist");
148 public void testCreateUpdateGetDeletePolicyType() throws PfModelException {
149 JpaToscaServiceTemplate serviceTemplate = new JpaToscaServiceTemplate();
151 PfConceptKey dataType0Key = new PfConceptKey("DataType0", "0.0.1");
152 JpaToscaDataType dataType0 = new JpaToscaDataType();
153 dataType0.setKey(dataType0Key);
154 serviceTemplate.setDataTypes(new JpaToscaDataTypes());
155 serviceTemplate.getDataTypes().getConceptMap().put(dataType0Key, dataType0);
157 PfConceptKey policyType0Key = new PfConceptKey("PolicyType0", "0.0.1");
158 JpaToscaPolicyType policyType0 = new JpaToscaPolicyType();
159 policyType0.setKey(policyType0Key);
160 serviceTemplate.setPolicyTypes(new JpaToscaPolicyTypes());
161 serviceTemplate.getPolicyTypes().getConceptMap().put(policyType0Key, policyType0);
163 JpaToscaServiceTemplate createdServiceTemplate =
164 new SimpleToscaProvider().createPolicyTypes(pfDao, serviceTemplate);
166 assertEquals(1, createdServiceTemplate.getPolicyTypes().getConceptMap().size());
167 assertEquals(policyType0, createdServiceTemplate.getPolicyTypes().get(policyType0Key));
168 assertEquals(null, createdServiceTemplate.getPolicyTypes().get(policyType0Key).getDescription());
170 policyType0.setDescription("Updated Description");
172 JpaToscaServiceTemplate updatedServiceTemplate =
173 new SimpleToscaProvider().updatePolicyTypes(pfDao, serviceTemplate);
175 assertEquals(policyType0, updatedServiceTemplate.getPolicyTypes().get(policyType0Key));
176 assertEquals("Updated Description",
177 updatedServiceTemplate.getPolicyTypes().get(policyType0Key).getDescription());
179 JpaToscaServiceTemplate gotServiceTemplate =
180 new SimpleToscaProvider().getPolicyTypes(pfDao, policyType0Key.getName(), policyType0Key.getVersion());
182 assertEquals(policyType0, gotServiceTemplate.getPolicyTypes().get(policyType0Key));
183 assertEquals("Updated Description", gotServiceTemplate.getPolicyTypes().get(policyType0Key).getDescription());
185 JpaToscaServiceTemplate deletedServiceTemplate =
186 new SimpleToscaProvider().deletePolicyType(pfDao, policyType0Key);
188 assertEquals(policyType0, deletedServiceTemplate.getPolicyTypes().get(policyType0Key));
189 assertEquals("Updated Description",
190 deletedServiceTemplate.getPolicyTypes().get(policyType0Key).getDescription());
192 assertThatThrownBy(() -> new SimpleToscaProvider().deletePolicyType(pfDao, policyType0Key))
193 .hasMessage("policy types for PolicyType0:0.0.1 do not exist");
197 public void testCreateUpdateGetDeletePolicyTypeWithDataType() throws PfModelException {
198 JpaToscaServiceTemplate serviceTemplate = new JpaToscaServiceTemplate();
200 PfConceptKey policyType0Key = new PfConceptKey("PolicyType0", "0.0.1");
201 JpaToscaPolicyType policyType0 = new JpaToscaPolicyType();
202 policyType0.setKey(policyType0Key);
203 serviceTemplate.setPolicyTypes(new JpaToscaPolicyTypes());
204 serviceTemplate.getPolicyTypes().getConceptMap().put(policyType0Key, policyType0);
206 JpaToscaServiceTemplate createdServiceTemplate =
207 new SimpleToscaProvider().createPolicyTypes(pfDao, serviceTemplate);
209 assertEquals(policyType0, createdServiceTemplate.getPolicyTypes().get(policyType0Key));
210 assertEquals(null, createdServiceTemplate.getPolicyTypes().get(policyType0Key).getDescription());
212 policyType0.setDescription("Updated Description");
214 JpaToscaServiceTemplate updatedServiceTemplate =
215 new SimpleToscaProvider().updatePolicyTypes(pfDao, serviceTemplate);
217 assertEquals(policyType0, updatedServiceTemplate.getPolicyTypes().get(policyType0Key));
218 assertEquals("Updated Description",
219 updatedServiceTemplate.getPolicyTypes().get(policyType0Key).getDescription());
221 JpaToscaServiceTemplate gotServiceTemplate =
222 new SimpleToscaProvider().getPolicyTypes(pfDao, policyType0Key.getName(), policyType0Key.getVersion());
224 assertEquals(policyType0, gotServiceTemplate.getPolicyTypes().get(policyType0Key));
225 assertEquals("Updated Description", gotServiceTemplate.getPolicyTypes().get(policyType0Key).getDescription());
227 JpaToscaServiceTemplate deletedServiceTemplate =
228 new SimpleToscaProvider().deletePolicyType(pfDao, policyType0Key);
230 assertEquals(policyType0, deletedServiceTemplate.getPolicyTypes().get(policyType0Key));
231 assertEquals("Updated Description",
232 deletedServiceTemplate.getPolicyTypes().get(policyType0Key).getDescription());
234 assertThatThrownBy(() -> new SimpleToscaProvider().deletePolicyType(pfDao, policyType0Key))
235 .hasMessage("policy types for PolicyType0:0.0.1 do not exist");
239 public void testPoliciesGet() throws Exception {
240 ToscaServiceTemplate toscaServiceTemplate =
241 standardCoder.decode(ResourceUtils.getResourceAsString(VCPE_INPUT_JSON), ToscaServiceTemplate.class);
245 JpaToscaServiceTemplate originalServiceTemplate = new JpaToscaServiceTemplate();
246 originalServiceTemplate.fromAuthorative(toscaServiceTemplate);
248 assertNotNull(originalServiceTemplate);
249 JpaToscaServiceTemplate createdServiceTemplate =
250 new SimpleToscaProvider().createPolicies(pfDao, originalServiceTemplate);
252 assertEquals(originalServiceTemplate.getTopologyTemplate().getPolicies(),
253 createdServiceTemplate.getTopologyTemplate().getPolicies());
255 PfConceptKey policyKey = new PfConceptKey("onap.restart.tca:1.0.0");
257 JpaToscaServiceTemplate gotServiceTemplate =
258 new SimpleToscaProvider().getPolicies(pfDao, policyKey.getName(), policyKey.getVersion());
260 assertEquals(originalServiceTemplate.getTopologyTemplate().getPolicies().get(policyKey),
261 gotServiceTemplate.getTopologyTemplate().getPolicies().get(policyKey));
265 public void testPolicyCreate() throws Exception {
266 ToscaServiceTemplate toscaServiceTemplate =
267 standardCoder.decode(ResourceUtils.getResourceAsString(VCPE_INPUT_JSON), ToscaServiceTemplate.class);
271 JpaToscaServiceTemplate originalServiceTemplate = new JpaToscaServiceTemplate();
272 originalServiceTemplate.fromAuthorative(toscaServiceTemplate);
274 assertNotNull(originalServiceTemplate);
275 JpaToscaServiceTemplate createdServiceTemplate =
276 new SimpleToscaProvider().createPolicies(pfDao, originalServiceTemplate);
278 assertEquals(originalServiceTemplate.getTopologyTemplate().getPolicies(),
279 createdServiceTemplate.getTopologyTemplate().getPolicies());
283 public void testPolicyUpdate() throws Exception {
284 ToscaServiceTemplate toscaServiceTemplate =
285 standardCoder.decode(ResourceUtils.getResourceAsString(VCPE_INPUT_JSON), ToscaServiceTemplate.class);
289 JpaToscaServiceTemplate originalServiceTemplate = new JpaToscaServiceTemplate();
290 originalServiceTemplate.fromAuthorative(toscaServiceTemplate);
292 assertNotNull(originalServiceTemplate);
293 JpaToscaServiceTemplate updatedServiceTemplate =
294 new SimpleToscaProvider().updatePolicies(pfDao, originalServiceTemplate);
296 assertEquals(originalServiceTemplate, updatedServiceTemplate);
300 public void testPoliciesDelete() throws Exception {
301 ToscaServiceTemplate toscaServiceTemplate =
302 standardCoder.decode(ResourceUtils.getResourceAsString(VCPE_INPUT_JSON), ToscaServiceTemplate.class);
306 JpaToscaServiceTemplate originalServiceTemplate = new JpaToscaServiceTemplate();
307 originalServiceTemplate.fromAuthorative(toscaServiceTemplate);
309 assertNotNull(originalServiceTemplate);
310 JpaToscaServiceTemplate createdServiceTemplate =
311 new SimpleToscaProvider().createPolicies(pfDao, originalServiceTemplate);
313 assertEquals(originalServiceTemplate.getTopologyTemplate(), createdServiceTemplate.getTopologyTemplate());
315 PfConceptKey policyKey = new PfConceptKey("onap.restart.tca:1.0.0");
317 JpaToscaServiceTemplate deletedServiceTemplate =
318 new SimpleToscaProvider().deletePolicy(pfDao, new PfConceptKey(policyKey));
320 assertEquals(originalServiceTemplate.getTopologyTemplate().getPolicies().get(policyKey),
321 deletedServiceTemplate.getTopologyTemplate().getPolicies().get(policyKey));
325 () -> new SimpleToscaProvider().getPolicies(pfDao, policyKey.getName(), policyKey.getVersion()))
326 .hasMessage("policies for onap.restart.tca:1.0.0 do not exist");
331 public void testAssertPoliciesExist() {
332 JpaToscaServiceTemplate testServiceTemplate = new JpaToscaServiceTemplate();
334 assertThatThrownBy(() -> new SimpleToscaProvider().createPolicies(pfDao, testServiceTemplate))
335 .hasMessage("topology template not specified on service template");
337 testServiceTemplate.setTopologyTemplate(new JpaToscaTopologyTemplate());
338 assertThatThrownBy(() -> new SimpleToscaProvider().createPolicies(pfDao, testServiceTemplate))
339 .hasMessage("no policies specified on topology template of service template");
341 testServiceTemplate.getTopologyTemplate().setPolicies(new JpaToscaPolicies());
342 assertThatThrownBy(() -> new SimpleToscaProvider().createPolicies(pfDao, testServiceTemplate))
343 .hasMessage("list of policies specified on topology template of service template is empty");
347 public void testNonNulls() {
348 assertThatThrownBy(() -> {
349 new SimpleToscaProvider().getDataTypes(null, null, null);
350 }).hasMessageMatching(DAO_IS_NULL);
352 assertThatThrownBy(() -> {
353 new SimpleToscaProvider().createDataTypes(null, null);
354 }).hasMessageMatching(DAO_IS_NULL);
356 assertThatThrownBy(() -> {
357 new SimpleToscaProvider().createDataTypes(null, new JpaToscaServiceTemplate());
358 }).hasMessageMatching(DAO_IS_NULL);
360 assertThatThrownBy(() -> {
361 new SimpleToscaProvider().createDataTypes(pfDao, null);
362 }).hasMessageMatching(INCOMING_TEMPLATE_IS_NULL);
364 assertThatThrownBy(() -> {
365 new SimpleToscaProvider().updateDataTypes(null, null);
366 }).hasMessageMatching(DAO_IS_NULL);
368 assertThatThrownBy(() -> {
369 new SimpleToscaProvider().updateDataTypes(null, new JpaToscaServiceTemplate());
370 }).hasMessageMatching(DAO_IS_NULL);
372 assertThatThrownBy(() -> {
373 new SimpleToscaProvider().updateDataTypes(pfDao, null);
374 }).hasMessageMatching(TEMPLATE_IS_NULL);
376 assertThatThrownBy(() -> {
377 new SimpleToscaProvider().deleteDataType(null, null);
378 }).hasMessageMatching(DAO_IS_NULL);
380 assertThatThrownBy(() -> {
381 new SimpleToscaProvider().deleteDataType(null, new PfConceptKey());
382 }).hasMessageMatching(DAO_IS_NULL);
384 assertThatThrownBy(() -> {
385 new SimpleToscaProvider().deleteDataType(pfDao, null);
386 }).hasMessageMatching("^dataTypeKey is marked .*on.*ull but is null$");
388 assertThatThrownBy(() -> {
389 new SimpleToscaProvider().getPolicyTypes(null, null, null);
390 }).hasMessageMatching(DAO_IS_NULL);
392 assertThatThrownBy(() -> {
393 new SimpleToscaProvider().createPolicyTypes(null, null);
394 }).hasMessageMatching(DAO_IS_NULL);
396 assertThatThrownBy(() -> {
397 new SimpleToscaProvider().createPolicyTypes(null, new JpaToscaServiceTemplate());
398 }).hasMessageMatching(DAO_IS_NULL);
400 assertThatThrownBy(() -> {
401 new SimpleToscaProvider().createPolicyTypes(pfDao, null);
402 }).hasMessageMatching(INCOMING_TEMPLATE_IS_NULL);
404 assertThatThrownBy(() -> {
405 new SimpleToscaProvider().updatePolicyTypes(null, null);
406 }).hasMessageMatching(DAO_IS_NULL);
408 assertThatThrownBy(() -> {
409 new SimpleToscaProvider().updatePolicyTypes(null, new JpaToscaServiceTemplate());
410 }).hasMessageMatching(DAO_IS_NULL);
412 assertThatThrownBy(() -> {
413 new SimpleToscaProvider().updatePolicyTypes(pfDao, null);
414 }).hasMessageMatching(TEMPLATE_IS_NULL);
416 assertThatThrownBy(() -> {
417 new SimpleToscaProvider().deletePolicyType(null, null);
418 }).hasMessageMatching(DAO_IS_NULL);
420 assertThatThrownBy(() -> {
421 new SimpleToscaProvider().deletePolicyType(null, new PfConceptKey());
422 }).hasMessageMatching(DAO_IS_NULL);
424 assertThatThrownBy(() -> {
425 new SimpleToscaProvider().deletePolicyType(pfDao, null);
426 }).hasMessageMatching("^policyTypeKey is marked .*on.*ull but is null$");
428 assertThatThrownBy(() -> {
429 new SimpleToscaProvider().getPolicies(null, null, null);
430 }).hasMessageMatching(DAO_IS_NULL);
432 assertThatThrownBy(() -> {
433 new SimpleToscaProvider().createPolicies(null, null);
434 }).hasMessageMatching(DAO_IS_NULL);
436 assertThatThrownBy(() -> {
437 new SimpleToscaProvider().createPolicies(null, new JpaToscaServiceTemplate());
438 }).hasMessageMatching(DAO_IS_NULL);
440 assertThatThrownBy(() -> {
441 new SimpleToscaProvider().createPolicies(pfDao, null);
442 }).hasMessageMatching(INCOMING_TEMPLATE_IS_NULL);
444 assertThatThrownBy(() -> {
445 new SimpleToscaProvider().updatePolicies(null, null);
446 }).hasMessageMatching(DAO_IS_NULL);
448 assertThatThrownBy(() -> {
449 new SimpleToscaProvider().updatePolicies(null, new JpaToscaServiceTemplate());
450 }).hasMessageMatching(DAO_IS_NULL);
452 assertThatThrownBy(() -> {
453 new SimpleToscaProvider().updatePolicies(pfDao, null);
454 }).hasMessageMatching(TEMPLATE_IS_NULL);
456 assertThatThrownBy(() -> {
457 new SimpleToscaProvider().deletePolicy(null, null);
458 }).hasMessageMatching(DAO_IS_NULL);
460 assertThatThrownBy(() -> {
461 new SimpleToscaProvider().deletePolicy(null, new PfConceptKey());
462 }).hasMessageMatching(DAO_IS_NULL);
464 assertThatThrownBy(() -> {
465 new SimpleToscaProvider().deletePolicy(pfDao, null);
466 }).hasMessageMatching("^policyKey is marked .*on.*ull but is null$");
469 private void createPolicyTypes() throws CoderException, PfModelException {
470 Object yamlObject = new Yaml().load(
471 ResourceUtils.getResourceAsString("policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app.yaml"));
472 String yamlAsJsonString = new StandardCoder().encode(yamlObject);
474 ToscaServiceTemplate toscaServiceTemplatePolicyType =
475 standardCoder.decode(yamlAsJsonString, ToscaServiceTemplate.class);
477 assertNotNull(toscaServiceTemplatePolicyType);
478 new AuthorativeToscaProvider().createPolicyTypes(pfDao, toscaServiceTemplatePolicyType);