Merge "Fix database properties"
[policy/models.git] / models-tosca / src / test / java / org / onap / policy / models / tosca / authorative / provider / AuthorativeToscaProviderPolicyTest.java
1 /*-
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
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
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.
16  *
17  * SPDX-License-Identifier: Apache-2.0
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.onap.policy.models.tosca.authorative.provider;
22
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
28 import java.util.ArrayList;
29 import java.util.List;
30 import java.util.Properties;
31
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.ToscaPolicy;
44 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyFilter;
45 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
46 import org.onap.policy.models.tosca.authorative.concepts.ToscaTopologyTemplate;
47
48 /**
49  * Test of the {@link AuthorativeToscaProvider} class.
50  *
51  * @author Liam Fallon (liam.fallon@est.tech)
52  */
53 public class AuthorativeToscaProviderPolicyTest {
54     private PfDao pfDao;
55     private StandardCoder standardCoder;
56
57     /**
58      * Set up the DAO towards the database.
59      *
60      * @throws Exception on database errors
61      */
62     @Before
63     public void setupDao() throws Exception {
64         final DaoParameters daoParameters = new DaoParameters();
65         daoParameters.setPluginClass(DefaultPfDao.class.getCanonicalName());
66
67         daoParameters.setPersistenceUnit("ToscaConceptTest");
68
69         Properties jdbcProperties = new Properties();
70         jdbcProperties.setProperty("javax.persistence.jdbc.user", "policy");
71         jdbcProperties.setProperty("javax.persistence.jdbc.password", "P01icY");
72
73         // H2
74         jdbcProperties.setProperty("javax.persistence.jdbc.driver", "org.h2.Driver");
75         jdbcProperties.setProperty("javax.persistence.jdbc.url", "jdbc:h2:mem:testdb");
76
77         // MariaDB
78         //jdbcProperties.setProperty("javax.persistence.jdbc.driver", "org.mariadb.jdbc.Driver");
79         //jdbcProperties.setProperty("javax.persistence.jdbc.url", "jdbc:mariadb://localhost:3306/policy");
80
81         daoParameters.setJdbcProperties(jdbcProperties );
82
83         pfDao = new PfDaoFactory().createPfDao(daoParameters);
84         pfDao.init(daoParameters);
85     }
86
87     /**
88      * Set up GSON.
89      */
90     @Before
91     public void setupGson() {
92         standardCoder = new StandardCoder();
93     }
94
95     @After
96     public void teardown() throws Exception {
97         pfDao.close();
98         //connection.close();
99     }
100
101     @Test
102     public void testPoliciesGet() throws Exception {
103         assertThatThrownBy(() -> {
104             new AuthorativeToscaProvider().getPolicies(null, null, null);
105         }).hasMessage("dao is marked @NonNull but is null");
106
107         assertThatThrownBy(() -> {
108             new AuthorativeToscaProvider().getPolicyList(null, null, null);
109         }).hasMessage("dao is marked @NonNull but is null");
110
111         ToscaServiceTemplate toscaServiceTemplate = standardCoder.decode(
112                 ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.json"),
113                 ToscaServiceTemplate.class);
114
115         assertNotNull(toscaServiceTemplate);
116         ToscaServiceTemplate createdServiceTemplate =
117                 new AuthorativeToscaProvider().createPolicies(pfDao, toscaServiceTemplate);
118
119         PfConceptKey policyKey = new PfConceptKey("onap.restart.tca:1.0.0");
120
121         ToscaPolicy beforePolicy =
122                 toscaServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
123         ToscaPolicy createdPolicy =
124                 createdServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
125         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, createdPolicy));
126         assertTrue(beforePolicy.getType().equals(createdPolicy.getType()));
127
128         ToscaServiceTemplate gotServiceTemplate =
129                 new AuthorativeToscaProvider().getPolicies(pfDao, policyKey.getName(), policyKey.getVersion());
130
131         ToscaPolicy gotPolicy =
132                 gotServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
133         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicy));
134         assertTrue(beforePolicy.getType().equals(gotPolicy.getType()));
135
136         List<ToscaPolicy> gotPolicyList =
137                 new AuthorativeToscaProvider().getPolicyList(pfDao, "onap.restart.tca", "1.0.0");
138         assertEquals(1, gotPolicyList.size());
139         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicyList.get(0)));
140
141         gotPolicyList = new AuthorativeToscaProvider().getPolicyList(pfDao, "onap.restart.tca", null);
142         assertEquals(1, gotPolicyList.size());
143         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicyList.get(0)));
144
145         gotPolicyList = new AuthorativeToscaProvider().getPolicyList(pfDao, null, null);
146         assertEquals(1, gotPolicyList.size());
147         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicyList.get(0)));
148
149         gotPolicyList = new AuthorativeToscaProvider().getPolicyList(pfDao, null, "1.0.0");
150         assertEquals(1, gotPolicyList.size());
151         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicyList.get(0)));
152
153         gotPolicyList = new AuthorativeToscaProvider().getPolicyList(pfDao, "Nonexistant", "1.0.0");
154         assertEquals(0, gotPolicyList.size());
155     }
156
157     @Test
158     public void testPoliciesGetFiltered() throws Exception {
159         assertThatThrownBy(() -> {
160             new AuthorativeToscaProvider().getFilteredPolicies(null, null);
161         }).hasMessage("dao is marked @NonNull but is null");
162
163         assertThatThrownBy(() -> {
164             new AuthorativeToscaProvider().getFilteredPolicies(null, ToscaPolicyFilter.builder().build());
165         }).hasMessage("dao is marked @NonNull but is null");
166
167         assertThatThrownBy(() -> {
168             new AuthorativeToscaProvider().getFilteredPolicies(pfDao, null);
169         }).hasMessage("filter is marked @NonNull but is null");
170
171         assertThatThrownBy(() -> {
172             new AuthorativeToscaProvider().getFilteredPolicyList(null, null);
173         }).hasMessage("dao is marked @NonNull but is null");
174
175         assertThatThrownBy(() -> {
176             new AuthorativeToscaProvider().getFilteredPolicyList(null, ToscaPolicyFilter.builder().build());
177         }).hasMessage("dao is marked @NonNull but is null");
178
179         assertThatThrownBy(() -> {
180             new AuthorativeToscaProvider().getFilteredPolicyList(pfDao, null);
181         }).hasMessage("filter is marked @NonNull but is null");
182
183         ToscaServiceTemplate toscaServiceTemplate = standardCoder.decode(
184                 ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.json"),
185                 ToscaServiceTemplate.class);
186
187         assertNotNull(toscaServiceTemplate);
188         ToscaServiceTemplate createdServiceTemplate =
189                 new AuthorativeToscaProvider().createPolicies(pfDao, toscaServiceTemplate);
190
191         PfConceptKey policyKey = new PfConceptKey("onap.restart.tca:1.0.0");
192
193         ToscaPolicy beforePolicy =
194                 toscaServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
195         ToscaPolicy createdPolicy =
196                 createdServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
197         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, createdPolicy));
198         assertTrue(beforePolicy.getType().equals(createdPolicy.getType()));
199
200         ToscaServiceTemplate gotServiceTemplate =
201                 new AuthorativeToscaProvider().getFilteredPolicies(pfDao, ToscaPolicyFilter.builder().build());
202
203         ToscaPolicy gotPolicy =
204                 gotServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
205         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicy));
206         assertTrue(beforePolicy.getType().equals(gotPolicy.getType()));
207
208         gotServiceTemplate = new AuthorativeToscaProvider().getFilteredPolicies(pfDao,
209                 ToscaPolicyFilter.builder().name(policyKey.getName()).build());
210
211         gotPolicy = gotServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
212         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicy));
213         assertTrue(beforePolicy.getType().equals(gotPolicy.getType()));
214
215         gotServiceTemplate = new AuthorativeToscaProvider().getFilteredPolicies(pfDao,
216                 ToscaPolicyFilter.builder().name(policyKey.getName()).version("1.0.0").build());
217
218         gotPolicy = gotServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
219         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicy));
220         assertTrue(beforePolicy.getType().equals(gotPolicy.getType()));
221
222         List<ToscaPolicy> gotPolicyList =
223                 new AuthorativeToscaProvider().getPolicyList(pfDao, "onap.restart.tca", "1.0.0");
224         assertEquals(1, gotPolicyList.size());
225         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicyList.get(0)));
226
227         gotPolicyList =
228                 new AuthorativeToscaProvider().getFilteredPolicyList(pfDao, ToscaPolicyFilter.builder().build());
229         assertEquals(1, gotPolicyList.size());
230         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicyList.get(0)));
231
232         gotPolicyList = new AuthorativeToscaProvider().getFilteredPolicyList(pfDao,
233                 ToscaPolicyFilter.builder().name(policyKey.getName()).build());
234         assertEquals(1, gotPolicyList.size());
235         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicyList.get(0)));
236
237         gotPolicyList = new AuthorativeToscaProvider().getFilteredPolicyList(pfDao,
238                 ToscaPolicyFilter.builder().name(policyKey.getName()).version("1.0.0").build());
239         assertEquals(1, gotPolicyList.size());
240         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicyList.get(0)));
241     }
242
243     @Test
244     public void testPolicyCreate() throws Exception {
245         assertThatThrownBy(() -> {
246             new AuthorativeToscaProvider().createPolicies(null, null);
247         }).hasMessage("dao is marked @NonNull but is null");
248
249         assertThatThrownBy(() -> {
250             new AuthorativeToscaProvider().createPolicies(null, new ToscaServiceTemplate());
251         }).hasMessage("dao is marked @NonNull but is null");
252
253         assertThatThrownBy(() -> {
254             new AuthorativeToscaProvider().createPolicies(pfDao, null);
255         }).hasMessage("serviceTemplate is marked @NonNull but is null");
256
257         ToscaServiceTemplate toscaServiceTemplate = standardCoder.decode(
258                 ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.json"),
259                 ToscaServiceTemplate.class);
260
261         assertNotNull(toscaServiceTemplate);
262         ToscaServiceTemplate createdServiceTemplate =
263                 new AuthorativeToscaProvider().createPolicies(pfDao, toscaServiceTemplate);
264
265         PfConceptKey policyKey = new PfConceptKey("onap.restart.tca:1.0.0");
266
267         ToscaPolicy beforePolicy =
268                 toscaServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
269         ToscaPolicy createdPolicy =
270                 createdServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
271         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, createdPolicy));
272         assertTrue(beforePolicy.getType().equals(createdPolicy.getType()));
273     }
274
275
276     @Test
277     public void testPolicyUpdate() throws Exception {
278         assertThatThrownBy(() -> {
279             new AuthorativeToscaProvider().createPolicies(null, null);
280         }).hasMessage("dao is marked @NonNull but is null");
281
282         assertThatThrownBy(() -> {
283             new AuthorativeToscaProvider().updatePolicies(null, null);
284         }).hasMessage("dao is marked @NonNull but is null");
285
286         assertThatThrownBy(() -> {
287             new AuthorativeToscaProvider().updatePolicies(null, new ToscaServiceTemplate());
288         }).hasMessage("dao is marked @NonNull but is null");
289
290         assertThatThrownBy(() -> {
291             new AuthorativeToscaProvider().updatePolicies(pfDao, null);
292         }).hasMessage("serviceTemplate is marked @NonNull but is null");
293
294         ToscaServiceTemplate toscaServiceTemplate = standardCoder.decode(
295                 ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.json"),
296                 ToscaServiceTemplate.class);
297
298         assertNotNull(toscaServiceTemplate);
299         ToscaServiceTemplate createdServiceTemplate =
300                 new AuthorativeToscaProvider().createPolicies(pfDao, toscaServiceTemplate);
301
302         PfConceptKey policyKey = new PfConceptKey("onap.restart.tca:1.0.0");
303
304         ToscaPolicy beforePolicy =
305                 toscaServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
306         ToscaPolicy createdPolicy =
307                 createdServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
308         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, createdPolicy));
309         assertTrue(beforePolicy.getType().equals(createdPolicy.getType()));
310
311         ToscaServiceTemplate updatedServiceTemplate =
312                 new AuthorativeToscaProvider().updatePolicies(pfDao, toscaServiceTemplate);
313
314         ToscaPolicy updatedPolicy =
315                 updatedServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
316         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, updatedPolicy));
317         assertTrue(beforePolicy.getType().equals(updatedPolicy.getType()));
318     }
319
320     @Test
321     public void testPoliciesDelete() throws Exception {
322         assertThatThrownBy(() -> {
323             new AuthorativeToscaProvider().deletePolicy(null, null, null);
324         }).hasMessage("dao is marked @NonNull but is null");
325
326         assertThatThrownBy(() -> {
327             new AuthorativeToscaProvider().deletePolicy(null, null, "version");
328         }).hasMessage("dao is marked @NonNull but is null");
329
330         assertThatThrownBy(() -> {
331             new AuthorativeToscaProvider().deletePolicy(null, "name", null);
332         }).hasMessage("dao is marked @NonNull but is null");
333
334         assertThatThrownBy(() -> {
335             new AuthorativeToscaProvider().deletePolicy(null, "name", "version");
336         }).hasMessage("dao is marked @NonNull but is null");
337
338         assertThatThrownBy(() -> {
339             new AuthorativeToscaProvider().deletePolicy(pfDao, null, null);
340         }).hasMessage("name is marked @NonNull but is null");
341
342         assertThatThrownBy(() -> {
343             new AuthorativeToscaProvider().deletePolicy(pfDao, null, "version");
344         }).hasMessage("name is marked @NonNull but is null");
345
346         assertThatThrownBy(() -> {
347             new AuthorativeToscaProvider().deletePolicy(pfDao, "name", null);
348         }).hasMessage("version is marked @NonNull but is null");
349
350         ToscaServiceTemplate toscaServiceTemplate = standardCoder.decode(
351                 ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.json"),
352                 ToscaServiceTemplate.class);
353
354         assertNotNull(toscaServiceTemplate);
355         ToscaServiceTemplate createdServiceTemplate =
356                 new AuthorativeToscaProvider().createPolicies(pfDao, toscaServiceTemplate);
357
358         PfConceptKey policyKey = new PfConceptKey("onap.restart.tca:1.0.0");
359
360         ToscaPolicy beforePolicy =
361                 toscaServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
362         ToscaPolicy createdPolicy =
363                 createdServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
364         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, createdPolicy));
365         assertTrue(beforePolicy.getType().equals(createdPolicy.getType()));
366
367         ToscaServiceTemplate deletedServiceTemplate =
368                 new AuthorativeToscaProvider().deletePolicy(pfDao, policyKey.getName(), policyKey.getVersion());
369
370         ToscaPolicy deletedPolicy =
371                 deletedServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
372         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, createdPolicy));
373         assertTrue(beforePolicy.getType().equals(deletedPolicy.getType()));
374
375         ToscaServiceTemplate gotServiceTemplate =
376                 new AuthorativeToscaProvider().getPolicies(pfDao, policyKey.getName(), policyKey.getVersion());
377
378         assertEquals(0, gotServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).size());
379     }
380
381     @Test
382     public void testAssertPoliciesExist() throws PfModelException {
383         ToscaServiceTemplate testServiceTemplate = new ToscaServiceTemplate();
384
385         assertThatThrownBy(() -> {
386             new AuthorativeToscaProvider().deletePolicy(pfDao, "name", null);
387         }).hasMessage("version is marked @NonNull but is null");
388
389         assertThatThrownBy(() -> {
390             new AuthorativeToscaProvider().createPolicies(pfDao, testServiceTemplate);
391         }).hasMessage("topology template not specified on service template");
392
393         testServiceTemplate.setToscaTopologyTemplate(new ToscaTopologyTemplate());
394         assertThatThrownBy(() -> {
395             new AuthorativeToscaProvider().createPolicies(pfDao, testServiceTemplate);
396         }).hasMessage("no policies specified on topology template of service template");
397
398         testServiceTemplate.getToscaTopologyTemplate().setPolicies(new ArrayList<>());
399         assertThatThrownBy(() -> {
400             new AuthorativeToscaProvider().createPolicies(pfDao, testServiceTemplate);
401         }).hasMessage("An incoming list of concepts must have at least one entry");
402     }
403 }