Merge "Parse new model ids from operation policy"
[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         gotPolicyList = new AuthorativeToscaProvider().getPolicyList(pfDao, "Nonexistant", "1.0.0");
148         assertEquals(0, gotPolicyList.size());
149     }
150
151     @Test
152     public void testPoliciesGetFiltered() throws Exception {
153         assertThatThrownBy(() -> {
154             new AuthorativeToscaProvider().getFilteredPolicies(null, null);
155         }).hasMessage("dao is marked @NonNull but is null");
156
157         assertThatThrownBy(() -> {
158             new AuthorativeToscaProvider().getFilteredPolicies(null, ToscaPolicyFilter.builder().build());
159         }).hasMessage("dao is marked @NonNull but is null");
160
161         assertThatThrownBy(() -> {
162             new AuthorativeToscaProvider().getFilteredPolicies(pfDao, null);
163         }).hasMessage("filter is marked @NonNull but is null");
164
165         assertThatThrownBy(() -> {
166             new AuthorativeToscaProvider().getFilteredPolicyList(null, null);
167         }).hasMessage("dao is marked @NonNull but is null");
168
169         assertThatThrownBy(() -> {
170             new AuthorativeToscaProvider().getFilteredPolicyList(null, ToscaPolicyFilter.builder().build());
171         }).hasMessage("dao is marked @NonNull but is null");
172
173         assertThatThrownBy(() -> {
174             new AuthorativeToscaProvider().getFilteredPolicyList(pfDao, null);
175         }).hasMessage("filter is marked @NonNull but is null");
176
177         ToscaServiceTemplate toscaServiceTemplate = standardCoder.decode(
178                 ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.json"),
179                 ToscaServiceTemplate.class);
180
181         assertNotNull(toscaServiceTemplate);
182         ToscaServiceTemplate createdServiceTemplate =
183                 new AuthorativeToscaProvider().createPolicies(pfDao, toscaServiceTemplate);
184
185         PfConceptKey policyKey = new PfConceptKey("onap.restart.tca:1.0.0");
186
187         ToscaPolicy beforePolicy =
188                 toscaServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
189         ToscaPolicy createdPolicy =
190                 createdServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
191         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, createdPolicy));
192         assertTrue(beforePolicy.getType().equals(createdPolicy.getType()));
193
194         ToscaServiceTemplate gotServiceTemplate =
195                 new AuthorativeToscaProvider().getFilteredPolicies(pfDao, ToscaPolicyFilter.builder().build());
196
197         ToscaPolicy gotPolicy =
198                 gotServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
199         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicy));
200         assertTrue(beforePolicy.getType().equals(gotPolicy.getType()));
201
202         gotServiceTemplate = new AuthorativeToscaProvider().getFilteredPolicies(pfDao,
203                 ToscaPolicyFilter.builder().name(policyKey.getName()).build());
204
205         gotPolicy = gotServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
206         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicy));
207         assertTrue(beforePolicy.getType().equals(gotPolicy.getType()));
208
209         gotServiceTemplate = new AuthorativeToscaProvider().getFilteredPolicies(pfDao,
210                 ToscaPolicyFilter.builder().name(policyKey.getName()).version("1.0.0").build());
211
212         gotPolicy = gotServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
213         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicy));
214         assertTrue(beforePolicy.getType().equals(gotPolicy.getType()));
215
216         List<ToscaPolicy> gotPolicyList =
217                 new AuthorativeToscaProvider().getPolicyList(pfDao, "onap.restart.tca", "1.0.0");
218         assertEquals(1, gotPolicyList.size());
219         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicyList.get(0)));
220
221         gotPolicyList =
222                 new AuthorativeToscaProvider().getFilteredPolicyList(pfDao, ToscaPolicyFilter.builder().build());
223         assertEquals(1, gotPolicyList.size());
224         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicyList.get(0)));
225
226         gotPolicyList = new AuthorativeToscaProvider().getFilteredPolicyList(pfDao,
227                 ToscaPolicyFilter.builder().name(policyKey.getName()).build());
228         assertEquals(1, gotPolicyList.size());
229         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicyList.get(0)));
230
231         gotPolicyList = new AuthorativeToscaProvider().getFilteredPolicyList(pfDao,
232                 ToscaPolicyFilter.builder().name(policyKey.getName()).version("1.0.0").build());
233         assertEquals(1, gotPolicyList.size());
234         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, gotPolicyList.get(0)));
235     }
236
237     @Test
238     public void testPolicyCreate() throws Exception {
239         assertThatThrownBy(() -> {
240             new AuthorativeToscaProvider().createPolicies(null, null);
241         }).hasMessage("dao is marked @NonNull but is null");
242
243         assertThatThrownBy(() -> {
244             new AuthorativeToscaProvider().createPolicies(null, new ToscaServiceTemplate());
245         }).hasMessage("dao is marked @NonNull but is null");
246
247         assertThatThrownBy(() -> {
248             new AuthorativeToscaProvider().createPolicies(pfDao, null);
249         }).hasMessage("serviceTemplate is marked @NonNull but is null");
250
251         ToscaServiceTemplate toscaServiceTemplate = standardCoder.decode(
252                 ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.json"),
253                 ToscaServiceTemplate.class);
254
255         assertNotNull(toscaServiceTemplate);
256         ToscaServiceTemplate createdServiceTemplate =
257                 new AuthorativeToscaProvider().createPolicies(pfDao, toscaServiceTemplate);
258
259         PfConceptKey policyKey = new PfConceptKey("onap.restart.tca:1.0.0");
260
261         ToscaPolicy beforePolicy =
262                 toscaServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
263         ToscaPolicy createdPolicy =
264                 createdServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
265         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, createdPolicy));
266         assertTrue(beforePolicy.getType().equals(createdPolicy.getType()));
267     }
268
269
270     @Test
271     public void testPolicyUpdate() throws Exception {
272         assertThatThrownBy(() -> {
273             new AuthorativeToscaProvider().createPolicies(null, null);
274         }).hasMessage("dao is marked @NonNull but is null");
275
276         assertThatThrownBy(() -> {
277             new AuthorativeToscaProvider().updatePolicies(null, null);
278         }).hasMessage("dao is marked @NonNull but is null");
279
280         assertThatThrownBy(() -> {
281             new AuthorativeToscaProvider().updatePolicies(null, new ToscaServiceTemplate());
282         }).hasMessage("dao is marked @NonNull but is null");
283
284         assertThatThrownBy(() -> {
285             new AuthorativeToscaProvider().updatePolicies(pfDao, null);
286         }).hasMessage("serviceTemplate is marked @NonNull but is null");
287
288         ToscaServiceTemplate toscaServiceTemplate = standardCoder.decode(
289                 ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.json"),
290                 ToscaServiceTemplate.class);
291
292         assertNotNull(toscaServiceTemplate);
293         ToscaServiceTemplate createdServiceTemplate =
294                 new AuthorativeToscaProvider().createPolicies(pfDao, toscaServiceTemplate);
295
296         PfConceptKey policyKey = new PfConceptKey("onap.restart.tca:1.0.0");
297
298         ToscaPolicy beforePolicy =
299                 toscaServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
300         ToscaPolicy createdPolicy =
301                 createdServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
302         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, createdPolicy));
303         assertTrue(beforePolicy.getType().equals(createdPolicy.getType()));
304
305         ToscaServiceTemplate updatedServiceTemplate =
306                 new AuthorativeToscaProvider().updatePolicies(pfDao, toscaServiceTemplate);
307
308         ToscaPolicy updatedPolicy =
309                 updatedServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
310         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, updatedPolicy));
311         assertTrue(beforePolicy.getType().equals(updatedPolicy.getType()));
312     }
313
314     @Test
315     public void testPoliciesDelete() throws Exception {
316         assertThatThrownBy(() -> {
317             new AuthorativeToscaProvider().deletePolicy(null, null, null);
318         }).hasMessage("dao is marked @NonNull but is null");
319
320         assertThatThrownBy(() -> {
321             new AuthorativeToscaProvider().deletePolicy(null, null, "version");
322         }).hasMessage("dao is marked @NonNull but is null");
323
324         assertThatThrownBy(() -> {
325             new AuthorativeToscaProvider().deletePolicy(null, "name", null);
326         }).hasMessage("dao is marked @NonNull but is null");
327
328         assertThatThrownBy(() -> {
329             new AuthorativeToscaProvider().deletePolicy(null, "name", "version");
330         }).hasMessage("dao is marked @NonNull but is null");
331
332         assertThatThrownBy(() -> {
333             new AuthorativeToscaProvider().deletePolicy(pfDao, null, null);
334         }).hasMessage("name is marked @NonNull but is null");
335
336         assertThatThrownBy(() -> {
337             new AuthorativeToscaProvider().deletePolicy(pfDao, null, "version");
338         }).hasMessage("name is marked @NonNull but is null");
339
340         assertThatThrownBy(() -> {
341             new AuthorativeToscaProvider().deletePolicy(pfDao, "name", null);
342         }).hasMessage("version is marked @NonNull but is null");
343
344         ToscaServiceTemplate toscaServiceTemplate = standardCoder.decode(
345                 ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.json"),
346                 ToscaServiceTemplate.class);
347
348         assertNotNull(toscaServiceTemplate);
349         ToscaServiceTemplate createdServiceTemplate =
350                 new AuthorativeToscaProvider().createPolicies(pfDao, toscaServiceTemplate);
351
352         PfConceptKey policyKey = new PfConceptKey("onap.restart.tca:1.0.0");
353
354         ToscaPolicy beforePolicy =
355                 toscaServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
356         ToscaPolicy createdPolicy =
357                 createdServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
358         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, createdPolicy));
359         assertTrue(beforePolicy.getType().equals(createdPolicy.getType()));
360
361         ToscaServiceTemplate deletedServiceTemplate =
362                 new AuthorativeToscaProvider().deletePolicy(pfDao, policyKey.getName(), policyKey.getVersion());
363
364         ToscaPolicy deletedPolicy =
365                 deletedServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyKey.getName());
366         assertEquals(0, beforePolicy.compareNameVersion(beforePolicy, createdPolicy));
367         assertTrue(beforePolicy.getType().equals(deletedPolicy.getType()));
368
369         ToscaServiceTemplate gotServiceTemplate =
370                 new AuthorativeToscaProvider().getPolicies(pfDao, policyKey.getName(), policyKey.getVersion());
371
372         assertEquals(0, gotServiceTemplate.getToscaTopologyTemplate().getPolicies().get(0).size());
373     }
374
375     @Test
376     public void testAssertPoliciesExist() throws PfModelException {
377         ToscaServiceTemplate testServiceTemplate = new ToscaServiceTemplate();
378
379         assertThatThrownBy(() -> {
380             new AuthorativeToscaProvider().deletePolicy(pfDao, "name", null);
381         }).hasMessage("version is marked @NonNull but is null");
382
383         assertThatThrownBy(() -> {
384             new AuthorativeToscaProvider().createPolicies(pfDao, testServiceTemplate);
385         }).hasMessage("topology template not specified on service template");
386
387         testServiceTemplate.setToscaTopologyTemplate(new ToscaTopologyTemplate());
388         assertThatThrownBy(() -> {
389             new AuthorativeToscaProvider().createPolicies(pfDao, testServiceTemplate);
390         }).hasMessage("no policies specified on topology template of service template");
391
392         testServiceTemplate.getToscaTopologyTemplate().setPolicies(new ArrayList<>());
393         assertThatThrownBy(() -> {
394             new AuthorativeToscaProvider().createPolicies(pfDao, testServiceTemplate);
395         }).hasMessage("An incoming list of concepts must have at least one entry");
396     }
397 }