Merge "Custom Query Code"
[policy/models.git] / models-tosca / src / test / java / org / onap / policy / models / tosca / simple / provider / SimpleToscaProviderTest.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.tosca.simple.provider;
22
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.assertTrue;
27 import static org.junit.Assert.fail;
28
29 import java.sql.Connection;
30 import java.sql.DriverManager;
31
32 import org.junit.After;
33 import org.junit.Before;
34 import org.junit.Test;
35 import org.onap.policy.common.utils.coder.StandardCoder;
36 import org.onap.policy.common.utils.resources.ResourceUtils;
37 import org.onap.policy.models.base.PfConceptKey;
38 import org.onap.policy.models.base.PfModelException;
39 import org.onap.policy.models.dao.DaoParameters;
40 import org.onap.policy.models.dao.PfDao;
41 import org.onap.policy.models.dao.PfDaoFactory;
42 import org.onap.policy.models.dao.impl.DefaultPfDao;
43 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
44 import org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicies;
45 import org.onap.policy.models.tosca.simple.concepts.JpaToscaServiceTemplate;
46 import org.onap.policy.models.tosca.simple.concepts.JpaToscaTopologyTemplate;
47
48 /**
49  * Test the {@link SimpleToscaProvider} class.
50  *
51  * @author Liam Fallon (liam.fallon@est.tech)
52  */
53 public class SimpleToscaProviderTest {
54     private Connection connection;
55     private PfDao pfDao;
56     private StandardCoder standardCoder;
57
58     /**
59      * Set up the DAO towards the database.
60      *
61      * @throws Exception on database errors
62      */
63     @Before
64     public void setupDao() throws Exception {
65         // Use the JDBC UI "jdbc:h2:mem:testdb" to test towards the h2 database
66         // Use the JDBC UI "jdbc:mariadb://localhost:3306/policy" to test towards a locally installed mariadb instance
67         connection = DriverManager.getConnection("jdbc:h2:mem:testdb", "policy", "P01icY");
68
69         final DaoParameters daoParameters = new DaoParameters();
70         daoParameters.setPluginClass(DefaultPfDao.class.getCanonicalName());
71
72         // Use the persistence unit ToscaConceptTest to test towards the h2 database
73         // Use the persistence unit ToscaConceptMariaDBTest to test towards a locally installed mariadb instance
74         daoParameters.setPersistenceUnit("ToscaConceptTest");
75
76         pfDao = new PfDaoFactory().createPfDao(daoParameters);
77         pfDao.init(daoParameters);
78     }
79
80     /**
81      * Set up GSON.
82      */
83     @Before
84     public void setupGson() {
85         standardCoder = new StandardCoder();
86     }
87
88     @After
89     public void teardown() throws Exception {
90         pfDao.close();
91         connection.close();
92     }
93
94     @Test
95     public void testPoliciesGet() throws Exception {
96         ToscaServiceTemplate toscaServiceTemplate = standardCoder.decode(
97                 ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.json"),
98                 ToscaServiceTemplate.class);
99
100         JpaToscaServiceTemplate originalServiceTemplate = new JpaToscaServiceTemplate();
101         originalServiceTemplate.fromAuthorative(toscaServiceTemplate);
102
103         assertNotNull(originalServiceTemplate);
104         JpaToscaServiceTemplate createdServiceTemplate =
105                 new SimpleToscaProvider().createPolicies(pfDao, originalServiceTemplate);
106
107         assertEquals(originalServiceTemplate, createdServiceTemplate);
108
109         PfConceptKey policyKey = new PfConceptKey("onap.restart.tca:1.0.0");
110
111         JpaToscaServiceTemplate gotServiceTemplate =
112                 new SimpleToscaProvider().getPolicies(pfDao, policyKey.getName(), policyKey.getVersion());
113
114         assertEquals(originalServiceTemplate.getTopologyTemplate().getPolicies().get(policyKey),
115                 gotServiceTemplate.getTopologyTemplate().getPolicies().get(policyKey));
116
117     }
118
119     @Test
120     public void testPolicyCreate() throws Exception {
121         ToscaServiceTemplate toscaServiceTemplate = standardCoder.decode(
122                 ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.json"),
123                 ToscaServiceTemplate.class);
124
125         JpaToscaServiceTemplate originalServiceTemplate = new JpaToscaServiceTemplate();
126         originalServiceTemplate.fromAuthorative(toscaServiceTemplate);
127
128         assertNotNull(originalServiceTemplate);
129         JpaToscaServiceTemplate createdServiceTemplate =
130                 new SimpleToscaProvider().createPolicies(pfDao, originalServiceTemplate);
131
132         assertEquals(originalServiceTemplate, createdServiceTemplate);
133     }
134
135     @Test
136     public void testPolicyUpdate() throws Exception {
137         ToscaServiceTemplate toscaServiceTemplate = standardCoder.decode(
138                 ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.json"),
139                 ToscaServiceTemplate.class);
140
141         JpaToscaServiceTemplate originalServiceTemplate = new JpaToscaServiceTemplate();
142         originalServiceTemplate.fromAuthorative(toscaServiceTemplate);
143
144         assertNotNull(originalServiceTemplate);
145         JpaToscaServiceTemplate updatedServiceTemplate =
146                 new SimpleToscaProvider().updatePolicies(pfDao, originalServiceTemplate);
147
148         assertEquals(originalServiceTemplate, updatedServiceTemplate);
149     }
150
151     @Test
152     public void testPoliciesDelete() throws Exception {
153         ToscaServiceTemplate toscaServiceTemplate = standardCoder.decode(
154                 ResourceUtils.getResourceAsString("policies/vCPE.policy.monitoring.input.tosca.json"),
155                 ToscaServiceTemplate.class);
156
157         JpaToscaServiceTemplate originalServiceTemplate = new JpaToscaServiceTemplate();
158         originalServiceTemplate.fromAuthorative(toscaServiceTemplate);
159
160         assertNotNull(originalServiceTemplate);
161         JpaToscaServiceTemplate createdServiceTemplate =
162                 new SimpleToscaProvider().createPolicies(pfDao, originalServiceTemplate);
163
164         assertEquals(originalServiceTemplate, createdServiceTemplate);
165
166         PfConceptKey policyKey = new PfConceptKey("onap.restart.tca:1.0.0");
167
168         JpaToscaServiceTemplate deletedServiceTemplate =
169                 new SimpleToscaProvider().deletePolicy(pfDao, new PfConceptKey(policyKey));
170
171         assertEquals(originalServiceTemplate.getTopologyTemplate().getPolicies().get(policyKey),
172                 deletedServiceTemplate.getTopologyTemplate().getPolicies().get(policyKey));
173
174         assertTrue(new SimpleToscaProvider().getPolicies(pfDao, policyKey.getName(), policyKey.getVersion())
175                 .getTopologyTemplate().getPolicies().getConceptMap().isEmpty());
176     }
177
178     @Test
179     public void testAssertPoliciesExist() throws PfModelException {
180         JpaToscaServiceTemplate testServiceTemplate = new JpaToscaServiceTemplate();
181
182         try {
183             new SimpleToscaProvider().createPolicies(pfDao, testServiceTemplate);
184             fail("test should throw an exception here");
185         } catch (Exception exc) {
186             assertEquals("topology template not specified on service template", exc.getMessage());
187         }
188
189         testServiceTemplate.setTopologyTemplate(new JpaToscaTopologyTemplate());
190         try {
191             new SimpleToscaProvider().createPolicies(pfDao, testServiceTemplate);
192             fail("test should throw an exception here");
193         } catch (Exception exc) {
194             assertEquals("no policies specified on topology template of service template", exc.getMessage());
195         }
196
197         testServiceTemplate.getTopologyTemplate().setPolicies(new JpaToscaPolicies());
198         try {
199             new SimpleToscaProvider().createPolicies(pfDao, testServiceTemplate);
200             fail("test should throw an exception here");
201         } catch (Exception exc) {
202             assertEquals("list of policies specified on topology template of service template is empty",
203                     exc.getMessage());
204         }
205     }
206
207     @Test
208     public void testNonNulls() {
209         assertThatThrownBy(() -> {
210             new SimpleToscaProvider().getPolicyTypes(null, null, null);
211         }).hasMessage("dao is marked @NonNull but is null");
212
213         assertThatThrownBy(() -> {
214             new SimpleToscaProvider().createPolicyTypes(null, null);
215         }).hasMessage("dao is marked @NonNull but is null");
216
217         assertThatThrownBy(() -> {
218             new SimpleToscaProvider().createPolicyTypes(null, new JpaToscaServiceTemplate());
219         }).hasMessage("dao is marked @NonNull but is null");
220
221         assertThatThrownBy(() -> {
222             new SimpleToscaProvider().createPolicyTypes(pfDao, null);
223         }).hasMessage("serviceTemplate is marked @NonNull but is null");
224
225         assertThatThrownBy(() -> {
226             new SimpleToscaProvider().updatePolicyTypes(null, null);
227         }).hasMessage("dao is marked @NonNull but is null");
228
229         assertThatThrownBy(() -> {
230             new SimpleToscaProvider().updatePolicyTypes(null, new JpaToscaServiceTemplate());
231         }).hasMessage("dao is marked @NonNull but is null");
232
233         assertThatThrownBy(() -> {
234             new SimpleToscaProvider().updatePolicyTypes(pfDao, null);
235         }).hasMessage("serviceTemplate is marked @NonNull but is null");
236
237         assertThatThrownBy(() -> {
238             new SimpleToscaProvider().deletePolicyType(null, null);
239         }).hasMessage("dao is marked @NonNull but is null");
240
241         assertThatThrownBy(() -> {
242             new SimpleToscaProvider().deletePolicyType(null, new PfConceptKey());
243         }).hasMessage("dao is marked @NonNull but is null");
244
245         assertThatThrownBy(() -> {
246             new SimpleToscaProvider().deletePolicyType(pfDao, null);
247         }).hasMessage("policyTypeKey is marked @NonNull but is null");
248
249         assertThatThrownBy(() -> {
250             new SimpleToscaProvider().getPolicies(null, null, null);
251         }).hasMessage("dao is marked @NonNull but is null");
252
253         assertThatThrownBy(() -> {
254             new SimpleToscaProvider().createPolicies(null, null);
255         }).hasMessage("dao is marked @NonNull but is null");
256
257         assertThatThrownBy(() -> {
258             new SimpleToscaProvider().createPolicies(null, new JpaToscaServiceTemplate());
259         }).hasMessage("dao is marked @NonNull but is null");
260
261         assertThatThrownBy(() -> {
262             new SimpleToscaProvider().createPolicies(pfDao, null);
263         }).hasMessage("serviceTemplate is marked @NonNull but is null");
264
265         assertThatThrownBy(() -> {
266             new SimpleToscaProvider().updatePolicies(null, null);
267         }).hasMessage("dao is marked @NonNull but is null");
268
269         assertThatThrownBy(() -> {
270             new SimpleToscaProvider().updatePolicies(null, new JpaToscaServiceTemplate());
271         }).hasMessage("dao is marked @NonNull but is null");
272
273         assertThatThrownBy(() -> {
274             new SimpleToscaProvider().updatePolicies(pfDao, null);
275         }).hasMessage("serviceTemplate is marked @NonNull but is null");
276
277         assertThatThrownBy(() -> {
278             new SimpleToscaProvider().deletePolicy(null, null);
279         }).hasMessage("dao is marked @NonNull but is null");
280
281         assertThatThrownBy(() -> {
282             new SimpleToscaProvider().deletePolicy(null, new PfConceptKey());
283         }).hasMessage("dao is marked @NonNull but is null");
284
285         assertThatThrownBy(() -> {
286             new SimpleToscaProvider().deletePolicy(pfDao, null);
287         }).hasMessage("policyKey is marked @NonNull but is null");
288     }
289 }