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.JpaToscaServiceTemplate;
50 import org.onap.policy.models.tosca.simple.concepts.JpaToscaTopologyTemplate;
51 import org.yaml.snakeyaml.Yaml;
54 * Test the {@link SimpleToscaProvider} class.
56 * @author Liam Fallon (liam.fallon@est.tech)
58 public class SimpleToscaProviderTest {
59 private static final String TEMPLATE_IS_NULL = "^serviceTemplate is marked .*on.*ull but is null$";
60 private static final String VCPE_INPUT_JSON = "policies/vCPE.policy.monitoring.input.tosca.json";
61 private static final String DAO_IS_NULL = "^dao is marked .*on.*ull but is null$";
63 private StandardCoder standardCoder;
66 * Set up the DAO towards the database.
68 * @throws Exception on database errors
71 public void setupDao() throws Exception {
72 final DaoParameters daoParameters = new DaoParameters();
73 daoParameters.setPluginClass(DefaultPfDao.class.getName());
75 daoParameters.setPersistenceUnit("ToscaConceptTest");
77 Properties jdbcProperties = new Properties();
78 jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_USER, "policy");
79 jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_PASSWORD, "P01icY");
81 // H2, use "org.mariadb.jdbc.Driver" and "jdbc:mariadb://localhost:3306/policy" for locally installed MariaDB
82 jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_DRIVER, "org.h2.Driver");
83 jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_URL, "jdbc:h2:mem:testdb");
85 daoParameters.setJdbcProperties(jdbcProperties);
87 pfDao = new PfDaoFactory().createPfDao(daoParameters);
88 pfDao.init(daoParameters);
95 public void setupGson() {
96 standardCoder = new StandardCoder();
100 public void teardown() {
105 public void testCreateUpdateGetDeleteDataType() throws PfModelException {
106 JpaToscaServiceTemplate serviceTemplate = new JpaToscaServiceTemplate();
108 PfConceptKey dataType0Key = new PfConceptKey("DataType0", "0.0.1");
109 JpaToscaDataType dataType0 = new JpaToscaDataType();
110 dataType0.setKey(dataType0Key);
111 serviceTemplate.setDataTypes(new JpaToscaDataTypes());
112 serviceTemplate.getDataTypes().getConceptMap().put(dataType0Key, dataType0);
114 JpaToscaServiceTemplate createdServiceTemplate =
115 new SimpleToscaProvider().createDataTypes(pfDao, serviceTemplate);
117 assertEquals(dataType0, createdServiceTemplate.getDataTypes().get(dataType0Key));
118 assertEquals(null, createdServiceTemplate.getDataTypes().get(dataType0Key).getDescription());
120 dataType0.setDescription("Updated Description");
122 JpaToscaServiceTemplate updatedServiceTemplate =
123 new SimpleToscaProvider().updateDataTypes(pfDao, serviceTemplate);
125 assertEquals(dataType0, updatedServiceTemplate.getDataTypes().get(dataType0Key));
126 assertEquals("Updated Description", updatedServiceTemplate.getDataTypes().get(dataType0Key).getDescription());
128 JpaToscaServiceTemplate gotServiceTemplate =
129 new SimpleToscaProvider().getDataTypes(pfDao, dataType0Key.getName(), dataType0Key.getVersion());
131 assertEquals(dataType0, gotServiceTemplate.getDataTypes().get(dataType0Key));
132 assertEquals("Updated Description", gotServiceTemplate.getDataTypes().get(dataType0Key).getDescription());
134 JpaToscaServiceTemplate deletedServiceTemplate = new SimpleToscaProvider().deleteDataType(pfDao, dataType0Key);
136 assertEquals(dataType0, deletedServiceTemplate.getDataTypes().get(dataType0Key));
137 assertEquals("Updated Description", deletedServiceTemplate.getDataTypes().get(dataType0Key).getDescription());
139 JpaToscaServiceTemplate doesNotExistServiceTemplate =
140 new SimpleToscaProvider().deleteDataType(pfDao, dataType0Key);
142 assertEquals(null, doesNotExistServiceTemplate.getDataTypes().get(dataType0Key));
146 public void testPoliciesGet() throws Exception {
147 ToscaServiceTemplate toscaServiceTemplate =
148 standardCoder.decode(ResourceUtils.getResourceAsString(VCPE_INPUT_JSON), ToscaServiceTemplate.class);
152 JpaToscaServiceTemplate originalServiceTemplate = new JpaToscaServiceTemplate();
153 originalServiceTemplate.fromAuthorative(toscaServiceTemplate);
155 assertNotNull(originalServiceTemplate);
156 JpaToscaServiceTemplate createdServiceTemplate =
157 new SimpleToscaProvider().createPolicies(pfDao, originalServiceTemplate);
159 assertEquals(originalServiceTemplate, createdServiceTemplate);
161 PfConceptKey policyKey = new PfConceptKey("onap.restart.tca:1.0.0");
163 JpaToscaServiceTemplate gotServiceTemplate =
164 new SimpleToscaProvider().getPolicies(pfDao, policyKey.getName(), policyKey.getVersion());
166 assertEquals(originalServiceTemplate.getTopologyTemplate().getPolicies().get(policyKey),
167 gotServiceTemplate.getTopologyTemplate().getPolicies().get(policyKey));
172 public void testPolicyCreate() throws Exception {
173 ToscaServiceTemplate toscaServiceTemplate =
174 standardCoder.decode(ResourceUtils.getResourceAsString(VCPE_INPUT_JSON), ToscaServiceTemplate.class);
178 JpaToscaServiceTemplate originalServiceTemplate = new JpaToscaServiceTemplate();
179 originalServiceTemplate.fromAuthorative(toscaServiceTemplate);
181 assertNotNull(originalServiceTemplate);
182 JpaToscaServiceTemplate createdServiceTemplate =
183 new SimpleToscaProvider().createPolicies(pfDao, originalServiceTemplate);
185 assertEquals(originalServiceTemplate, createdServiceTemplate);
189 public void testPolicyUpdate() throws Exception {
190 ToscaServiceTemplate toscaServiceTemplate =
191 standardCoder.decode(ResourceUtils.getResourceAsString(VCPE_INPUT_JSON), ToscaServiceTemplate.class);
195 JpaToscaServiceTemplate originalServiceTemplate = new JpaToscaServiceTemplate();
196 originalServiceTemplate.fromAuthorative(toscaServiceTemplate);
198 assertNotNull(originalServiceTemplate);
199 JpaToscaServiceTemplate updatedServiceTemplate =
200 new SimpleToscaProvider().updatePolicies(pfDao, originalServiceTemplate);
202 assertEquals(originalServiceTemplate, updatedServiceTemplate);
206 public void testPoliciesDelete() throws Exception {
207 ToscaServiceTemplate toscaServiceTemplate =
208 standardCoder.decode(ResourceUtils.getResourceAsString(VCPE_INPUT_JSON), ToscaServiceTemplate.class);
212 JpaToscaServiceTemplate originalServiceTemplate = new JpaToscaServiceTemplate();
213 originalServiceTemplate.fromAuthorative(toscaServiceTemplate);
215 assertNotNull(originalServiceTemplate);
216 JpaToscaServiceTemplate createdServiceTemplate =
217 new SimpleToscaProvider().createPolicies(pfDao, originalServiceTemplate);
219 assertEquals(originalServiceTemplate, createdServiceTemplate);
221 PfConceptKey policyKey = new PfConceptKey("onap.restart.tca:1.0.0");
223 JpaToscaServiceTemplate deletedServiceTemplate =
224 new SimpleToscaProvider().deletePolicy(pfDao, new PfConceptKey(policyKey));
226 assertEquals(originalServiceTemplate.getTopologyTemplate().getPolicies().get(policyKey),
227 deletedServiceTemplate.getTopologyTemplate().getPolicies().get(policyKey));
229 assertTrue(new SimpleToscaProvider().getPolicies(pfDao, policyKey.getName(), policyKey.getVersion())
230 .getTopologyTemplate().getPolicies().getConceptMap().isEmpty());
234 public void testAssertPoliciesExist() {
235 JpaToscaServiceTemplate testServiceTemplate = new JpaToscaServiceTemplate();
237 assertThatThrownBy(() -> new SimpleToscaProvider().createPolicies(pfDao, testServiceTemplate))
238 .hasMessage("topology template not specified on service template");
240 testServiceTemplate.setTopologyTemplate(new JpaToscaTopologyTemplate());
241 assertThatThrownBy(() -> new SimpleToscaProvider().createPolicies(pfDao, testServiceTemplate))
242 .hasMessage("no policies specified on topology template of service template");
244 testServiceTemplate.getTopologyTemplate().setPolicies(new JpaToscaPolicies());
245 assertThatThrownBy(() -> new SimpleToscaProvider().createPolicies(pfDao, testServiceTemplate))
246 .hasMessage("list of policies specified on topology template of service template is empty");
250 public void testNonNulls() {
251 assertThatThrownBy(() -> {
252 new SimpleToscaProvider().getDataTypes(null, null, null);
253 }).hasMessageMatching(DAO_IS_NULL);
255 assertThatThrownBy(() -> {
256 new SimpleToscaProvider().createDataTypes(null, null);
257 }).hasMessageMatching(DAO_IS_NULL);
259 assertThatThrownBy(() -> {
260 new SimpleToscaProvider().createDataTypes(null, new JpaToscaServiceTemplate());
261 }).hasMessageMatching(DAO_IS_NULL);
263 assertThatThrownBy(() -> {
264 new SimpleToscaProvider().createDataTypes(pfDao, null);
265 }).hasMessageMatching(TEMPLATE_IS_NULL);
267 assertThatThrownBy(() -> {
268 new SimpleToscaProvider().updateDataTypes(null, null);
269 }).hasMessageMatching(DAO_IS_NULL);
271 assertThatThrownBy(() -> {
272 new SimpleToscaProvider().updateDataTypes(null, new JpaToscaServiceTemplate());
273 }).hasMessageMatching(DAO_IS_NULL);
275 assertThatThrownBy(() -> {
276 new SimpleToscaProvider().updateDataTypes(pfDao, null);
277 }).hasMessageMatching(TEMPLATE_IS_NULL);
279 assertThatThrownBy(() -> {
280 new SimpleToscaProvider().deleteDataType(null, null);
281 }).hasMessageMatching(DAO_IS_NULL);
283 assertThatThrownBy(() -> {
284 new SimpleToscaProvider().deleteDataType(null, new PfConceptKey());
285 }).hasMessageMatching(DAO_IS_NULL);
287 assertThatThrownBy(() -> {
288 new SimpleToscaProvider().deleteDataType(pfDao, null);
289 }).hasMessageMatching("^dataTypeKey is marked .*on.*ull but is null$");
291 assertThatThrownBy(() -> {
292 new SimpleToscaProvider().getPolicyTypes(null, null, null);
293 }).hasMessageMatching(DAO_IS_NULL);
295 assertThatThrownBy(() -> {
296 new SimpleToscaProvider().createPolicyTypes(null, null);
297 }).hasMessageMatching(DAO_IS_NULL);
299 assertThatThrownBy(() -> {
300 new SimpleToscaProvider().createPolicyTypes(null, new JpaToscaServiceTemplate());
301 }).hasMessageMatching(DAO_IS_NULL);
303 assertThatThrownBy(() -> {
304 new SimpleToscaProvider().createPolicyTypes(pfDao, null);
305 }).hasMessageMatching(TEMPLATE_IS_NULL);
307 assertThatThrownBy(() -> {
308 new SimpleToscaProvider().updatePolicyTypes(null, null);
309 }).hasMessageMatching(DAO_IS_NULL);
311 assertThatThrownBy(() -> {
312 new SimpleToscaProvider().updatePolicyTypes(null, new JpaToscaServiceTemplate());
313 }).hasMessageMatching(DAO_IS_NULL);
315 assertThatThrownBy(() -> {
316 new SimpleToscaProvider().updatePolicyTypes(pfDao, null);
317 }).hasMessageMatching(TEMPLATE_IS_NULL);
319 assertThatThrownBy(() -> {
320 new SimpleToscaProvider().deletePolicyType(null, null);
321 }).hasMessageMatching(DAO_IS_NULL);
323 assertThatThrownBy(() -> {
324 new SimpleToscaProvider().deletePolicyType(null, new PfConceptKey());
325 }).hasMessageMatching(DAO_IS_NULL);
327 assertThatThrownBy(() -> {
328 new SimpleToscaProvider().deletePolicyType(pfDao, null);
329 }).hasMessageMatching("^policyTypeKey is marked .*on.*ull but is null$");
331 assertThatThrownBy(() -> {
332 new SimpleToscaProvider().getPolicies(null, null, null);
333 }).hasMessageMatching(DAO_IS_NULL);
335 assertThatThrownBy(() -> {
336 new SimpleToscaProvider().createPolicies(null, null);
337 }).hasMessageMatching(DAO_IS_NULL);
339 assertThatThrownBy(() -> {
340 new SimpleToscaProvider().createPolicies(null, new JpaToscaServiceTemplate());
341 }).hasMessageMatching(DAO_IS_NULL);
343 assertThatThrownBy(() -> {
344 new SimpleToscaProvider().createPolicies(pfDao, null);
345 }).hasMessageMatching(TEMPLATE_IS_NULL);
347 assertThatThrownBy(() -> {
348 new SimpleToscaProvider().updatePolicies(null, null);
349 }).hasMessageMatching(DAO_IS_NULL);
351 assertThatThrownBy(() -> {
352 new SimpleToscaProvider().updatePolicies(null, new JpaToscaServiceTemplate());
353 }).hasMessageMatching(DAO_IS_NULL);
355 assertThatThrownBy(() -> {
356 new SimpleToscaProvider().updatePolicies(pfDao, null);
357 }).hasMessageMatching(TEMPLATE_IS_NULL);
359 assertThatThrownBy(() -> {
360 new SimpleToscaProvider().deletePolicy(null, null);
361 }).hasMessageMatching(DAO_IS_NULL);
363 assertThatThrownBy(() -> {
364 new SimpleToscaProvider().deletePolicy(null, new PfConceptKey());
365 }).hasMessageMatching(DAO_IS_NULL);
367 assertThatThrownBy(() -> {
368 new SimpleToscaProvider().deletePolicy(pfDao, null);
369 }).hasMessageMatching("^policyKey is marked .*on.*ull but is null$");
372 private void createPolicyTypes() throws CoderException, PfModelException {
373 Object yamlObject = new Yaml().load(
374 ResourceUtils.getResourceAsString("policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app.yaml"));
375 String yamlAsJsonString = new StandardCoder().encode(yamlObject);
377 ToscaServiceTemplate toscaServiceTemplatePolicyType =
378 standardCoder.decode(yamlAsJsonString, ToscaServiceTemplate.class);
380 assertNotNull(toscaServiceTemplatePolicyType);
381 new AuthorativeToscaProvider().createPolicyTypes(pfDao, toscaServiceTemplatePolicyType);