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;
30 import java.util.List;
32 import org.junit.Before;
33 import org.junit.Test;
34 import org.onap.policy.models.pdp.concepts.Pdp;
35 import org.onap.policy.models.pdp.concepts.PdpGroup;
36 import org.onap.policy.models.pdp.concepts.PdpGroupFilter;
37 import org.onap.policy.models.pdp.concepts.PdpStatistics;
38 import org.onap.policy.models.pdp.concepts.PdpSubGroup;
39 import org.onap.policy.models.pdp.enums.PdpHealthStatus;
40 import org.onap.policy.models.pdp.enums.PdpState;
41 import org.onap.policy.models.provider.PolicyModelsProvider;
42 import org.onap.policy.models.provider.PolicyModelsProviderFactory;
43 import org.onap.policy.models.provider.PolicyModelsProviderParameters;
44 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyFilter;
45 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeFilter;
46 import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifier;
47 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
48 import org.onap.policy.models.tosca.legacy.concepts.LegacyGuardPolicyInput;
49 import org.onap.policy.models.tosca.legacy.concepts.LegacyOperationalPolicy;
50 import org.slf4j.Logger;
51 import org.slf4j.LoggerFactory;
54 * Test the database models provider implementation.
56 * @author Liam Fallon (liam.fallon@est.tech)
58 public class DatabasePolicyModelsProviderTest {
59 private static final Logger LOGGER = LoggerFactory.getLogger(DatabasePolicyModelsProviderTest.class);
61 PolicyModelsProviderParameters parameters;
64 * Initialize parameters.
67 public void setupParameters() {
68 parameters = new PolicyModelsProviderParameters();
69 parameters.setDatabaseDriver("org.h2.Driver");
70 parameters.setDatabaseUrl("jdbc:h2:mem:testdb");
71 parameters.setDatabaseUser("policy");
72 parameters.setDatabasePassword(Base64.getEncoder().encodeToString("P01icY".getBytes()));
73 parameters.setPersistenceUnit("ToscaConceptTest");
77 public void testInitAndClose() throws Exception {
78 assertThatThrownBy(() -> {
79 new DatabasePolicyModelsProviderImpl(null);
80 }).hasMessage("parameters is marked @NonNull but is null");
82 PolicyModelsProvider databaseProvider =
83 new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
85 parameters.setDatabaseUrl("jdbc://www.acmecorp.nonexist");
88 databaseProvider.close();
89 databaseProvider.init();
90 } catch (Exception pfme) {
91 fail("test shold not throw an exception here");
93 databaseProvider.close();
95 parameters.setDatabaseUrl("jdbc:h2:mem:testdb");
97 parameters.setPersistenceUnit("WileECoyote");
99 assertThatThrownBy(() -> {
100 databaseProvider.init();
101 }).hasMessageContaining("could not create Data Access Object (DAO)");
103 parameters.setPersistenceUnit("ToscaConceptTest");
106 databaseProvider.init();
107 databaseProvider.close();
108 } catch (Exception pfme) {
109 pfme.printStackTrace();
110 fail("test shold not throw an exception here");
113 assertThatThrownBy(() -> {
114 databaseProvider.init();
115 databaseProvider.init();
116 }).hasMessage("provider is already initialized");
119 databaseProvider.close();
120 } catch (Exception pfme) {
121 fail("test shold not throw an exception here");
125 databaseProvider.close();
126 } catch (Exception pfme) {
127 fail("test shold not throw an exception here");
132 public void testProviderMethodsNull() throws Exception {
133 PolicyModelsProvider databaseProvider =
134 new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
136 assertThatThrownBy(() -> {
137 databaseProvider.getFilteredPolicyTypes(null);
138 }).hasMessage("filter is marked @NonNull but is null");
140 assertThatThrownBy(() -> {
141 databaseProvider.getFilteredPolicyTypeList(null);
142 }).hasMessage("filter is marked @NonNull but is null");
144 assertThatThrownBy(() -> {
145 databaseProvider.createPolicyTypes(null);
146 }).hasMessage("serviceTemplate is marked @NonNull but is null");
148 assertThatThrownBy(() -> {
149 databaseProvider.updatePolicyTypes(null);
150 }).hasMessage("serviceTemplate is marked @NonNull but is null");
152 assertThatThrownBy(() -> {
153 databaseProvider.deletePolicyType(null, null);
154 }).hasMessage("name is marked @NonNull but is null");
156 assertThatThrownBy(() -> {
157 databaseProvider.deletePolicyType("aaa", null);
158 }).hasMessage("version is marked @NonNull but is null");
160 assertThatThrownBy(() -> {
161 databaseProvider.deletePolicyType(null, "aaa");
162 }).hasMessage("name is marked @NonNull but is null");
164 assertThatThrownBy(() -> {
165 databaseProvider.getFilteredPolicies(null);
166 }).hasMessage("filter is marked @NonNull but is null");
168 assertThatThrownBy(() -> {
169 databaseProvider.getFilteredPolicyList(null);
170 }).hasMessage("filter is marked @NonNull but is null");
172 assertThatThrownBy(() -> {
173 databaseProvider.createPolicies(null);
174 }).hasMessage("serviceTemplate is marked @NonNull but is null");
176 assertThatThrownBy(() -> {
177 databaseProvider.updatePolicies(null);
178 }).hasMessage("serviceTemplate is marked @NonNull but is null");
180 assertThatThrownBy(() -> {
181 databaseProvider.deletePolicy(null, null);
182 }).hasMessage("name is marked @NonNull but is null");
184 assertThatThrownBy(() -> {
185 databaseProvider.deletePolicy(null, "aaa");
186 }).hasMessage("name is marked @NonNull but is null");
188 assertThatThrownBy(() -> {
189 databaseProvider.deletePolicy("aaa", null);
190 }).hasMessage("version is marked @NonNull but is null");
192 assertThatThrownBy(() -> {
193 databaseProvider.getOperationalPolicy(null);
194 }).hasMessage("policyId is marked @NonNull but is null");
196 assertThatThrownBy(() -> {
197 databaseProvider.createOperationalPolicy(null);
198 }).hasMessage("legacyOperationalPolicy is marked @NonNull but is null");
200 assertThatThrownBy(() -> {
201 databaseProvider.updateOperationalPolicy(null);
202 }).hasMessage("legacyOperationalPolicy is marked @NonNull but is null");
204 assertThatThrownBy(() -> {
205 databaseProvider.deleteOperationalPolicy(null);
206 }).hasMessage("policyId is marked @NonNull but is null");
208 assertThatThrownBy(() -> {
209 databaseProvider.getGuardPolicy(null);
210 }).hasMessage("policyId is marked @NonNull but is null");
212 assertThatThrownBy(() -> {
213 databaseProvider.createGuardPolicy(null);
214 }).hasMessage("legacyGuardPolicy is marked @NonNull but is null");
216 assertThatThrownBy(() -> {
217 databaseProvider.updateGuardPolicy(null);
218 }).hasMessage("legacyGuardPolicy is marked @NonNull but is null");
220 assertThatThrownBy(() -> {
221 databaseProvider.deleteGuardPolicy(null);
222 }).hasMessage("policyId is marked @NonNull but is null");
224 assertThatThrownBy(() -> {
225 databaseProvider.getFilteredPdpGroups(null);
226 }).hasMessage("filter is marked @NonNull but is null");
228 assertThatThrownBy(() -> {
229 databaseProvider.createPdpGroups(null);
230 }).hasMessage("pdpGroups is marked @NonNull but is null");
232 assertThatThrownBy(() -> {
233 databaseProvider.updatePdpGroups(null);
234 }).hasMessage("pdpGroups is marked @NonNull but is null");
236 assertThatThrownBy(() -> {
237 databaseProvider.updatePdpSubGroup(null, null);
238 }).hasMessage("pdpGroupName is marked @NonNull but is null");
240 assertThatThrownBy(() -> {
241 databaseProvider.updatePdpSubGroup(null, new PdpSubGroup());
242 }).hasMessage("pdpGroupName is marked @NonNull but is null");
244 assertThatThrownBy(() -> {
245 databaseProvider.updatePdpSubGroup("name", null);
246 }).hasMessage("pdpSubGroup is marked @NonNull but is null");
248 assertThatThrownBy(() -> {
249 databaseProvider.updatePdpSubGroup("name", new PdpSubGroup());
250 }).hasMessage("parameter \"localName\" is null");
252 assertThatThrownBy(() -> {
253 databaseProvider.updatePdp(null, null, null);
254 }).hasMessage("pdpGroupName is marked @NonNull but is null");
256 assertThatThrownBy(() -> {
257 databaseProvider.updatePdp(null, null, new Pdp());
258 }).hasMessage("pdpGroupName is marked @NonNull but is null");
260 assertThatThrownBy(() -> {
261 databaseProvider.updatePdp(null, "sub", null);
262 }).hasMessage("pdpGroupName is marked @NonNull but is null");
264 assertThatThrownBy(() -> {
265 databaseProvider.updatePdp(null, "sub", new Pdp());
266 }).hasMessage("pdpGroupName is marked @NonNull but is null");
268 assertThatThrownBy(() -> {
269 databaseProvider.updatePdp("name", null, null);
270 }).hasMessage("pdpSubGroup is marked @NonNull but is null");
272 assertThatThrownBy(() -> {
273 databaseProvider.updatePdp("name", null, new Pdp());
274 }).hasMessage("pdpSubGroup is marked @NonNull but is null");
276 assertThatThrownBy(() -> {
277 databaseProvider.updatePdp("name", "sub", null);
278 }).hasMessage("pdp is marked @NonNull but is null");
280 assertThatThrownBy(() -> {
281 databaseProvider.updatePdp("name", "sub", new Pdp());
282 }).hasMessage("parameter \"localName\" is null");
284 assertThatThrownBy(() -> {
285 databaseProvider.deletePdpGroup(null);
286 }).hasMessage("name is marked @NonNull but is null");
288 assertThatThrownBy(() -> {
289 databaseProvider.updatePdpStatistics(null, null, null, null);
290 }).hasMessage("pdpGroupName is marked @NonNull but is null");
292 assertThatThrownBy(() -> {
293 databaseProvider.updatePdpStatistics(null, null, null, new PdpStatistics());
294 }).hasMessage("pdpGroupName is marked @NonNull but is null");
296 assertThatThrownBy(() -> {
297 databaseProvider.updatePdpStatistics(null, null, "Instance", null);
298 }).hasMessage("pdpGroupName is marked @NonNull but is null");
300 assertThatThrownBy(() -> {
301 databaseProvider.updatePdpStatistics(null, null, "Instance", new PdpStatistics());
302 }).hasMessage("pdpGroupName is marked @NonNull but is null");
304 assertThatThrownBy(() -> {
305 databaseProvider.updatePdpStatistics(null, "type", null, null);
306 }).hasMessage("pdpGroupName is marked @NonNull but is null");
308 assertThatThrownBy(() -> {
309 databaseProvider.updatePdpStatistics(null, "type", null, new PdpStatistics());
310 }).hasMessage("pdpGroupName is marked @NonNull but is null");
312 assertThatThrownBy(() -> {
313 databaseProvider.updatePdpStatistics(null, "type", "Instance", null);
314 }).hasMessage("pdpGroupName is marked @NonNull but is null");
316 assertThatThrownBy(() -> {
317 databaseProvider.updatePdpStatistics(null, "type", "Instance", new PdpStatistics());
318 }).hasMessage("pdpGroupName is marked @NonNull but is null");
320 assertThatThrownBy(() -> {
321 databaseProvider.updatePdpStatistics("name", null, null, null);
322 }).hasMessage("pdpType is marked @NonNull but is null");
324 assertThatThrownBy(() -> {
325 databaseProvider.updatePdpStatistics("name", null, null, new PdpStatistics());
326 }).hasMessage("pdpType is marked @NonNull but is null");
328 assertThatThrownBy(() -> {
329 databaseProvider.updatePdpStatistics("name", null, "Instance", null);
330 }).hasMessage("pdpType is marked @NonNull but is null");
332 assertThatThrownBy(() -> {
333 databaseProvider.updatePdpStatistics("name", null, "Instance", new PdpStatistics());
334 }).hasMessage("pdpType is marked @NonNull but is null");
336 assertThatThrownBy(() -> {
337 databaseProvider.updatePdpStatistics("name", "type", null, null);
338 }).hasMessage("pdpInstanceId is marked @NonNull but is null");
340 assertThatThrownBy(() -> {
341 databaseProvider.updatePdpStatistics("name", "type", null, new PdpStatistics());
342 }).hasMessage("pdpInstanceId is marked @NonNull but is null");
344 assertThatThrownBy(() -> {
345 databaseProvider.updatePdpStatistics("name", "type", "Instance", null);
346 }).hasMessage("pdpStatistics is marked @NonNull but is null");
348 databaseProvider.updatePdpStatistics("name", "type", "Instance", new PdpStatistics());
350 databaseProvider.close();
354 public void testProviderMethodsNotInit() throws Exception {
355 PolicyModelsProvider databaseProvider =
356 new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
358 databaseProvider.close();
360 assertThatThrownBy(() -> {
361 databaseProvider.getPolicyTypes("name", "version");
362 }).hasMessage("policy models provider is not initilaized");
366 public void testProviderMethods() {
367 try (PolicyModelsProvider databaseProvider =
368 new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters)) {
370 assertEquals(0, databaseProvider.getPolicyTypes("name", "version").getPolicyTypes().get(0).size());
371 assertEquals(0, databaseProvider.getPolicyTypeList("name", "version").size());
372 assertEquals(0, databaseProvider.getFilteredPolicyTypes(ToscaPolicyTypeFilter.builder().build())
373 .getPolicyTypes().get(0).size());
374 assertEquals(0, databaseProvider.getFilteredPolicyTypeList(ToscaPolicyTypeFilter.builder().build()).size());
376 assertThatThrownBy(() -> {
377 databaseProvider.createPolicyTypes(new ToscaServiceTemplate());
378 }).hasMessage("no policy types specified on service template");
380 assertThatThrownBy(() -> {
381 databaseProvider.updatePolicyTypes(new ToscaServiceTemplate());
382 }).hasMessage("no policy types specified on service template");
384 assertEquals(0, databaseProvider.deletePolicyType("name", "version").getPolicyTypes().get(0).size());
386 assertEquals(0, databaseProvider.deletePolicyType("name", "version").getPolicyTypes().get(0).size());
388 assertEquals(0, databaseProvider.getPolicies("name", "version").getToscaTopologyTemplate().getPolicies()
390 assertEquals(0, databaseProvider.getPolicyList("name", "version").size());
391 assertEquals(0, databaseProvider.getFilteredPolicies(ToscaPolicyFilter.builder().build())
392 .getToscaTopologyTemplate().getPolicies().get(0).size());
393 assertEquals(0, databaseProvider.getFilteredPolicyList(ToscaPolicyFilter.builder().build()).size());
395 assertThatThrownBy(() -> {
396 databaseProvider.createPolicies(new ToscaServiceTemplate());
397 }).hasMessage("topology template not specified on service template");
399 assertThatThrownBy(() -> {
400 databaseProvider.updatePolicies(new ToscaServiceTemplate());
401 }).hasMessage("topology template not specified on service template");
403 assertEquals(0, databaseProvider.deletePolicy("Policy", "0.0.0").getToscaTopologyTemplate().getPolicies()
406 assertThatThrownBy(() -> {
407 databaseProvider.getOperationalPolicy("policy_id");
408 }).hasMessage("no policy found for policy ID: policy_id");
410 assertThatThrownBy(() -> {
411 databaseProvider.createOperationalPolicy(new LegacyOperationalPolicy());
412 }).hasMessage("name is marked @NonNull but is null");
414 assertThatThrownBy(() -> {
415 databaseProvider.updateOperationalPolicy(new LegacyOperationalPolicy());
416 }).hasMessage("no policy found for policy ID: null");
418 assertThatThrownBy(() -> {
419 databaseProvider.deleteOperationalPolicy("policy_id");
420 }).hasMessage("no policy found for policy ID: policy_id");
422 assertThatThrownBy(() -> {
423 databaseProvider.getGuardPolicy("policy_id");
424 }).hasMessage("no policy found for policy ID: policy_id");
426 assertThatThrownBy(() -> {
427 databaseProvider.createGuardPolicy(new LegacyGuardPolicyInput());
428 }).hasMessage("policy type for guard policy \"null\" unknown");
430 assertThatThrownBy(() -> {
431 databaseProvider.updateGuardPolicy(new LegacyGuardPolicyInput());
432 }).hasMessage("policy type for guard policy \"null\" unknown");
434 assertThatThrownBy(() -> {
435 databaseProvider.deleteGuardPolicy("policy_id");
436 }).hasMessage("no policy found for policy ID: policy_id");
438 assertEquals(0, databaseProvider.getPdpGroups("name").size());
439 assertEquals(0, databaseProvider.getFilteredPdpGroups(PdpGroupFilter.builder().build()).size());
441 assertNotNull(databaseProvider.createPdpGroups(new ArrayList<>()));
442 assertNotNull(databaseProvider.updatePdpGroups(new ArrayList<>()));
444 PdpGroup pdpGroup = new PdpGroup();
445 pdpGroup.setName("group");
446 pdpGroup.setVersion("1.2.3");
447 pdpGroup.setPdpGroupState(PdpState.ACTIVE);
448 pdpGroup.setPdpSubgroups(new ArrayList<>());
449 List<PdpGroup> groupList = new ArrayList<>();
450 groupList.add(pdpGroup);
452 PdpSubGroup pdpSubGroup = new PdpSubGroup();
453 pdpSubGroup.setPdpType("type");
454 pdpSubGroup.setDesiredInstanceCount(123);
455 pdpSubGroup.setSupportedPolicyTypes(new ArrayList<>());
456 pdpSubGroup.getSupportedPolicyTypes().add(new ToscaPolicyTypeIdentifier("type", "7.8.9"));
457 pdpGroup.getPdpSubgroups().add(pdpSubGroup);
460 pdp.setInstanceId("type-0");
461 pdp.setMessage("Hello");
462 pdp.setPdpState(PdpState.ACTIVE);
463 pdp.setHealthy(PdpHealthStatus.UNKNOWN);
464 pdpSubGroup.setPdpInstances(new ArrayList<>());
465 pdpSubGroup.getPdpInstances().add(pdp);
467 assertEquals(123, databaseProvider.createPdpGroups(groupList).get(0).getPdpSubgroups().get(0)
468 .getDesiredInstanceCount());
469 assertEquals(1, databaseProvider.getPdpGroups("group").size());
471 pdpSubGroup.setDesiredInstanceCount(234);
472 databaseProvider.updatePdpSubGroup("group", pdpSubGroup);
473 assertEquals(234, databaseProvider.getPdpGroups("group").get(0).getPdpSubgroups()
474 .get(0).getDesiredInstanceCount());
476 assertEquals("Hello", databaseProvider.getPdpGroups("group").get(0).getPdpSubgroups()
477 .get(0).getPdpInstances().get(0).getMessage());
478 pdp.setMessage("Howdy");
479 databaseProvider.updatePdp("group", "type", pdp);
480 assertEquals("Howdy", databaseProvider.getPdpGroups("group").get(0).getPdpSubgroups()
481 .get(0).getPdpInstances().get(0).getMessage());
483 assertThatThrownBy(() -> {
484 databaseProvider.deletePdpGroup("name");
485 }).hasMessage("delete of PDP group \"name:0.0.0\" failed, PDP group does not exist");
487 assertEquals(pdpGroup.getName(), databaseProvider.deletePdpGroup("group").getName());
489 assertEquals(0, databaseProvider.getPdpStatistics(null).size());
491 databaseProvider.updatePdpStatistics("group", "type", "type-0", new PdpStatistics());
492 } catch (Exception exc) {
493 LOGGER.warn("test should not throw an exception", exc);
494 fail("test should not throw an exception");