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