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;
27 import static org.junit.Assert.assertTrue;
29 import java.util.Properties;
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;
56 * Test the {@link SimpleToscaProvider} class.
58 * @author Liam Fallon (liam.fallon@est.tech)
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$";
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 JpaToscaServiceTemplate doesNotExistServiceTemplate =
144 new SimpleToscaProvider().deleteDataType(pfDao, dataType0Key);
146 assertEquals(null, doesNotExistServiceTemplate.getDataTypes().get(dataType0Key));
150 public void testCreateUpdateGetDeletePolicyType() throws PfModelException {
151 JpaToscaServiceTemplate serviceTemplate = new JpaToscaServiceTemplate();
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);
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);
165 JpaToscaServiceTemplate createdServiceTemplate =
166 new SimpleToscaProvider().createPolicyTypes(pfDao, serviceTemplate);
168 assertEquals(1, createdServiceTemplate.getPolicyTypes().getConceptMap().size());
169 assertEquals(policyType0, createdServiceTemplate.getPolicyTypes().get(policyType0Key));
170 assertEquals(null, createdServiceTemplate.getPolicyTypes().get(policyType0Key).getDescription());
172 policyType0.setDescription("Updated Description");
174 JpaToscaServiceTemplate updatedServiceTemplate =
175 new SimpleToscaProvider().updatePolicyTypes(pfDao, serviceTemplate);
177 assertEquals(policyType0, updatedServiceTemplate.getPolicyTypes().get(policyType0Key));
178 assertEquals("Updated Description",
179 updatedServiceTemplate.getPolicyTypes().get(policyType0Key).getDescription());
181 JpaToscaServiceTemplate gotServiceTemplate =
182 new SimpleToscaProvider().getPolicyTypes(pfDao, policyType0Key.getName(), policyType0Key.getVersion());
184 assertEquals(policyType0, gotServiceTemplate.getPolicyTypes().get(policyType0Key));
185 assertEquals("Updated Description", gotServiceTemplate.getPolicyTypes().get(policyType0Key).getDescription());
187 JpaToscaServiceTemplate deletedServiceTemplate =
188 new SimpleToscaProvider().deletePolicyType(pfDao, policyType0Key);
190 assertEquals(policyType0, deletedServiceTemplate.getPolicyTypes().get(policyType0Key));
191 assertEquals("Updated Description",
192 deletedServiceTemplate.getPolicyTypes().get(policyType0Key).getDescription());
194 JpaToscaServiceTemplate doesNotExistServiceTemplate =
195 new SimpleToscaProvider().deletePolicyType(pfDao, policyType0Key);
197 assertEquals(null, doesNotExistServiceTemplate.getPolicyTypes().get(policyType0Key));
201 public void testCreateUpdateGetDeletePolicyTypeWithDataType() throws PfModelException {
202 JpaToscaServiceTemplate serviceTemplate = new JpaToscaServiceTemplate();
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);
210 JpaToscaServiceTemplate createdServiceTemplate =
211 new SimpleToscaProvider().createPolicyTypes(pfDao, serviceTemplate);
213 assertEquals(policyType0, createdServiceTemplate.getPolicyTypes().get(policyType0Key));
214 assertEquals(null, createdServiceTemplate.getPolicyTypes().get(policyType0Key).getDescription());
216 policyType0.setDescription("Updated Description");
218 JpaToscaServiceTemplate updatedServiceTemplate =
219 new SimpleToscaProvider().updatePolicyTypes(pfDao, serviceTemplate);
221 assertEquals(policyType0, updatedServiceTemplate.getPolicyTypes().get(policyType0Key));
222 assertEquals("Updated Description",
223 updatedServiceTemplate.getPolicyTypes().get(policyType0Key).getDescription());
225 JpaToscaServiceTemplate gotServiceTemplate =
226 new SimpleToscaProvider().getPolicyTypes(pfDao, policyType0Key.getName(), policyType0Key.getVersion());
228 assertEquals(policyType0, gotServiceTemplate.getPolicyTypes().get(policyType0Key));
229 assertEquals("Updated Description", gotServiceTemplate.getPolicyTypes().get(policyType0Key).getDescription());
231 JpaToscaServiceTemplate deletedServiceTemplate =
232 new SimpleToscaProvider().deletePolicyType(pfDao, policyType0Key);
234 assertEquals(policyType0, deletedServiceTemplate.getPolicyTypes().get(policyType0Key));
235 assertEquals("Updated Description",
236 deletedServiceTemplate.getPolicyTypes().get(policyType0Key).getDescription());
238 JpaToscaServiceTemplate doesNotExistServiceTemplate =
239 new SimpleToscaProvider().deletePolicyType(pfDao, policyType0Key);
241 assertEquals(null, doesNotExistServiceTemplate.getPolicyTypes().get(policyType0Key));
245 public void testPoliciesGet() throws Exception {
246 ToscaServiceTemplate toscaServiceTemplate =
247 standardCoder.decode(ResourceUtils.getResourceAsString(VCPE_INPUT_JSON), ToscaServiceTemplate.class);
251 JpaToscaServiceTemplate originalServiceTemplate = new JpaToscaServiceTemplate();
252 originalServiceTemplate.fromAuthorative(toscaServiceTemplate);
254 assertNotNull(originalServiceTemplate);
255 JpaToscaServiceTemplate createdServiceTemplate =
256 new SimpleToscaProvider().createPolicies(pfDao, originalServiceTemplate);
258 assertEquals(originalServiceTemplate, createdServiceTemplate);
260 PfConceptKey policyKey = new PfConceptKey("onap.restart.tca:1.0.0");
262 JpaToscaServiceTemplate gotServiceTemplate =
263 new SimpleToscaProvider().getPolicies(pfDao, policyKey.getName(), policyKey.getVersion());
265 assertEquals(originalServiceTemplate.getTopologyTemplate().getPolicies().get(policyKey),
266 gotServiceTemplate.getTopologyTemplate().getPolicies().get(policyKey));
271 public void testPolicyCreate() throws Exception {
272 ToscaServiceTemplate toscaServiceTemplate =
273 standardCoder.decode(ResourceUtils.getResourceAsString(VCPE_INPUT_JSON), ToscaServiceTemplate.class);
277 JpaToscaServiceTemplate originalServiceTemplate = new JpaToscaServiceTemplate();
278 originalServiceTemplate.fromAuthorative(toscaServiceTemplate);
280 assertNotNull(originalServiceTemplate);
281 JpaToscaServiceTemplate createdServiceTemplate =
282 new SimpleToscaProvider().createPolicies(pfDao, originalServiceTemplate);
284 assertEquals(originalServiceTemplate, createdServiceTemplate);
288 public void testPolicyUpdate() throws Exception {
289 ToscaServiceTemplate toscaServiceTemplate =
290 standardCoder.decode(ResourceUtils.getResourceAsString(VCPE_INPUT_JSON), ToscaServiceTemplate.class);
294 JpaToscaServiceTemplate originalServiceTemplate = new JpaToscaServiceTemplate();
295 originalServiceTemplate.fromAuthorative(toscaServiceTemplate);
297 assertNotNull(originalServiceTemplate);
298 JpaToscaServiceTemplate updatedServiceTemplate =
299 new SimpleToscaProvider().updatePolicies(pfDao, originalServiceTemplate);
301 assertEquals(originalServiceTemplate, updatedServiceTemplate);
305 public void testPoliciesDelete() throws Exception {
306 ToscaServiceTemplate toscaServiceTemplate =
307 standardCoder.decode(ResourceUtils.getResourceAsString(VCPE_INPUT_JSON), ToscaServiceTemplate.class);
311 JpaToscaServiceTemplate originalServiceTemplate = new JpaToscaServiceTemplate();
312 originalServiceTemplate.fromAuthorative(toscaServiceTemplate);
314 assertNotNull(originalServiceTemplate);
315 JpaToscaServiceTemplate createdServiceTemplate =
316 new SimpleToscaProvider().createPolicies(pfDao, originalServiceTemplate);
318 assertEquals(originalServiceTemplate, createdServiceTemplate);
320 PfConceptKey policyKey = new PfConceptKey("onap.restart.tca:1.0.0");
322 JpaToscaServiceTemplate deletedServiceTemplate =
323 new SimpleToscaProvider().deletePolicy(pfDao, new PfConceptKey(policyKey));
325 assertEquals(originalServiceTemplate.getTopologyTemplate().getPolicies().get(policyKey),
326 deletedServiceTemplate.getTopologyTemplate().getPolicies().get(policyKey));
328 assertTrue(new SimpleToscaProvider().getPolicies(pfDao, policyKey.getName(), policyKey.getVersion())
329 .getTopologyTemplate().getPolicies().getConceptMap().isEmpty());
333 public void testAssertPoliciesExist() {
334 JpaToscaServiceTemplate testServiceTemplate = new JpaToscaServiceTemplate();
336 assertThatThrownBy(() -> new SimpleToscaProvider().createPolicies(pfDao, testServiceTemplate))
337 .hasMessage("topology template not specified on service template");
339 testServiceTemplate.setTopologyTemplate(new JpaToscaTopologyTemplate());
340 assertThatThrownBy(() -> new SimpleToscaProvider().createPolicies(pfDao, testServiceTemplate))
341 .hasMessage("no policies specified on topology template of service template");
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");
349 public void testNonNulls() {
350 assertThatThrownBy(() -> {
351 new SimpleToscaProvider().getDataTypes(null, null, null);
352 }).hasMessageMatching(DAO_IS_NULL);
354 assertThatThrownBy(() -> {
355 new SimpleToscaProvider().createDataTypes(null, null);
356 }).hasMessageMatching(DAO_IS_NULL);
358 assertThatThrownBy(() -> {
359 new SimpleToscaProvider().createDataTypes(null, new JpaToscaServiceTemplate());
360 }).hasMessageMatching(DAO_IS_NULL);
362 assertThatThrownBy(() -> {
363 new SimpleToscaProvider().createDataTypes(pfDao, null);
364 }).hasMessageMatching(TEMPLATE_IS_NULL);
366 assertThatThrownBy(() -> {
367 new SimpleToscaProvider().updateDataTypes(null, null);
368 }).hasMessageMatching(DAO_IS_NULL);
370 assertThatThrownBy(() -> {
371 new SimpleToscaProvider().updateDataTypes(null, new JpaToscaServiceTemplate());
372 }).hasMessageMatching(DAO_IS_NULL);
374 assertThatThrownBy(() -> {
375 new SimpleToscaProvider().updateDataTypes(pfDao, null);
376 }).hasMessageMatching(TEMPLATE_IS_NULL);
378 assertThatThrownBy(() -> {
379 new SimpleToscaProvider().deleteDataType(null, null);
380 }).hasMessageMatching(DAO_IS_NULL);
382 assertThatThrownBy(() -> {
383 new SimpleToscaProvider().deleteDataType(null, new PfConceptKey());
384 }).hasMessageMatching(DAO_IS_NULL);
386 assertThatThrownBy(() -> {
387 new SimpleToscaProvider().deleteDataType(pfDao, null);
388 }).hasMessageMatching("^dataTypeKey is marked .*on.*ull but is null$");
390 assertThatThrownBy(() -> {
391 new SimpleToscaProvider().getPolicyTypes(null, null, null);
392 }).hasMessageMatching(DAO_IS_NULL);
394 assertThatThrownBy(() -> {
395 new SimpleToscaProvider().createPolicyTypes(null, null);
396 }).hasMessageMatching(DAO_IS_NULL);
398 assertThatThrownBy(() -> {
399 new SimpleToscaProvider().createPolicyTypes(null, new JpaToscaServiceTemplate());
400 }).hasMessageMatching(DAO_IS_NULL);
402 assertThatThrownBy(() -> {
403 new SimpleToscaProvider().createPolicyTypes(pfDao, null);
404 }).hasMessageMatching(TEMPLATE_IS_NULL);
406 assertThatThrownBy(() -> {
407 new SimpleToscaProvider().updatePolicyTypes(null, null);
408 }).hasMessageMatching(DAO_IS_NULL);
410 assertThatThrownBy(() -> {
411 new SimpleToscaProvider().updatePolicyTypes(null, new JpaToscaServiceTemplate());
412 }).hasMessageMatching(DAO_IS_NULL);
414 assertThatThrownBy(() -> {
415 new SimpleToscaProvider().updatePolicyTypes(pfDao, null);
416 }).hasMessageMatching(TEMPLATE_IS_NULL);
418 assertThatThrownBy(() -> {
419 new SimpleToscaProvider().deletePolicyType(null, null);
420 }).hasMessageMatching(DAO_IS_NULL);
422 assertThatThrownBy(() -> {
423 new SimpleToscaProvider().deletePolicyType(null, new PfConceptKey());
424 }).hasMessageMatching(DAO_IS_NULL);
426 assertThatThrownBy(() -> {
427 new SimpleToscaProvider().deletePolicyType(pfDao, null);
428 }).hasMessageMatching("^policyTypeKey is marked .*on.*ull but is null$");
430 assertThatThrownBy(() -> {
431 new SimpleToscaProvider().getPolicies(null, null, null);
432 }).hasMessageMatching(DAO_IS_NULL);
434 assertThatThrownBy(() -> {
435 new SimpleToscaProvider().createPolicies(null, null);
436 }).hasMessageMatching(DAO_IS_NULL);
438 assertThatThrownBy(() -> {
439 new SimpleToscaProvider().createPolicies(null, new JpaToscaServiceTemplate());
440 }).hasMessageMatching(DAO_IS_NULL);
442 assertThatThrownBy(() -> {
443 new SimpleToscaProvider().createPolicies(pfDao, null);
444 }).hasMessageMatching(TEMPLATE_IS_NULL);
446 assertThatThrownBy(() -> {
447 new SimpleToscaProvider().updatePolicies(null, null);
448 }).hasMessageMatching(DAO_IS_NULL);
450 assertThatThrownBy(() -> {
451 new SimpleToscaProvider().updatePolicies(null, new JpaToscaServiceTemplate());
452 }).hasMessageMatching(DAO_IS_NULL);
454 assertThatThrownBy(() -> {
455 new SimpleToscaProvider().updatePolicies(pfDao, null);
456 }).hasMessageMatching(TEMPLATE_IS_NULL);
458 assertThatThrownBy(() -> {
459 new SimpleToscaProvider().deletePolicy(null, null);
460 }).hasMessageMatching(DAO_IS_NULL);
462 assertThatThrownBy(() -> {
463 new SimpleToscaProvider().deletePolicy(null, new PfConceptKey());
464 }).hasMessageMatching(DAO_IS_NULL);
466 assertThatThrownBy(() -> {
467 new SimpleToscaProvider().deletePolicy(pfDao, null);
468 }).hasMessageMatching("^policyKey is marked .*on.*ull but is null$");
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);
476 ToscaServiceTemplate toscaServiceTemplatePolicyType =
477 standardCoder.decode(yamlAsJsonString, ToscaServiceTemplate.class);
479 assertNotNull(toscaServiceTemplatePolicyType);
480 new AuthorativeToscaProvider().createPolicyTypes(pfDao, toscaServiceTemplatePolicyType);