Make type and type_version mandatory on policies
[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
28 import java.util.Properties;
29
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(dataType0, deletedServiceTemplate.getDataTypes().get(dataType0Key));
186         assertEquals("Updated Description", deletedServiceTemplate.getDataTypes().get(dataType0Key).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
287     @Test
288     public void testCreateUpdateGetDeletePolicyTypeWithDataType() throws PfModelException {
289         JpaToscaServiceTemplate serviceTemplate = new JpaToscaServiceTemplate();
290
291         PfConceptKey policyType0Key = new PfConceptKey("PolicyType0", "0.0.1");
292         JpaToscaPolicyType policyType0 = new JpaToscaPolicyType();
293         policyType0.setKey(policyType0Key);
294         serviceTemplate.setPolicyTypes(new JpaToscaPolicyTypes());
295         serviceTemplate.getPolicyTypes().getConceptMap().put(policyType0Key, policyType0);
296
297         JpaToscaServiceTemplate createdServiceTemplate =
298             new SimpleToscaProvider().createPolicyTypes(pfDao, serviceTemplate);
299
300         assertEquals(policyType0, createdServiceTemplate.getPolicyTypes().get(policyType0Key));
301         assertEquals(null, createdServiceTemplate.getPolicyTypes().get(policyType0Key).getDescription());
302
303         policyType0.setDescription("Updated Description");
304
305         JpaToscaServiceTemplate updatedServiceTemplate =
306             new SimpleToscaProvider().updatePolicyTypes(pfDao, serviceTemplate);
307
308         assertEquals(policyType0, updatedServiceTemplate.getPolicyTypes().get(policyType0Key));
309         assertEquals("Updated Description",
310             updatedServiceTemplate.getPolicyTypes().get(policyType0Key).getDescription());
311
312         JpaToscaServiceTemplate gotServiceTemplate =
313             new SimpleToscaProvider().getPolicyTypes(pfDao, policyType0Key.getName(), policyType0Key.getVersion());
314
315         assertEquals(policyType0, gotServiceTemplate.getPolicyTypes().get(policyType0Key));
316         assertEquals("Updated Description", gotServiceTemplate.getPolicyTypes().get(policyType0Key).getDescription());
317
318         JpaToscaServiceTemplate deletedServiceTemplate =
319             new SimpleToscaProvider().deletePolicyType(pfDao, policyType0Key);
320
321         assertEquals(policyType0, deletedServiceTemplate.getPolicyTypes().get(policyType0Key));
322         assertEquals("Updated Description",
323             deletedServiceTemplate.getPolicyTypes().get(policyType0Key).getDescription());
324
325         assertThatThrownBy(() -> new SimpleToscaProvider().deletePolicyType(pfDao, policyType0Key))
326             .hasMessage("no policy types found");
327     }
328
329     @Test
330     public void testPoliciesGet() throws Exception {
331         ToscaServiceTemplate toscaServiceTemplate =
332             standardCoder.decode(ResourceUtils.getResourceAsString(VCPE_INPUT_JSON), ToscaServiceTemplate.class);
333
334         createPolicyTypes();
335
336         JpaToscaServiceTemplate originalServiceTemplate = new JpaToscaServiceTemplate();
337         originalServiceTemplate.fromAuthorative(toscaServiceTemplate);
338
339         assertNotNull(originalServiceTemplate);
340         JpaToscaServiceTemplate createdServiceTemplate =
341             new SimpleToscaProvider().createPolicies(pfDao, originalServiceTemplate);
342
343         assertEquals(originalServiceTemplate.getTopologyTemplate().getPolicies(),
344             createdServiceTemplate.getTopologyTemplate().getPolicies());
345
346         PfConceptKey policyKey = new PfConceptKey("onap.restart.tca:1.0.0");
347
348         JpaToscaServiceTemplate gotServiceTemplate =
349             new SimpleToscaProvider().getPolicies(pfDao, policyKey.getName(), policyKey.getVersion());
350
351         assertEquals(originalServiceTemplate.getTopologyTemplate().getPolicies().get(policyKey),
352             gotServiceTemplate.getTopologyTemplate().getPolicies().get(policyKey));
353
354         JpaToscaServiceTemplate deletedServiceTemplate = new SimpleToscaProvider().deletePolicy(pfDao, policyKey);
355         assertEquals(1, deletedServiceTemplate.getTopologyTemplate().getPolicies().getConceptMap().size());
356     }
357
358     @Test
359     public void testPolicyCreate() throws Exception {
360         ToscaServiceTemplate toscaServiceTemplate =
361             standardCoder.decode(ResourceUtils.getResourceAsString(VCPE_INPUT_JSON), ToscaServiceTemplate.class);
362
363         createPolicyTypes();
364
365         JpaToscaServiceTemplate originalServiceTemplate = new JpaToscaServiceTemplate();
366         originalServiceTemplate.fromAuthorative(toscaServiceTemplate);
367
368         assertNotNull(originalServiceTemplate);
369         JpaToscaServiceTemplate createdServiceTemplate =
370             new SimpleToscaProvider().createPolicies(pfDao, originalServiceTemplate);
371
372         assertEquals(originalServiceTemplate.getTopologyTemplate().getPolicies(),
373             createdServiceTemplate.getTopologyTemplate().getPolicies());
374     }
375
376     @Test
377     public void testPolicyCreateTypeAndVersion() throws Exception {
378         ToscaServiceTemplate toscaServiceTemplate =
379             standardCoder.decode(ResourceUtils.getResourceAsString(VCPE_INPUT_JSON), ToscaServiceTemplate.class);
380
381         createPolicyTypes();
382
383         ToscaPolicy toscaPolicy =
384             toscaServiceTemplate.getToscaTopologyTemplate().getPoliciesAsMap().values().iterator().next();
385
386         JpaToscaServiceTemplate originalServiceTemplate = new JpaToscaServiceTemplate();
387
388         final String originalPolicyType = toscaPolicy.getType();
389         final String originalPolicyTypeVersion = toscaPolicy.getTypeVersion();
390         toscaPolicy.setType(null);
391         toscaPolicy.setTypeVersion(null);
392
393         assertThatThrownBy(() -> {
394             originalServiceTemplate.fromAuthorative(toscaServiceTemplate);
395         }).hasMessage("PolicyType type not specified, the type of the PolicyType for this policy must be "
396             + "specified in the type field");
397
398         toscaPolicy.setType("IDontExist");
399         assertThatThrownBy(() -> {
400             originalServiceTemplate.fromAuthorative(toscaServiceTemplate);
401         }).hasMessage("PolicyType version not specified, the version of the PolicyType for this policy must be "
402             + "specified in the type_version field");
403
404         toscaPolicy.setTypeVersion("hello");
405         assertThatThrownBy(() -> {
406             originalServiceTemplate.fromAuthorative(toscaServiceTemplate);
407         }).hasMessageContaining("value \"hello\", does not match regular expression");
408
409         toscaPolicy.setTypeVersion("99.100.101");
410         originalServiceTemplate.fromAuthorative(toscaServiceTemplate);
411
412         assertThatThrownBy(() -> {
413             new SimpleToscaProvider().createPolicies(pfDao, originalServiceTemplate);
414         }).hasMessageContaining("policy type IDontExist:99.100.101 referenced in policy not found");
415
416         toscaPolicy.setType("IDontExist");
417         originalServiceTemplate.fromAuthorative(toscaServiceTemplate);
418
419         toscaPolicy.setType(null);
420
421         assertThatThrownBy(() -> {
422             originalServiceTemplate.fromAuthorative(toscaServiceTemplate);
423         }).hasMessage("PolicyType type not specified, the type of the PolicyType for this policy must be "
424             + "specified in the type field");
425
426         toscaPolicy.setType(originalPolicyType);
427         toscaPolicy.setTypeVersion(originalPolicyTypeVersion);
428
429         originalServiceTemplate.fromAuthorative(toscaServiceTemplate);
430         JpaToscaServiceTemplate createdServiceTemplate =
431             new SimpleToscaProvider().createPolicies(pfDao, originalServiceTemplate);
432         assertEquals(originalServiceTemplate.getTopologyTemplate().getPolicies(),
433             createdServiceTemplate.getTopologyTemplate().getPolicies());
434     }
435
436     @Test
437     public void testPolicyUpdate() throws Exception {
438         ToscaServiceTemplate toscaServiceTemplate =
439             standardCoder.decode(ResourceUtils.getResourceAsString(VCPE_INPUT_JSON), ToscaServiceTemplate.class);
440
441         createPolicyTypes();
442
443         JpaToscaServiceTemplate originalServiceTemplate = new JpaToscaServiceTemplate();
444         originalServiceTemplate.fromAuthorative(toscaServiceTemplate);
445
446         assertNotNull(originalServiceTemplate);
447         JpaToscaServiceTemplate updatedServiceTemplate =
448             new SimpleToscaProvider().updatePolicies(pfDao, originalServiceTemplate);
449
450         assertEquals(originalServiceTemplate, updatedServiceTemplate);
451     }
452
453     @Test
454     public void testPoliciesDelete() throws Exception {
455         ToscaServiceTemplate toscaServiceTemplate =
456             standardCoder.decode(ResourceUtils.getResourceAsString(VCPE_INPUT_JSON), ToscaServiceTemplate.class);
457
458         createPolicyTypes();
459
460         JpaToscaServiceTemplate originalServiceTemplate = new JpaToscaServiceTemplate();
461         originalServiceTemplate.fromAuthorative(toscaServiceTemplate);
462
463         assertNotNull(originalServiceTemplate);
464         JpaToscaServiceTemplate createdServiceTemplate =
465             new SimpleToscaProvider().createPolicies(pfDao, originalServiceTemplate);
466
467         assertEquals(originalServiceTemplate.getTopologyTemplate(), createdServiceTemplate.getTopologyTemplate());
468
469         PfConceptKey policyKey = new PfConceptKey("onap.restart.tca:1.0.0");
470
471         assertThatThrownBy(() -> new SimpleToscaProvider().deletePolicy(pfDao, new PfConceptKey("IDontExist:0.0.1")))
472             .hasMessage("policy IDontExist:0.0.1 not found");
473
474         JpaToscaServiceTemplate deletedServiceTemplate = new SimpleToscaProvider().deletePolicy(pfDao, policyKey);
475
476         assertEquals(originalServiceTemplate.getTopologyTemplate().getPolicies().get(policyKey),
477             deletedServiceTemplate.getTopologyTemplate().getPolicies().get(policyKey));
478
479         assertThatThrownBy(() -> {
480             new SimpleToscaProvider().getPolicies(pfDao, policyKey.getName(), policyKey.getVersion());
481         }).hasMessage("policies for onap.restart.tca:1.0.0 do not exist");
482
483         assertThatThrownBy(() -> new SimpleToscaProvider().deletePolicy(pfDao, policyKey))
484             .hasMessage("no policies found");
485     }
486
487     @Test
488     public void testAssertPoliciesExist() {
489         JpaToscaServiceTemplate testServiceTemplate = new JpaToscaServiceTemplate();
490
491         assertThatThrownBy(() -> new SimpleToscaProvider().createPolicies(pfDao, testServiceTemplate))
492             .hasMessage("topology template not specified on service template");
493
494         testServiceTemplate.setTopologyTemplate(new JpaToscaTopologyTemplate());
495         assertThatThrownBy(() -> new SimpleToscaProvider().createPolicies(pfDao, testServiceTemplate))
496             .hasMessage("no policies specified on topology template of service template");
497
498         testServiceTemplate.getTopologyTemplate().setPolicies(new JpaToscaPolicies());
499         assertThatThrownBy(() -> new SimpleToscaProvider().createPolicies(pfDao, testServiceTemplate))
500             .hasMessage("list of policies specified on topology template of service template is empty");
501     }
502
503     @Test
504     public void testGetServiceTemplate() throws PfModelException {
505         assertThatThrownBy(() -> new SimpleToscaProvider().getServiceTemplate(pfDao))
506             .hasMessage("service template not found in database");
507     }
508
509     @Test
510     public void testAppendToServiceTemplate() throws PfModelException {
511         JpaToscaServiceTemplate serviceTemplateFragment = new JpaToscaServiceTemplate();
512         serviceTemplateFragment.setPolicyTypes(new JpaToscaPolicyTypes());
513         JpaToscaPolicyType badPt = new JpaToscaPolicyType();
514         serviceTemplateFragment.getPolicyTypes().getConceptMap().put(badPt.getKey(), badPt);
515
516         assertThatThrownBy(() -> new SimpleToscaProvider().appendToServiceTemplate(pfDao, serviceTemplateFragment))
517             .hasMessageContaining(
518                 "key on concept entry PfConceptKey(name=NULL, version=0.0.0) may not be the null key");
519     }
520
521     @Test
522     public void testGetDataTypesCornerCases() throws PfModelException {
523         assertThatThrownBy(() -> {
524             new SimpleToscaProvider().getDataTypes(pfDao, "hello", "0.0.1");
525         }).hasMessageMatching("service template not found in database");
526
527         JpaToscaServiceTemplate serviceTemplate = new JpaToscaServiceTemplate();
528         serviceTemplate.setPolicyTypes(new JpaToscaPolicyTypes());
529         JpaToscaPolicyType p0 = new JpaToscaPolicyType(new PfConceptKey("p0:0.0.1"));
530         serviceTemplate.getPolicyTypes().getConceptMap().put(p0.getKey(), p0);
531
532         new SimpleToscaProvider().createPolicyTypes(pfDao, serviceTemplate);
533
534         assertThatThrownBy(() -> {
535             new SimpleToscaProvider().getDataTypes(pfDao, "hello", "0.0.1");
536         }).hasMessageMatching("data types for hello:0.0.1 do not exist");
537
538         serviceTemplate.setDataTypes(new JpaToscaDataTypes());
539
540         JpaToscaDataType p01 = new JpaToscaDataType(new PfConceptKey("dt0:0.0.1"));
541         serviceTemplate.getDataTypes().getConceptMap().put(p01.getKey(), p01);
542
543         new SimpleToscaProvider().createDataTypes(pfDao, serviceTemplate);
544
545         assertThatThrownBy(() -> {
546             new SimpleToscaProvider().getDataTypes(pfDao, "hello", "0.0.1");
547         }).hasMessageMatching("data types for hello:0.0.1 do not exist");
548
549         JpaToscaServiceTemplate gotSt = new SimpleToscaProvider().getDataTypes(pfDao, p01.getName(), p01.getVersion());
550
551         assertEquals(p01, gotSt.getDataTypes().get(p01.getKey()));
552         assertEquals(p01, gotSt.getDataTypes().get(p01.getName()));
553         assertEquals(p01, gotSt.getDataTypes().get(p01.getName(), null));
554         assertEquals(p01, gotSt.getDataTypes().get(p01.getName(), p01.getVersion()));
555         assertEquals(1, gotSt.getDataTypes().getAll(null).size());
556         assertEquals(1, gotSt.getDataTypes().getAll(null, null).size());
557         assertEquals(1, gotSt.getDataTypes().getAll(p01.getName(), null).size());
558         assertEquals(1, gotSt.getDataTypes().getAll(p01.getName(), p01.getVersion()).size());
559
560         JpaToscaDataType p02 = new JpaToscaDataType(new PfConceptKey("dt0:0.0.2"));
561         serviceTemplate.getDataTypes().getConceptMap().put(p02.getKey(), p02);
562
563         new SimpleToscaProvider().createDataTypes(pfDao, serviceTemplate);
564         gotSt = new SimpleToscaProvider().getDataTypes(pfDao, p01.getName(), null);
565
566         assertEquals(p01, gotSt.getDataTypes().get(p01.getKey()));
567         assertEquals(p02, gotSt.getDataTypes().get(p01.getName()));
568         assertEquals(p02, gotSt.getDataTypes().get(p01.getName(), null));
569         assertEquals(p01, gotSt.getDataTypes().get(p01.getName(), p01.getVersion()));
570         assertEquals(p02, gotSt.getDataTypes().get(p01.getName(), p02.getVersion()));
571         assertEquals(2, gotSt.getDataTypes().getAll(null).size());
572         assertEquals(2, gotSt.getDataTypes().getAll(null, null).size());
573         assertEquals(2, gotSt.getDataTypes().getAll(p01.getName(), null).size());
574         assertEquals(1, gotSt.getDataTypes().getAll(p01.getName(), p02.getVersion()).size());
575     }
576
577     @Test
578     public void testGetPolicyTypesCornerCases() throws PfModelException {
579         assertThatThrownBy(() -> {
580             new SimpleToscaProvider().getPolicyTypes(pfDao, "hello", "0.0.1");
581         }).hasMessageMatching("service template not found in database");
582
583         JpaToscaServiceTemplate serviceTemplate = new JpaToscaServiceTemplate();
584         serviceTemplate.setDataTypes(new JpaToscaDataTypes());
585         JpaToscaDataType dt0 = new JpaToscaDataType(new PfConceptKey("dt0:0.0.1"));
586         serviceTemplate.getDataTypes().getConceptMap().put(dt0.getKey(), dt0);
587
588         new SimpleToscaProvider().createDataTypes(pfDao, serviceTemplate);
589
590         assertThatThrownBy(() -> {
591             new SimpleToscaProvider().getPolicyTypes(pfDao, "hello", "0.0.1");
592         }).hasMessageMatching("policy types for hello:0.0.1 do not exist");
593
594         serviceTemplate.setPolicyTypes(new JpaToscaPolicyTypes());
595
596         JpaToscaPolicyType pt01 = new JpaToscaPolicyType(new PfConceptKey("p0:0.0.1"));
597         serviceTemplate.getPolicyTypes().getConceptMap().put(pt01.getKey(), pt01);
598
599         new SimpleToscaProvider().createPolicyTypes(pfDao, serviceTemplate);
600
601         assertThatThrownBy(() -> {
602             new SimpleToscaProvider().getPolicyTypes(pfDao, "hello", "0.0.1");
603         }).hasMessageMatching("policy types for hello:0.0.1 do not exist");
604
605         JpaToscaServiceTemplate gotSt =
606             new SimpleToscaProvider().getPolicyTypes(pfDao, pt01.getName(), pt01.getVersion());
607
608         assertEquals(pt01, gotSt.getPolicyTypes().get(pt01.getKey()));
609         assertEquals(pt01, gotSt.getPolicyTypes().get(pt01.getName()));
610         assertEquals(pt01, gotSt.getPolicyTypes().get(pt01.getName(), null));
611         assertEquals(pt01, gotSt.getPolicyTypes().get(pt01.getName(), pt01.getVersion()));
612         assertEquals(1, gotSt.getPolicyTypes().getAll(null).size());
613         assertEquals(1, gotSt.getPolicyTypes().getAll(null, null).size());
614         assertEquals(1, gotSt.getPolicyTypes().getAll(pt01.getName(), null).size());
615         assertEquals(1, gotSt.getPolicyTypes().getAll(pt01.getName(), pt01.getVersion()).size());
616
617         JpaToscaPolicyType pt02 = new JpaToscaPolicyType(new PfConceptKey("p0:0.0.2"));
618         serviceTemplate.getPolicyTypes().getConceptMap().put(pt02.getKey(), pt02);
619
620         new SimpleToscaProvider().createPolicyTypes(pfDao, serviceTemplate);
621         gotSt = new SimpleToscaProvider().getPolicyTypes(pfDao, pt01.getName(), null);
622
623         assertEquals(pt01, gotSt.getPolicyTypes().get(pt01.getKey()));
624         assertEquals(pt02, gotSt.getPolicyTypes().get(pt01.getName()));
625         assertEquals(pt02, gotSt.getPolicyTypes().get(pt01.getName(), null));
626         assertEquals(pt01, gotSt.getPolicyTypes().get(pt01.getName(), pt01.getVersion()));
627         assertEquals(pt02, gotSt.getPolicyTypes().get(pt01.getName(), pt02.getVersion()));
628         assertEquals(2, gotSt.getPolicyTypes().getAll(null).size());
629         assertEquals(2, gotSt.getPolicyTypes().getAll(null, null).size());
630         assertEquals(2, gotSt.getPolicyTypes().getAll(pt01.getName(), null).size());
631         assertEquals(1, gotSt.getPolicyTypes().getAll(pt01.getName(), pt02.getVersion()).size());
632     }
633
634     @Test
635     public void testGetPoliciesCornerCases() throws PfModelException {
636         assertThatThrownBy(() -> {
637             new SimpleToscaProvider().getPolicies(pfDao, "hello", "0.0.1");
638         }).hasMessageMatching("service template not found in database");
639
640         JpaToscaServiceTemplate serviceTemplate = new JpaToscaServiceTemplate();
641         serviceTemplate.setDataTypes(new JpaToscaDataTypes());
642         JpaToscaDataType dt0 = new JpaToscaDataType(new PfConceptKey("dt0:0.0.1"));
643         serviceTemplate.getDataTypes().getConceptMap().put(dt0.getKey(), dt0);
644
645         new SimpleToscaProvider().createDataTypes(pfDao, serviceTemplate);
646
647         assertThatThrownBy(() -> {
648             new SimpleToscaProvider().getPolicies(pfDao, "hello", "0.0.1");
649         }).hasMessageMatching("policies for hello:0.0.1 do not exist");
650
651         serviceTemplate.setPolicyTypes(new JpaToscaPolicyTypes());
652
653         JpaToscaPolicyType pt01 = new JpaToscaPolicyType(new PfConceptKey("pt0:0.0.1"));
654         serviceTemplate.getPolicyTypes().getConceptMap().put(pt01.getKey(), pt01);
655
656         serviceTemplate.setTopologyTemplate(new JpaToscaTopologyTemplate());
657         serviceTemplate.getTopologyTemplate().setPolicies(new JpaToscaPolicies());
658
659         JpaToscaPolicy p01 = new JpaToscaPolicy(new PfConceptKey("p0:0.0.1"));
660         p01.setType(pt01.getKey());
661         serviceTemplate.getTopologyTemplate().getPolicies().getConceptMap().put(p01.getKey(), p01);
662
663         new SimpleToscaProvider().createPolicies(pfDao, serviceTemplate);
664
665         assertThatThrownBy(() -> {
666             new SimpleToscaProvider().getPolicies(pfDao, "hello", "0.0.1");
667         }).hasMessageMatching("policies for hello:0.0.1 do not exist");
668
669         JpaToscaServiceTemplate gotSt = new SimpleToscaProvider().getPolicies(pfDao, p01.getName(), p01.getVersion());
670
671         assertEquals(p01, gotSt.getTopologyTemplate().getPolicies().get(p01.getKey()));
672         assertEquals(p01, gotSt.getTopologyTemplate().getPolicies().get(p01.getName()));
673         assertEquals(p01, gotSt.getTopologyTemplate().getPolicies().get(p01.getName(), null));
674         assertEquals(p01, gotSt.getTopologyTemplate().getPolicies().get(p01.getName(), p01.getVersion()));
675         assertEquals(1, gotSt.getTopologyTemplate().getPolicies().getAll(null).size());
676         assertEquals(1, gotSt.getTopologyTemplate().getPolicies().getAll(null, null).size());
677         assertEquals(1, gotSt.getTopologyTemplate().getPolicies().getAll(p01.getName(), null).size());
678         assertEquals(1, gotSt.getTopologyTemplate().getPolicies().getAll(p01.getName(), p01.getVersion()).size());
679
680         JpaToscaPolicy p02 = new JpaToscaPolicy(new PfConceptKey("p0:0.0.2"));
681         p02.setType(pt01.getKey());
682         serviceTemplate.getTopologyTemplate().getPolicies().getConceptMap().put(p02.getKey(), p02);
683
684         new SimpleToscaProvider().createPolicies(pfDao, serviceTemplate);
685         gotSt = new SimpleToscaProvider().getPolicies(pfDao, p01.getName(), null);
686
687         assertEquals(p01, gotSt.getTopologyTemplate().getPolicies().get(p01.getKey()));
688         assertEquals(p02, gotSt.getTopologyTemplate().getPolicies().get(p01.getName()));
689         assertEquals(p02, gotSt.getTopologyTemplate().getPolicies().get(p01.getName(), null));
690         assertEquals(p01, gotSt.getTopologyTemplate().getPolicies().get(p01.getName(), p01.getVersion()));
691         assertEquals(p02, gotSt.getTopologyTemplate().getPolicies().get(p01.getName(), p02.getVersion()));
692         assertEquals(2, gotSt.getTopologyTemplate().getPolicies().getAll(null).size());
693         assertEquals(2, gotSt.getTopologyTemplate().getPolicies().getAll(null, null).size());
694         assertEquals(2, gotSt.getTopologyTemplate().getPolicies().getAll(p01.getName(), null).size());
695         assertEquals(1, gotSt.getTopologyTemplate().getPolicies().getAll(p01.getName(), p02.getVersion()).size());
696     }
697
698     @Test
699     public void testNonNulls() {
700         assertThatThrownBy(() -> {
701             new SimpleToscaProvider().getServiceTemplate(null);
702         }).hasMessageMatching(DAO_IS_NULL);
703
704         assertThatThrownBy(() -> {
705             new SimpleToscaProvider().appendToServiceTemplate(null, null);
706         }).hasMessageMatching(DAO_IS_NULL);
707
708         assertThatThrownBy(() -> {
709             new SimpleToscaProvider().appendToServiceTemplate(null, new JpaToscaServiceTemplate());
710         }).hasMessageMatching(DAO_IS_NULL);
711
712         assertThatThrownBy(() -> {
713             new SimpleToscaProvider().appendToServiceTemplate(pfDao, null);
714         }).hasMessageMatching("^incomingServiceTemplateFragment is marked .*on.*ull but is null$");
715
716         assertThatThrownBy(() -> {
717             new SimpleToscaProvider().getDataTypes(null, null, null);
718         }).hasMessageMatching(DAO_IS_NULL);
719
720         assertThatThrownBy(() -> {
721             new SimpleToscaProvider().createDataTypes(null, null);
722         }).hasMessageMatching(DAO_IS_NULL);
723
724         assertThatThrownBy(() -> {
725             new SimpleToscaProvider().createDataTypes(null, new JpaToscaServiceTemplate());
726         }).hasMessageMatching(DAO_IS_NULL);
727
728         assertThatThrownBy(() -> {
729             new SimpleToscaProvider().createDataTypes(pfDao, null);
730         }).hasMessageMatching(INCOMING_TEMPLATE_IS_NULL);
731
732         assertThatThrownBy(() -> {
733             new SimpleToscaProvider().updateDataTypes(null, null);
734         }).hasMessageMatching(DAO_IS_NULL);
735
736         assertThatThrownBy(() -> {
737             new SimpleToscaProvider().updateDataTypes(null, new JpaToscaServiceTemplate());
738         }).hasMessageMatching(DAO_IS_NULL);
739
740         assertThatThrownBy(() -> {
741             new SimpleToscaProvider().updateDataTypes(pfDao, null);
742         }).hasMessageMatching(TEMPLATE_IS_NULL);
743
744         assertThatThrownBy(() -> {
745             new SimpleToscaProvider().deleteDataType(null, null);
746         }).hasMessageMatching(DAO_IS_NULL);
747
748         assertThatThrownBy(() -> {
749             new SimpleToscaProvider().deleteDataType(null, new PfConceptKey());
750         }).hasMessageMatching(DAO_IS_NULL);
751
752         assertThatThrownBy(() -> {
753             new SimpleToscaProvider().deleteDataType(pfDao, null);
754         }).hasMessageMatching("^dataTypeKey is marked .*on.*ull but is null$");
755
756         assertThatThrownBy(() -> {
757             new SimpleToscaProvider().getPolicyTypes(null, null, null);
758         }).hasMessageMatching(DAO_IS_NULL);
759
760         assertThatThrownBy(() -> {
761             new SimpleToscaProvider().createPolicyTypes(null, null);
762         }).hasMessageMatching(DAO_IS_NULL);
763
764         assertThatThrownBy(() -> {
765             new SimpleToscaProvider().createPolicyTypes(null, new JpaToscaServiceTemplate());
766         }).hasMessageMatching(DAO_IS_NULL);
767
768         assertThatThrownBy(() -> {
769             new SimpleToscaProvider().createPolicyTypes(pfDao, null);
770         }).hasMessageMatching(INCOMING_TEMPLATE_IS_NULL);
771
772         assertThatThrownBy(() -> {
773             new SimpleToscaProvider().updatePolicyTypes(null, null);
774         }).hasMessageMatching(DAO_IS_NULL);
775
776         assertThatThrownBy(() -> {
777             new SimpleToscaProvider().updatePolicyTypes(null, new JpaToscaServiceTemplate());
778         }).hasMessageMatching(DAO_IS_NULL);
779
780         assertThatThrownBy(() -> {
781             new SimpleToscaProvider().updatePolicyTypes(pfDao, null);
782         }).hasMessageMatching(TEMPLATE_IS_NULL);
783
784         assertThatThrownBy(() -> {
785             new SimpleToscaProvider().deletePolicyType(null, null);
786         }).hasMessageMatching(DAO_IS_NULL);
787
788         assertThatThrownBy(() -> {
789             new SimpleToscaProvider().deletePolicyType(null, new PfConceptKey());
790         }).hasMessageMatching(DAO_IS_NULL);
791
792         assertThatThrownBy(() -> {
793             new SimpleToscaProvider().deletePolicyType(pfDao, null);
794         }).hasMessageMatching("^policyTypeKey is marked .*on.*ull but is null$");
795
796         assertThatThrownBy(() -> {
797             new SimpleToscaProvider().getPolicies(null, null, null);
798         }).hasMessageMatching(DAO_IS_NULL);
799
800         assertThatThrownBy(() -> {
801             new SimpleToscaProvider().createPolicies(null, null);
802         }).hasMessageMatching(DAO_IS_NULL);
803
804         assertThatThrownBy(() -> {
805             new SimpleToscaProvider().createPolicies(null, new JpaToscaServiceTemplate());
806         }).hasMessageMatching(DAO_IS_NULL);
807
808         assertThatThrownBy(() -> {
809             new SimpleToscaProvider().createPolicies(pfDao, null);
810         }).hasMessageMatching(INCOMING_TEMPLATE_IS_NULL);
811
812         assertThatThrownBy(() -> {
813             new SimpleToscaProvider().updatePolicies(null, null);
814         }).hasMessageMatching(DAO_IS_NULL);
815
816         assertThatThrownBy(() -> {
817             new SimpleToscaProvider().updatePolicies(null, new JpaToscaServiceTemplate());
818         }).hasMessageMatching(DAO_IS_NULL);
819
820         assertThatThrownBy(() -> {
821             new SimpleToscaProvider().updatePolicies(pfDao, null);
822         }).hasMessageMatching(TEMPLATE_IS_NULL);
823
824         assertThatThrownBy(() -> {
825             new SimpleToscaProvider().deletePolicy(null, null);
826         }).hasMessageMatching(DAO_IS_NULL);
827
828         assertThatThrownBy(() -> {
829             new SimpleToscaProvider().deletePolicy(null, new PfConceptKey());
830         }).hasMessageMatching(DAO_IS_NULL);
831
832         assertThatThrownBy(() -> {
833             new SimpleToscaProvider().deletePolicy(pfDao, null);
834         }).hasMessageMatching("^policyKey is marked .*on.*ull but is null$");
835     }
836
837     private void createPolicyTypes() throws CoderException, PfModelException {
838         Object yamlObject = new Yaml()
839             .load(ResourceUtils.getResourceAsString("policytypes/onap.policies.monitoring.cdap.tca.hi.lo.app.yaml"));
840         String yamlAsJsonString = new StandardCoder().encode(yamlObject);
841
842         ToscaServiceTemplate toscaServiceTemplatePolicyType =
843             standardCoder.decode(yamlAsJsonString, ToscaServiceTemplate.class);
844
845         assertNotNull(toscaServiceTemplatePolicyType);
846         new AuthorativeToscaProvider().createPolicyTypes(pfDao, toscaServiceTemplatePolicyType);
847     }
848 }