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
9 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 * SPDX-License-Identifier: Apache-2.0
18 * ============LICENSE_END=========================================================
21 package org.onap.policy.models.provider.impl;
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;
28 import java.util.ArrayList;
29 import java.util.Base64;
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;
44 * Test the database models provider implementation.
46 * @author Liam Fallon (liam.fallon@est.tech)
48 public class DatabasePolicyModelsProviderTest {
49 private static final Logger LOGGER = LoggerFactory.getLogger(DatabasePolicyModelsProviderTest.class);
51 PolicyModelsProviderParameters parameters;
54 * Initialize parameters.
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");
67 public void testInitAndClose() throws Exception {
68 PolicyModelsProvider databaseProvider =
69 new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
71 parameters.setDatabaseUrl("jdbc://www.acmecorp.nonexist");
73 assertThatThrownBy(() -> {
74 databaseProvider.close();
75 databaseProvider.init();
76 }).hasMessage("could not connect to database with URL \"jdbc://www.acmecorp.nonexist\"");
78 parameters.setDatabaseUrl("jdbc:h2:mem:testdb");
81 databaseProvider.init();
82 databaseProvider.close();
83 } catch (Exception pfme) {
84 fail("test shold not throw an exception here");
87 parameters.setPersistenceUnit("WileECoyote");
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);
95 parameters.setPersistenceUnit("ToscaConceptTest");
98 databaseProvider.init();
99 databaseProvider.close();
100 } catch (Exception pfme) {
101 fail("test shold not throw an exception here");
105 databaseProvider.close();
106 } catch (Exception pfme) {
107 fail("test shold not throw an exception here");
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\"");
120 public void testProviderMethodsNull() throws Exception {
121 PolicyModelsProvider databaseProvider =
122 new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
124 assertThatThrownBy(() -> {
125 databaseProvider.getPolicyTypes(null, null);
126 }).hasMessage("name is marked @NonNull but is null");
128 assertThatThrownBy(() -> {
129 databaseProvider.getPolicyTypes("aaa", null);
130 }).hasMessage("version is marked @NonNull but is null");
132 assertThatThrownBy(() -> {
133 databaseProvider.getPolicyTypes(null, "aaa");
134 }).hasMessage("name is marked @NonNull but is null");
136 assertThatThrownBy(() -> {
137 databaseProvider.createPolicyTypes(null);
138 }).hasMessage("serviceTemplate is marked @NonNull but is null");
140 assertThatThrownBy(() -> {
141 databaseProvider.updatePolicyTypes(null);
142 }).hasMessage("serviceTemplate is marked @NonNull but is null");
144 assertThatThrownBy(() -> {
145 databaseProvider.deletePolicyType(null, null);
146 }).hasMessage("name is marked @NonNull but is null");
148 assertThatThrownBy(() -> {
149 databaseProvider.deletePolicyType("aaa", null);
150 }).hasMessage("version is marked @NonNull but is null");
152 assertThatThrownBy(() -> {
153 databaseProvider.deletePolicyType(null, "aaa");
154 }).hasMessage("name is marked @NonNull but is null");
156 assertThatThrownBy(() -> {
157 databaseProvider.getPolicies(null, null);
158 }).hasMessage("name is marked @NonNull but is null");
160 assertThatThrownBy(() -> {
161 databaseProvider.getPolicies(null, "aaa");
162 }).hasMessage("name is marked @NonNull but is null");
164 assertThatThrownBy(() -> {
165 databaseProvider.getPolicies("aaa", null);
166 }).hasMessage("version is marked @NonNull but is null");
168 assertThatThrownBy(() -> {
169 databaseProvider.createPolicies(null);
170 }).hasMessage("serviceTemplate is marked @NonNull but is null");
172 assertThatThrownBy(() -> {
173 databaseProvider.updatePolicies(null);
174 }).hasMessage("serviceTemplate is marked @NonNull but is null");
176 assertThatThrownBy(() -> {
177 databaseProvider.deletePolicy(null, null);
178 }).hasMessage("name is marked @NonNull but is null");
180 assertThatThrownBy(() -> {
181 databaseProvider.deletePolicy(null, "aaa");
182 }).hasMessage("name is marked @NonNull but is null");
184 assertThatThrownBy(() -> {
185 databaseProvider.deletePolicy("aaa", null);
186 }).hasMessage("version is marked @NonNull but is null");
188 assertThatThrownBy(() -> {
189 databaseProvider.getOperationalPolicy(null);
190 }).hasMessage("policyId is marked @NonNull but is null");
192 assertThatThrownBy(() -> {
193 databaseProvider.createOperationalPolicy(null);
194 }).hasMessage("legacyOperationalPolicy is marked @NonNull but is null");
196 assertThatThrownBy(() -> {
197 databaseProvider.updateOperationalPolicy(null);
198 }).hasMessage("legacyOperationalPolicy is marked @NonNull but is null");
200 assertThatThrownBy(() -> {
201 databaseProvider.deleteOperationalPolicy(null);
202 }).hasMessage("policyId is marked @NonNull but is null");
204 assertThatThrownBy(() -> {
205 databaseProvider.getGuardPolicy(null);
206 }).hasMessage("policyId is marked @NonNull but is null");
208 assertThatThrownBy(() -> {
209 databaseProvider.createGuardPolicy(null);
210 }).hasMessage("legacyGuardPolicy is marked @NonNull but is null");
212 assertThatThrownBy(() -> {
213 databaseProvider.updateGuardPolicy(null);
214 }).hasMessage("legacyGuardPolicy is marked @NonNull but is null");
216 assertThatThrownBy(() -> {
217 databaseProvider.deleteGuardPolicy(null);
218 }).hasMessage("policyId is marked @NonNull but is null");
220 assertThatThrownBy(() -> {
221 databaseProvider.createPdpGroups(null);
222 }).hasMessage("pdpGroups is marked @NonNull but is null");
224 assertThatThrownBy(() -> {
225 databaseProvider.updatePdpGroups(null);
226 }).hasMessage("pdpGroups is marked @NonNull but is null");
228 assertThatThrownBy(() -> {
229 databaseProvider.deletePdpGroup(null, null);
230 }).hasMessage("name is marked @NonNull but is null");
232 databaseProvider.close();
237 public void testProviderMethodsNotInit() throws Exception {
238 PolicyModelsProvider databaseProvider =
239 new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
241 databaseProvider.close();
243 assertThatThrownBy(() -> {
244 databaseProvider.getPolicyTypes("name", "version");
245 }).hasMessage("policy models provider is not initilaized");
250 public void testProviderMethods() {
251 try (PolicyModelsProvider databaseProvider =
252 new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters)) {
254 assertThatThrownBy(() -> {
255 databaseProvider.getPolicyTypes("name", "version");
256 }).hasMessage("policy type not found: name:version");
258 assertThatThrownBy(() -> {
259 databaseProvider.createPolicyTypes(new ToscaServiceTemplate());
260 }).hasMessage("no policy types specified on service template");
262 assertThatThrownBy(() -> {
263 databaseProvider.updatePolicyTypes(new ToscaServiceTemplate());
264 }).hasMessage("no policy types specified on service template");
266 assertThatThrownBy(() -> {
267 databaseProvider.deletePolicyType("name", "version");
268 }).hasMessage("policy type not found: name:version");
270 assertThatThrownBy(() -> {
271 databaseProvider.getPolicies("name", "version");
272 }).hasMessage("policy not found: name:version");
274 assertThatThrownBy(() -> {
275 databaseProvider.createPolicies(new ToscaServiceTemplate());
276 }).hasMessage("topology template not specified on service template");
278 assertThatThrownBy(() -> {
279 databaseProvider.updatePolicies(new ToscaServiceTemplate());
280 }).hasMessage("topology template not specified on service template");
282 assertThatThrownBy(() -> {
283 databaseProvider.deletePolicy("name", "version");
284 }).hasMessage("policy not found: name:version");
286 assertThatThrownBy(() -> {
287 databaseProvider.getOperationalPolicy("policy_id");
288 }).hasMessage("no policy found for policy ID: policy_id");
290 assertThatThrownBy(() -> {
291 databaseProvider.createOperationalPolicy(new LegacyOperationalPolicy());
292 }).hasMessage("name is marked @NonNull but is null");
294 assertThatThrownBy(() -> {
295 databaseProvider.updateOperationalPolicy(new LegacyOperationalPolicy());
296 }).hasMessage("no policy found for policy ID: null");
298 assertThatThrownBy(() -> {
299 databaseProvider.deleteOperationalPolicy("policy_id");
300 }).hasMessage("no policy found for policy ID: policy_id");
302 assertThatThrownBy(() -> {
303 databaseProvider.getGuardPolicy("policy_id");
304 }).hasMessage("no policy found for policy ID: policy_id");
306 assertThatThrownBy(() -> {
307 databaseProvider.createGuardPolicy(new LegacyGuardPolicyInput());
308 }).hasMessage("policy type for guard policy \"null\" unknown");
310 assertThatThrownBy(() -> {
311 databaseProvider.updateGuardPolicy(new LegacyGuardPolicyInput());
312 }).hasMessage("policy type for guard policy \"null\" unknown");
314 assertThatThrownBy(() -> {
315 databaseProvider.deleteGuardPolicy("policy_id");
316 }).hasMessage("no policy found for policy ID: policy_id");
318 assertEquals(0, databaseProvider.getPdpGroups("name", "version").size());
320 assertNotNull(databaseProvider.createPdpGroups(new ArrayList<>()));
321 assertNotNull(databaseProvider.updatePdpGroups(new ArrayList<>()));
323 assertThatThrownBy(() -> {
324 databaseProvider.deletePdpGroup("name", "version");
325 }).hasMessage("delete of PDP group \"name:version\" failed, PDP group does not exist");
327 } catch (Exception exc) {
328 LOGGER.warn("test should not throw an exception", exc);
329 fail("test should not throw an exception");