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.sql.Connection;
30 import java.sql.DriverManager;
32 import org.junit.After;
33 import org.junit.Before;
34 import org.junit.Test;
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.simple.concepts.JpaToscaPolicies;
45 import org.onap.policy.models.tosca.simple.concepts.JpaToscaServiceTemplate;
46 import org.onap.policy.models.tosca.simple.concepts.JpaToscaTopologyTemplate;
49 * Test the {@link SimpleToscaProvider} class.
51 * @author Liam Fallon (liam.fallon@est.tech)
53 public class SimpleToscaProviderTest {
54 private Connection connection;
56 private StandardCoder standardCoder;
59 * Set up the DAO towards the database.
61 * @throws Exception on database errors
64 public void setupDao() throws Exception {
65 // Use the JDBC UI "jdbc:h2:mem:testdb" to test towards the h2 database
66 // Use the JDBC UI "jdbc:mariadb://localhost:3306/policy" to test towards a locally installed mariadb instance
67 connection = DriverManager.getConnection("jdbc:h2:mem:testdb", "policy", "P01icY");
69 final DaoParameters daoParameters = new DaoParameters();
70 daoParameters.setPluginClass(DefaultPfDao.class.getCanonicalName());
72 // Use the persistence unit ToscaConceptTest to test towards the h2 database
73 // Use the persistence unit ToscaConceptMariaDBTest to test towards a locally installed mariadb instance
74 daoParameters.setPersistenceUnit("ToscaConceptTest");
76 pfDao = new PfDaoFactory().createPfDao(daoParameters);
77 pfDao.init(daoParameters);
84 public void setupGson() {
85 standardCoder = new StandardCoder();
89 public void teardown() throws Exception {
95 public void testPoliciesGet() throws Exception {
96 ToscaServiceTemplate toscaServiceTemplate = standardCoder.decode(
97 ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.json"),
98 ToscaServiceTemplate.class);
100 JpaToscaServiceTemplate originalServiceTemplate = new JpaToscaServiceTemplate();
101 originalServiceTemplate.fromAuthorative(toscaServiceTemplate);
103 assertNotNull(originalServiceTemplate);
104 JpaToscaServiceTemplate createdServiceTemplate =
105 new SimpleToscaProvider().createPolicies(pfDao, originalServiceTemplate);
107 assertEquals(originalServiceTemplate, createdServiceTemplate);
109 PfConceptKey policyKey = new PfConceptKey("onap.restart.tca:1.0.0");
111 JpaToscaServiceTemplate gotServiceTemplate =
112 new SimpleToscaProvider().getPolicies(pfDao, policyKey.getName(), policyKey.getVersion());
114 assertEquals(originalServiceTemplate.getTopologyTemplate().getPolicies().get(policyKey),
115 gotServiceTemplate.getTopologyTemplate().getPolicies().get(policyKey));
120 public void testPolicyCreate() throws Exception {
121 ToscaServiceTemplate toscaServiceTemplate = standardCoder.decode(
122 ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.json"),
123 ToscaServiceTemplate.class);
125 JpaToscaServiceTemplate originalServiceTemplate = new JpaToscaServiceTemplate();
126 originalServiceTemplate.fromAuthorative(toscaServiceTemplate);
128 assertNotNull(originalServiceTemplate);
129 JpaToscaServiceTemplate createdServiceTemplate =
130 new SimpleToscaProvider().createPolicies(pfDao, originalServiceTemplate);
132 assertEquals(originalServiceTemplate, createdServiceTemplate);
136 public void testPolicyUpdate() throws Exception {
137 ToscaServiceTemplate toscaServiceTemplate = standardCoder.decode(
138 ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.json"),
139 ToscaServiceTemplate.class);
141 JpaToscaServiceTemplate originalServiceTemplate = new JpaToscaServiceTemplate();
142 originalServiceTemplate.fromAuthorative(toscaServiceTemplate);
144 assertNotNull(originalServiceTemplate);
145 JpaToscaServiceTemplate updatedServiceTemplate =
146 new SimpleToscaProvider().updatePolicies(pfDao, originalServiceTemplate);
148 assertEquals(originalServiceTemplate, updatedServiceTemplate);
152 public void testPoliciesDelete() throws Exception {
153 ToscaServiceTemplate toscaServiceTemplate = standardCoder.decode(
154 ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.json"),
155 ToscaServiceTemplate.class);
157 JpaToscaServiceTemplate originalServiceTemplate = new JpaToscaServiceTemplate();
158 originalServiceTemplate.fromAuthorative(toscaServiceTemplate);
160 assertNotNull(originalServiceTemplate);
161 JpaToscaServiceTemplate createdServiceTemplate =
162 new SimpleToscaProvider().createPolicies(pfDao, originalServiceTemplate);
164 assertEquals(originalServiceTemplate, createdServiceTemplate);
166 PfConceptKey policyKey = new PfConceptKey("onap.restart.tca:1.0.0");
168 JpaToscaServiceTemplate deletedServiceTemplate =
169 new SimpleToscaProvider().deletePolicy(pfDao, new PfConceptKey(policyKey));
171 assertEquals(originalServiceTemplate.getTopologyTemplate().getPolicies().get(policyKey),
172 deletedServiceTemplate.getTopologyTemplate().getPolicies().get(policyKey));
174 assertTrue(new SimpleToscaProvider().getPolicies(pfDao, policyKey.getName(), policyKey.getVersion())
175 .getTopologyTemplate().getPolicies().getConceptMap().isEmpty());
179 public void testAssertPoliciesExist() throws PfModelException {
180 JpaToscaServiceTemplate testServiceTemplate = new JpaToscaServiceTemplate();
183 new SimpleToscaProvider().createPolicies(pfDao, testServiceTemplate);
184 fail("test should throw an exception here");
185 } catch (Exception exc) {
186 assertEquals("topology template not specified on service template", exc.getMessage());
189 testServiceTemplate.setTopologyTemplate(new JpaToscaTopologyTemplate());
191 new SimpleToscaProvider().createPolicies(pfDao, testServiceTemplate);
192 fail("test should throw an exception here");
193 } catch (Exception exc) {
194 assertEquals("no policies specified on topology template of service template", exc.getMessage());
197 testServiceTemplate.getTopologyTemplate().setPolicies(new JpaToscaPolicies());
199 new SimpleToscaProvider().createPolicies(pfDao, testServiceTemplate);
200 fail("test should throw an exception here");
201 } catch (Exception exc) {
202 assertEquals("list of policies specified on topology template of service template is empty",
208 public void testNonNulls() {
209 assertThatThrownBy(() -> {
210 new SimpleToscaProvider().getPolicyTypes(null, null, null);
211 }).hasMessage("dao is marked @NonNull but is null");
213 assertThatThrownBy(() -> {
214 new SimpleToscaProvider().createPolicyTypes(null, null);
215 }).hasMessage("dao is marked @NonNull but is null");
217 assertThatThrownBy(() -> {
218 new SimpleToscaProvider().createPolicyTypes(null, new JpaToscaServiceTemplate());
219 }).hasMessage("dao is marked @NonNull but is null");
221 assertThatThrownBy(() -> {
222 new SimpleToscaProvider().createPolicyTypes(pfDao, null);
223 }).hasMessage("serviceTemplate is marked @NonNull but is null");
225 assertThatThrownBy(() -> {
226 new SimpleToscaProvider().updatePolicyTypes(null, null);
227 }).hasMessage("dao is marked @NonNull but is null");
229 assertThatThrownBy(() -> {
230 new SimpleToscaProvider().updatePolicyTypes(null, new JpaToscaServiceTemplate());
231 }).hasMessage("dao is marked @NonNull but is null");
233 assertThatThrownBy(() -> {
234 new SimpleToscaProvider().updatePolicyTypes(pfDao, null);
235 }).hasMessage("serviceTemplate is marked @NonNull but is null");
237 assertThatThrownBy(() -> {
238 new SimpleToscaProvider().deletePolicyType(null, null);
239 }).hasMessage("dao is marked @NonNull but is null");
241 assertThatThrownBy(() -> {
242 new SimpleToscaProvider().deletePolicyType(null, new PfConceptKey());
243 }).hasMessage("dao is marked @NonNull but is null");
245 assertThatThrownBy(() -> {
246 new SimpleToscaProvider().deletePolicyType(pfDao, null);
247 }).hasMessage("policyTypeKey is marked @NonNull but is null");
249 assertThatThrownBy(() -> {
250 new SimpleToscaProvider().getPolicies(null, null, null);
251 }).hasMessage("dao is marked @NonNull but is null");
253 assertThatThrownBy(() -> {
254 new SimpleToscaProvider().createPolicies(null, null);
255 }).hasMessage("dao is marked @NonNull but is null");
257 assertThatThrownBy(() -> {
258 new SimpleToscaProvider().createPolicies(null, new JpaToscaServiceTemplate());
259 }).hasMessage("dao is marked @NonNull but is null");
261 assertThatThrownBy(() -> {
262 new SimpleToscaProvider().createPolicies(pfDao, null);
263 }).hasMessage("serviceTemplate is marked @NonNull but is null");
265 assertThatThrownBy(() -> {
266 new SimpleToscaProvider().updatePolicies(null, null);
267 }).hasMessage("dao is marked @NonNull but is null");
269 assertThatThrownBy(() -> {
270 new SimpleToscaProvider().updatePolicies(null, new JpaToscaServiceTemplate());
271 }).hasMessage("dao is marked @NonNull but is null");
273 assertThatThrownBy(() -> {
274 new SimpleToscaProvider().updatePolicies(pfDao, null);
275 }).hasMessage("serviceTemplate is marked @NonNull but is null");
277 assertThatThrownBy(() -> {
278 new SimpleToscaProvider().deletePolicy(null, null);
279 }).hasMessage("dao is marked @NonNull but is null");
281 assertThatThrownBy(() -> {
282 new SimpleToscaProvider().deletePolicy(null, new PfConceptKey());
283 }).hasMessage("dao is marked @NonNull but is null");
285 assertThatThrownBy(() -> {
286 new SimpleToscaProvider().deletePolicy(pfDao, null);
287 }).hasMessage("policyKey is marked @NonNull but is null");