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.assertNotNull;
25 import static org.junit.Assert.fail;
27 import java.util.Base64;
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;
42 * Test the database models provider implementation.
44 * @author Liam Fallon (liam.fallon@est.tech)
46 public class DatabasePolicyModelsProviderTest {
47 private static final Logger LOGGER = LoggerFactory.getLogger(DatabasePolicyModelsProviderTest.class);
49 PolicyModelsProviderParameters parameters;
52 * Initialize parameters.
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");
65 public void testInitAndClose() throws Exception {
66 PolicyModelsProvider databaseProvider =
67 new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
69 parameters.setDatabaseUrl("jdbc://www.acmecorp.nonexist");
71 assertThatThrownBy(() -> {
72 databaseProvider.init();
73 }).hasMessage("could not connect to database with URL \"jdbc://www.acmecorp.nonexist\"");
75 parameters.setDatabaseUrl("jdbc:h2:mem:testdb");
78 databaseProvider.init();
79 databaseProvider.close();
80 } catch (Exception pfme) {
81 fail("test shold not throw an exception here");
84 parameters.setPersistenceUnit("WileECoyote");
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);
92 parameters.setPersistenceUnit("ToscaConceptTest");
95 databaseProvider.init();
96 databaseProvider.close();
97 } catch (Exception pfme) {
98 fail("test shold not throw an exception here");
102 databaseProvider.close();
103 } catch (Exception pfme) {
104 fail("test shold not throw an exception here");
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\"");
116 public void testProviderMethodsNull() throws Exception {
117 PolicyModelsProvider databaseProvider =
118 new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
119 databaseProvider.init();
121 assertThatThrownBy(() -> {
122 databaseProvider.getPolicyTypes(null, null);
123 }).hasMessage("name is marked @NonNull but is null");
125 assertThatThrownBy(() -> {
126 databaseProvider.getPolicyTypes("aaa", null);
127 }).hasMessage("version is marked @NonNull but is null");
129 assertThatThrownBy(() -> {
130 databaseProvider.getPolicyTypes(null, "aaa");
131 }).hasMessage("name is marked @NonNull but is null");
133 assertThatThrownBy(() -> {
134 databaseProvider.createPolicyTypes(null);
135 }).hasMessage("serviceTemplate is marked @NonNull but is null");
137 assertThatThrownBy(() -> {
138 databaseProvider.updatePolicyTypes(null);
139 }).hasMessage("serviceTemplate is marked @NonNull but is null");
141 assertThatThrownBy(() -> {
142 databaseProvider.deletePolicyTypes(null, null);
143 }).hasMessage("name is marked @NonNull but is null");
145 assertThatThrownBy(() -> {
146 databaseProvider.deletePolicyTypes("aaa", null);
147 }).hasMessage("version is marked @NonNull but is null");
149 assertThatThrownBy(() -> {
150 databaseProvider.deletePolicyTypes(null, "aaa");
151 }).hasMessage("name is marked @NonNull but is null");
153 assertThatThrownBy(() -> {
154 databaseProvider.getPolicies(null, null);
155 }).hasMessage("name is marked @NonNull but is null");
157 assertThatThrownBy(() -> {
158 databaseProvider.getPolicies(null, "aaa");
159 }).hasMessage("name is marked @NonNull but is null");
161 assertThatThrownBy(() -> {
162 databaseProvider.getPolicies("aaa", null);
163 }).hasMessage("version is marked @NonNull but is null");
165 assertThatThrownBy(() -> {
166 databaseProvider.createPolicies(null);
167 }).hasMessage("serviceTemplate is marked @NonNull but is null");
169 assertThatThrownBy(() -> {
170 databaseProvider.updatePolicies(null);
171 }).hasMessage("serviceTemplate is marked @NonNull but is null");
173 assertThatThrownBy(() -> {
174 databaseProvider.deletePolicies(null, null);
175 }).hasMessage("name is marked @NonNull but is null");
177 assertThatThrownBy(() -> {
178 databaseProvider.deletePolicies(null, "aaa");
179 }).hasMessage("name is marked @NonNull but is null");
181 assertThatThrownBy(() -> {
182 databaseProvider.deletePolicies("aaa", null);
183 }).hasMessage("version is marked @NonNull but is null");
185 assertThatThrownBy(() -> {
186 databaseProvider.getOperationalPolicy(null);
187 }).hasMessage("policyId is marked @NonNull but is null");
189 assertThatThrownBy(() -> {
190 databaseProvider.createOperationalPolicy(null);
191 }).hasMessage("legacyOperationalPolicy is marked @NonNull but is null");
193 assertThatThrownBy(() -> {
194 databaseProvider.updateOperationalPolicy(null);
195 }).hasMessage("legacyOperationalPolicy is marked @NonNull but is null");
197 assertThatThrownBy(() -> {
198 databaseProvider.deleteOperationalPolicy(null);
199 }).hasMessage("policyId is marked @NonNull but is null");
201 assertThatThrownBy(() -> {
202 databaseProvider.getGuardPolicy(null);
203 }).hasMessage("policyId is marked @NonNull but is null");
205 assertThatThrownBy(() -> {
206 databaseProvider.createGuardPolicy(null);
207 }).hasMessage("legacyGuardPolicy is marked @NonNull but is null");
209 assertThatThrownBy(() -> {
210 databaseProvider.updateGuardPolicy(null);
211 }).hasMessage("legacyGuardPolicy is marked @NonNull but is null");
213 assertThatThrownBy(() -> {
214 databaseProvider.deleteGuardPolicy(null);
215 }).hasMessage("policyId is marked @NonNull but is null");
217 assertThatThrownBy(() -> {
218 databaseProvider.getPdpGroups(null);
219 }).hasMessage("pdpGroupFilter is marked @NonNull but is null");
221 assertThatThrownBy(() -> {
222 databaseProvider.createPdpGroups(null);
223 }).hasMessage("pdpGroups is marked @NonNull but is null");
225 assertThatThrownBy(() -> {
226 databaseProvider.updatePdpGroups(null);
227 }).hasMessage("pdpGroups is marked @NonNull but is null");
229 assertThatThrownBy(() -> {
230 databaseProvider.deletePdpGroups(null);
231 }).hasMessage("pdpGroupFilter is marked @NonNull but is null");
233 databaseProvider.close();
238 public void testProviderMethodsNotInit() throws Exception {
239 PolicyModelsProvider databaseProvider =
240 new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
242 assertThatThrownBy(() -> {
243 databaseProvider.getPolicyTypes("name", "version");
244 }).hasMessage("policy models provider is not initilaized");
248 public void testProviderMethods() {
249 try (PolicyModelsProvider databaseProvider =
250 new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters)) {
251 databaseProvider.init();
253 assertThatThrownBy(() -> {
254 databaseProvider.getPolicyTypes("name", "version");
255 }).hasMessage("policy type not found: name:version");
257 assertThatThrownBy(() -> {
258 databaseProvider.createPolicyTypes(new ToscaServiceTemplate());
259 }).hasMessage("no policy types specified on service template");
261 assertThatThrownBy(() -> {
262 databaseProvider.updatePolicyTypes(new ToscaServiceTemplate());
263 }).hasMessage("no policy types specified on service template");
265 assertThatThrownBy(() -> {
266 databaseProvider.deletePolicyTypes("name", "version");
267 }).hasMessage("policy type not found: name:version");
269 assertThatThrownBy(() -> {
270 databaseProvider.getPolicies("name", "version");
271 }).hasMessage("policy not found: name:version");
273 assertThatThrownBy(() -> {
274 databaseProvider.createPolicies(new ToscaServiceTemplate());
275 }).hasMessage("topology template not specified on service template");
277 assertThatThrownBy(() -> {
278 databaseProvider.updatePolicies(new ToscaServiceTemplate());
279 }).hasMessage("topology template not specified on service template");
281 assertThatThrownBy(() -> {
282 databaseProvider.deletePolicies("name", "version");
283 }).hasMessage("policy not found: name:version");
285 assertThatThrownBy(() -> {
286 databaseProvider.getOperationalPolicy("policy_id");
287 }).hasMessage("no policy found for policy ID: policy_id");
289 assertThatThrownBy(() -> {
290 databaseProvider.createOperationalPolicy(new LegacyOperationalPolicy());
291 }).hasMessage("name is marked @NonNull but is null");
293 assertThatThrownBy(() -> {
294 databaseProvider.updateOperationalPolicy(new LegacyOperationalPolicy());
295 }).hasMessage("no policy found for policy ID: null");
297 assertThatThrownBy(() -> {
298 databaseProvider.deleteOperationalPolicy("policy_id");
299 }).hasMessage("no policy found for policy ID: policy_id");
301 assertThatThrownBy(() -> {
302 databaseProvider.getGuardPolicy("policy_id");
303 }).hasMessage("no policy found for policy ID: policy_id");
305 assertThatThrownBy(() -> {
306 databaseProvider.createGuardPolicy(new LegacyGuardPolicyInput());
307 }).hasMessage("policy type for guard policy \"null\" unknown");
309 assertThatThrownBy(() -> {
310 databaseProvider.updateGuardPolicy(new LegacyGuardPolicyInput());
311 }).hasMessage("policy type for guard policy \"null\" unknown");
313 assertThatThrownBy(() -> {
314 databaseProvider.deleteGuardPolicy("policy_id");
315 }).hasMessage("no policy found for policy ID: policy_id");
317 assertNotNull(databaseProvider.getPdpGroups("filter"));
318 assertNotNull(databaseProvider.createPdpGroups(new PdpGroups()));
319 assertNotNull(databaseProvider.updatePdpGroups(new PdpGroups()));
320 assertNotNull(databaseProvider.deletePdpGroups("filter"));
322 } catch (Exception exc) {
323 LOGGER.warn("test should not throw an exception", exc);
324 fail("test should not throw an exception");