Add persistence for PDP concepts
[policy/models.git] / models-provider / src / test / java / org / onap / policy / models / provider / impl / DatabasePolicyModelsProviderTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2019 Nordix Foundation.
4  * ================================================================================
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  * SPDX-License-Identifier: Apache-2.0
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.onap.policy.models.provider.impl;
22
23 import static org.assertj.core.api.Assertions.assertThatThrownBy;
24 import static org.junit.Assert.assertNotNull;
25 import static org.junit.Assert.fail;
26
27 import java.util.ArrayList;
28 import java.util.Base64;
29
30 import org.junit.Before;
31 import org.junit.Test;
32 import org.onap.policy.models.provider.PolicyModelsProvider;
33 import org.onap.policy.models.provider.PolicyModelsProviderFactory;
34 import org.onap.policy.models.provider.PolicyModelsProviderParameters;
35 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
36 import org.onap.policy.models.tosca.legacy.concepts.LegacyGuardPolicyInput;
37 import org.onap.policy.models.tosca.legacy.concepts.LegacyOperationalPolicy;
38 import org.slf4j.Logger;
39 import org.slf4j.LoggerFactory;
40
41 /**
42  * Test the database models provider implementation.
43  *
44  * @author Liam Fallon (liam.fallon@est.tech)
45  */
46 public class DatabasePolicyModelsProviderTest {
47     private static final Logger LOGGER = LoggerFactory.getLogger(DatabasePolicyModelsProviderTest.class);
48
49     PolicyModelsProviderParameters parameters;
50
51     /**
52      * Initialize parameters.
53      */
54     @Before
55     public void setupParameters() {
56         parameters = new PolicyModelsProviderParameters();
57         parameters.setDatabaseUrl("jdbc:h2:mem:testdb");
58         parameters.setDatabaseUser("policy");
59         parameters.setDatabasePassword(Base64.getEncoder().encodeToString("P01icY".getBytes()));
60         parameters.setPersistenceUnit("ToscaConceptTest");
61
62     }
63
64     @Test
65     public void testInitAndClose() throws Exception {
66         PolicyModelsProvider databaseProvider =
67                 new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
68
69         parameters.setDatabaseUrl("jdbc://www.acmecorp.nonexist");
70
71         assertThatThrownBy(() -> {
72             databaseProvider.close();
73             databaseProvider.init();
74         }).hasMessage("could not connect to database with URL \"jdbc://www.acmecorp.nonexist\"");
75
76         parameters.setDatabaseUrl("jdbc:h2:mem:testdb");
77
78         try {
79             databaseProvider.init();
80             databaseProvider.close();
81         } catch (Exception pfme) {
82             fail("test shold not throw an exception here");
83         }
84
85         parameters.setPersistenceUnit("WileECoyote");
86
87         String errorMessage = "could not create Data Access Object (DAO) using url "
88                 + "\"jdbc:h2:mem:testdb\" and persistence unit \"WileECoyote\"";
89         assertThatThrownBy(() -> {
90             databaseProvider.init();
91         }).hasMessage(errorMessage);
92
93         parameters.setPersistenceUnit("ToscaConceptTest");
94
95         try {
96             databaseProvider.init();
97             databaseProvider.close();
98         } catch (Exception pfme) {
99             fail("test shold not throw an exception here");
100         }
101
102         try {
103             databaseProvider.close();
104         } catch (Exception pfme) {
105             fail("test shold not throw an exception here");
106         }
107
108         assertThatThrownBy(() -> {
109             DatabasePolicyModelsProviderImpl databaseProviderImpl = (DatabasePolicyModelsProviderImpl) databaseProvider;
110             databaseProvider.init();
111             databaseProviderImpl.setConnection(new DummyConnection());
112             databaseProvider.close();
113         }).hasMessage("could not close connection to database with URL \"jdbc:h2:mem:testdb\"");
114     }
115
116     @Test
117     public void testProviderMethodsNull() throws Exception {
118         PolicyModelsProvider databaseProvider =
119                 new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
120
121         assertThatThrownBy(() -> {
122             databaseProvider.getPolicyTypes(null, null);
123         }).hasMessage("name is marked @NonNull but is null");
124
125         assertThatThrownBy(() -> {
126             databaseProvider.getPolicyTypes("aaa", null);
127         }).hasMessage("version is marked @NonNull but is null");
128
129         assertThatThrownBy(() -> {
130             databaseProvider.getPolicyTypes(null, "aaa");
131         }).hasMessage("name is marked @NonNull but is null");
132
133         assertThatThrownBy(() -> {
134             databaseProvider.createPolicyTypes(null);
135         }).hasMessage("serviceTemplate is marked @NonNull but is null");
136
137         assertThatThrownBy(() -> {
138             databaseProvider.updatePolicyTypes(null);
139         }).hasMessage("serviceTemplate is marked @NonNull but is null");
140
141         assertThatThrownBy(() -> {
142             databaseProvider.deletePolicyType(null, null);
143         }).hasMessage("name is marked @NonNull but is null");
144
145         assertThatThrownBy(() -> {
146             databaseProvider.deletePolicyType("aaa", null);
147         }).hasMessage("version is marked @NonNull but is null");
148
149         assertThatThrownBy(() -> {
150             databaseProvider.deletePolicyType(null, "aaa");
151         }).hasMessage("name is marked @NonNull but is null");
152
153         assertThatThrownBy(() -> {
154             databaseProvider.getPolicies(null, null);
155         }).hasMessage("name is marked @NonNull but is null");
156
157         assertThatThrownBy(() -> {
158             databaseProvider.getPolicies(null, "aaa");
159         }).hasMessage("name is marked @NonNull but is null");
160
161         assertThatThrownBy(() -> {
162             databaseProvider.getPolicies("aaa", null);
163         }).hasMessage("version is marked @NonNull but is null");
164
165         assertThatThrownBy(() -> {
166             databaseProvider.createPolicies(null);
167         }).hasMessage("serviceTemplate is marked @NonNull but is null");
168
169         assertThatThrownBy(() -> {
170             databaseProvider.updatePolicies(null);
171         }).hasMessage("serviceTemplate is marked @NonNull but is null");
172
173         assertThatThrownBy(() -> {
174             databaseProvider.deletePolicy(null, null);
175         }).hasMessage("name is marked @NonNull but is null");
176
177         assertThatThrownBy(() -> {
178             databaseProvider.deletePolicy(null, "aaa");
179         }).hasMessage("name is marked @NonNull but is null");
180
181         assertThatThrownBy(() -> {
182             databaseProvider.deletePolicy("aaa", null);
183         }).hasMessage("version is marked @NonNull but is null");
184
185         assertThatThrownBy(() -> {
186             databaseProvider.getOperationalPolicy(null);
187         }).hasMessage("policyId is marked @NonNull but is null");
188
189         assertThatThrownBy(() -> {
190             databaseProvider.createOperationalPolicy(null);
191         }).hasMessage("legacyOperationalPolicy is marked @NonNull but is null");
192
193         assertThatThrownBy(() -> {
194             databaseProvider.updateOperationalPolicy(null);
195         }).hasMessage("legacyOperationalPolicy is marked @NonNull but is null");
196
197         assertThatThrownBy(() -> {
198             databaseProvider.deleteOperationalPolicy(null);
199         }).hasMessage("policyId is marked @NonNull but is null");
200
201         assertThatThrownBy(() -> {
202             databaseProvider.getGuardPolicy(null);
203         }).hasMessage("policyId is marked @NonNull but is null");
204
205         assertThatThrownBy(() -> {
206             databaseProvider.createGuardPolicy(null);
207         }).hasMessage("legacyGuardPolicy is marked @NonNull but is null");
208
209         assertThatThrownBy(() -> {
210             databaseProvider.updateGuardPolicy(null);
211         }).hasMessage("legacyGuardPolicy is marked @NonNull but is null");
212
213         assertThatThrownBy(() -> {
214             databaseProvider.deleteGuardPolicy(null);
215         }).hasMessage("policyId is marked @NonNull but is null");
216
217         assertThatThrownBy(() -> {
218             databaseProvider.createPdpGroups(null);
219         }).hasMessage("pdpGroups is marked @NonNull but is null");
220
221         assertThatThrownBy(() -> {
222             databaseProvider.updatePdpGroups(null);
223         }).hasMessage("pdpGroups is marked @NonNull but is null");
224
225         assertThatThrownBy(() -> {
226             databaseProvider.deletePdpGroup(null, null);
227         }).hasMessage("name is marked @NonNull but is null");
228
229         databaseProvider.close();
230
231     }
232
233     @Test
234     public void testProviderMethodsNotInit() throws Exception {
235         PolicyModelsProvider databaseProvider =
236                 new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
237
238         databaseProvider.close();
239
240         assertThatThrownBy(() -> {
241             databaseProvider.getPolicyTypes("name", "version");
242         }).hasMessage("policy models provider is not initilaized");
243     }
244
245     @Test
246     public void testProviderMethods() {
247         try (PolicyModelsProvider databaseProvider =
248                 new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters)) {
249
250             assertThatThrownBy(() -> {
251                 databaseProvider.getPolicyTypes("name", "version");
252             }).hasMessage("policy type not found: name:version");
253
254             assertThatThrownBy(() -> {
255                 databaseProvider.createPolicyTypes(new ToscaServiceTemplate());
256             }).hasMessage("no policy types specified on service template");
257
258             assertThatThrownBy(() -> {
259                 databaseProvider.updatePolicyTypes(new ToscaServiceTemplate());
260             }).hasMessage("no policy types specified on service template");
261
262             assertThatThrownBy(() -> {
263                 databaseProvider.deletePolicyType("name", "version");
264             }).hasMessage("policy type not found: name:version");
265
266             assertThatThrownBy(() -> {
267                 databaseProvider.getPolicies("name", "version");
268             }).hasMessage("policy not found: name:version");
269
270             assertThatThrownBy(() -> {
271                 databaseProvider.createPolicies(new ToscaServiceTemplate());
272             }).hasMessage("topology template not specified on service template");
273
274             assertThatThrownBy(() -> {
275                 databaseProvider.updatePolicies(new ToscaServiceTemplate());
276             }).hasMessage("topology template not specified on service template");
277
278             assertThatThrownBy(() -> {
279                 databaseProvider.deletePolicy("name", "version");
280             }).hasMessage("policy not found: name:version");
281
282             assertThatThrownBy(() -> {
283                 databaseProvider.getOperationalPolicy("policy_id");
284             }).hasMessage("no policy found for policy ID: policy_id");
285
286             assertThatThrownBy(() -> {
287                 databaseProvider.createOperationalPolicy(new LegacyOperationalPolicy());
288             }).hasMessage("name is marked @NonNull but is null");
289
290             assertThatThrownBy(() -> {
291                 databaseProvider.updateOperationalPolicy(new LegacyOperationalPolicy());
292             }).hasMessage("no policy found for policy ID: null");
293
294             assertThatThrownBy(() -> {
295                 databaseProvider.deleteOperationalPolicy("policy_id");
296             }).hasMessage("no policy found for policy ID: policy_id");
297
298             assertThatThrownBy(() -> {
299                 databaseProvider.getGuardPolicy("policy_id");
300             }).hasMessage("no policy found for policy ID: policy_id");
301
302             assertThatThrownBy(() -> {
303                 databaseProvider.createGuardPolicy(new LegacyGuardPolicyInput());
304             }).hasMessage("policy type for guard policy \"null\" unknown");
305
306             assertThatThrownBy(() -> {
307                 databaseProvider.updateGuardPolicy(new LegacyGuardPolicyInput());
308             }).hasMessage("policy type for guard policy \"null\" unknown");
309
310             assertThatThrownBy(() -> {
311                 databaseProvider.deleteGuardPolicy("policy_id");
312             }).hasMessage("no policy found for policy ID: policy_id");
313
314             assertThatThrownBy(() -> {
315                 databaseProvider.getPdpGroups("name", "version");
316             }).hasMessage("PDP group not found: name:version");
317
318             assertNotNull(databaseProvider.createPdpGroups(new ArrayList<>()));
319             assertNotNull(databaseProvider.updatePdpGroups(new ArrayList<>()));
320             assertNotNull(databaseProvider.deletePdpGroup("name", "version"));
321
322         } catch (Exception exc) {
323             LOGGER.warn("test should not throw an exception", exc);
324             fail("test should not throw an exception");
325         }
326     }
327 }