Remove base64 encoding of password from models
[policy/models.git] / models-provider / src / test / java / org / onap / policy / models / provider / impl / DatabasePolicyModelsProviderTest.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  *  Modifications Copyright (C) 2020 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.assertThatThrownBy;
26 import static org.junit.Assert.assertEquals;
27 import static org.junit.Assert.assertNotNull;
28 import static org.junit.Assert.assertTrue;
29
30 import java.util.ArrayList;
31 import java.util.Date;
32 import java.util.List;
33 import org.junit.Before;
34 import org.junit.Test;
35 import org.onap.policy.models.base.PfModelException;
36 import org.onap.policy.models.pdp.concepts.Pdp;
37 import org.onap.policy.models.pdp.concepts.PdpGroup;
38 import org.onap.policy.models.pdp.concepts.PdpGroupFilter;
39 import org.onap.policy.models.pdp.concepts.PdpStatistics;
40 import org.onap.policy.models.pdp.concepts.PdpSubGroup;
41 import org.onap.policy.models.pdp.enums.PdpHealthStatus;
42 import org.onap.policy.models.pdp.enums.PdpState;
43 import org.onap.policy.models.provider.PolicyModelsProvider;
44 import org.onap.policy.models.provider.PolicyModelsProviderFactory;
45 import org.onap.policy.models.provider.PolicyModelsProviderParameters;
46 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyFilter;
47 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyIdentifier;
48 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeFilter;
49 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifier;
50 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
51
52 /**
53  * Test the database models provider implementation.
54  *
55  * @author Liam Fallon (liam.fallon@est.tech)
56  */
57 public class DatabasePolicyModelsProviderTest {
58     private static final String NAME = "name";
59
60     private static final String TEMPLATE_IS_NULL = "^serviceTemplate is marked .*on.*ull but is null$";
61
62     private static final String SUBGROUP_IS_NULL = "^pdpSubGroup is marked .*on.*ull but is null$";
63
64     private static final String GROUP_IS_NULL = "^pdpGroupName is marked .*on.*ull but is null$";
65
66     private static final String NAME_IS_NULL = "^name is marked .*on.*ull but is null$";
67
68     private static final String FILTER_IS_NULL = "^filter is marked .*on.*ull but is null$";
69
70     private static final String GROUP = "group";
71
72     private static final String VERSION_100 = "1.0.0";
73
74     private static final Date TIMESTAMP = new Date();
75
76     private static final String ORDER = "DESC";
77
78     PolicyModelsProviderParameters parameters;
79
80     /**
81      * Initialize parameters.
82      */
83     @Before
84     public void setupParameters() {
85         parameters = new PolicyModelsProviderParameters();
86         parameters.setDatabaseDriver("org.h2.Driver");
87         parameters.setDatabaseUrl("jdbc:h2:mem:testdb");
88         parameters.setDatabaseUser("policy");
89         parameters.setDatabasePassword("P01icY");
90         parameters.setPersistenceUnit("ToscaConceptTest");
91     }
92
93     @Test
94     public void testInitAndClose() throws Exception {
95         assertThatThrownBy(() -> {
96             new DatabasePolicyModelsProviderImpl(null);
97         }).hasMessageMatching("^parameters is marked .*on.*ull but is null$");
98
99         PolicyModelsProvider databaseProvider =
100             new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
101
102         parameters.setDatabaseUrl("jdbc://www.acmecorp.nonexist");
103
104         databaseProvider.close();
105         databaseProvider.init();
106
107         databaseProvider.close();
108
109         parameters.setDatabaseUrl("jdbc:h2:mem:testdb");
110
111         parameters.setPersistenceUnit("WileECoyote");
112
113         assertThatThrownBy(databaseProvider::init).hasMessageContaining("could not create Data Access Object (DAO)");
114
115         parameters.setPersistenceUnit("ToscaConceptTest");
116
117         databaseProvider.init();
118         databaseProvider.close();
119
120         assertThatThrownBy(() -> {
121             databaseProvider.init();
122             databaseProvider.init();
123         }).hasMessage("provider is already initialized");
124
125         databaseProvider.close();
126
127         databaseProvider.close();
128     }
129
130     @Test
131     public void testProviderMethodsNull() throws Exception {
132
133         PolicyModelsProvider databaseProvider =
134             new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
135
136         assertThatThrownBy(() -> {
137             databaseProvider.getFilteredPolicyTypes(null);
138         }).hasMessageMatching(FILTER_IS_NULL);
139
140         assertThatThrownBy(() -> {
141             databaseProvider.getFilteredPolicyTypeList(null);
142         }).hasMessageMatching(FILTER_IS_NULL);
143
144         assertThatThrownBy(() -> {
145             databaseProvider.createPolicyTypes(null);
146         }).hasMessageMatching(TEMPLATE_IS_NULL);
147
148         assertThatThrownBy(() -> {
149             databaseProvider.updatePolicyTypes(null);
150         }).hasMessageMatching(TEMPLATE_IS_NULL);
151
152         assertThatThrownBy(() -> {
153             databaseProvider.deletePolicyType(null, null);
154         }).hasMessageMatching(NAME_IS_NULL);
155
156         assertThatThrownBy(() -> {
157             databaseProvider.deletePolicyType("aaa", null);
158         }).hasMessageMatching("^version is marked .*on.*ull but is null$");
159
160         assertThatThrownBy(() -> {
161             databaseProvider.deletePolicyType(null, "aaa");
162         }).hasMessageMatching(NAME_IS_NULL);
163
164         assertThatThrownBy(() -> {
165             databaseProvider.getFilteredPolicies(null);
166         }).hasMessageMatching(FILTER_IS_NULL);
167
168         assertThatThrownBy(() -> {
169             databaseProvider.getFilteredPolicyList(null);
170         }).hasMessageMatching(FILTER_IS_NULL);
171
172         assertThatThrownBy(() -> {
173             databaseProvider.createPolicies(null);
174         }).hasMessageMatching(TEMPLATE_IS_NULL);
175
176         assertThatThrownBy(() -> {
177             databaseProvider.updatePolicies(null);
178         }).hasMessageMatching(TEMPLATE_IS_NULL);
179
180         assertThatThrownBy(() -> {
181             databaseProvider.deletePolicy(null, null);
182         }).hasMessageMatching(NAME_IS_NULL);
183
184         assertThatThrownBy(() -> {
185             databaseProvider.deletePolicy(null, "aaa");
186         }).hasMessageMatching(NAME_IS_NULL);
187
188         assertThatThrownBy(() -> {
189             databaseProvider.deletePolicy("aaa", null);
190         }).hasMessageMatching("^version is marked .*on.*ull but is null$");
191
192         assertThatThrownBy(() -> {
193             databaseProvider.getFilteredPdpGroups(null);
194         }).hasMessageMatching(FILTER_IS_NULL);
195
196         assertThatThrownBy(() -> {
197             databaseProvider.createPdpGroups(null);
198         }).hasMessageMatching("^pdpGroups is marked .*on.*ull but is null$");
199
200         assertThatThrownBy(() -> {
201             databaseProvider.updatePdpGroups(null);
202         }).hasMessageMatching("^pdpGroups is marked .*on.*ull but is null$");
203
204         assertThatThrownBy(() -> {
205             databaseProvider.updatePdpSubGroup(null, null);
206         }).hasMessageMatching(GROUP_IS_NULL);
207
208         assertThatThrownBy(() -> {
209             databaseProvider.updatePdpSubGroup(null, new PdpSubGroup());
210         }).hasMessageMatching(GROUP_IS_NULL);
211
212         assertThatThrownBy(() -> {
213             databaseProvider.updatePdpSubGroup(NAME, null);
214         }).hasMessageMatching(SUBGROUP_IS_NULL);
215
216         assertThatThrownBy(() -> {
217             databaseProvider.updatePdpSubGroup(NAME, new PdpSubGroup());
218         }).hasMessage("parameter \"localName\" is null");
219
220         assertThatThrownBy(() -> {
221             databaseProvider.updatePdp(null, null, null);
222         }).hasMessageMatching(GROUP_IS_NULL);
223
224         assertThatThrownBy(() -> {
225             databaseProvider.updatePdp(null, null, new Pdp());
226         }).hasMessageMatching(GROUP_IS_NULL);
227
228         assertThatThrownBy(() -> {
229             databaseProvider.updatePdp(null, "sub", null);
230         }).hasMessageMatching(GROUP_IS_NULL);
231
232         assertThatThrownBy(() -> {
233             databaseProvider.updatePdp(null, "sub", new Pdp());
234         }).hasMessageMatching(GROUP_IS_NULL);
235
236         assertThatThrownBy(() -> {
237             databaseProvider.updatePdp(NAME, null, null);
238         }).hasMessageMatching(SUBGROUP_IS_NULL);
239
240         assertThatThrownBy(() -> {
241             databaseProvider.updatePdp(NAME, null, new Pdp());
242         }).hasMessageMatching(SUBGROUP_IS_NULL);
243
244         assertThatThrownBy(() -> {
245             databaseProvider.updatePdp(NAME, "sub", null);
246         }).hasMessageMatching("^pdp is marked .*on.*ull but is null$");
247
248         assertThatThrownBy(() -> {
249             databaseProvider.updatePdp(NAME, "sub", new Pdp());
250         }).hasMessage("parameter \"localName\" is null");
251
252         assertThatThrownBy(() -> {
253             databaseProvider.deletePdpGroup(null);
254         }).hasMessageMatching(NAME_IS_NULL);
255
256         assertThatThrownBy(() -> {
257             databaseProvider.getFilteredPdpStatistics(NAME, null, "sub", TIMESTAMP, TIMESTAMP, ORDER, 0);
258         }).hasMessageMatching(GROUP_IS_NULL);
259
260         assertThatThrownBy(() -> {
261             databaseProvider.createPdpStatistics(null);
262         }).hasMessageMatching("^pdpStatisticsList is marked .*on.*ull but is null$");
263
264         assertThatThrownBy(() -> {
265             databaseProvider.updatePdpStatistics(null);
266         }).hasMessageMatching("^pdpStatisticsList is marked .*on.*ull but is null$");
267
268         assertThatThrownBy(() -> {
269             databaseProvider.deletePdpStatistics(null, TIMESTAMP);
270         }).hasMessageMatching(NAME_IS_NULL);
271
272         databaseProvider.close();
273     }
274
275     @Test
276     public void testProviderMethodsNotInit() throws Exception {
277         PolicyModelsProvider databaseProvider =
278             new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
279
280         databaseProvider.close();
281
282         assertThatThrownBy(() -> {
283             databaseProvider.getPolicyTypes(NAME, "version");
284         }).hasMessage("policy models provider is not initilaized");
285     }
286
287     @Test
288     public void testProviderMethods() throws PfModelException {
289         PolicyModelsProvider databaseProvider =
290             new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
291
292         assertThatThrownBy(() -> databaseProvider.getPolicyTypes(NAME, VERSION_100))
293             .hasMessage("service template not found in database");
294
295         assertTrue(databaseProvider.getPolicyTypeList(NAME, VERSION_100).isEmpty());
296
297         assertThatThrownBy(() -> databaseProvider.getFilteredPolicyTypes(ToscaPolicyTypeFilter.builder().build()))
298             .hasMessage("service template not found in database");
299
300         assertTrue(databaseProvider.getFilteredPolicyTypeList(ToscaPolicyTypeFilter.builder().build()).isEmpty());
301
302         assertThatThrownBy(() -> {
303             databaseProvider.createPolicyTypes(new ToscaServiceTemplate());
304         }).hasMessage("no policy types specified on service template");
305
306         assertThatThrownBy(() -> {
307             databaseProvider.updatePolicyTypes(new ToscaServiceTemplate());
308         }).hasMessage("no policy types specified on service template");
309
310         assertThatThrownBy(() -> databaseProvider.deletePolicyType(NAME, VERSION_100))
311             .hasMessage("service template not found in database");
312
313         assertThatThrownBy(() -> databaseProvider.getPolicies(NAME, VERSION_100))
314             .hasMessage("service template not found in database");
315
316         assertTrue(databaseProvider.getPolicyList(NAME, VERSION_100).isEmpty());
317
318         assertThatThrownBy(() -> databaseProvider.getFilteredPolicies(ToscaPolicyFilter.builder().build()))
319             .hasMessage("service template not found in database");
320
321         assertTrue(databaseProvider.getFilteredPolicyList(ToscaPolicyFilter.builder().build()).isEmpty());
322
323         assertThatThrownBy(() -> {
324             databaseProvider.createPolicies(new ToscaServiceTemplate());
325         }).hasMessage("topology template not specified on service template");
326
327         assertThatThrownBy(() -> {
328             databaseProvider.updatePolicies(new ToscaServiceTemplate());
329         }).hasMessage("topology template not specified on service template");
330
331         assertThatThrownBy(() -> databaseProvider.deletePolicy("Policy", "0.0.0").getToscaTopologyTemplate())
332             .hasMessage("service template not found in database");
333
334         assertEquals(0, databaseProvider.getPdpGroups(NAME).size());
335         assertEquals(0, databaseProvider.getFilteredPdpGroups(PdpGroupFilter.builder().build()).size());
336
337         assertNotNull(databaseProvider.createPdpGroups(new ArrayList<>()));
338         assertNotNull(databaseProvider.updatePdpGroups(new ArrayList<>()));
339
340         PdpGroup pdpGroup = new PdpGroup();
341         pdpGroup.setName(GROUP);
342         pdpGroup.setVersion("1.2.3");
343         pdpGroup.setPdpGroupState(PdpState.ACTIVE);
344         pdpGroup.setPdpSubgroups(new ArrayList<>());
345         List<PdpGroup> groupList = new ArrayList<>();
346         groupList.add(pdpGroup);
347
348         PdpSubGroup pdpSubGroup = new PdpSubGroup();
349         pdpSubGroup.setPdpType("type");
350         pdpSubGroup.setDesiredInstanceCount(123);
351         pdpSubGroup.setSupportedPolicyTypes(new ArrayList<>());
352         pdpSubGroup.getSupportedPolicyTypes().add(new ToscaPolicyTypeIdentifier("type", "7.8.9"));
353         pdpGroup.getPdpSubgroups().add(pdpSubGroup);
354
355         Pdp pdp = new Pdp();
356         pdp.setInstanceId("type-0");
357         pdp.setMessage("Hello");
358         pdp.setPdpState(PdpState.ACTIVE);
359         pdp.setHealthy(PdpHealthStatus.UNKNOWN);
360         pdpSubGroup.setPdpInstances(new ArrayList<>());
361         pdpSubGroup.getPdpInstances().add(pdp);
362
363         PdpStatistics pdpStatistics = new PdpStatistics();
364         pdpStatistics.setPdpInstanceId(NAME);
365         pdpStatistics.setTimeStamp(new Date());
366         pdpStatistics.setPdpGroupName(GROUP);
367         pdpStatistics.setPdpSubGroupName("type");
368         ArrayList<PdpStatistics> statisticsArrayList = new ArrayList<>();
369         statisticsArrayList.add(pdpStatistics);
370
371         assertEquals(123,
372             databaseProvider.createPdpGroups(groupList).get(0).getPdpSubgroups().get(0).getDesiredInstanceCount());
373         assertEquals(1, databaseProvider.getPdpGroups(GROUP).size());
374
375         pdpSubGroup.setDesiredInstanceCount(234);
376         databaseProvider.updatePdpSubGroup(GROUP, pdpSubGroup);
377         assertEquals(234,
378             databaseProvider.getPdpGroups(GROUP).get(0).getPdpSubgroups().get(0).getDesiredInstanceCount());
379
380         assertEquals("Hello",
381             databaseProvider.getPdpGroups(GROUP).get(0).getPdpSubgroups().get(0).getPdpInstances().get(0).getMessage());
382         pdp.setMessage("Howdy");
383         databaseProvider.updatePdp(GROUP, "type", pdp);
384         assertEquals("Howdy",
385             databaseProvider.getPdpGroups(GROUP).get(0).getPdpSubgroups().get(0).getPdpInstances().get(0).getMessage());
386
387         assertThatThrownBy(() -> {
388             databaseProvider.deletePdpGroup(NAME);
389         }).hasMessage("delete of PDP group \"name:0.0.0\" failed, PDP group does not exist");
390
391         assertEquals(pdpGroup.getName(), databaseProvider.deletePdpGroup(GROUP).getName());
392
393         assertEquals(0, databaseProvider.getPdpStatistics(null, null).size());
394         assertEquals(1, databaseProvider.createPdpStatistics(statisticsArrayList).size());
395         assertEquals(1, databaseProvider.updatePdpStatistics(statisticsArrayList).size());
396
397         assertEquals(NAME, databaseProvider.getPdpStatistics(null, null).get(0).getPdpInstanceId());
398         assertEquals(NAME, databaseProvider.getFilteredPdpStatistics(null, GROUP, null, null, null, ORDER, 0).get(0)
399             .getPdpInstanceId());
400         assertEquals(0,
401             databaseProvider.getFilteredPdpStatistics(null, GROUP, null, new Date(), null, ORDER, 0).size());
402         assertEquals(NAME, databaseProvider.getFilteredPdpStatistics(null, GROUP, null, null, new Date(), ORDER, 0)
403             .get(0).getPdpInstanceId());
404         assertEquals(0,
405             databaseProvider.getFilteredPdpStatistics(null, GROUP, null, new Date(), new Date(), ORDER, 0).size());
406
407         assertEquals(NAME, databaseProvider.getFilteredPdpStatistics(NAME, GROUP, null, null, null, ORDER, 0).get(0)
408             .getPdpInstanceId());
409         assertEquals(0,
410             databaseProvider.getFilteredPdpStatistics(NAME, GROUP, null, new Date(), new Date(), ORDER, 0).size());
411
412         assertEquals(NAME, databaseProvider.getFilteredPdpStatistics(NAME, GROUP, "type", null, null, ORDER, 0).get(0)
413             .getPdpInstanceId());
414         assertEquals(0,
415             databaseProvider.getFilteredPdpStatistics(NAME, GROUP, "type", new Date(), new Date(), ORDER, 0).size());
416
417         assertEquals(NAME, databaseProvider.getFilteredPdpStatistics(NAME, GROUP, "type", null, null, ORDER, 1).get(0)
418             .getPdpInstanceId());
419         assertEquals(NAME, databaseProvider.getFilteredPdpStatistics(NAME, GROUP, "type", null, null, ORDER, 5).get(0)
420             .getPdpInstanceId());
421         assertEquals(0,
422             databaseProvider.getFilteredPdpStatistics(NAME, GROUP, "type", new Date(), new Date(), ORDER, 5).size());
423
424         assertEquals(NAME, databaseProvider.deletePdpStatistics(NAME, null).get(0).getPdpInstanceId());
425         assertEquals(0, databaseProvider.getPdpStatistics(null, null).size());
426
427         databaseProvider.close();
428     }
429
430     @Test
431     public void testDeletePolicyDeployedInSubgroup() throws PfModelException {
432         List<ToscaPolicyIdentifier> policies = new ArrayList<>();
433
434         policies.add(new ToscaPolicyIdentifier("p0", "0.0.1"));
435         policies.add(new ToscaPolicyIdentifier("p1", "0.0.1"));
436
437         List<ToscaPolicyTypeIdentifier> supportedPolicyTypes = new ArrayList<>();
438         supportedPolicyTypes.add(new ToscaPolicyTypeIdentifier("pt2", "0.0.1"));
439
440         PdpSubGroup subGroup = new PdpSubGroup();
441         subGroup.setPdpType("pdpType");
442         subGroup.setSupportedPolicyTypes(supportedPolicyTypes);
443         subGroup.setPolicies(policies);
444
445         List<PdpSubGroup> pdpSubgroups = new ArrayList<>();
446         pdpSubgroups.add(subGroup);
447
448         PdpGroup pdpGroup = new PdpGroup();
449         pdpGroup.setName("pdpGroup");
450         pdpGroup.setPdpGroupState(PdpState.PASSIVE);
451         pdpGroup.setPdpSubgroups(pdpSubgroups);
452
453         List<PdpGroup> pdpGroups = new ArrayList<>();
454         pdpGroups.add(pdpGroup);
455
456         PolicyModelsProvider databaseProvider =
457             new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
458
459         databaseProvider.createPdpGroups(pdpGroups);
460
461         assertThatThrownBy(() -> databaseProvider.deletePolicy("p0", "0.0.1"))
462             .hasMessageContaining("policy is in use, it is deployed in PDP group pdpGroup subgroup pdpType");
463
464         assertThatThrownBy(() -> databaseProvider.deletePolicy("p3", "0.0.1"))
465             .hasMessageContaining("service template not found in database");
466
467         databaseProvider.close();
468     }
469
470     @Test
471     public void testDeletePolicyTypeSupportedInSubgroup() throws PfModelException {
472         List<ToscaPolicyTypeIdentifier> supportedPolicyTypes = new ArrayList<>();
473         supportedPolicyTypes.add(new ToscaPolicyTypeIdentifier("pt1", "0.0.1"));
474         supportedPolicyTypes.add(new ToscaPolicyTypeIdentifier("pt2", "0.0.1"));
475
476         PdpSubGroup subGroup = new PdpSubGroup();
477         subGroup.setPdpType("pdpType");
478         subGroup.setSupportedPolicyTypes(supportedPolicyTypes);
479
480         List<PdpSubGroup> pdpSubgroups = new ArrayList<>();
481         pdpSubgroups.add(subGroup);
482
483         PdpGroup pdpGroup = new PdpGroup();
484         pdpGroup.setName("pdpGroup");
485         pdpGroup.setPdpGroupState(PdpState.PASSIVE);
486         pdpGroup.setPdpSubgroups(pdpSubgroups);
487
488         List<PdpGroup> pdpGroups = new ArrayList<>();
489         pdpGroups.add(pdpGroup);
490
491         PolicyModelsProvider databaseProvider =
492             new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
493
494         databaseProvider.createPdpGroups(pdpGroups);
495
496         assertThatThrownBy(() -> databaseProvider.deletePolicyType("pt2", "0.0.1"))
497             .hasMessageContaining("policy type is in use, it is referenced in PDP group pdpGroup subgroup pdpType");
498
499         assertThatThrownBy(() -> databaseProvider.deletePolicyType("pt0", "0.0.1"))
500             .hasMessageContaining("service template not found in database");
501
502         databaseProvider.close();
503     }
504 }