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.ArrayList;
28 import java.util.Base64;
30 import org.junit.Before;
31 import org.junit.Test;
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.close();
73 databaseProvider.init();
74 }).hasMessage("could not connect to database with URL \"jdbc://www.acmecorp.nonexist\"");
76 parameters.setDatabaseUrl("jdbc:h2:mem:testdb");
79 databaseProvider.init();
80 databaseProvider.close();
81 } catch (Exception pfme) {
82 fail("test shold not throw an exception here");
85 parameters.setPersistenceUnit("WileECoyote");
87 String errorMessage = "could not create Data Access Object (DAO) using url "
88 + "\"jdbc:h2:mem:testdb\" and persistence unit \"WileECoyote\"";
89 assertThatThrownBy(() -> {
90 databaseProvider.init();
91 }).hasMessage(errorMessage);
93 parameters.setPersistenceUnit("ToscaConceptTest");
96 databaseProvider.init();
97 databaseProvider.close();
98 } catch (Exception pfme) {
99 fail("test shold not throw an exception here");
103 databaseProvider.close();
104 } catch (Exception pfme) {
105 fail("test shold not throw an exception here");
108 assertThatThrownBy(() -> {
109 DatabasePolicyModelsProviderImpl databaseProviderImpl = (DatabasePolicyModelsProviderImpl) databaseProvider;
110 databaseProvider.init();
111 databaseProviderImpl.setConnection(new DummyConnection());
112 databaseProvider.close();
113 }).hasMessage("could not close connection to database with URL \"jdbc:h2:mem:testdb\"");
117 public void testProviderMethodsNull() throws Exception {
118 PolicyModelsProvider databaseProvider =
119 new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
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.deletePolicyType(null, null);
143 }).hasMessage("name is marked @NonNull but is null");
145 assertThatThrownBy(() -> {
146 databaseProvider.deletePolicyType("aaa", null);
147 }).hasMessage("version is marked @NonNull but is null");
149 assertThatThrownBy(() -> {
150 databaseProvider.deletePolicyType(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.deletePolicy(null, null);
175 }).hasMessage("name is marked @NonNull but is null");
177 assertThatThrownBy(() -> {
178 databaseProvider.deletePolicy(null, "aaa");
179 }).hasMessage("name is marked @NonNull but is null");
181 assertThatThrownBy(() -> {
182 databaseProvider.deletePolicy("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.createPdpGroups(null);
219 }).hasMessage("pdpGroups is marked @NonNull but is null");
221 assertThatThrownBy(() -> {
222 databaseProvider.updatePdpGroups(null);
223 }).hasMessage("pdpGroups is marked @NonNull but is null");
225 assertThatThrownBy(() -> {
226 databaseProvider.deletePdpGroup(null, null);
227 }).hasMessage("name is marked @NonNull but is null");
229 databaseProvider.close();
234 public void testProviderMethodsNotInit() throws Exception {
235 PolicyModelsProvider databaseProvider =
236 new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
238 databaseProvider.close();
240 assertThatThrownBy(() -> {
241 databaseProvider.getPolicyTypes("name", "version");
242 }).hasMessage("policy models provider is not initilaized");
246 public void testProviderMethods() {
247 try (PolicyModelsProvider databaseProvider =
248 new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters)) {
250 assertThatThrownBy(() -> {
251 databaseProvider.getPolicyTypes("name", "version");
252 }).hasMessage("policy type not found: name:version");
254 assertThatThrownBy(() -> {
255 databaseProvider.createPolicyTypes(new ToscaServiceTemplate());
256 }).hasMessage("no policy types specified on service template");
258 assertThatThrownBy(() -> {
259 databaseProvider.updatePolicyTypes(new ToscaServiceTemplate());
260 }).hasMessage("no policy types specified on service template");
262 assertThatThrownBy(() -> {
263 databaseProvider.deletePolicyType("name", "version");
264 }).hasMessage("policy type not found: name:version");
266 assertThatThrownBy(() -> {
267 databaseProvider.getPolicies("name", "version");
268 }).hasMessage("policy not found: name:version");
270 assertThatThrownBy(() -> {
271 databaseProvider.createPolicies(new ToscaServiceTemplate());
272 }).hasMessage("topology template not specified on service template");
274 assertThatThrownBy(() -> {
275 databaseProvider.updatePolicies(new ToscaServiceTemplate());
276 }).hasMessage("topology template not specified on service template");
278 assertThatThrownBy(() -> {
279 databaseProvider.deletePolicy("name", "version");
280 }).hasMessage("policy not found: name:version");
282 assertThatThrownBy(() -> {
283 databaseProvider.getOperationalPolicy("policy_id");
284 }).hasMessage("no policy found for policy ID: policy_id");
286 assertThatThrownBy(() -> {
287 databaseProvider.createOperationalPolicy(new LegacyOperationalPolicy());
288 }).hasMessage("name is marked @NonNull but is null");
290 assertThatThrownBy(() -> {
291 databaseProvider.updateOperationalPolicy(new LegacyOperationalPolicy());
292 }).hasMessage("no policy found for policy ID: null");
294 assertThatThrownBy(() -> {
295 databaseProvider.deleteOperationalPolicy("policy_id");
296 }).hasMessage("no policy found for policy ID: policy_id");
298 assertThatThrownBy(() -> {
299 databaseProvider.getGuardPolicy("policy_id");
300 }).hasMessage("no policy found for policy ID: policy_id");
302 assertThatThrownBy(() -> {
303 databaseProvider.createGuardPolicy(new LegacyGuardPolicyInput());
304 }).hasMessage("policy type for guard policy \"null\" unknown");
306 assertThatThrownBy(() -> {
307 databaseProvider.updateGuardPolicy(new LegacyGuardPolicyInput());
308 }).hasMessage("policy type for guard policy \"null\" unknown");
310 assertThatThrownBy(() -> {
311 databaseProvider.deleteGuardPolicy("policy_id");
312 }).hasMessage("no policy found for policy ID: policy_id");
314 assertThatThrownBy(() -> {
315 databaseProvider.getPdpGroups("name", "version");
316 }).hasMessage("PDP group not found: name:version");
318 assertNotNull(databaseProvider.createPdpGroups(new ArrayList<>()));
319 assertNotNull(databaseProvider.updatePdpGroups(new ArrayList<>()));
320 assertNotNull(databaseProvider.deletePdpGroup("name", "version"));
322 } catch (Exception exc) {
323 LOGGER.warn("test should not throw an exception", exc);
324 fail("test should not throw an exception");