Restructure for authorative models
[policy/models.git] / models-provider / src / test / java / org / onap / policy / models / provider / impl / DatabasePolicyModelsProviderTest.java
1 /*-
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
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
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.
16  *
17  * SPDX-License-Identifier: Apache-2.0
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.onap.policy.models.provider.impl;
22
23 import static org.assertj.core.api.Assertions.assertThatThrownBy;
24 import static org.junit.Assert.assertNotNull;
25 import static org.junit.Assert.fail;
26
27 import java.util.Base64;
28
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;
41
42 /**
43  * Test the database models provider implementation.
44  *
45  * @author Liam Fallon (liam.fallon@est.tech)
46  */
47 public class DatabasePolicyModelsProviderTest {
48     private static final Logger LOGGER = LoggerFactory.getLogger(DatabasePolicyModelsProviderTest.class);
49
50     PolicyModelsProviderParameters parameters;
51
52     /**
53      * Initialize parameters.
54      */
55     @Before
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");
62
63     }
64
65     @Test
66     public void testInitAndClose() throws Exception {
67         PolicyModelsProvider databaseProvider =
68                 new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
69
70         parameters.setDatabaseUrl("jdbc://www.acmecorp.nonexist");
71
72         assertThatThrownBy(() -> {
73             databaseProvider.init();
74         }).hasMessage("could not connect to database with URL \"jdbc://www.acmecorp.nonexist\"");
75
76         parameters.setDatabaseUrl("jdbc:h2:mem:testdb");
77
78         try {
79             databaseProvider.init();
80             databaseProvider.close();
81         } catch (Exception pfme) {
82             fail("test shold not throw an exception here");
83         }
84
85         parameters.setPersistenceUnit("WileECoyote");
86
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);
92
93         parameters.setPersistenceUnit("ToscaConceptTest");
94
95         try {
96             databaseProvider.init();
97             databaseProvider.close();
98         } catch (Exception pfme) {
99             fail("test shold not throw an exception here");
100         }
101
102         try {
103             databaseProvider.close();
104         } catch (Exception pfme) {
105             fail("test shold not throw an exception here");
106         }
107
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\"");
114     }
115
116     @Test
117     public void testProviderMethodsNull() throws Exception {
118         PolicyModelsProvider databaseProvider =
119                 new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
120         databaseProvider.init();
121
122         assertThatThrownBy(() -> {
123             databaseProvider.getPolicyTypes(null);
124         }).hasMessage("policyTypeKey is marked @NonNull but is null");
125
126
127         assertThatThrownBy(() -> {
128             databaseProvider.createPolicyTypes(null);
129         }).hasMessage("serviceTemplate is marked @NonNull but is null");
130
131         assertThatThrownBy(() -> {
132             databaseProvider.updatePolicyTypes(null);
133         }).hasMessage("serviceTemplate is marked @NonNull but is null");
134
135         assertThatThrownBy(() -> {
136             databaseProvider.deletePolicyTypes(null);
137         }).hasMessage("policyTypeKey is marked @NonNull but is null");
138
139         assertThatThrownBy(() -> {
140             databaseProvider.getPolicies(null);
141         }).hasMessage("policyKey is marked @NonNull but is null");
142
143         assertThatThrownBy(() -> {
144             databaseProvider.createPolicies(null);
145         }).hasMessage("serviceTemplate is marked @NonNull but is null");
146
147         assertThatThrownBy(() -> {
148             databaseProvider.updatePolicies(null);
149         }).hasMessage("serviceTemplate is marked @NonNull but is null");
150
151         assertThatThrownBy(() -> {
152             databaseProvider.deletePolicies(null);
153         }).hasMessage("policyKey is marked @NonNull but is null");
154
155         assertThatThrownBy(() -> {
156             databaseProvider.getOperationalPolicy(null);
157         }).hasMessage("policyId is marked @NonNull but is null");
158
159         assertThatThrownBy(() -> {
160             databaseProvider.createOperationalPolicy(null);
161         }).hasMessage("legacyOperationalPolicy is marked @NonNull but is null");
162
163         assertThatThrownBy(() -> {
164             databaseProvider.updateOperationalPolicy(null);
165         }).hasMessage("legacyOperationalPolicy is marked @NonNull but is null");
166
167         assertThatThrownBy(() -> {
168             databaseProvider.deleteOperationalPolicy(null);
169         }).hasMessage("policyId is marked @NonNull but is null");
170
171         assertThatThrownBy(() -> {
172             databaseProvider.getGuardPolicy(null);
173         }).hasMessage("policyId is marked @NonNull but is null");
174
175         assertThatThrownBy(() -> {
176             databaseProvider.createGuardPolicy(null);
177         }).hasMessage("legacyGuardPolicy is marked @NonNull but is null");
178
179         assertThatThrownBy(() -> {
180             databaseProvider.updateGuardPolicy(null);
181         }).hasMessage("legacyGuardPolicy is marked @NonNull but is null");
182
183         assertThatThrownBy(() -> {
184             databaseProvider.deleteGuardPolicy(null);
185         }).hasMessage("policyId is marked @NonNull but is null");
186
187         assertThatThrownBy(() -> {
188             databaseProvider.getPdpGroups(null);
189         }).hasMessage("pdpGroupFilter is marked @NonNull but is null");
190
191         assertThatThrownBy(() -> {
192             databaseProvider.createPdpGroups(null);
193         }).hasMessage("pdpGroups is marked @NonNull but is null");
194
195         assertThatThrownBy(() -> {
196             databaseProvider.updatePdpGroups(null);
197         }).hasMessage("pdpGroups is marked @NonNull but is null");
198
199         assertThatThrownBy(() -> {
200             databaseProvider.deletePdpGroups(null);
201         }).hasMessage("pdpGroupFilter is marked @NonNull but is null");
202
203         databaseProvider.close();
204
205     }
206
207     @Test
208     public void testProviderMethodsNotInit() throws Exception {
209         PolicyModelsProvider databaseProvider =
210                 new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters);
211
212         assertThatThrownBy(() -> {
213             databaseProvider.getPolicyTypes(new PfConceptKey());
214         }).hasMessage("policy models provider is not initilaized");
215     }
216
217     @Test
218     public void testProviderMethods() {
219         try (PolicyModelsProvider databaseProvider =
220                 new PolicyModelsProviderFactory().createPolicyModelsProvider(parameters)) {
221             databaseProvider.init();
222
223             assertThatThrownBy(() -> {
224                 databaseProvider.getPolicyTypes(new PfConceptKey());
225             }).hasMessage("policy type not found: NULL:0.0.0");
226
227             assertThatThrownBy(() -> {
228                 databaseProvider.createPolicyTypes(new JpaToscaServiceTemplate());
229             }).hasMessage("no policy types specified on service template");
230
231             assertThatThrownBy(() -> {
232                 databaseProvider.updatePolicyTypes(new JpaToscaServiceTemplate());
233             }).hasMessage("no policy types specified on service template");
234
235             assertThatThrownBy(() -> {
236                 databaseProvider.deletePolicyTypes(new PfConceptKey());
237             }).hasMessage("policy type not found: NULL:0.0.0");
238
239             assertThatThrownBy(() -> {
240                 databaseProvider.getPolicies(new PfConceptKey());
241             }).hasMessage("policy not found: NULL:0.0.0");
242
243             assertThatThrownBy(() -> {
244                 databaseProvider.createPolicies(new JpaToscaServiceTemplate());
245             }).hasMessage("topology template not specified on service template");
246
247             assertThatThrownBy(() -> {
248                 databaseProvider.updatePolicies(new JpaToscaServiceTemplate());
249             }).hasMessage("topology template not specified on service template");
250
251             assertThatThrownBy(() -> {
252                 databaseProvider.deletePolicies(new PfConceptKey());
253             }).hasMessage("policy not found: NULL:0.0.0");
254
255             assertThatThrownBy(() -> {
256                 databaseProvider.getOperationalPolicy("policy_id");
257             }).hasMessage("no policy found for policy ID: policy_id");
258
259             assertThatThrownBy(() -> {
260                 databaseProvider.createOperationalPolicy(new LegacyOperationalPolicy());
261             }).hasMessage("name is marked @NonNull but is null");
262
263             assertThatThrownBy(() -> {
264                 databaseProvider.updateOperationalPolicy(new LegacyOperationalPolicy());
265             }).hasMessage("no policy found for policy ID: null");
266
267             assertThatThrownBy(() -> {
268                 databaseProvider.deleteOperationalPolicy("policy_id");
269             }).hasMessage("no policy found for policy ID: policy_id");
270
271             assertThatThrownBy(() -> {
272                 databaseProvider.getGuardPolicy("policy_id");
273             }).hasMessage("no policy found for policy ID: policy_id");
274
275             assertThatThrownBy(() -> {
276                 databaseProvider.createGuardPolicy(new LegacyGuardPolicyInput());
277             }).hasMessage("policy type for guard policy \"null\" unknown");
278
279             assertThatThrownBy(() -> {
280                 databaseProvider.updateGuardPolicy(new LegacyGuardPolicyInput());
281             }).hasMessage("policy type for guard policy \"null\" unknown");
282
283             assertThatThrownBy(() -> {
284                 databaseProvider.deleteGuardPolicy("policy_id");
285             }).hasMessage("no policy found for policy ID: policy_id");
286
287             assertNotNull(databaseProvider.getPdpGroups("filter"));
288             assertNotNull(databaseProvider.createPdpGroups(new PdpGroups()));
289             assertNotNull(databaseProvider.updatePdpGroups(new PdpGroups()));
290             assertNotNull(databaseProvider.deletePdpGroups("filter"));
291
292         } catch (Exception exc) {
293             LOGGER.warn("test should not throw an exception", exc);
294             fail("test should not throw an exception");
295         }
296     }
297 }