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