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