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.base.PfConceptKey;
32 import org.onap.policy.models.pdp.concepts.PdpGroups;
33 import org.onap.policy.models.provider.PolicyModelsProvider;
34 import org.onap.policy.models.provider.PolicyModelsProviderFactory;
35 import org.onap.policy.models.provider.PolicyModelsProviderParameters;
36 import org.onap.policy.models.tosca.legacy.concepts.LegacyGuardPolicyInput;
37 import org.onap.policy.models.tosca.legacy.concepts.LegacyOperationalPolicy;
38 import org.onap.policy.models.tosca.simple.concepts.JpaToscaServiceTemplate;
39 import org.slf4j.Logger;
40 import org.slf4j.LoggerFactory;
43 * Test the database models provider implementation.
45 * @author Liam Fallon (liam.fallon@est.tech)
47 public class DatabasePolicyModelsProviderTest {
48 private static final Logger LOGGER = LoggerFactory.getLogger(DatabasePolicyModelsProviderTest.class);
50 PolicyModelsProviderParameters parameters;
53 * Initialize parameters.
56 public void setupParameters() {
57 parameters = new PolicyModelsProviderParameters();
58 parameters.setDatabaseUrl("jdbc:h2:mem:testdb");
59 parameters.setDatabaseUser("policy");
60 parameters.setDatabasePassword(Base64.getEncoder().encodeToString("P01icY".getBytes()));
61 parameters.setPersistenceUnit("ToscaConceptTest");
66 public void testInitAndClose() throws Exception {
67 PolicyModelsProvider databaseProvider =
68 new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
70 parameters.setDatabaseUrl("jdbc://www.acmecorp.nonexist");
72 assertThatThrownBy(() -> {
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);
120 databaseProvider.init();
122 assertThatThrownBy(() -> {
123 databaseProvider.getPolicyTypes(null);
124 }).hasMessage("policyTypeKey is marked @NonNull but is null");
127 assertThatThrownBy(() -> {
128 databaseProvider.createPolicyTypes(null);
129 }).hasMessage("serviceTemplate is marked @NonNull but is null");
131 assertThatThrownBy(() -> {
132 databaseProvider.updatePolicyTypes(null);
133 }).hasMessage("serviceTemplate is marked @NonNull but is null");
135 assertThatThrownBy(() -> {
136 databaseProvider.deletePolicyTypes(null);
137 }).hasMessage("policyTypeKey is marked @NonNull but is null");
139 assertThatThrownBy(() -> {
140 databaseProvider.getPolicies(null);
141 }).hasMessage("policyKey is marked @NonNull but is null");
143 assertThatThrownBy(() -> {
144 databaseProvider.createPolicies(null);
145 }).hasMessage("serviceTemplate is marked @NonNull but is null");
147 assertThatThrownBy(() -> {
148 databaseProvider.updatePolicies(null);
149 }).hasMessage("serviceTemplate is marked @NonNull but is null");
151 assertThatThrownBy(() -> {
152 databaseProvider.deletePolicies(null);
153 }).hasMessage("policyKey is marked @NonNull but is null");
155 assertThatThrownBy(() -> {
156 databaseProvider.getOperationalPolicy(null);
157 }).hasMessage("policyId is marked @NonNull but is null");
159 assertThatThrownBy(() -> {
160 databaseProvider.createOperationalPolicy(null);
161 }).hasMessage("legacyOperationalPolicy is marked @NonNull but is null");
163 assertThatThrownBy(() -> {
164 databaseProvider.updateOperationalPolicy(null);
165 }).hasMessage("legacyOperationalPolicy is marked @NonNull but is null");
167 assertThatThrownBy(() -> {
168 databaseProvider.deleteOperationalPolicy(null);
169 }).hasMessage("policyId is marked @NonNull but is null");
171 assertThatThrownBy(() -> {
172 databaseProvider.getGuardPolicy(null);
173 }).hasMessage("policyId is marked @NonNull but is null");
175 assertThatThrownBy(() -> {
176 databaseProvider.createGuardPolicy(null);
177 }).hasMessage("legacyGuardPolicy is marked @NonNull but is null");
179 assertThatThrownBy(() -> {
180 databaseProvider.updateGuardPolicy(null);
181 }).hasMessage("legacyGuardPolicy is marked @NonNull but is null");
183 assertThatThrownBy(() -> {
184 databaseProvider.deleteGuardPolicy(null);
185 }).hasMessage("policyId is marked @NonNull but is null");
187 assertThatThrownBy(() -> {
188 databaseProvider.getPdpGroups(null);
189 }).hasMessage("pdpGroupFilter is marked @NonNull but is null");
191 assertThatThrownBy(() -> {
192 databaseProvider.createPdpGroups(null);
193 }).hasMessage("pdpGroups is marked @NonNull but is null");
195 assertThatThrownBy(() -> {
196 databaseProvider.updatePdpGroups(null);
197 }).hasMessage("pdpGroups is marked @NonNull but is null");
199 assertThatThrownBy(() -> {
200 databaseProvider.deletePdpGroups(null);
201 }).hasMessage("pdpGroupFilter is marked @NonNull but is null");
203 databaseProvider.close();
208 public void testProviderMethodsNotInit() throws Exception {
209 PolicyModelsProvider databaseProvider =
210 new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
212 assertThatThrownBy(() -> {
213 databaseProvider.getPolicyTypes(new PfConceptKey());
214 }).hasMessage("policy models provider is not initilaized");
218 public void testProviderMethods() {
219 try (PolicyModelsProvider databaseProvider =
220 new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters)) {
221 databaseProvider.init();
223 assertThatThrownBy(() -> {
224 databaseProvider.getPolicyTypes(new PfConceptKey());
225 }).hasMessage("policy type not found: NULL:0.0.0");
227 assertThatThrownBy(() -> {
228 databaseProvider.createPolicyTypes(new JpaToscaServiceTemplate());
229 }).hasMessage("no policy types specified on service template");
231 assertThatThrownBy(() -> {
232 databaseProvider.updatePolicyTypes(new JpaToscaServiceTemplate());
233 }).hasMessage("no policy types specified on service template");
235 assertThatThrownBy(() -> {
236 databaseProvider.deletePolicyTypes(new PfConceptKey());
237 }).hasMessage("policy type not found: NULL:0.0.0");
239 assertThatThrownBy(() -> {
240 databaseProvider.getPolicies(new PfConceptKey());
241 }).hasMessage("policy not found: NULL:0.0.0");
243 assertThatThrownBy(() -> {
244 databaseProvider.createPolicies(new JpaToscaServiceTemplate());
245 }).hasMessage("topology template not specified on service template");
247 assertThatThrownBy(() -> {
248 databaseProvider.updatePolicies(new JpaToscaServiceTemplate());
249 }).hasMessage("topology template not specified on service template");
251 assertThatThrownBy(() -> {
252 databaseProvider.deletePolicies(new PfConceptKey());
253 }).hasMessage("policy not found: NULL:0.0.0");
255 assertThatThrownBy(() -> {
256 databaseProvider.getOperationalPolicy("policy_id");
257 }).hasMessage("no policy found for policy ID: policy_id");
259 assertThatThrownBy(() -> {
260 databaseProvider.createOperationalPolicy(new LegacyOperationalPolicy());
261 }).hasMessage("name is marked @NonNull but is null");
263 assertThatThrownBy(() -> {
264 databaseProvider.updateOperationalPolicy(new LegacyOperationalPolicy());
265 }).hasMessage("no policy found for policy ID: null");
267 assertThatThrownBy(() -> {
268 databaseProvider.deleteOperationalPolicy("policy_id");
269 }).hasMessage("no policy found for policy ID: policy_id");
271 assertThatThrownBy(() -> {
272 databaseProvider.getGuardPolicy("policy_id");
273 }).hasMessage("no policy found for policy ID: policy_id");
275 assertThatThrownBy(() -> {
276 databaseProvider.createGuardPolicy(new LegacyGuardPolicyInput());
277 }).hasMessage("policy type for guard policy \"null\" unknown");
279 assertThatThrownBy(() -> {
280 databaseProvider.updateGuardPolicy(new LegacyGuardPolicyInput());
281 }).hasMessage("policy type for guard policy \"null\" unknown");
283 assertThatThrownBy(() -> {
284 databaseProvider.deleteGuardPolicy("policy_id");
285 }).hasMessage("no policy found for policy ID: policy_id");
287 assertNotNull(databaseProvider.getPdpGroups("filter"));
288 assertNotNull(databaseProvider.createPdpGroups(new PdpGroups()));
289 assertNotNull(databaseProvider.updatePdpGroups(new PdpGroups()));
290 assertNotNull(databaseProvider.deletePdpGroups("filter"));
292 } catch (Exception exc) {
293 LOGGER.warn("test should not throw an exception", exc);
294 fail("test should not throw an exception");