Changes for Checkstyle 8.32
[policy/models.git] / models-tosca / src / test / java / org / onap / policy / models / tosca / simple / provider / SimpleToscaProviderTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2019-2020 Nordix Foundation.
4  *  Modifications Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
5  * ================================================================================
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  *      http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  *
18  * SPDX-License-Identifier: Apache-2.0
19  * ============LICENSE_END=========================================================
20  */
21
22 package org.onap.policy.models.tosca.simple.provider;
23
24 import static org.assertj.core.api.Assertions.assertThatThrownBy;
25 import static org.junit.Assert.assertEquals;
26 import static org.junit.Assert.assertNotNull;
27 import static org.junit.Assert.assertNull;
28
29 import java.util.Properties;
30 import org.eclipse.persistence.config.PersistenceUnitProperties;
31 import org.junit.After;
32 import org.junit.Before;
33 import org.junit.Test;
34 import org.onap.policy.common.utils.coder.CoderException;
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.base.PfReferenceKey;
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.ToscaServiceTemplate;
46 import org.onap.policy.models.tosca.authorative.provider.AuthorativeToscaProvider;
47 import org.onap.policy.models.tosca.simple.concepts.JpaToscaDataType;
48 import org.onap.policy.models.tosca.simple.concepts.JpaToscaDataTypes;
49 import org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicies;
50 import org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicy;
51 import org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicyType;
52 import org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicyTypes;
53 import org.onap.policy.models.tosca.simple.concepts.JpaToscaProperty;
54 import org.onap.policy.models.tosca.simple.concepts.JpaToscaServiceTemplate;
55 import org.onap.policy.models.tosca.simple.concepts.JpaToscaTopologyTemplate;
56 import org.yaml.snakeyaml.Yaml;
57
58 /**
59  * Test the {@link SimpleToscaProvider} class.
60  *
61  * @author Liam Fallon (liam.fallon@est.tech)
62  */
63 public class SimpleToscaProviderTest {
64     private static final String TEMPLATE_IS_NULL = "^serviceTemplate is marked .*on.*ull but is null$";
65     private static final String INCOMING_TEMPLATE_IS_NULL = "^incomingServiceTemplate is marked .*on.*ull but is null$";
66     private static final String VCPE_INPUT_JSON = "policies/vCPE.policy.monitoring.input.tosca.json";
67     private static final String DAO_IS_NULL = "^dao is marked .*on.*ull but is null$";
68
69     private PfDao pfDao;
70     private StandardCoder standardCoder;
71
72     /**
73      * Set up the DAO towards the database.
74      *
75      * @throws Exception on database errors
76      */
77     @Before
78     public void setupDao() throws Exception {
79         final DaoParameters daoParameters = new DaoParameters();
80         daoParameters.setPluginClass(DefaultPfDao.class.getName());
81
82         daoParameters.setPersistenceUnit("ToscaConceptTest");
83
84         Properties jdbcProperties = new Properties();
85         jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_USER, "policy");
86         jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_PASSWORD, "P01icY");
87
88         // H2, use "org.mariadb.jdbc.Driver" and "jdbc:mariadb://localhost:3306/policy" for locally installed MariaDB
89         jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_DRIVER, "org.h2.Driver");
90         jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_URL, "jdbc:h2:mem:testdb");
91
92         daoParameters.setJdbcProperties(jdbcProperties);
93
94         pfDao = new PfDaoFactory().createPfDao(daoParameters);
95         pfDao.init(daoParameters);
96     }
97
98     /**
99      * Set up GSON.
100      */
101     @Before
102     public void setupGson() {
103         standardCoder = new StandardCoder();
104     }
105
106     @After
107     public void teardown() {
108         pfDao.close();
109     }
110
111     @Test
112     public void testCreateUpdateGetDeleteDataType() throws PfModelException {
113         JpaToscaServiceTemplate serviceTemplate = new JpaToscaServiceTemplate();
114
115         PfConceptKey dataType0Key = new PfConceptKey("DataType0", "0.0.1");
116         JpaToscaDataType dataType0 = new JpaToscaDataType();
117         dataType0.setKey(dataType0Key);
118         serviceTemplate.setDataTypes(new JpaToscaDataTypes());
119         serviceTemplate.getDataTypes().getConceptMap().put(dataType0Key, dataType0);
120
121         JpaToscaServiceTemplate createdServiceTemplate =
122             new SimpleToscaProvider().createDataTypes(pfDao, serviceTemplate);
123
124         assertEquals(1, createdServiceTemplate.getDataTypes().getConceptMap().size());
125         assertEquals(dataType0, createdServiceTemplate.getDataTypes().get(dataType0Key));
126         assertEquals(null, createdServiceTemplate.getDataTypes().get(dataType0Key).getDescription());
127
128         dataType0.setDescription("Updated Description");
129
130         JpaToscaServiceTemplate updatedServiceTemplate =
131             new SimpleToscaProvider().updateDataTypes(pfDao, serviceTemplate);
132
133         assertEquals(dataType0, updatedServiceTemplate.getDataTypes().get(dataType0Key));
134         assertEquals("Updated Description", updatedServiceTemplate.getDataTypes().get(dataType0Key).getDescription());
135
136         JpaToscaServiceTemplate gotServiceTemplate =
137             new SimpleToscaProvider().getDataTypes(pfDao, dataType0Key.getName(), dataType0Key.getVersion());
138
139         assertEquals(dataType0, gotServiceTemplate.getDataTypes().get(dataType0Key));
140         assertEquals("Updated Description", gotServiceTemplate.getDataTypes().get(dataType0Key).getDescription());
141
142         assertThatThrownBy(() -> new SimpleToscaProvider().deleteDataType(pfDao, new PfConceptKey("IDontExist:0.0.1")))
143             .hasMessage("data type IDontExist:0.0.1 not found");
144
145         JpaToscaServiceTemplate deletedServiceTemplate = new SimpleToscaProvider().deleteDataType(pfDao, dataType0Key);
146
147         assertEquals(dataType0, deletedServiceTemplate.getDataTypes().get(dataType0Key));
148         assertEquals("Updated Description", deletedServiceTemplate.getDataTypes().get(dataType0Key).getDescription());
149
150         // Create the data type again
151         new SimpleToscaProvider().createDataTypes(pfDao, serviceTemplate);
152
153         updatedServiceTemplate.setPolicyTypes(new JpaToscaPolicyTypes());
154         JpaToscaPolicyType pt0 = new JpaToscaPolicyType(new PfConceptKey("pt0:0.0.1"));
155         updatedServiceTemplate.getPolicyTypes().getConceptMap().put(pt0.getKey(), pt0);
156         new SimpleToscaProvider().createPolicyTypes(pfDao, updatedServiceTemplate);
157
158         deletedServiceTemplate = new SimpleToscaProvider().deleteDataType(pfDao, dataType0Key);
159
160         assertEquals(dataType0, deletedServiceTemplate.getDataTypes().get(dataType0Key));
161         assertEquals("Updated Description", deletedServiceTemplate.getDataTypes().get(dataType0Key).getDescription());
162
163         assertThatThrownBy(() -> new SimpleToscaProvider().deleteDataType(pfDao, dataType0Key))
164             .hasMessage("no data types found");
165
166         // Create the data type again
167         new SimpleToscaProvider().createDataTypes(pfDao, serviceTemplate);
168
169         JpaToscaPolicyType pt0v2 = new JpaToscaPolicyType(new PfConceptKey("pt0:0.0.2"));
170         JpaToscaProperty prop0 = new JpaToscaProperty(new PfReferenceKey(pt0v2.getKey(), "prop0"));
171         prop0.setType(dataType0Key);
172         pt0v2.getProperties().put(prop0.getKey().getLocalName(), prop0);
173         updatedServiceTemplate.getPolicyTypes().getConceptMap().put(pt0v2.getKey(), pt0v2);
174         new SimpleToscaProvider().createPolicyTypes(pfDao, updatedServiceTemplate);
175
176         assertThatThrownBy(() -> new SimpleToscaProvider().deleteDataType(pfDao, dataType0Key))
177             .hasMessage("data type DataType0:0.0.1 is in use, it is referenced in policy type pt0:0.0.2");
178
179         JpaToscaDataType dataType0v2 = new JpaToscaDataType(new PfConceptKey("DataType0:0.0.2"));
180         updatedServiceTemplate.getDataTypes().getConceptMap().put(dataType0v2.getKey(), dataType0v2);
181         new SimpleToscaProvider().createDataTypes(pfDao, updatedServiceTemplate);
182
183         deletedServiceTemplate = new SimpleToscaProvider().deleteDataType(pfDao, dataType0v2.getKey());
184
185         assertEquals(dataType0v2, deletedServiceTemplate.getDataTypes().get(dataType0v2.getKey()));
186         assertNull(deletedServiceTemplate.getDataTypes().get(dataType0v2.getKey()).getDescription());
187
188         assertThatThrownBy(() -> new SimpleToscaProvider().deleteDataType(pfDao, dataType0Key))
189             .hasMessage("data type DataType0:0.0.1 is in use, it is referenced in policy type pt0:0.0.2");
190
191         JpaToscaDataType dataType1 = new JpaToscaDataType(new PfConceptKey("DataType1:0.0.3"));
192         JpaToscaProperty prop1 = new JpaToscaProperty(new PfReferenceKey(dataType1.getKey(), "prop1"));
193         prop1.setType(dataType0v2.getKey());
194         dataType1.getProperties().put(prop1.getKey().getLocalName(), prop1);
195         updatedServiceTemplate.getDataTypes().getConceptMap().put(dataType1.getKey(), dataType1);
196         new SimpleToscaProvider().createDataTypes(pfDao, updatedServiceTemplate);
197
198         assertThatThrownBy(() -> new SimpleToscaProvider().deleteDataType(pfDao, dataType0v2.getKey()))
199             .hasMessage("data type DataType0:0.0.2 is in use, it is referenced in data type DataType1:0.0.3");
200     }
201
202     @Test
203     public void testCreateUpdateGetDeletePolicyType() throws PfModelException {
204         JpaToscaServiceTemplate serviceTemplate = new JpaToscaServiceTemplate();
205
206         PfConceptKey dataType0Key = new PfConceptKey("DataType0", "0.0.1");
207         JpaToscaDataType dataType0 = new JpaToscaDataType();
208         dataType0.setKey(dataType0Key);
209         serviceTemplate.setDataTypes(new JpaToscaDataTypes());
210         serviceTemplate.getDataTypes().getConceptMap().put(dataType0Key, dataType0);
211
212         PfConceptKey policyType0Key = new PfConceptKey("PolicyType0", "0.0.1");
213         JpaToscaPolicyType policyType0 = new JpaToscaPolicyType();
214         policyType0.setKey(policyType0Key);
215         serviceTemplate.setPolicyTypes(new JpaToscaPolicyTypes());
216         serviceTemplate.getPolicyTypes().getConceptMap().put(policyType0Key, policyType0);
217
218         JpaToscaServiceTemplate createdServiceTemplate =
219             new SimpleToscaProvider().createPolicyTypes(pfDao, serviceTemplate);
220
221         assertEquals(1, createdServiceTemplate.getPolicyTypes().getConceptMap().size());
222         assertEquals(policyType0, createdServiceTemplate.getPolicyTypes().get(policyType0Key));
223         assertEquals(null, createdServiceTemplate.getPolicyTypes().get(policyType0Key).getDescription());
224
225         policyType0.setDescription("Updated Description");
226
227         JpaToscaServiceTemplate updatedServiceTemplate =
228             new SimpleToscaProvider().updatePolicyTypes(pfDao, serviceTemplate);
229
230         assertEquals(policyType0, updatedServiceTemplate.getPolicyTypes().get(policyType0Key));
231         assertEquals("Updated Description",
232             updatedServiceTemplate.getPolicyTypes().get(policyType0Key).getDescription());
233
234         JpaToscaServiceTemplate gotServiceTemplate =
235             new SimpleToscaProvider().getPolicyTypes(pfDao, policyType0Key.getName(), policyType0Key.getVersion());
236
237         assertEquals(policyType0, gotServiceTemplate.getPolicyTypes().get(policyType0Key));
238         assertEquals("Updated Description", gotServiceTemplate.getPolicyTypes().get(policyType0Key).getDescription());
239
240         assertThatThrownBy(() -> {
241             new SimpleToscaProvider().deletePolicyType(pfDao, new PfConceptKey("IDontExist:0.0.1"));
242         }).hasMessage("policy type IDontExist:0.0.1 not found");
243
244         JpaToscaPolicyType pt1 = new JpaToscaPolicyType(new PfConceptKey("pt1:0.0.2"));
245         pt1.setDerivedFrom(policyType0Key);
246         serviceTemplate.getPolicyTypes().getConceptMap().put(pt1.getKey(), pt1);
247         new SimpleToscaProvider().createPolicyTypes(pfDao, serviceTemplate);
248
249         assertThatThrownBy(() -> new SimpleToscaProvider().deletePolicyType(pfDao, policyType0Key))
250             .hasMessage("policy type PolicyType0:0.0.1 is in use, it is referenced in policy type pt1:0.0.2");
251
252         serviceTemplate.setTopologyTemplate(new JpaToscaTopologyTemplate());
253         serviceTemplate.getTopologyTemplate().setPolicies(new JpaToscaPolicies());
254
255         JpaToscaPolicy p0 = new JpaToscaPolicy(new PfConceptKey("p0:0.0.1"));
256         p0.setType(policyType0Key);
257         serviceTemplate.getTopologyTemplate().getPolicies().getConceptMap().put(p0.getKey(), p0);
258
259         JpaToscaPolicy p1 = new JpaToscaPolicy(new PfConceptKey("p1:0.0.1"));
260         p1.setType(pt1.getKey());
261         serviceTemplate.getTopologyTemplate().getPolicies().getConceptMap().put(p1.getKey(), p1);
262         new SimpleToscaProvider().createPolicies(pfDao, serviceTemplate);
263
264         assertThatThrownBy(() -> new SimpleToscaProvider().deletePolicyType(pfDao, policyType0Key))
265             .hasMessage("policy type PolicyType0:0.0.1 is in use, it is referenced in policy type pt1:0.0.2");
266
267         assertThatThrownBy(() -> new SimpleToscaProvider().deletePolicyType(pfDao, pt1.getKey()))
268             .hasMessage("policy type pt1:0.0.2 is in use, it is referenced in policy p1:0.0.1");
269
270         new SimpleToscaProvider().deletePolicy(pfDao, p1.getKey());
271
272         new SimpleToscaProvider().deletePolicyType(pfDao, pt1.getKey());
273
274         new SimpleToscaProvider().deletePolicy(pfDao, p0.getKey());
275
276         JpaToscaServiceTemplate deletedServiceTemplate =
277             new SimpleToscaProvider().deletePolicyType(pfDao, policyType0Key);
278
279         assertEquals(policyType0, deletedServiceTemplate.getPolicyTypes().get(policyType0Key));
280         assertEquals("Updated Description",
281             deletedServiceTemplate.getPolicyTypes().get(policyType0Key).getDescription());
282
283         assertThatThrownBy(() -> new SimpleToscaProvider().deletePolicyType(pfDao, policyType0Key))
284             .hasMessage("no policy types found");
285
286         JpaToscaServiceTemplate newServiceTemplate =
287             new SimpleToscaProvider().createPolicyTypes(pfDao, serviceTemplate);
288         assertEquals(serviceTemplate, newServiceTemplate);
289     }
290
291     @Test
292     public void testCreateUpdateGetDeletePolicyTypeWithDataType() throws PfModelException {
293         JpaToscaServiceTemplate serviceTemplate = new JpaToscaServiceTemplate();
294
295         PfConceptKey policyType0Key = new PfConceptKey("PolicyType0", "0.0.1");
296         JpaToscaPolicyType policyType0 = new JpaToscaPolicyType();
297         policyType0.setKey(policyType0Key);
298         serviceTemplate.setPolicyTypes(new JpaToscaPolicyTypes());
299         serviceTemplate.getPolicyTypes().getConceptMap().put(policyType0Key, policyType0);
300
301         JpaToscaServiceTemplate createdServiceTemplate =
302             new SimpleToscaProvider().createPolicyTypes(pfDao, serviceTemplate);
303
304         assertEquals(policyType0, createdServiceTemplate.getPolicyTypes().get(policyType0Key));
305         assertEquals(null, createdServiceTemplate.getPolicyTypes().get(policyType0Key).getDescription());
306
307         policyType0.setDescription("Updated Description");
308
309         JpaToscaServiceTemplate updatedServiceTemplate =
310             new SimpleToscaProvider().updatePolicyTypes(pfDao, serviceTemplate);
311
312         assertEquals(policyType0, updatedServiceTemplate.getPolicyTypes().get(policyType0Key));
313         assertEquals("Updated Description",
314             updatedServiceTemplate.getPolicyTypes().get(policyType0Key).getDescription());
315
316         JpaToscaServiceTemplate gotServiceTemplate =
317             new SimpleToscaProvider().getPolicyTypes(pfDao, policyType0Key.getName(), policyType0Key.getVersion());
318
319         assertEquals(policyType0, gotServiceTemplate.getPolicyTypes().get(policyType0Key));
320         assertEquals("Updated Description", gotServiceTemplate.getPolicyTypes().get(policyType0Key).getDescription());
321
322         JpaToscaServiceTemplate deletedServiceTemplate =
323             new SimpleToscaProvider().deletePolicyType(pfDao, policyType0Key);
324
325         assertEquals(policyType0, deletedServiceTemplate.getPolicyTypes().get(policyType0Key));
326         assertEquals("Updated Description",
327             deletedServiceTemplate.getPolicyTypes().get(policyType0Key).getDescription());
328
329         assertThatThrownBy(() -> new SimpleToscaProvider().deletePolicyType(pfDao, policyType0Key))
330             .hasMessage("no policy types found");
331     }
332
333     @Test
334     public void testPoliciesGet() throws Exception {
335         ToscaServiceTemplate toscaServiceTemplate =
336             standardCoder.decode(ResourceUtils.getResourceAsString(VCPE_INPUT_JSON), ToscaServiceTemplate.class);
337
338         createPolicyTypes();
339
340         JpaToscaServiceTemplate originalServiceTemplate = new JpaToscaServiceTemplate();
341         originalServiceTemplate.fromAuthorative(toscaServiceTemplate);
342
343         assertNotNull(originalServiceTemplate);
344         JpaToscaServiceTemplate createdServiceTemplate =
345             new SimpleToscaProvider().createPolicies(pfDao, originalServiceTemplate);
346
347         assertEquals(originalServiceTemplate.getTopologyTemplate().getPolicies(),
348             createdServiceTemplate.getTopologyTemplate().getPolicies());
349
350         PfConceptKey policyKey = new PfConceptKey("onap.restart.tca:1.0.0");
351
352         JpaToscaServiceTemplate gotServiceTemplate =
353             new SimpleToscaProvider().getPolicies(pfDao, policyKey.getName(), policyKey.getVersion());
354
355         assertEquals(originalServiceTemplate.getTopologyTemplate().getPolicies().get(policyKey),
356             gotServiceTemplate.getTopologyTemplate().getPolicies().get(policyKey));
357
358         JpaToscaServiceTemplate deletedServiceTemplate = new SimpleToscaProvider().deletePolicy(pfDao, policyKey);
359         assertEquals(1, deletedServiceTemplate.getTopologyTemplate().getPolicies().getConceptMap().size());
360     }
361
362     @Test
363     public void testPolicyCreate() throws Exception {
364         ToscaServiceTemplate toscaServiceTemplate =
365             standardCoder.decode(ResourceUtils.getResourceAsString(VCPE_INPUT_JSON), ToscaServiceTemplate.class);
366
367         createPolicyTypes();
368
369         JpaToscaServiceTemplate originalServiceTemplate = new JpaToscaServiceTemplate();
370         originalServiceTemplate.fromAuthorative(toscaServiceTemplate);
371
372         assertNotNull(originalServiceTemplate);
373         JpaToscaServiceTemplate createdServiceTemplate =
374             new SimpleToscaProvider().createPolicies(pfDao, originalServiceTemplate);
375
376         assertEquals(originalServiceTemplate.getTopologyTemplate().getPolicies(),
377             createdServiceTemplate.getTopologyTemplate().getPolicies());
378     }
379
380     @Test
381     public void testPolicyCreateTypeAndVersion() throws Exception {
382         ToscaServiceTemplate toscaServiceTemplate =
383             standardCoder.decode(ResourceUtils.getResourceAsString(VCPE_INPUT_JSON), ToscaServiceTemplate.class);
384
385         createPolicyTypes();
386
387         ToscaPolicy toscaPolicy =
388             toscaServiceTemplate.getToscaTopologyTemplate().getPoliciesAsMap().values().iterator().next();
389
390         JpaToscaServiceTemplate originalServiceTemplate = new JpaToscaServiceTemplate();
391
392         final String originalPolicyType = toscaPolicy.getType();
393         final String originalPolicyTypeVersion = toscaPolicy.getTypeVersion();
394         toscaPolicy.setType(null);
395         toscaPolicy.setTypeVersion(null);
396
397         assertThatThrownBy(() -> {
398             originalServiceTemplate.fromAuthorative(toscaServiceTemplate);
399         }).hasMessage("PolicyType type not specified, the type of the PolicyType for this policy must be "
400             + "specified in the type field");
401
402         toscaPolicy.setType("IDontExist");
403         assertThatThrownBy(() -> {
404             originalServiceTemplate.fromAuthorative(toscaServiceTemplate);
405         }).hasMessage("PolicyType version not specified, the version of the PolicyType for this policy must be "
406             + "specified in the type_version field");
407
408         toscaPolicy.setTypeVersion("hello");
409         assertThatThrownBy(() -> {
410             originalServiceTemplate.fromAuthorative(toscaServiceTemplate);
411         }).hasMessageContaining("value \"hello\", does not match regular expression");
412
413         toscaPolicy.setTypeVersion("99.100.101");
414         originalServiceTemplate.fromAuthorative(toscaServiceTemplate);
415
416         assertThatThrownBy(() -> {
417             new SimpleToscaProvider().createPolicies(pfDao, originalServiceTemplate);
418         }).hasMessageContaining("policy type IDontExist:99.100.101 referenced in policy not found");
419
420         toscaPolicy.setType("IDontExist");
421         originalServiceTemplate.fromAuthorative(toscaServiceTemplate);
422
423         toscaPolicy.setType(null);
424
425         assertThatThrownBy(() -> {
426             originalServiceTemplate.fromAuthorative(toscaServiceTemplate);
427         }).hasMessage("PolicyType type not specified, the type of the PolicyType for this policy must be "
428             + "specified in the type field");
429
430         toscaPolicy.setType(originalPolicyType);
431         toscaPolicy.setTypeVersion(originalPolicyTypeVersion);
432
433         originalServiceTemplate.fromAuthorative(toscaServiceTemplate);
434         JpaToscaServiceTemplate createdServiceTemplate =
435             new SimpleToscaProvider().createPolicies(pfDao, originalServiceTemplate);
436         assertEquals(originalServiceTemplate.getTopologyTemplate().getPolicies(),
437             createdServiceTemplate.getTopologyTemplate().getPolicies());
438     }
439
440     @Test
441     public void testPolicyUpdate() throws Exception {
442         ToscaServiceTemplate toscaServiceTemplate =
443             standardCoder.decode(ResourceUtils.getResourceAsString(VCPE_INPUT_JSON), ToscaServiceTemplate.class);
444
445         createPolicyTypes();
446
447         JpaToscaServiceTemplate originalServiceTemplate = new JpaToscaServiceTemplate();
448         originalServiceTemplate.fromAuthorative(toscaServiceTemplate);
449
450         assertNotNull(originalServiceTemplate);
451         JpaToscaServiceTemplate updatedServiceTemplate =
452             new SimpleToscaProvider().updatePolicies(pfDao, originalServiceTemplate);
453
454         assertEquals(originalServiceTemplate, updatedServiceTemplate);
455     }
456
457     @Test
458     public void testPoliciesDelete() throws Exception {
459         ToscaServiceTemplate toscaServiceTemplate =
460             standardCoder.decode(ResourceUtils.getResourceAsString(VCPE_INPUT_JSON), ToscaServiceTemplate.class);
461
462         createPolicyTypes();
463
464         JpaToscaServiceTemplate originalServiceTemplate = new JpaToscaServiceTemplate();
465         originalServiceTemplate.fromAuthorative(toscaServiceTemplate);
466
467         assertNotNull(originalServiceTemplate);
468         JpaToscaServiceTemplate createdServiceTemplate =
469             new SimpleToscaProvider().createPolicies(pfDao, originalServiceTemplate);
470
471         assertEquals(originalServiceTemplate.getTopologyTemplate(), createdServiceTemplate.getTopologyTemplate());
472
473         PfConceptKey policyKey = new PfConceptKey("onap.restart.tca:1.0.0");
474
475         assertThatThrownBy(() -> new SimpleToscaProvider().deletePolicy(pfDao, new PfConceptKey("IDontExist:0.0.1")))
476             .hasMessage("policy IDontExist:0.0.1 not found");
477
478         JpaToscaServiceTemplate deletedServiceTemplate = new SimpleToscaProvider().deletePolicy(pfDao, policyKey);
479
480         assertEquals(originalServiceTemplate.getTopologyTemplate().getPolicies().get(policyKey),
481             deletedServiceTemplate.getTopologyTemplate().getPolicies().get(policyKey));
482
483         assertThatThrownBy(() -> {
484             new SimpleToscaProvider().getPolicies(pfDao, policyKey.getName(), policyKey.getVersion());
485         }).hasMessage("policies for onap.restart.tca:1.0.0 do not exist");
486
487         assertThatThrownBy(() -> new SimpleToscaProvider().deletePolicy(pfDao, policyKey))
488             .hasMessage("no policies found");
489
490         new SimpleToscaProvider().createPolicies(pfDao, originalServiceTemplate);
491     }
492
493     @Test
494     public void testAssertPoliciesExist() {
495         JpaToscaServiceTemplate testServiceTemplate = new JpaToscaServiceTemplate();
496
497         assertThatThrownBy(() -> new SimpleToscaProvider().createPolicies(pfDao, testServiceTemplate))
498             .hasMessage("topology template not specified on service template");
499
500         testServiceTemplate.setTopologyTemplate(new JpaToscaTopologyTemplate());
501         assertThatThrownBy(() -> new SimpleToscaProvider().createPolicies(pfDao, testServiceTemplate))
502             .hasMessage("no policies specified on topology template of service template");
503
504         testServiceTemplate.getTopologyTemplate().setPolicies(new JpaToscaPolicies());
505         assertThatThrownBy(() -> new SimpleToscaProvider().createPolicies(pfDao, testServiceTemplate))
506             .hasMessage("list of policies specified on topology template of service template is empty");
507     }
508
509     @Test
510     public void testGetServiceTemplate() throws PfModelException {
511         assertThatThrownBy(() -> new SimpleToscaProvider().getServiceTemplate(pfDao))
512             .hasMessage("service template not found in database");
513     }
514
515     @Test
516     public void testAppendToServiceTemplate() throws PfModelException {
517         JpaToscaServiceTemplate serviceTemplateFragment = new JpaToscaServiceTemplate();
518         serviceTemplateFragment.setPolicyTypes(new JpaToscaPolicyTypes());
519         JpaToscaPolicyType badPt = new JpaToscaPolicyType();
520         serviceTemplateFragment.getPolicyTypes().getConceptMap().put(badPt.getKey(), badPt);
521
522         assertThatThrownBy(() -> new SimpleToscaProvider().appendToServiceTemplate(pfDao, serviceTemplateFragment))
523             .hasMessageContaining(
524                 "key on concept entry PfConceptKey(name=NULL, version=0.0.0) may not be the null key");
525     }
526
527     @Test
528     public void testGetDataTypesCornerCases() throws PfModelException {
529         assertThatThrownBy(() -> {
530             new SimpleToscaProvider().getDataTypes(pfDao, "hello", "0.0.1");
531         }).hasMessageMatching("service template not found in database");
532
533         JpaToscaServiceTemplate serviceTemplate = new JpaToscaServiceTemplate();
534         serviceTemplate.setPolicyTypes(new JpaToscaPolicyTypes());
535         JpaToscaPolicyType p0 = new JpaToscaPolicyType(new PfConceptKey("p0:0.0.1"));
536         serviceTemplate.getPolicyTypes().getConceptMap().put(p0.getKey(), p0);
537
538         new SimpleToscaProvider().createPolicyTypes(pfDao, serviceTemplate);
539
540         assertThatThrownBy(() -> {
541             new SimpleToscaProvider().getDataTypes(pfDao, "hello", "0.0.1");
542         }).hasMessageMatching("data types for hello:0.0.1 do not exist");
543
544         serviceTemplate.setDataTypes(new JpaToscaDataTypes());
545
546         JpaToscaDataType p01 = new JpaToscaDataType(new PfConceptKey("dt0:0.0.1"));
547         serviceTemplate.getDataTypes().getConceptMap().put(p01.getKey(), p01);
548
549         new SimpleToscaProvider().createDataTypes(pfDao, serviceTemplate);
550
551         assertThatThrownBy(() -> {
552             new SimpleToscaProvider().getDataTypes(pfDao, "hello", "0.0.1");
553         }).hasMessageMatching("data types for hello:0.0.1 do not exist");
554
555         JpaToscaServiceTemplate gotSt = new SimpleToscaProvider().getDataTypes(pfDao, p01.getName(), p01.getVersion());
556
557         assertEquals(p01, gotSt.getDataTypes().get(p01.getKey()));
558         assertEquals(p01, gotSt.getDataTypes().get(p01.getName()));
559         assertEquals(p01, gotSt.getDataTypes().get(p01.getName(), null));
560         assertEquals(p01, gotSt.getDataTypes().get(p01.getName(), p01.getVersion()));
561         assertEquals(1, gotSt.getDataTypes().getAll(null).size());
562         assertEquals(1, gotSt.getDataTypes().getAll(null, null).size());
563         assertEquals(1, gotSt.getDataTypes().getAll(p01.getName(), null).size());
564         assertEquals(1, gotSt.getDataTypes().getAll(p01.getName(), p01.getVersion()).size());
565
566         JpaToscaDataType p02 = new JpaToscaDataType(new PfConceptKey("dt0:0.0.2"));
567         serviceTemplate.getDataTypes().getConceptMap().put(p02.getKey(), p02);
568
569         new SimpleToscaProvider().createDataTypes(pfDao, serviceTemplate);
570         gotSt = new SimpleToscaProvider().getDataTypes(pfDao, p01.getName(), null);
571
572         assertEquals(p01, gotSt.getDataTypes().get(p01.getKey()));
573         assertEquals(p02, gotSt.getDataTypes().get(p01.getName()));
574         assertEquals(p02, gotSt.getDataTypes().get(p01.getName(), null));
575         assertEquals(p01, gotSt.getDataTypes().get(p01.getName(), p01.getVersion()));
576         assertEquals(p02, gotSt.getDataTypes().get(p01.getName(), p02.getVersion()));
577         assertEquals(2, gotSt.getDataTypes().getAll(null).size());
578         assertEquals(2, gotSt.getDataTypes().getAll(null, null).size());
579         assertEquals(2, gotSt.getDataTypes().getAll(p01.getName(), null).size());
580         assertEquals(1, gotSt.getDataTypes().getAll(p01.getName(), p02.getVersion()).size());
581     }
582
583     @Test
584     public void testGetPolicyTypesCornerCases() throws PfModelException {
585         assertThatThrownBy(() -> {
586             new SimpleToscaProvider().getPolicyTypes(pfDao, "hello", "0.0.1");
587         }).hasMessageMatching("service template not found in database");
588
589         JpaToscaServiceTemplate serviceTemplate = new JpaToscaServiceTemplate();
590         serviceTemplate.setDataTypes(new JpaToscaDataTypes());
591         JpaToscaDataType dt0 = new JpaToscaDataType(new PfConceptKey("dt0:0.0.1"));
592         serviceTemplate.getDataTypes().getConceptMap().put(dt0.getKey(), dt0);
593
594         new SimpleToscaProvider().createDataTypes(pfDao, serviceTemplate);
595
596         assertThatThrownBy(() -> {
597             new SimpleToscaProvider().getPolicyTypes(pfDao, "hello", "0.0.1");
598         }).hasMessageMatching("policy types for hello:0.0.1 do not exist");
599
600         serviceTemplate.setPolicyTypes(new JpaToscaPolicyTypes());
601
602         JpaToscaPolicyType pt01 = new JpaToscaPolicyType(new PfConceptKey("p0:0.0.1"));
603         serviceTemplate.getPolicyTypes().getConceptMap().put(pt01.getKey(), pt01);
604
605         new SimpleToscaProvider().createPolicyTypes(pfDao, serviceTemplate);
606
607         assertThatThrownBy(() -> {
608             new SimpleToscaProvider().getPolicyTypes(pfDao, "hello", "0.0.1");
609         }).hasMessageMatching("policy types for hello:0.0.1 do not exist");
610
611         JpaToscaServiceTemplate gotSt =
612             new SimpleToscaProvider().getPolicyTypes(pfDao, pt01.getName(), pt01.getVersion());
613
614         assertEquals(pt01, gotSt.getPolicyTypes().get(pt01.getKey()));
615         assertEquals(pt01, gotSt.getPolicyTypes().get(pt01.getName()));
616         assertEquals(pt01, gotSt.getPolicyTypes().get(pt01.getName(), null));
617         assertEquals(pt01, gotSt.getPolicyTypes().get(pt01.getName(), pt01.getVersion()));
618         assertEquals(1, gotSt.getPolicyTypes().getAll(null).size());
619         assertEquals(1, gotSt.getPolicyTypes().getAll(null, null).size());
620         assertEquals(1, gotSt.getPolicyTypes().getAll(pt01.getName(), null).size());
621         assertEquals(1, gotSt.getPolicyTypes().getAll(pt01.getName(), pt01.getVersion()).size());
622
623         JpaToscaPolicyType pt02 = new JpaToscaPolicyType(new PfConceptKey("p0:0.0.2"));
624         serviceTemplate.getPolicyTypes().getConceptMap().put(pt02.getKey(), pt02);
625
626         new SimpleToscaProvider().createPolicyTypes(pfDao, serviceTemplate);
627         gotSt = new SimpleToscaProvider().getPolicyTypes(pfDao, pt01.getName(), null);
628
629         assertEquals(pt01, gotSt.getPolicyTypes().get(pt01.getKey()));
630         assertEquals(pt02, gotSt.getPolicyTypes().get(pt01.getName()));
631         assertEquals(pt02, gotSt.getPolicyTypes().get(pt01.getName(), null));
632         assertEquals(pt01, gotSt.getPolicyTypes().get(pt01.getName(), pt01.getVersion()));
633         assertEquals(pt02, gotSt.getPolicyTypes().get(pt01.getName(), pt02.getVersion()));
634         assertEquals(2, gotSt.getPolicyTypes().getAll(null).size());
635         assertEquals(2, gotSt.getPolicyTypes().getAll(null, null).size());
636         assertEquals(2, gotSt.getPolicyTypes().getAll(pt01.getName(), null).size());
637         assertEquals(1, gotSt.getPolicyTypes().getAll(pt01.getName(), pt02.getVersion()).size());
638     }
639
640     @Test
641     public void testGetPoliciesCornerCases() throws PfModelException {
642         assertThatThrownBy(() -> {
643             new SimpleToscaProvider().getPolicies(pfDao, "hello", "0.0.1");
644         }).hasMessageMatching("service template not found in database");
645
646         JpaToscaServiceTemplate serviceTemplate = new JpaToscaServiceTemplate();
647         serviceTemplate.setDataTypes(new JpaToscaDataTypes());
648         JpaToscaDataType dt0 = new JpaToscaDataType(new PfConceptKey("dt0:0.0.1"));
649         serviceTemplate.getDataTypes().getConceptMap().put(dt0.getKey(), dt0);
650
651         new SimpleToscaProvider().createDataTypes(pfDao, serviceTemplate);
652
653         assertThatThrownBy(() -> {
654             new SimpleToscaProvider().getPolicies(pfDao, "hello", "0.0.1");
655         }).hasMessageMatching("policies for hello:0.0.1 do not exist");
656
657         serviceTemplate.setPolicyTypes(new JpaToscaPolicyTypes());
658
659         JpaToscaPolicyType pt01 = new JpaToscaPolicyType(new PfConceptKey("pt0:0.0.1"));
660         serviceTemplate.getPolicyTypes().getConceptMap().put(pt01.getKey(), pt01);
661
662         serviceTemplate.setTopologyTemplate(new JpaToscaTopologyTemplate());
663         serviceTemplate.getTopologyTemplate().setPolicies(new JpaToscaPolicies());
664
665         JpaToscaPolicy p01 = new JpaToscaPolicy(new PfConceptKey("p0:0.0.1"));
666         p01.setType(pt01.getKey());
667         serviceTemplate.getTopologyTemplate().getPolicies().getConceptMap().put(p01.getKey(), p01);
668
669         new SimpleToscaProvider().createPolicies(pfDao, serviceTemplate);
670
671         assertThatThrownBy(() -> {
672             new SimpleToscaProvider().getPolicies(pfDao, "hello", "0.0.1");
673         }).hasMessageMatching("policies for hello:0.0.1 do not exist");
674
675         JpaToscaServiceTemplate gotSt = new SimpleToscaProvider().getPolicies(pfDao, p01.getName(), p01.getVersion());
676
677         assertEquals(p01, gotSt.getTopologyTemplate().getPolicies().get(p01.getKey()));
678         assertEquals(p01, gotSt.getTopologyTemplate().getPolicies().get(p01.getName()));
679         assertEquals(p01, gotSt.getTopologyTemplate().getPolicies().get(p01.getName(), null));
680         assertEquals(p01, gotSt.getTopologyTemplate().getPolicies().get(p01.getName(), p01.getVersion()));
681         assertEquals(1, gotSt.getTopologyTemplate().getPolicies().getAll(null).size());
682         assertEquals(1, gotSt.getTopologyTemplate().getPolicies().getAll(null, null).size());
683         assertEquals(1, gotSt.getTopologyTemplate().getPolicies().getAll(p01.getName(), null).size());
684         assertEquals(1, gotSt.getTopologyTemplate().getPolicies().getAll(p01.getName(), p01.getVersion()).size());
685
686         JpaToscaPolicy p02 = new JpaToscaPolicy(new PfConceptKey("p0:0.0.2"));
687         p02.setType(pt01.getKey());
688         serviceTemplate.getTopologyTemplate().getPolicies().getConceptMap().put(p02.getKey(), p02);
689
690         new SimpleToscaProvider().createPolicies(pfDao, serviceTemplate);
691         gotSt = new SimpleToscaProvider().getPolicies(pfDao, p01.getName(), null);
692
693         assertEquals(p01, gotSt.getTopologyTemplate().getPolicies().get(p01.getKey()));
694         assertEquals(p02, gotSt.getTopologyTemplate().getPolicies().get(p01.getName()));
695         assertEquals(p02, gotSt.getTopologyTemplate().getPolicies().get(p01.getName(), null));
696         assertEquals(p01, gotSt.getTopologyTemplate().getPolicies().get(p01.getName(), p01.getVersion()));
697         assertEquals(p02, gotSt.getTopologyTemplate().getPolicies().get(p01.getName(), p02.getVersion()));
698         assertEquals(2, gotSt.getTopologyTemplate().getPolicies().getAll(null).size());
699         assertEquals(2, gotSt.getTopologyTemplate().getPolicies().getAll(null, null).size());
700         assertEquals(2, gotSt.getTopologyTemplate().getPolicies().getAll(p01.getName(), null).size());
701         assertEquals(1, gotSt.getTopologyTemplate().getPolicies().getAll(p01.getName(), p02.getVersion()).size());
702     }
703
704     @Test
705     public void testNonNulls() {
706         assertThatThrownBy(() -> {
707             new SimpleToscaProvider().getServiceTemplate(null);
708         }).hasMessageMatching(DAO_IS_NULL);
709
710         assertThatThrownBy(() -> {
711             new SimpleToscaProvider().appendToServiceTemplate(null, null);
712         }).hasMessageMatching(DAO_IS_NULL);
713
714         assertThatThrownBy(() -> {
715             new SimpleToscaProvider().appendToServiceTemplate(null, new JpaToscaServiceTemplate());
716         }).hasMessageMatching(DAO_IS_NULL);
717
718         assertThatThrownBy(() -> {
719             new SimpleToscaProvider().appendToServiceTemplate(pfDao, null);
720         }).hasMessageMatching("^incomingServiceTemplateFragment is marked .*on.*ull but is null$");
721
722         assertThatThrownBy(() -> {
723             new SimpleToscaProvider().getDataTypes(null, null, null);
724         }).hasMessageMatching(DAO_IS_NULL);
725
726         assertThatThrownBy(() -> {
727             new SimpleToscaProvider().createDataTypes(null, null);
728         }).hasMessageMatching(DAO_IS_NULL);
729
730         assertThatThrownBy(() -> {
731             new SimpleToscaProvider().createDataTypes(null, new JpaToscaServiceTemplate());
732         }).hasMessageMatching(DAO_IS_NULL);
733
734         assertThatThrownBy(() -> {
735             new SimpleToscaProvider().createDataTypes(pfDao, null);
736         }).hasMessageMatching(INCOMING_TEMPLATE_IS_NULL);
737
738         assertThatThrownBy(() -> {
739             new SimpleToscaProvider().updateDataTypes(null, null);
740         }).hasMessageMatching(DAO_IS_NULL);
741
742         assertThatThrownBy(() -> {
743             new SimpleToscaProvider().updateDataTypes(null, new JpaToscaServiceTemplate());
744         }).hasMessageMatching(DAO_IS_NULL);
745
746         assertThatThrownBy(() -> {
747             new SimpleToscaProvider().updateDataTypes(pfDao, null);
748         }).hasMessageMatching(TEMPLATE_IS_NULL);
749
750         assertThatThrownBy(() -> {
751             new SimpleToscaProvider().deleteDataType(null, null);
752         }).hasMessageMatching(DAO_IS_NULL);
753
754         assertThatThrownBy(() -> {
755             new SimpleToscaProvider().deleteDataType(null, new PfConceptKey());
756         }).hasMessageMatching(DAO_IS_NULL);
757
758         assertThatThrownBy(() -> {
759             new SimpleToscaProvider().deleteDataType(pfDao, null);
760         }).hasMessageMatching("^dataTypeKey is marked .*on.*ull but is null$");
761
762         assertThatThrownBy(() -> {
763             new SimpleToscaProvider().getPolicyTypes(null, null, null);
764         }).hasMessageMatching(DAO_IS_NULL);
765
766         assertThatThrownBy(() -> {
767             new SimpleToscaProvider().createPolicyTypes(null, null);
768         }).hasMessageMatching(DAO_IS_NULL);
769
770         assertThatThrownBy(() -> {
771             new SimpleToscaProvider().createPolicyTypes(null, new JpaToscaServiceTemplate());
772         }).hasMessageMatching(DAO_IS_NULL);
773
774         assertThatThrownBy(() -> {
775             new SimpleToscaProvider().createPolicyTypes(pfDao, null);
776         }).hasMessageMatching(INCOMING_TEMPLATE_IS_NULL);
777
778         assertThatThrownBy(() -> {
779             new SimpleToscaProvider().updatePolicyTypes(null, null);
780         }).hasMessageMatching(DAO_IS_NULL);
781
782         assertThatThrownBy(() -> {
783             new SimpleToscaProvider().updatePolicyTypes(null, new JpaToscaServiceTemplate());
784         }).hasMessageMatching(DAO_IS_NULL);
785
786         assertThatThrownBy(() -> {
787             new SimpleToscaProvider().updatePolicyTypes(pfDao, null);
788         }).hasMessageMatching(TEMPLATE_IS_NULL);
789
790         assertThatThrownBy(() -> {
791             new SimpleToscaProvider().deletePolicyType(null, null);
792         }).hasMessageMatching(DAO_IS_NULL);
793
794         assertThatThrownBy(() -> {
795             new SimpleToscaProvider().deletePolicyType(null, new PfConceptKey());
796         }).hasMessageMatching(DAO_IS_NULL);
797
798         assertThatThrownBy(() -> {
799             new SimpleToscaProvider().deletePolicyType(pfDao, null);
800         }).hasMessageMatching("^policyTypeKey is marked .*on.*ull but is null$");
801
802         assertThatThrownBy(() -> {
803             new SimpleToscaProvider().getPolicies(null, null, null);
804         }).hasMessageMatching(DAO_IS_NULL);
805
806         assertThatThrownBy(() -> {
807             new SimpleToscaProvider().createPolicies(null, null);
808         }).hasMessageMatching(DAO_IS_NULL);
809
810         assertThatThrownBy(() -> {
811             new SimpleToscaProvider().createPolicies(null, new JpaToscaServiceTemplate());
812         }).hasMessageMatching(DAO_IS_NULL);
813
814         assertThatThrownBy(() -> {
815             new SimpleToscaProvider().createPolicies(pfDao, null);
816         }).hasMessageMatching(INCOMING_TEMPLATE_IS_NULL);
817
818         assertThatThrownBy(() -> {
819             new SimpleToscaProvider().updatePolicies(null, null);
820         }).hasMessageMatching(DAO_IS_NULL);
821
822         assertThatThrownBy(() -> {
823             new SimpleToscaProvider().updatePolicies(null, new JpaToscaServiceTemplate());
824         }).hasMessageMatching(DAO_IS_NULL);
825
826         assertThatThrownBy(() -> {
827             new SimpleToscaProvider().updatePolicies(pfDao, null);
828         }).hasMessageMatching(TEMPLATE_IS_NULL);
829
830         assertThatThrownBy(() -> {
831             new SimpleToscaProvider().deletePolicy(null, null);
832         }).hasMessageMatching(DAO_IS_NULL);
833
834         assertThatThrownBy(() -> {
835             new SimpleToscaProvider().deletePolicy(null, new PfConceptKey());
836         }).hasMessageMatching(DAO_IS_NULL);
837
838         assertThatThrownBy(() -> {
839             new SimpleToscaProvider().deletePolicy(pfDao, null);
840         }).hasMessageMatching("^policyKey is marked .*on.*ull but is null$");
841     }
842
843     private void createPolicyTypes() throws CoderException, PfModelException {
844         Object yamlObject = new Yaml()
845             .load(ResourceUtils.getResourceAsString("policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app.yaml"));
846         String yamlAsJsonString = new StandardCoder().encode(yamlObject);
847
848         ToscaServiceTemplate toscaServiceTemplatePolicyType =
849             standardCoder.decode(yamlAsJsonString, ToscaServiceTemplate.class);
850
851         assertNotNull(toscaServiceTemplatePolicyType);
852         new AuthorativeToscaProvider().createPolicyTypes(pfDao, toscaServiceTemplatePolicyType);
853     }
854 }