Merge "Refactor to authorative TOSCA serializtion"
[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.Base64;
28
29 import org.junit.Before;
30 import org.junit.Test;
31 import org.onap.policy.models.pdp.concepts.PdpGroups;
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.init();
73         }).hasMessage("could not connect to database with URL \"jdbc://www.acmecorp.nonexist\"");
74
75         parameters.setDatabaseUrl("jdbc:h2:mem:testdb");
76
77         try {
78             databaseProvider.init();
79             databaseProvider.close();
80         } catch (Exception pfme) {
81             fail("test shold not throw an exception here");
82         }
83
84         parameters.setPersistenceUnit("WileECoyote");
85
86         String errorMessage = "could not create Data Access Object (DAO) using url "
87                 + "\"jdbc:h2:mem:testdb\" and persistence unit \"WileECoyote\"";
88         assertThatThrownBy(() -> {
89             databaseProvider.init();
90         }).hasMessage(errorMessage);
91
92         parameters.setPersistenceUnit("ToscaConceptTest");
93
94         try {
95             databaseProvider.init();
96             databaseProvider.close();
97         } catch (Exception pfme) {
98             fail("test shold not throw an exception here");
99         }
100
101         try {
102             databaseProvider.close();
103         } catch (Exception pfme) {
104             fail("test shold not throw an exception here");
105         }
106
107         assertThatThrownBy(() -> {
108             DatabasePolicyModelsProviderImpl databaseProviderImpl = (DatabasePolicyModelsProviderImpl) databaseProvider;
109             databaseProvider.init();
110             databaseProviderImpl.setConnection(new DummyConnection());
111             databaseProvider.close();
112         }).hasMessage("could not close connection to database with URL \"jdbc:h2:mem:testdb\"");
113     }
114
115     @Test
116     public void testProviderMethodsNull() throws Exception {
117         PolicyModelsProvider databaseProvider =
118                 new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
119         databaseProvider.init();
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.deletePolicyTypes(null, null);
143         }).hasMessage("name is marked @NonNull but is null");
144
145         assertThatThrownBy(() -> {
146             databaseProvider.deletePolicyTypes("aaa", null);
147         }).hasMessage("version is marked @NonNull but is null");
148
149         assertThatThrownBy(() -> {
150             databaseProvider.deletePolicyTypes(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.deletePolicies(null, null);
175         }).hasMessage("name is marked @NonNull but is null");
176
177         assertThatThrownBy(() -> {
178             databaseProvider.deletePolicies(null, "aaa");
179         }).hasMessage("name is marked @NonNull but is null");
180
181         assertThatThrownBy(() -> {
182             databaseProvider.deletePolicies("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.getPdpGroups(null);
219         }).hasMessage("pdpGroupFilter is marked @NonNull but is null");
220
221         assertThatThrownBy(() -> {
222             databaseProvider.createPdpGroups(null);
223         }).hasMessage("pdpGroups is marked @NonNull but is null");
224
225         assertThatThrownBy(() -> {
226             databaseProvider.updatePdpGroups(null);
227         }).hasMessage("pdpGroups is marked @NonNull but is null");
228
229         assertThatThrownBy(() -> {
230             databaseProvider.deletePdpGroups(null);
231         }).hasMessage("pdpGroupFilter is marked @NonNull but is null");
232
233         databaseProvider.close();
234
235     }
236
237     @Test
238     public void testProviderMethodsNotInit() throws Exception {
239         PolicyModelsProvider databaseProvider =
240                 new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
241
242         assertThatThrownBy(() -> {
243             databaseProvider.getPolicyTypes("name", "version");
244         }).hasMessage("policy models provider is not initilaized");
245     }
246
247     @Test
248     public void testProviderMethods() {
249         try (PolicyModelsProvider databaseProvider =
250                 new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters)) {
251             databaseProvider.init();
252
253             assertThatThrownBy(() -> {
254                 databaseProvider.getPolicyTypes("name", "version");
255             }).hasMessage("policy type not found: name:version");
256
257             assertThatThrownBy(() -> {
258                 databaseProvider.createPolicyTypes(new ToscaServiceTemplate());
259             }).hasMessage("no policy types specified on service template");
260
261             assertThatThrownBy(() -> {
262                 databaseProvider.updatePolicyTypes(new ToscaServiceTemplate());
263             }).hasMessage("no policy types specified on service template");
264
265             assertThatThrownBy(() -> {
266                 databaseProvider.deletePolicyTypes("name", "version");
267             }).hasMessage("policy type not found: name:version");
268
269             assertThatThrownBy(() -> {
270                 databaseProvider.getPolicies("name", "version");
271             }).hasMessage("policy not found: name:version");
272
273             assertThatThrownBy(() -> {
274                 databaseProvider.createPolicies(new ToscaServiceTemplate());
275             }).hasMessage("topology template not specified on service template");
276
277             assertThatThrownBy(() -> {
278                 databaseProvider.updatePolicies(new ToscaServiceTemplate());
279             }).hasMessage("topology template not specified on service template");
280
281             assertThatThrownBy(() -> {
282                 databaseProvider.deletePolicies("name", "version");
283             }).hasMessage("policy not found: name:version");
284
285             assertThatThrownBy(() -> {
286                 databaseProvider.getOperationalPolicy("policy_id");
287             }).hasMessage("no policy found for policy ID: policy_id");
288
289             assertThatThrownBy(() -> {
290                 databaseProvider.createOperationalPolicy(new LegacyOperationalPolicy());
291             }).hasMessage("name is marked @NonNull but is null");
292
293             assertThatThrownBy(() -> {
294                 databaseProvider.updateOperationalPolicy(new LegacyOperationalPolicy());
295             }).hasMessage("no policy found for policy ID: null");
296
297             assertThatThrownBy(() -> {
298                 databaseProvider.deleteOperationalPolicy("policy_id");
299             }).hasMessage("no policy found for policy ID: policy_id");
300
301             assertThatThrownBy(() -> {
302                 databaseProvider.getGuardPolicy("policy_id");
303             }).hasMessage("no policy found for policy ID: policy_id");
304
305             assertThatThrownBy(() -> {
306                 databaseProvider.createGuardPolicy(new LegacyGuardPolicyInput());
307             }).hasMessage("policy type for guard policy \"null\" unknown");
308
309             assertThatThrownBy(() -> {
310                 databaseProvider.updateGuardPolicy(new LegacyGuardPolicyInput());
311             }).hasMessage("policy type for guard policy \"null\" unknown");
312
313             assertThatThrownBy(() -> {
314                 databaseProvider.deleteGuardPolicy("policy_id");
315             }).hasMessage("no policy found for policy ID: policy_id");
316
317             assertNotNull(databaseProvider.getPdpGroups("filter"));
318             assertNotNull(databaseProvider.createPdpGroups(new PdpGroups()));
319             assertNotNull(databaseProvider.updatePdpGroups(new PdpGroups()));
320             assertNotNull(databaseProvider.deletePdpGroups("filter"));
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 }