2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2019 Nordix Foundation.
4 * ================================================================================
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
17 * SPDX-License-Identifier: Apache-2.0
18 * ============LICENSE_END=========================================================
21 package org.onap.policy.models.tosca.simple.provider;
23 import static org.assertj.core.api.Assertions.assertThatThrownBy;
24 import static org.junit.Assert.assertEquals;
25 import static org.junit.Assert.assertNotNull;
26 import static org.junit.Assert.assertTrue;
27 import static org.junit.Assert.fail;
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.JpaToscaPolicies;
47 import org.onap.policy.models.tosca.simple.concepts.JpaToscaServiceTemplate;
48 import org.onap.policy.models.tosca.simple.concepts.JpaToscaTopologyTemplate;
49 import org.yaml.snakeyaml.Yaml;
52 * Test the {@link SimpleToscaProvider} class.
54 * @author Liam Fallon (liam.fallon@est.tech)
56 public class SimpleToscaProviderTest {
58 private StandardCoder standardCoder;
61 * Set up the DAO towards the database.
63 * @throws Exception on database errors
66 public void setupDao() throws Exception {
67 final DaoParameters daoParameters = new DaoParameters();
68 daoParameters.setPluginClass(DefaultPfDao.class.getCanonicalName());
70 daoParameters.setPersistenceUnit("ToscaConceptTest");
72 Properties jdbcProperties = new Properties();
73 jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_USER, "policy");
74 jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_PASSWORD, "P01icY");
76 // H2, use "org.mariadb.jdbc.Driver" and "jdbc:mariadb://localhost:3306/policy" for locally installed MariaDB
77 jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_DRIVER, "org.h2.Driver");
78 jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_URL, "jdbc:h2:mem:testdb");
80 daoParameters.setJdbcProperties(jdbcProperties);
82 pfDao = new PfDaoFactory().createPfDao(daoParameters);
83 pfDao.init(daoParameters);
90 public void setupGson() {
91 standardCoder = new StandardCoder();
95 public void teardown() throws Exception {
100 public void testPoliciesGet() throws Exception {
101 ToscaServiceTemplate toscaServiceTemplate = standardCoder.decode(
102 ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.json"),
103 ToscaServiceTemplate.class);
107 JpaToscaServiceTemplate originalServiceTemplate = new JpaToscaServiceTemplate();
108 originalServiceTemplate.fromAuthorative(toscaServiceTemplate);
110 assertNotNull(originalServiceTemplate);
111 JpaToscaServiceTemplate createdServiceTemplate =
112 new SimpleToscaProvider().createPolicies(pfDao, originalServiceTemplate);
114 assertEquals(originalServiceTemplate, createdServiceTemplate);
116 PfConceptKey policyKey = new PfConceptKey("onap.restart.tca:1.0.0");
118 JpaToscaServiceTemplate gotServiceTemplate =
119 new SimpleToscaProvider().getPolicies(pfDao, policyKey.getName(), policyKey.getVersion());
121 assertEquals(originalServiceTemplate.getTopologyTemplate().getPolicies().get(policyKey),
122 gotServiceTemplate.getTopologyTemplate().getPolicies().get(policyKey));
127 public void testPolicyCreate() throws Exception {
128 ToscaServiceTemplate toscaServiceTemplate = standardCoder.decode(
129 ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.json"),
130 ToscaServiceTemplate.class);
134 JpaToscaServiceTemplate originalServiceTemplate = new JpaToscaServiceTemplate();
135 originalServiceTemplate.fromAuthorative(toscaServiceTemplate);
137 assertNotNull(originalServiceTemplate);
138 JpaToscaServiceTemplate createdServiceTemplate =
139 new SimpleToscaProvider().createPolicies(pfDao, originalServiceTemplate);
141 assertEquals(originalServiceTemplate, createdServiceTemplate);
145 public void testPolicyUpdate() throws Exception {
146 ToscaServiceTemplate toscaServiceTemplate = standardCoder.decode(
147 ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.json"),
148 ToscaServiceTemplate.class);
152 JpaToscaServiceTemplate originalServiceTemplate = new JpaToscaServiceTemplate();
153 originalServiceTemplate.fromAuthorative(toscaServiceTemplate);
155 assertNotNull(originalServiceTemplate);
156 JpaToscaServiceTemplate updatedServiceTemplate =
157 new SimpleToscaProvider().updatePolicies(pfDao, originalServiceTemplate);
159 assertEquals(originalServiceTemplate, updatedServiceTemplate);
163 public void testPoliciesDelete() throws Exception {
164 ToscaServiceTemplate toscaServiceTemplate = standardCoder.decode(
165 ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.json"),
166 ToscaServiceTemplate.class);
170 JpaToscaServiceTemplate originalServiceTemplate = new JpaToscaServiceTemplate();
171 originalServiceTemplate.fromAuthorative(toscaServiceTemplate);
173 assertNotNull(originalServiceTemplate);
174 JpaToscaServiceTemplate createdServiceTemplate =
175 new SimpleToscaProvider().createPolicies(pfDao, originalServiceTemplate);
177 assertEquals(originalServiceTemplate, createdServiceTemplate);
179 PfConceptKey policyKey = new PfConceptKey("onap.restart.tca:1.0.0");
181 JpaToscaServiceTemplate deletedServiceTemplate =
182 new SimpleToscaProvider().deletePolicy(pfDao, new PfConceptKey(policyKey));
184 assertEquals(originalServiceTemplate.getTopologyTemplate().getPolicies().get(policyKey),
185 deletedServiceTemplate.getTopologyTemplate().getPolicies().get(policyKey));
187 assertTrue(new SimpleToscaProvider().getPolicies(pfDao, policyKey.getName(), policyKey.getVersion())
188 .getTopologyTemplate().getPolicies().getConceptMap().isEmpty());
192 public void testAssertPoliciesExist() throws PfModelException {
193 JpaToscaServiceTemplate testServiceTemplate = new JpaToscaServiceTemplate();
196 new SimpleToscaProvider().createPolicies(pfDao, testServiceTemplate);
197 fail("test should throw an exception here");
198 } catch (Exception exc) {
199 assertEquals("topology template not specified on service template", exc.getMessage());
202 testServiceTemplate.setTopologyTemplate(new JpaToscaTopologyTemplate());
204 new SimpleToscaProvider().createPolicies(pfDao, testServiceTemplate);
205 fail("test should throw an exception here");
206 } catch (Exception exc) {
207 assertEquals("no policies specified on topology template of service template", exc.getMessage());
210 testServiceTemplate.getTopologyTemplate().setPolicies(new JpaToscaPolicies());
212 new SimpleToscaProvider().createPolicies(pfDao, testServiceTemplate);
213 fail("test should throw an exception here");
214 } catch (Exception exc) {
215 assertEquals("list of policies specified on topology template of service template is empty",
221 public void testNonNulls() {
222 assertThatThrownBy(() -> {
223 new SimpleToscaProvider().getPolicyTypes(null, null, null);
224 }).hasMessage("dao is marked @NonNull but is null");
226 assertThatThrownBy(() -> {
227 new SimpleToscaProvider().createPolicyTypes(null, null);
228 }).hasMessage("dao is marked @NonNull but is null");
230 assertThatThrownBy(() -> {
231 new SimpleToscaProvider().createPolicyTypes(null, new JpaToscaServiceTemplate());
232 }).hasMessage("dao is marked @NonNull but is null");
234 assertThatThrownBy(() -> {
235 new SimpleToscaProvider().createPolicyTypes(pfDao, null);
236 }).hasMessage("serviceTemplate is marked @NonNull but is null");
238 assertThatThrownBy(() -> {
239 new SimpleToscaProvider().updatePolicyTypes(null, null);
240 }).hasMessage("dao is marked @NonNull but is null");
242 assertThatThrownBy(() -> {
243 new SimpleToscaProvider().updatePolicyTypes(null, new JpaToscaServiceTemplate());
244 }).hasMessage("dao is marked @NonNull but is null");
246 assertThatThrownBy(() -> {
247 new SimpleToscaProvider().updatePolicyTypes(pfDao, null);
248 }).hasMessage("serviceTemplate is marked @NonNull but is null");
250 assertThatThrownBy(() -> {
251 new SimpleToscaProvider().deletePolicyType(null, null);
252 }).hasMessage("dao is marked @NonNull but is null");
254 assertThatThrownBy(() -> {
255 new SimpleToscaProvider().deletePolicyType(null, new PfConceptKey());
256 }).hasMessage("dao is marked @NonNull but is null");
258 assertThatThrownBy(() -> {
259 new SimpleToscaProvider().deletePolicyType(pfDao, null);
260 }).hasMessage("policyTypeKey is marked @NonNull but is null");
262 assertThatThrownBy(() -> {
263 new SimpleToscaProvider().getPolicies(null, null, null);
264 }).hasMessage("dao is marked @NonNull but is null");
266 assertThatThrownBy(() -> {
267 new SimpleToscaProvider().createPolicies(null, null);
268 }).hasMessage("dao is marked @NonNull but is null");
270 assertThatThrownBy(() -> {
271 new SimpleToscaProvider().createPolicies(null, new JpaToscaServiceTemplate());
272 }).hasMessage("dao is marked @NonNull but is null");
274 assertThatThrownBy(() -> {
275 new SimpleToscaProvider().createPolicies(pfDao, null);
276 }).hasMessage("serviceTemplate is marked @NonNull but is null");
278 assertThatThrownBy(() -> {
279 new SimpleToscaProvider().updatePolicies(null, null);
280 }).hasMessage("dao is marked @NonNull but is null");
282 assertThatThrownBy(() -> {
283 new SimpleToscaProvider().updatePolicies(null, new JpaToscaServiceTemplate());
284 }).hasMessage("dao is marked @NonNull but is null");
286 assertThatThrownBy(() -> {
287 new SimpleToscaProvider().updatePolicies(pfDao, null);
288 }).hasMessage("serviceTemplate is marked @NonNull but is null");
290 assertThatThrownBy(() -> {
291 new SimpleToscaProvider().deletePolicy(null, null);
292 }).hasMessage("dao is marked @NonNull but is null");
294 assertThatThrownBy(() -> {
295 new SimpleToscaProvider().deletePolicy(null, new PfConceptKey());
296 }).hasMessage("dao is marked @NonNull but is null");
298 assertThatThrownBy(() -> {
299 new SimpleToscaProvider().deletePolicy(pfDao, null);
300 }).hasMessage("policyKey is marked @NonNull but is null");
303 private void createPolicyTypes() throws CoderException, PfModelException {
304 Object yamlObject = new Yaml().load(
305 ResourceUtils.getResourceAsString("policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app.yaml"));
306 String yamlAsJsonString = new StandardCoder().encode(yamlObject);
308 ToscaServiceTemplate toscaServiceTemplatePolicyType =
309 standardCoder.decode(yamlAsJsonString, ToscaServiceTemplate.class);
311 assertNotNull(toscaServiceTemplatePolicyType);
312 new AuthorativeToscaProvider().createPolicyTypes(pfDao, toscaServiceTemplatePolicyType);