0db2e0d3dd21f9bfca05b673591347d48305aa28
[policy/models.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2019-2024 Nordix Foundation.
4  *  Modifications Copyright (C) 2019, 2021 AT&T Intellectual Property. All rights reserved.
5  *  Modifications Copyright (C) 2020, 2022 Bell Canada. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19  * SPDX-License-Identifier: Apache-2.0
20  * ============LICENSE_END=========================================================
21  */
22
23 package org.onap.policy.models.provider.impl;
24
25 import static org.assertj.core.api.Assertions.assertThatCode;
26 import static org.assertj.core.api.Assertions.assertThatThrownBy;
27 import static org.junit.jupiter.api.Assertions.assertEquals;
28 import static org.junit.jupiter.api.Assertions.assertNotNull;
29 import static org.junit.jupiter.api.Assertions.assertTrue;
30
31 import java.util.ArrayList;
32 import java.util.List;
33 import java.util.Map;
34 import org.junit.jupiter.api.AfterAll;
35 import org.junit.jupiter.api.BeforeAll;
36 import org.junit.jupiter.api.Test;
37 import org.onap.policy.models.base.PfModelException;
38 import org.onap.policy.models.pdp.concepts.Pdp;
39 import org.onap.policy.models.pdp.concepts.PdpGroup;
40 import org.onap.policy.models.pdp.concepts.PdpGroupFilter;
41 import org.onap.policy.models.pdp.concepts.PdpSubGroup;
42 import org.onap.policy.models.pdp.enums.PdpHealthStatus;
43 import org.onap.policy.models.pdp.enums.PdpState;
44 import org.onap.policy.models.provider.PolicyModelsProvider;
45 import org.onap.policy.models.provider.PolicyModelsProviderFactory;
46 import org.onap.policy.models.provider.PolicyModelsProviderParameters;
47 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
48 import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifierOptVersion;
49 import org.onap.policy.models.tosca.authorative.concepts.ToscaEntityFilter;
50 import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeTemplate;
51 import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeType;
52 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
53 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyType;
54 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
55 import org.onap.policy.models.tosca.authorative.concepts.ToscaTopologyTemplate;
56 import org.onap.policy.models.tosca.authorative.concepts.ToscaTypedEntityFilter;
57
58 /**
59  * Test the database models provider implementation.
60  *
61  * @author Liam Fallon (liam.fallon@est.tech)
62  */
63 class DatabasePolicyModelsProviderTest {
64     private static final String NAME = "name";
65
66     private static final String TEMPLATE_IS_NULL = "^serviceTemplate is marked .*on.*ull but is null$";
67
68     private static final String SUBGROUP_IS_NULL = "^pdpSubGroup is marked .*on.*ull but is null$";
69
70     private static final String GROUP_IS_NULL = "^pdpGroupName is marked .*on.*ull but is null$";
71
72     private static final String NAME_IS_NULL = "^name is marked .*on.*ull but is null$";
73
74     private static final String FILTER_IS_NULL = "^filter is marked .*on.*ull but is null$";
75
76     private static final String GROUP = "group";
77
78     private static final String VERSION_100 = "1.0.0";
79
80     private static PolicyModelsProviderParameters parameters;
81
82     private static PolicyModelsProvider databaseProvider;
83
84     /**
85      * Initialize parameters.
86      */
87     @BeforeAll
88     public static void setupParameters() {
89         parameters = new PolicyModelsProviderParameters();
90         parameters.setDatabaseDriver("org.h2.Driver");
91         parameters.setDatabaseUrl("jdbc:h2:mem:DatabasePolicyModelsProviderTest");
92         parameters.setDatabaseUser("policy");
93         parameters.setDatabasePassword("P01icY");
94         parameters.setPersistenceUnit("ToscaConceptTest");
95     }
96
97     /**
98      * Closes the DB.
99      */
100     @AfterAll
101     public static void tearDown() throws PfModelException {
102         if (databaseProvider != null) {
103             databaseProvider.close();
104         }
105     }
106
107     @Test
108     void testInitAndClose() throws Exception {
109         assertThatThrownBy(() -> {
110             new DatabasePolicyModelsProviderImpl(null);
111         }).hasMessageMatching("^parameters is marked .*on.*ull but is null$");
112
113         databaseProvider = new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
114
115         final String savedDatabaseUrl = parameters.getDatabaseUrl();
116         parameters.setDatabaseUrl("jdbc://www.acmecorp.nonexist");
117
118         databaseProvider.close();
119         assertThatThrownBy(() -> {
120             databaseProvider.init();
121         }).hasMessageContaining("could not create Data Access Object (DAO)");
122
123         databaseProvider.close();
124
125         parameters.setDatabaseUrl(savedDatabaseUrl);
126
127         final String savedPersistenceUnit = parameters.getPersistenceUnit();
128         parameters.setPersistenceUnit("WileECoyote");
129
130         assertThatThrownBy(databaseProvider::init).hasMessageContaining("could not create Data Access Object (DAO)");
131         parameters.setPersistenceUnit(savedPersistenceUnit);
132
133         databaseProvider.init();
134         databaseProvider.close();
135
136         assertThatThrownBy(() -> {
137             databaseProvider.init();
138             databaseProvider.init();
139         }).hasMessage("provider is already initialized");
140
141         databaseProvider.close();
142
143         databaseProvider.close();
144     }
145
146     @Test
147     void testProviderMethodsNull() throws Exception {
148
149         databaseProvider = new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
150
151         assertThatThrownBy(() -> {
152             databaseProvider.getFilteredPolicyTypes(null);
153         }).hasMessageMatching(FILTER_IS_NULL);
154
155         assertThatThrownBy(() -> {
156             databaseProvider.getFilteredPolicyTypeList(null);
157         }).hasMessageMatching(FILTER_IS_NULL);
158
159         assertThatThrownBy(() -> {
160             databaseProvider.createPolicyTypes(null);
161         }).hasMessageMatching(TEMPLATE_IS_NULL);
162
163         assertThatThrownBy(() -> {
164             databaseProvider.updatePolicyTypes(null);
165         }).hasMessageMatching(TEMPLATE_IS_NULL);
166
167         assertThatThrownBy(() -> {
168             databaseProvider.deletePolicyType(null, null);
169         }).hasMessageMatching(NAME_IS_NULL);
170
171         assertThatThrownBy(() -> {
172             databaseProvider.deletePolicyType("aaa", null);
173         }).hasMessageMatching("^version is marked .*on.*ull but is null$");
174
175         assertThatThrownBy(() -> {
176             databaseProvider.deletePolicyType(null, "aaa");
177         }).hasMessageMatching(NAME_IS_NULL);
178
179         assertThatThrownBy(() -> {
180             databaseProvider.getFilteredPolicies(null);
181         }).hasMessageMatching(FILTER_IS_NULL);
182
183         assertThatThrownBy(() -> {
184             databaseProvider.getFilteredPolicyList(null);
185         }).hasMessageMatching(FILTER_IS_NULL);
186
187         assertThatThrownBy(() -> {
188             databaseProvider.createPolicies(null);
189         }).hasMessageMatching(TEMPLATE_IS_NULL);
190
191         assertThatThrownBy(() -> {
192             databaseProvider.updatePolicies(null);
193         }).hasMessageMatching(TEMPLATE_IS_NULL);
194
195         assertThatThrownBy(() -> {
196             databaseProvider.deletePolicy(null, null);
197         }).hasMessageMatching(NAME_IS_NULL);
198
199         assertThatThrownBy(() -> {
200             databaseProvider.deletePolicy(null, "aaa");
201         }).hasMessageMatching(NAME_IS_NULL);
202
203         assertThatThrownBy(() -> {
204             databaseProvider.deletePolicy("aaa", null);
205         }).hasMessageMatching("^version is marked .*on.*ull but is null$");
206     }
207
208     @Test
209     void testProviderMethodsNullGroup() throws Exception {
210
211         databaseProvider = new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
212
213         assertThatThrownBy(() -> {
214             databaseProvider.getFilteredPdpGroups(null);
215         }).hasMessageMatching(FILTER_IS_NULL);
216
217         assertThatThrownBy(() -> {
218             databaseProvider.createPdpGroups(null);
219         }).hasMessageMatching("^pdpGroups is marked .*on.*ull but is null$");
220
221         assertThatThrownBy(() -> {
222             databaseProvider.updatePdpGroups(null);
223         }).hasMessageMatching("^pdpGroups is marked .*on.*ull but is null$");
224
225         assertThatThrownBy(() -> {
226             databaseProvider.updatePdpSubGroup(null, null);
227         }).hasMessageMatching(GROUP_IS_NULL);
228
229         assertThatThrownBy(() -> {
230             databaseProvider.updatePdpSubGroup(null, new PdpSubGroup());
231         }).hasMessageMatching(GROUP_IS_NULL);
232
233         assertThatThrownBy(() -> {
234             databaseProvider.updatePdpSubGroup(NAME, null);
235         }).hasMessageMatching(SUBGROUP_IS_NULL);
236
237         assertThatThrownBy(() -> {
238             databaseProvider.updatePdpSubGroup(NAME, new PdpSubGroup());
239         }).hasMessage("parameter \"localName\" is null");
240
241         assertThatThrownBy(() -> {
242             databaseProvider.updatePdp(null, null, null);
243         }).hasMessageMatching(GROUP_IS_NULL);
244
245         assertThatThrownBy(() -> {
246             databaseProvider.updatePdp(null, null, new Pdp());
247         }).hasMessageMatching(GROUP_IS_NULL);
248
249         assertThatThrownBy(() -> {
250             databaseProvider.updatePdp(null, "sub", null);
251         }).hasMessageMatching(GROUP_IS_NULL);
252
253         assertThatThrownBy(() -> {
254             databaseProvider.updatePdp(null, "sub", new Pdp());
255         }).hasMessageMatching(GROUP_IS_NULL);
256
257         assertThatThrownBy(() -> {
258             databaseProvider.updatePdp(NAME, null, null);
259         }).hasMessageMatching(SUBGROUP_IS_NULL);
260
261         assertThatThrownBy(() -> {
262             databaseProvider.updatePdp(NAME, null, new Pdp());
263         }).hasMessageMatching(SUBGROUP_IS_NULL);
264
265         assertThatThrownBy(() -> {
266             databaseProvider.updatePdp(NAME, "sub", null);
267         }).hasMessageMatching("^pdp is marked .*on.*ull but is null$");
268
269         assertThatThrownBy(() -> {
270             databaseProvider.updatePdp(NAME, "sub", new Pdp());
271         }).hasMessage("parameter \"localName\" is null");
272
273         assertThatThrownBy(() -> {
274             databaseProvider.deletePdpGroup(null);
275         }).hasMessageMatching(NAME_IS_NULL);
276
277         databaseProvider.close();
278     }
279
280     @Test
281     void testProviderMethodsNotInit() throws Exception {
282         databaseProvider = new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
283
284         databaseProvider.close();
285
286         assertThatThrownBy(() -> {
287             databaseProvider.getPolicyTypes(NAME, "version");
288         }).hasMessage("policy models provider is not initilaized");
289     }
290
291     @Test
292     void testProviderMethods() throws PfModelException {
293         databaseProvider = new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
294
295         assertThatThrownBy(() -> databaseProvider.getPolicyTypes(NAME, VERSION_100))
296                 .hasMessage("service template not found in database");
297
298         assertTrue(databaseProvider.getPolicyTypeList(NAME, VERSION_100).isEmpty());
299
300         assertThatThrownBy(
301             () -> databaseProvider.getFilteredPolicyTypes(ToscaEntityFilter.<ToscaPolicyType>builder().build()))
302                         .hasMessage("service template not found in database");
303
304         assertTrue(databaseProvider.getFilteredPolicyTypeList(ToscaEntityFilter.<ToscaPolicyType>builder().build())
305                 .isEmpty());
306
307         assertThatThrownBy(() -> {
308             databaseProvider.createPolicyTypes(new ToscaServiceTemplate());
309         }).hasMessage("no policy types specified on service template");
310
311         assertThatThrownBy(() -> {
312             databaseProvider.updatePolicyTypes(new ToscaServiceTemplate());
313         }).hasMessage("no policy types specified on service template");
314
315         assertThatThrownBy(() -> databaseProvider.deletePolicyType(NAME, VERSION_100))
316                 .hasMessage("service template not found in database");
317
318         assertThatThrownBy(() -> databaseProvider.getPolicies(NAME, VERSION_100))
319                 .hasMessage("service template not found in database");
320
321         assertTrue(databaseProvider.getPolicyList(NAME, VERSION_100).isEmpty());
322
323         assertThatThrownBy(
324             () -> databaseProvider.getFilteredPolicies(ToscaTypedEntityFilter.<ToscaPolicy>builder().build()))
325                         .hasMessage("service template not found in database");
326
327         assertTrue(databaseProvider.getFilteredPolicyList(ToscaTypedEntityFilter.<ToscaPolicy>builder().build())
328                 .isEmpty());
329
330         assertThatThrownBy(() -> {
331             databaseProvider.createPolicies(new ToscaServiceTemplate());
332         }).hasMessage("topology template not specified on service template");
333
334         assertThatThrownBy(() -> {
335             databaseProvider.updatePolicies(new ToscaServiceTemplate());
336         }).hasMessage("topology template not specified on service template");
337
338         assertThatThrownBy(() -> databaseProvider.deletePolicy("Policy", "0.0.0").getToscaTopologyTemplate())
339                 .hasMessage("service template not found in database");
340
341         assertEquals(0, databaseProvider.getPdpGroups(NAME).size());
342         assertEquals(0, databaseProvider.getFilteredPdpGroups(PdpGroupFilter.builder().build()).size());
343
344         assertNotNull(databaseProvider.createPdpGroups(new ArrayList<>()));
345         assertNotNull(databaseProvider.updatePdpGroups(new ArrayList<>()));
346     }
347
348     @Test
349     void testProviderMethodsInGroups() throws PfModelException {
350         PdpGroup pdpGroup = new PdpGroup();
351         pdpGroup.setName(GROUP);
352         pdpGroup.setVersion("1.2.3");
353         pdpGroup.setPdpGroupState(PdpState.ACTIVE);
354         pdpGroup.setPdpSubgroups(new ArrayList<>());
355         List<PdpGroup> groupList = new ArrayList<>();
356         groupList.add(pdpGroup);
357
358         PdpSubGroup pdpSubGroup = new PdpSubGroup();
359         pdpSubGroup.setPdpType("type");
360         pdpSubGroup.setDesiredInstanceCount(123);
361         pdpSubGroup.setSupportedPolicyTypes(new ArrayList<>());
362         pdpSubGroup.getSupportedPolicyTypes().add(new ToscaConceptIdentifier("type", "7.8.9"));
363         pdpGroup.getPdpSubgroups().add(pdpSubGroup);
364
365         Pdp pdp = new Pdp();
366         pdp.setInstanceId("type-0");
367         pdp.setMessage("Hello");
368         pdp.setPdpState(PdpState.ACTIVE);
369         pdp.setHealthy(PdpHealthStatus.UNKNOWN);
370         pdpSubGroup.setPdpInstances(new ArrayList<>());
371         pdpSubGroup.getPdpInstances().add(pdp);
372
373         databaseProvider = new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
374
375         assertEquals(123,
376                 databaseProvider.createPdpGroups(groupList).get(0).getPdpSubgroups().get(0).getDesiredInstanceCount());
377         assertEquals(1, databaseProvider.getPdpGroups(GROUP).size());
378
379         pdpSubGroup.setDesiredInstanceCount(234);
380         databaseProvider.updatePdpSubGroup(GROUP, pdpSubGroup);
381         assertEquals(234,
382                 databaseProvider.getPdpGroups(GROUP).get(0).getPdpSubgroups().get(0).getDesiredInstanceCount());
383
384         assertEquals("Hello", databaseProvider.getPdpGroups(GROUP).get(0).getPdpSubgroups().get(0).getPdpInstances()
385                 .get(0).getMessage());
386         pdp.setMessage("Howdy");
387         databaseProvider.updatePdp(GROUP, "type", pdp);
388         assertEquals("Howdy", databaseProvider.getPdpGroups(GROUP).get(0).getPdpSubgroups().get(0).getPdpInstances()
389                 .get(0).getMessage());
390
391         assertThatThrownBy(() -> {
392             databaseProvider.deletePdpGroup(NAME);
393         }).hasMessage("delete of PDP group \"name:0.0.0\" failed, PDP group does not exist");
394
395         assertEquals(pdpGroup.getName(), databaseProvider.deletePdpGroup(GROUP).getName());
396     }
397
398     @Test
399     void testDeletePolicyDeployedInSubgroup() throws PfModelException {
400         List<ToscaConceptIdentifier> policies = new ArrayList<>();
401
402         policies.add(new ToscaConceptIdentifier("p0", "0.0.1"));
403         policies.add(new ToscaConceptIdentifier("p1", "0.0.1"));
404
405         List<ToscaConceptIdentifier> supportedPolicyTypes = new ArrayList<>();
406         supportedPolicyTypes.add(new ToscaConceptIdentifier("pt2", "0.0.1"));
407
408         PdpSubGroup subGroup = new PdpSubGroup();
409         subGroup.setPdpType("pdpType");
410         subGroup.setSupportedPolicyTypes(supportedPolicyTypes);
411         subGroup.setPolicies(policies);
412
413         List<PdpSubGroup> pdpSubgroups = new ArrayList<>();
414         pdpSubgroups.add(subGroup);
415
416         PdpGroup pdpGroup = new PdpGroup();
417         pdpGroup.setName("pdpGroup");
418         pdpGroup.setPdpGroupState(PdpState.PASSIVE);
419         pdpGroup.setPdpSubgroups(pdpSubgroups);
420
421         List<PdpGroup> pdpGroups = new ArrayList<>();
422         pdpGroups.add(pdpGroup);
423
424         databaseProvider = new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
425
426         databaseProvider.createPdpGroups(pdpGroups);
427
428         assertThatThrownBy(() -> databaseProvider.deletePolicy("p0", "0.0.1"))
429                 .hasMessageContaining("policy is in use, it is deployed in PDP group pdpGroup subgroup pdpType");
430
431         assertThatThrownBy(() -> databaseProvider.deletePolicy("p3", "0.0.1"))
432                 .hasMessageContaining("service template not found in database");
433
434         databaseProvider.close();
435     }
436
437     @Test
438     void testDeletePolicyTypeSupportedInSubgroup() throws PfModelException {
439         List<ToscaConceptIdentifier> supportedPolicyTypes = new ArrayList<>();
440         supportedPolicyTypes.add(new ToscaConceptIdentifier("pt1", "0.0.1"));
441         supportedPolicyTypes.add(new ToscaConceptIdentifier("pt2", "0.0.1"));
442
443         PdpSubGroup subGroup = new PdpSubGroup();
444         subGroup.setPdpType("pdpType");
445         subGroup.setSupportedPolicyTypes(supportedPolicyTypes);
446
447         List<PdpSubGroup> pdpSubgroups = new ArrayList<>();
448         pdpSubgroups.add(subGroup);
449
450         PdpGroup pdpGroup = new PdpGroup();
451         pdpGroup.setName("pdpGroup");
452         pdpGroup.setPdpGroupState(PdpState.PASSIVE);
453         pdpGroup.setPdpSubgroups(pdpSubgroups);
454
455         List<PdpGroup> pdpGroups = new ArrayList<>();
456         pdpGroups.add(pdpGroup);
457
458         databaseProvider = new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
459
460         databaseProvider.createPdpGroups(pdpGroups);
461
462         assertThatThrownBy(() -> databaseProvider.deletePolicyType("pt2", "0.0.1"))
463                 .hasMessageContaining("policy type is in use, it is referenced in PDP group pdpGroup subgroup pdpType");
464
465         assertThatThrownBy(() -> databaseProvider.deletePolicyType("pt0", "0.0.1"))
466                 .hasMessageContaining("service template not found in database");
467
468         databaseProvider.close();
469     }
470
471     @Test
472     void testToscaNodeTemplateHandling() throws PfModelException {
473         databaseProvider = new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
474
475         ToscaServiceTemplate serviceTemplate = makeNodeTemplate();
476
477         assertEquals("1.0.1",
478             databaseProvider.createToscaNodeTemplates(serviceTemplate).getToscaTopologyTemplate().getNodeTemplates()
479                 .get("metadataSet1").getVersion());
480         assertEquals(1, databaseProvider.getNodeTemplateMetadataSets(null, null).size());
481
482         ToscaNodeTemplate nodeTemplate1 = serviceTemplate.getToscaTopologyTemplate().getNodeTemplates()
483             .get("metadataSet1");
484         nodeTemplate1.setMetadata(Map.of("dummyKey", "updatedValue"));
485         serviceTemplate.getToscaTopologyTemplate().setNodeTemplates(Map.of("metadataSet1:1.0.1", nodeTemplate1));
486         assertEquals("updatedValue", databaseProvider.updateToscaNodeTemplates(serviceTemplate)
487             .getToscaTopologyTemplate().getNodeTemplates().get("metadataSet1").getMetadata().get("dummyKey"));
488
489         assertThatThrownBy(() -> {
490             databaseProvider.deleteToscaNodeTemplate("invalidName", "1.0.1");
491         }).hasMessage("node template invalidName:1.0.1 not found");
492
493         assertThatCode(() -> databaseProvider.getServiceTemplateList(NAME, VERSION_100))
494             .doesNotThrowAnyException();
495
496         assertThatCode(() -> databaseProvider.getFilteredServiceTemplateList(ToscaEntityFilter
497             .<ToscaServiceTemplate>builder().build()))
498             .doesNotThrowAnyException();
499
500
501     }
502
503     @Test
504     void testToscaTemplateMethods() throws PfModelException {
505         databaseProvider = new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
506
507         assertThatThrownBy(() -> databaseProvider.createServiceTemplate(new ToscaServiceTemplate()))
508             .hasMessageContaining("\"service template\" INVALID");
509
510         assertThatThrownBy(() -> databaseProvider.updateServiceTemplate(new ToscaServiceTemplate()))
511             .hasMessageContaining("\"service template\" INVALID");
512
513         assertThatThrownBy(() -> databaseProvider.deleteServiceTemplate(NAME, VERSION_100))
514             .hasMessageContaining("service template not found in database");
515
516         assertThatThrownBy(() -> databaseProvider.getToscaNodeTemplate(NAME, VERSION_100))
517             .hasMessageContaining("service template not found in database");
518
519         assertNotNull(databaseProvider.getAllPolicyStatus());
520
521         assertNotNull(databaseProvider.getAllPolicyStatus(new ToscaConceptIdentifierOptVersion()));
522
523         assertNotNull(databaseProvider.getGroupPolicyStatus("testGroup"));
524
525         ToscaServiceTemplate serviceTemplate = makeNodeTemplate();
526         databaseProvider.createToscaNodeTemplates(serviceTemplate);
527
528         assertThatCode(() -> databaseProvider.createServiceTemplate(new ToscaServiceTemplate()))
529             .doesNotThrowAnyException();
530         assertThatCode(() -> databaseProvider.getToscaNodeTemplate(serviceTemplate.getName(),
531             serviceTemplate.getVersion())).doesNotThrowAnyException();
532
533         assertThatCode(() -> databaseProvider.updateServiceTemplate(new ToscaServiceTemplate()))
534             .doesNotThrowAnyException();
535         assertThatCode(() -> databaseProvider.deleteServiceTemplate(serviceTemplate.getName(),
536             serviceTemplate.getVersion())).doesNotThrowAnyException();
537
538
539
540         databaseProvider.close();
541     }
542
543     private ToscaServiceTemplate makeNodeTemplate() {
544         ToscaServiceTemplate serviceTemplate = new ToscaServiceTemplate();
545         serviceTemplate.setToscaDefinitionsVersion("sample:1.1.0");
546         serviceTemplate.setToscaTopologyTemplate(new ToscaTopologyTemplate());
547         serviceTemplate.setNodeTypes(Map.of("org.onap.policy.metadataSet:1.0.0", new ToscaNodeType()));
548         ToscaNodeTemplate nodeTemplate1 = new ToscaNodeTemplate();
549         nodeTemplate1.setName("metadataSet1");
550         nodeTemplate1.setVersion("1.0.1");
551         nodeTemplate1.setType("org.onap.policy.metadataSet");
552         nodeTemplate1.setTypeVersion("1.0.0");
553         nodeTemplate1.setMetadata(Map.of("dummyKey", "dummyValue"));
554
555         serviceTemplate.getToscaTopologyTemplate().setNodeTemplates(Map.of("metadataSet1", nodeTemplate1));
556
557         return serviceTemplate;
558     }
559 }