Set default and check existance of Policy Type
[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.eclipse.persistence.config.PersistenceUnitProperties;
33 import org.junit.After;
34 import org.junit.Before;
35 import org.junit.Test;
36 import org.onap.policy.common.utils.coder.CoderException;
37 import org.onap.policy.common.utils.coder.StandardCoder;
38 import org.onap.policy.common.utils.resources.ResourceUtils;
39 import org.onap.policy.models.base.PfConceptKey;
40 import org.onap.policy.models.base.PfModelException;
41 import org.onap.policy.models.dao.DaoParameters;
42 import org.onap.policy.models.dao.PfDao;
43 import org.onap.policy.models.dao.PfDaoFactory;
44 import org.onap.policy.models.dao.impl.DefaultPfDao;
45 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
46 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyFilter;
47 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
48 import org.onap.policy.models.tosca.authorative.concepts.ToscaTopologyTemplate;
49 import org.yaml.snakeyaml.Yaml;
50
51 /**
52  * Test of the {@link AuthorativeToscaProvider} class.
53  *
54  * @author Liam Fallon (liam.fallon@est.tech)
55  */
56 public class AuthorativeToscaProviderPolicyTest {
57     private PfDao pfDao;
58     private StandardCoder standardCoder;
59
60     /**
61      * Set up the DAO towards the database.
62      *
63      * @throws Exception on database errors
64      */
65     @Before
66     public void setupDao() throws Exception {
67         final DaoParameters daoParameters = new DaoParameters();
68         daoParameters.setPluginClass(DefaultPfDao.class.getCanonicalName());
69
70         daoParameters.setPersistenceUnit("ToscaConceptTest");
71
72         Properties jdbcProperties = new Properties();
73         jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_USER, "policy");
74         jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_PASSWORD, "P01icY");
75
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");
79
80         daoParameters.setJdbcProperties(jdbcProperties);
81
82         pfDao = new PfDaoFactory().createPfDao(daoParameters);
83         pfDao.init(daoParameters);
84     }
85
86     /**
87      * Set up GSON.
88      */
89     @Before
90     public void setupGson() {
91         standardCoder = new StandardCoder();
92     }
93
94     @After
95     public void teardown() throws Exception {
96         pfDao.close();
97     }
98
99     @Test
100     public void testPoliciesGet() throws Exception {
101         assertThatThrownBy(() -> {
102             new AuthorativeToscaProvider().getPolicies(null, null, null);
103         }).hasMessage("dao is marked @NonNull but is null");
104
105         assertThatThrownBy(() -> {
106             new AuthorativeToscaProvider().getPolicyList(null, null, null);
107         }).hasMessage("dao is marked @NonNull but is null");
108
109         createPolicyTypes();
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         createPolicyTypes();
184
185         ToscaServiceTemplate toscaServiceTemplate = standardCoder.decode(
186                 ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.json"),
187                 ToscaServiceTemplate.class);
188
189         assertNotNull(toscaServiceTemplate);
190         ToscaServiceTemplate createdServiceTemplate =
191                 new AuthorativeToscaProvider().createPolicies(pfDao, toscaServiceTemplate);
192
193         PfConceptKey policyKey = new PfConceptKey("onap.restart.tca:1.0.0");
194
195         ToscaPolicy beforePolicy =
196                 toscaServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
197         ToscaPolicy createdPolicy =
198                 createdServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
199         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, createdPolicy));
200         assertTrue(beforePolicy.getType().equals(createdPolicy.getType()));
201
202         ToscaServiceTemplate gotServiceTemplate =
203                 new AuthorativeToscaProvider().getFilteredPolicies(pfDao, ToscaPolicyFilter.builder().build());
204
205         ToscaPolicy gotPolicy =
206                 gotServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
207         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicy));
208         assertTrue(beforePolicy.getType().equals(gotPolicy.getType()));
209
210         gotServiceTemplate = new AuthorativeToscaProvider().getFilteredPolicies(pfDao,
211                 ToscaPolicyFilter.builder().name(policyKey.getName()).build());
212
213         gotPolicy = gotServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
214         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicy));
215         assertTrue(beforePolicy.getType().equals(gotPolicy.getType()));
216
217         gotServiceTemplate = new AuthorativeToscaProvider().getFilteredPolicies(pfDao,
218                 ToscaPolicyFilter.builder().name(policyKey.getName()).version("1.0.0").build());
219
220         gotPolicy = gotServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
221         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicy));
222         assertTrue(beforePolicy.getType().equals(gotPolicy.getType()));
223
224         List<ToscaPolicy> gotPolicyList =
225                 new AuthorativeToscaProvider().getPolicyList(pfDao, "onap.restart.tca", "1.0.0");
226         assertEquals(1, gotPolicyList.size());
227         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicyList.get(0)));
228
229         gotPolicyList =
230                 new AuthorativeToscaProvider().getFilteredPolicyList(pfDao, ToscaPolicyFilter.builder().build());
231         assertEquals(1, gotPolicyList.size());
232         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicyList.get(0)));
233
234         gotPolicyList = new AuthorativeToscaProvider().getFilteredPolicyList(pfDao,
235                 ToscaPolicyFilter.builder().name(policyKey.getName()).build());
236         assertEquals(1, gotPolicyList.size());
237         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicyList.get(0)));
238
239         gotPolicyList = new AuthorativeToscaProvider().getFilteredPolicyList(pfDao,
240                 ToscaPolicyFilter.builder().name(policyKey.getName()).version("1.0.0").build());
241         assertEquals(1, gotPolicyList.size());
242         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicyList.get(0)));
243     }
244
245     @Test
246     public void testPolicyCreate() throws Exception {
247         assertThatThrownBy(() -> {
248             new AuthorativeToscaProvider().createPolicies(null, null);
249         }).hasMessage("dao is marked @NonNull but is null");
250
251         assertThatThrownBy(() -> {
252             new AuthorativeToscaProvider().createPolicies(null, new ToscaServiceTemplate());
253         }).hasMessage("dao is marked @NonNull but is null");
254
255         assertThatThrownBy(() -> {
256             new AuthorativeToscaProvider().createPolicies(pfDao, null);
257         }).hasMessage("serviceTemplate is marked @NonNull but is null");
258
259         createPolicyTypes();
260
261         ToscaServiceTemplate toscaServiceTemplate = standardCoder.decode(
262                 ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.json"),
263                 ToscaServiceTemplate.class);
264
265         assertNotNull(toscaServiceTemplate);
266         ToscaServiceTemplate createdServiceTemplate =
267                 new AuthorativeToscaProvider().createPolicies(pfDao, toscaServiceTemplate);
268
269         PfConceptKey policyKey = new PfConceptKey("onap.restart.tca:1.0.0");
270
271         ToscaPolicy beforePolicy =
272                 toscaServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
273         ToscaPolicy createdPolicy =
274                 createdServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
275         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, createdPolicy));
276         assertTrue(beforePolicy.getType().equals(createdPolicy.getType()));
277     }
278
279     @Test
280     public void testPolicyUpdate() throws Exception {
281         assertThatThrownBy(() -> {
282             new AuthorativeToscaProvider().createPolicies(null, null);
283         }).hasMessage("dao is marked @NonNull but is null");
284
285         assertThatThrownBy(() -> {
286             new AuthorativeToscaProvider().updatePolicies(null, null);
287         }).hasMessage("dao is marked @NonNull but is null");
288
289         assertThatThrownBy(() -> {
290             new AuthorativeToscaProvider().updatePolicies(null, new ToscaServiceTemplate());
291         }).hasMessage("dao is marked @NonNull but is null");
292
293         assertThatThrownBy(() -> {
294             new AuthorativeToscaProvider().updatePolicies(pfDao, null);
295         }).hasMessage("serviceTemplate is marked @NonNull but is null");
296
297         createPolicyTypes();
298
299         ToscaServiceTemplate toscaServiceTemplate = standardCoder.decode(
300                 ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.json"),
301                 ToscaServiceTemplate.class);
302
303         assertNotNull(toscaServiceTemplate);
304         ToscaServiceTemplate createdServiceTemplate =
305                 new AuthorativeToscaProvider().createPolicies(pfDao, toscaServiceTemplate);
306
307         PfConceptKey policyKey = new PfConceptKey("onap.restart.tca:1.0.0");
308
309         ToscaPolicy beforePolicy =
310                 toscaServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
311         ToscaPolicy createdPolicy =
312                 createdServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
313         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, createdPolicy));
314         assertTrue(beforePolicy.getType().equals(createdPolicy.getType()));
315
316         ToscaServiceTemplate updatedServiceTemplate =
317                 new AuthorativeToscaProvider().updatePolicies(pfDao, toscaServiceTemplate);
318
319         ToscaPolicy updatedPolicy =
320                 updatedServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
321         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, updatedPolicy));
322         assertTrue(beforePolicy.getType().equals(updatedPolicy.getType()));
323     }
324
325     @Test
326     public void testPoliciesDelete() throws Exception {
327         assertThatThrownBy(() -> {
328             new AuthorativeToscaProvider().deletePolicy(null, null, null);
329         }).hasMessage("dao is marked @NonNull but is null");
330
331         assertThatThrownBy(() -> {
332             new AuthorativeToscaProvider().deletePolicy(null, null, "version");
333         }).hasMessage("dao is marked @NonNull but is null");
334
335         assertThatThrownBy(() -> {
336             new AuthorativeToscaProvider().deletePolicy(null, "name", null);
337         }).hasMessage("dao is marked @NonNull but is null");
338
339         assertThatThrownBy(() -> {
340             new AuthorativeToscaProvider().deletePolicy(null, "name", "version");
341         }).hasMessage("dao is marked @NonNull but is null");
342
343         assertThatThrownBy(() -> {
344             new AuthorativeToscaProvider().deletePolicy(pfDao, null, null);
345         }).hasMessage("name is marked @NonNull but is null");
346
347         assertThatThrownBy(() -> {
348             new AuthorativeToscaProvider().deletePolicy(pfDao, null, "version");
349         }).hasMessage("name is marked @NonNull but is null");
350
351         assertThatThrownBy(() -> {
352             new AuthorativeToscaProvider().deletePolicy(pfDao, "name", null);
353         }).hasMessage("version is marked @NonNull but is null");
354
355         createPolicyTypes();
356
357         ToscaServiceTemplate toscaServiceTemplate = standardCoder.decode(
358                 ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.json"),
359                 ToscaServiceTemplate.class);
360
361         assertNotNull(toscaServiceTemplate);
362         ToscaServiceTemplate createdServiceTemplate =
363                 new AuthorativeToscaProvider().createPolicies(pfDao, toscaServiceTemplate);
364
365         PfConceptKey policyKey = new PfConceptKey("onap.restart.tca:1.0.0");
366
367         ToscaPolicy beforePolicy =
368                 toscaServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
369         ToscaPolicy createdPolicy =
370                 createdServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
371         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, createdPolicy));
372         assertTrue(beforePolicy.getType().equals(createdPolicy.getType()));
373
374         ToscaServiceTemplate deletedServiceTemplate =
375                 new AuthorativeToscaProvider().deletePolicy(pfDao, policyKey.getName(), policyKey.getVersion());
376
377         ToscaPolicy deletedPolicy =
378                 deletedServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
379         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, createdPolicy));
380         assertTrue(beforePolicy.getType().equals(deletedPolicy.getType()));
381
382         ToscaServiceTemplate gotServiceTemplate =
383                 new AuthorativeToscaProvider().getPolicies(pfDao, policyKey.getName(), policyKey.getVersion());
384
385         assertEquals(0, gotServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).size());
386     }
387
388     @Test
389     public void testAssertPoliciesExist() throws PfModelException {
390         ToscaServiceTemplate testServiceTemplate = new ToscaServiceTemplate();
391
392         assertThatThrownBy(() -> {
393             new AuthorativeToscaProvider().deletePolicy(pfDao, "name", null);
394         }).hasMessage("version is marked @NonNull but is null");
395
396         assertThatThrownBy(() -> {
397             new AuthorativeToscaProvider().createPolicies(pfDao, testServiceTemplate);
398         }).hasMessage("topology template not specified on service template");
399
400         testServiceTemplate.setToscaTopologyTemplate(new ToscaTopologyTemplate());
401         assertThatThrownBy(() -> {
402             new AuthorativeToscaProvider().createPolicies(pfDao, testServiceTemplate);
403         }).hasMessage("no policies specified on topology template of service template");
404
405         testServiceTemplate.getToscaTopologyTemplate().setPolicies(new ArrayList<>());
406         assertThatThrownBy(() -> {
407             new AuthorativeToscaProvider().createPolicies(pfDao, testServiceTemplate);
408         }).hasMessage("An incoming list of concepts must have at least one entry");
409     }
410
411     private void createPolicyTypes() throws CoderException, PfModelException {
412         Object yamlObject = new Yaml().load(
413                 ResourceUtils.getResourceAsString("policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app.yaml"));
414         String yamlAsJsonString = new StandardCoder().encode(yamlObject);
415
416         ToscaServiceTemplate toscaServiceTemplatePolicyType =
417                 standardCoder.decode(yamlAsJsonString, ToscaServiceTemplate.class);
418
419         assertNotNull(toscaServiceTemplatePolicyType);
420         new AuthorativeToscaProvider().createPolicyTypes(pfDao, toscaServiceTemplatePolicyType);
421     }
422 }