Merge "Remove pdpType from PdpUpdate"
[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.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         assertThatThrownBy(() -> {
239             databaseProvider.getPolicyTypes("name", "version");
240         }).hasMessage("policy models provider is not initilaized");
241     }
242
243     @Test
244     public void testProviderMethods() {
245         try (PolicyModelsProvider databaseProvider =
246                 new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters)) {
247             databaseProvider.init();
248
249             assertThatThrownBy(() -> {
250                 databaseProvider.getPolicyTypes("name", "version");
251             }).hasMessage("policy type not found: name:version");
252
253             assertThatThrownBy(() -> {
254                 databaseProvider.createPolicyTypes(new ToscaServiceTemplate());
255             }).hasMessage("no policy types specified on service template");
256
257             assertThatThrownBy(() -> {
258                 databaseProvider.updatePolicyTypes(new ToscaServiceTemplate());
259             }).hasMessage("no policy types specified on service template");
260
261             assertThatThrownBy(() -> {
262                 databaseProvider.deletePolicyType("name", "version");
263             }).hasMessage("policy type not found: name:version");
264
265             assertThatThrownBy(() -> {
266                 databaseProvider.getPolicies("name", "version");
267             }).hasMessage("policy not found: name:version");
268
269             assertThatThrownBy(() -> {
270                 databaseProvider.createPolicies(new ToscaServiceTemplate());
271             }).hasMessage("topology template not specified on service template");
272
273             assertThatThrownBy(() -> {
274                 databaseProvider.updatePolicies(new ToscaServiceTemplate());
275             }).hasMessage("topology template not specified on service template");
276
277             assertThatThrownBy(() -> {
278                 databaseProvider.deletePolicy("name", "version");
279             }).hasMessage("policy not found: name:version");
280
281             assertThatThrownBy(() -> {
282                 databaseProvider.getOperationalPolicy("policy_id");
283             }).hasMessage("no policy found for policy ID: policy_id");
284
285             assertThatThrownBy(() -> {
286                 databaseProvider.createOperationalPolicy(new LegacyOperationalPolicy());
287             }).hasMessage("name is marked @NonNull but is null");
288
289             assertThatThrownBy(() -> {
290                 databaseProvider.updateOperationalPolicy(new LegacyOperationalPolicy());
291             }).hasMessage("no policy found for policy ID: null");
292
293             assertThatThrownBy(() -> {
294                 databaseProvider.deleteOperationalPolicy("policy_id");
295             }).hasMessage("no policy found for policy ID: policy_id");
296
297             assertThatThrownBy(() -> {
298                 databaseProvider.getGuardPolicy("policy_id");
299             }).hasMessage("no policy found for policy ID: policy_id");
300
301             assertThatThrownBy(() -> {
302                 databaseProvider.createGuardPolicy(new LegacyGuardPolicyInput());
303             }).hasMessage("policy type for guard policy \"null\" unknown");
304
305             assertThatThrownBy(() -> {
306                 databaseProvider.updateGuardPolicy(new LegacyGuardPolicyInput());
307             }).hasMessage("policy type for guard policy \"null\" unknown");
308
309             assertThatThrownBy(() -> {
310                 databaseProvider.deleteGuardPolicy("policy_id");
311             }).hasMessage("no policy found for policy ID: policy_id");
312
313             assertNotNull(databaseProvider.getPdpGroups("name", "version"));
314             assertNotNull(databaseProvider.createPdpGroups(new PdpGroups()));
315             assertNotNull(databaseProvider.updatePdpGroups(new PdpGroups()));
316             assertNotNull(databaseProvider.deletePdpGroup("name", "version"));
317
318         } catch (Exception exc) {
319             LOGGER.warn("test should not throw an exception", exc);
320             fail("test should not throw an exception");
321         }
322     }
323 }