Merge "Fix more sonar issues in models: yaml to dao"
[policy/models.git] / models-tosca / src / test / java / org / onap / policy / models / tosca / simple / provider / SimpleToscaProviderTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2019 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
9  *
10  *      http://www.apache.org/licenses/LICENSE-2.0
11  *
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.
17  *
18  * SPDX-License-Identifier: Apache-2.0
19  * ============LICENSE_END=========================================================
20  */
21
22 package org.onap.policy.models.tosca.simple.provider;
23
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;
28
29 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.JpaToscaPolicies;
46 import org.onap.policy.models.tosca.simple.concepts.JpaToscaServiceTemplate;
47 import org.onap.policy.models.tosca.simple.concepts.JpaToscaTopologyTemplate;
48 import org.yaml.snakeyaml.Yaml;
49
50 /**
51  * Test the {@link SimpleToscaProvider} class.
52  *
53  * @author Liam Fallon (liam.fallon@est.tech)
54  */
55 public class SimpleToscaProviderTest {
56     private static final String TEMPLATE_IS_NULL = "serviceTemplate is marked @NonNull but is null";
57     private static final String VCPE_INPUT_JSON = "policies/vCPE.policy.monitoring.input.tosca.json";
58     private static final String DAO_IS_NULL = "dao is marked @NonNull but is null";
59     private PfDao pfDao;
60     private StandardCoder standardCoder;
61
62     /**
63      * Set up the DAO towards the database.
64      *
65      * @throws Exception on database errors
66      */
67     @Before
68     public void setupDao() throws Exception {
69         final DaoParameters daoParameters = new DaoParameters();
70         daoParameters.setPluginClass(DefaultPfDao.class.getCanonicalName());
71
72         daoParameters.setPersistenceUnit("ToscaConceptTest");
73
74         Properties jdbcProperties = new Properties();
75         jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_USER, "policy");
76         jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_PASSWORD, "P01icY");
77
78         // H2, use "org.mariadb.jdbc.Driver" and "jdbc:mariadb://localhost:3306/policy" for locally installed MariaDB
79         jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_DRIVER, "org.h2.Driver");
80         jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_URL, "jdbc:h2:mem:testdb");
81
82         daoParameters.setJdbcProperties(jdbcProperties);
83
84         pfDao = new PfDaoFactory().createPfDao(daoParameters);
85         pfDao.init(daoParameters);
86     }
87
88     /**
89      * Set up GSON.
90      */
91     @Before
92     public void setupGson() {
93         standardCoder = new StandardCoder();
94     }
95
96     @After
97     public void teardown() {
98         pfDao.close();
99     }
100
101     @Test
102     public void testPoliciesGet() throws Exception {
103         ToscaServiceTemplate toscaServiceTemplate = standardCoder.decode(
104                 ResourceUtils.getResourceAsString(VCPE_INPUT_JSON),
105                 ToscaServiceTemplate.class);
106
107         createPolicyTypes();
108
109         JpaToscaServiceTemplate originalServiceTemplate = new JpaToscaServiceTemplate();
110         originalServiceTemplate.fromAuthorative(toscaServiceTemplate);
111
112         assertNotNull(originalServiceTemplate);
113         JpaToscaServiceTemplate createdServiceTemplate =
114                 new SimpleToscaProvider().createPolicies(pfDao, originalServiceTemplate);
115
116         assertEquals(originalServiceTemplate, createdServiceTemplate);
117
118         PfConceptKey policyKey = new PfConceptKey("onap.restart.tca:1.0.0");
119
120         JpaToscaServiceTemplate gotServiceTemplate =
121                 new SimpleToscaProvider().getPolicies(pfDao, policyKey.getName(), policyKey.getVersion());
122
123         assertEquals(originalServiceTemplate.getTopologyTemplate().getPolicies().get(policyKey),
124                 gotServiceTemplate.getTopologyTemplate().getPolicies().get(policyKey));
125
126     }
127
128     @Test
129     public void testPolicyCreate() throws Exception {
130         ToscaServiceTemplate toscaServiceTemplate = standardCoder.decode(
131                 ResourceUtils.getResourceAsString(VCPE_INPUT_JSON),
132                 ToscaServiceTemplate.class);
133
134         createPolicyTypes();
135
136         JpaToscaServiceTemplate originalServiceTemplate = new JpaToscaServiceTemplate();
137         originalServiceTemplate.fromAuthorative(toscaServiceTemplate);
138
139         assertNotNull(originalServiceTemplate);
140         JpaToscaServiceTemplate createdServiceTemplate =
141                 new SimpleToscaProvider().createPolicies(pfDao, originalServiceTemplate);
142
143         assertEquals(originalServiceTemplate, createdServiceTemplate);
144     }
145
146     @Test
147     public void testPolicyUpdate() throws Exception {
148         ToscaServiceTemplate toscaServiceTemplate = standardCoder.decode(
149                 ResourceUtils.getResourceAsString(VCPE_INPUT_JSON),
150                 ToscaServiceTemplate.class);
151
152         createPolicyTypes();
153
154         JpaToscaServiceTemplate originalServiceTemplate = new JpaToscaServiceTemplate();
155         originalServiceTemplate.fromAuthorative(toscaServiceTemplate);
156
157         assertNotNull(originalServiceTemplate);
158         JpaToscaServiceTemplate updatedServiceTemplate =
159                 new SimpleToscaProvider().updatePolicies(pfDao, originalServiceTemplate);
160
161         assertEquals(originalServiceTemplate, updatedServiceTemplate);
162     }
163
164     @Test
165     public void testPoliciesDelete() throws Exception {
166         ToscaServiceTemplate toscaServiceTemplate = standardCoder.decode(
167                 ResourceUtils.getResourceAsString(VCPE_INPUT_JSON),
168                 ToscaServiceTemplate.class);
169
170         createPolicyTypes();
171
172         JpaToscaServiceTemplate originalServiceTemplate = new JpaToscaServiceTemplate();
173         originalServiceTemplate.fromAuthorative(toscaServiceTemplate);
174
175         assertNotNull(originalServiceTemplate);
176         JpaToscaServiceTemplate createdServiceTemplate =
177                 new SimpleToscaProvider().createPolicies(pfDao, originalServiceTemplate);
178
179         assertEquals(originalServiceTemplate, createdServiceTemplate);
180
181         PfConceptKey policyKey = new PfConceptKey("onap.restart.tca:1.0.0");
182
183         JpaToscaServiceTemplate deletedServiceTemplate =
184                 new SimpleToscaProvider().deletePolicy(pfDao, new PfConceptKey(policyKey));
185
186         assertEquals(originalServiceTemplate.getTopologyTemplate().getPolicies().get(policyKey),
187                 deletedServiceTemplate.getTopologyTemplate().getPolicies().get(policyKey));
188
189         assertTrue(new SimpleToscaProvider().getPolicies(pfDao, policyKey.getName(), policyKey.getVersion())
190                 .getTopologyTemplate().getPolicies().getConceptMap().isEmpty());
191     }
192
193     @Test
194     public void testAssertPoliciesExist() {
195         JpaToscaServiceTemplate testServiceTemplate = new JpaToscaServiceTemplate();
196
197         assertThatThrownBy(() -> new SimpleToscaProvider().createPolicies(pfDao, testServiceTemplate))
198                         .hasMessage("topology template not specified on service template");
199
200         testServiceTemplate.setTopologyTemplate(new JpaToscaTopologyTemplate());
201         assertThatThrownBy(() -> new SimpleToscaProvider().createPolicies(pfDao, testServiceTemplate))
202                         .hasMessage("no policies specified on topology template of service template");
203
204         testServiceTemplate.getTopologyTemplate().setPolicies(new JpaToscaPolicies());
205         assertThatThrownBy(() -> new SimpleToscaProvider().createPolicies(pfDao, testServiceTemplate))
206                         .hasMessage("list of policies specified on topology template of service template is empty");
207     }
208
209     @Test
210     public void testNonNulls() {
211         assertThatThrownBy(() -> {
212             new SimpleToscaProvider().getPolicyTypes(null, null, null);
213         }).hasMessage(DAO_IS_NULL);
214
215         assertThatThrownBy(() -> {
216             new SimpleToscaProvider().createPolicyTypes(null, null);
217         }).hasMessage(DAO_IS_NULL);
218
219         assertThatThrownBy(() -> {
220             new SimpleToscaProvider().createPolicyTypes(null, new JpaToscaServiceTemplate());
221         }).hasMessage(DAO_IS_NULL);
222
223         assertThatThrownBy(() -> {
224             new SimpleToscaProvider().createPolicyTypes(pfDao, null);
225         }).hasMessage(TEMPLATE_IS_NULL);
226
227         assertThatThrownBy(() -> {
228             new SimpleToscaProvider().updatePolicyTypes(null, null);
229         }).hasMessage(DAO_IS_NULL);
230
231         assertThatThrownBy(() -> {
232             new SimpleToscaProvider().updatePolicyTypes(null, new JpaToscaServiceTemplate());
233         }).hasMessage(DAO_IS_NULL);
234
235         assertThatThrownBy(() -> {
236             new SimpleToscaProvider().updatePolicyTypes(pfDao, null);
237         }).hasMessage(TEMPLATE_IS_NULL);
238
239         assertThatThrownBy(() -> {
240             new SimpleToscaProvider().deletePolicyType(null, null);
241         }).hasMessage(DAO_IS_NULL);
242
243         assertThatThrownBy(() -> {
244             new SimpleToscaProvider().deletePolicyType(null, new PfConceptKey());
245         }).hasMessage(DAO_IS_NULL);
246
247         assertThatThrownBy(() -> {
248             new SimpleToscaProvider().deletePolicyType(pfDao, null);
249         }).hasMessage("policyTypeKey is marked @NonNull but is null");
250
251         assertThatThrownBy(() -> {
252             new SimpleToscaProvider().getPolicies(null, null, null);
253         }).hasMessage(DAO_IS_NULL);
254
255         assertThatThrownBy(() -> {
256             new SimpleToscaProvider().createPolicies(null, null);
257         }).hasMessage(DAO_IS_NULL);
258
259         assertThatThrownBy(() -> {
260             new SimpleToscaProvider().createPolicies(null, new JpaToscaServiceTemplate());
261         }).hasMessage(DAO_IS_NULL);
262
263         assertThatThrownBy(() -> {
264             new SimpleToscaProvider().createPolicies(pfDao, null);
265         }).hasMessage(TEMPLATE_IS_NULL);
266
267         assertThatThrownBy(() -> {
268             new SimpleToscaProvider().updatePolicies(null, null);
269         }).hasMessage(DAO_IS_NULL);
270
271         assertThatThrownBy(() -> {
272             new SimpleToscaProvider().updatePolicies(null, new JpaToscaServiceTemplate());
273         }).hasMessage(DAO_IS_NULL);
274
275         assertThatThrownBy(() -> {
276             new SimpleToscaProvider().updatePolicies(pfDao, null);
277         }).hasMessage(TEMPLATE_IS_NULL);
278
279         assertThatThrownBy(() -> {
280             new SimpleToscaProvider().deletePolicy(null, null);
281         }).hasMessage(DAO_IS_NULL);
282
283         assertThatThrownBy(() -> {
284             new SimpleToscaProvider().deletePolicy(null, new PfConceptKey());
285         }).hasMessage(DAO_IS_NULL);
286
287         assertThatThrownBy(() -> {
288             new SimpleToscaProvider().deletePolicy(pfDao, null);
289         }).hasMessage("policyKey is marked @NonNull but is null");
290     }
291
292     private void createPolicyTypes() throws CoderException, PfModelException {
293         Object yamlObject = new Yaml().load(
294                 ResourceUtils.getResourceAsString("policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app.yaml"));
295         String yamlAsJsonString = new StandardCoder().encode(yamlObject);
296
297         ToscaServiceTemplate toscaServiceTemplatePolicyType =
298                 standardCoder.decode(yamlAsJsonString, ToscaServiceTemplate.class);
299
300         assertNotNull(toscaServiceTemplatePolicyType);
301         new AuthorativeToscaProvider().createPolicyTypes(pfDao, toscaServiceTemplatePolicyType);
302     }
303 }