Remove unused imports in models
[policy/models.git] / models-tosca / src / test / java / org / onap / policy / models / tosca / authorative / provider / AuthorativeToscaProviderNodeTemplateTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2022 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.authorative.provider;
22
23 import static org.assertj.core.api.Assertions.assertThat;
24 import static org.assertj.core.api.Assertions.assertThatThrownBy;
25 import static org.junit.Assert.assertEquals;
26 import static org.junit.Assert.assertNotNull;
27 import static org.junit.Assert.assertTrue;
28
29 import java.util.List;
30 import java.util.Map;
31 import java.util.Properties;
32 import org.eclipse.persistence.config.PersistenceUnitProperties;
33 import org.junit.After;
34 import org.junit.Before;
35 import org.junit.Test;
36 import org.onap.policy.common.utils.coder.CoderException;
37 import org.onap.policy.common.utils.coder.StandardCoder;
38 import org.onap.policy.common.utils.coder.YamlJsonTranslator;
39 import org.onap.policy.common.utils.resources.ResourceUtils;
40 import org.onap.policy.models.base.PfModelException;
41 import org.onap.policy.models.dao.DaoParameters;
42 import org.onap.policy.models.dao.PfDao;
43 import org.onap.policy.models.dao.PfDaoFactory;
44 import org.onap.policy.models.dao.impl.DefaultPfDao;
45 import org.onap.policy.models.tosca.authorative.concepts.ToscaEntityKey;
46 import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeTemplate;
47 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
48 import org.yaml.snakeyaml.Yaml;
49
50 /**
51  * Test of the {@link AuthorativeToscaProvider} class.
52  */
53 public class AuthorativeToscaProviderNodeTemplateTest {
54
55
56     private static final String NODE_TEMPLATES_JSON = "nodetemplates/nodetemplates.metadatasets.input.tosca.json";
57     private static final String UPDATED_METADATA_SET_JSON = "nodetemplates/TestUpdateMetadataSet.json";
58     private static final String CREATE_METADATA_SET_JSON = "nodetemplates/TestCreateMetadataSet.json";
59     private static final String POLICY_WITH_METADATA_SET_REF = "policies/apex.policy.decisionmaker.input.tosca.yaml";
60     private static final String APEX_POLICY_TYPE_YAML = "policytypes/onap.policies.native.Apex.yaml";
61     private static final String DAO_IS_NULL = "^dao is marked .*on.*ull but is null$";
62     private static ToscaServiceTemplate toscaServiceTemplate;
63     private static ToscaServiceTemplate updatedToscaServiceTemplate;
64     private static ToscaServiceTemplate createToscaNodeTemplate;
65     private PfDao pfDao;
66     private StandardCoder standardCoder;
67     private AuthorativeToscaProvider authorativeToscaProvider = new AuthorativeToscaProvider();
68     private YamlJsonTranslator yamlJsonTranslator = new YamlJsonTranslator();
69
70     /**
71      * Read policy metadataSet input json.
72      * @throws Exception Coder exception
73      */
74     @Before
75     public void fetchToscaNodeTemplatesJson() throws Exception {
76         standardCoder = new StandardCoder();
77         toscaServiceTemplate =
78             standardCoder.decode(ResourceUtils.getResourceAsString(NODE_TEMPLATES_JSON), ToscaServiceTemplate.class);
79         updatedToscaServiceTemplate =
80             standardCoder.decode(ResourceUtils.getResourceAsString(UPDATED_METADATA_SET_JSON),
81                 ToscaServiceTemplate.class);
82         createToscaNodeTemplate = standardCoder.decode(ResourceUtils.getResourceAsString(
83             CREATE_METADATA_SET_JSON), ToscaServiceTemplate.class);
84     }
85
86     /**
87      * Set up DAO towards the database.
88      *
89      * @throws Exception on database errors
90      */
91     @Before
92     public void setupDao() throws Exception {
93         final DaoParameters daoParameters = new DaoParameters();
94         daoParameters.setPluginClass(DefaultPfDao.class.getName());
95
96         daoParameters.setPersistenceUnit("ToscaConceptTest");
97
98         Properties jdbcProperties = new Properties();
99         jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_USER, "policy");
100         jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_PASSWORD, "P01icY");
101
102         if (System.getProperty("USE-MARIADB") != null) {
103             jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_DRIVER, "org.mariadb.jdbc.Driver");
104             jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_URL, "jdbc:mariadb://localhost:3306/policy");
105         } else {
106             jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_DRIVER, "org.h2.Driver");
107             jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_URL,
108                 "jdbc:h2:mem:AuthorativeToscaProviderNodeTemplatesTest");
109         }
110
111         daoParameters.setJdbcProperties(jdbcProperties);
112
113         pfDao = new PfDaoFactory().createPfDao(daoParameters);
114         pfDao.init(daoParameters);
115     }
116
117     @After
118     public void teardown() {
119         pfDao.close();
120     }
121
122     @Test
123     public void testPolicyMetadataSetsGet() throws Exception {
124
125         assertThatThrownBy(() -> {
126             authorativeToscaProvider.getNodeTemplateMetadataSet(null, null, null);
127         }).hasMessageMatching(DAO_IS_NULL);
128
129         assertNotNull(toscaServiceTemplate);
130         authorativeToscaProvider.createToscaNodeTemplates(pfDao, toscaServiceTemplate);
131
132         //Fetch all metadataSet if id is null
133         List<Map<ToscaEntityKey, Map<String, Object>>> gotPolicyMetadataSets = authorativeToscaProvider
134             .getNodeTemplateMetadataSet(pfDao, null, null);
135         assertEquals(3, gotPolicyMetadataSets.size());
136
137         // Get filtered metadataSet
138         List<Map<ToscaEntityKey, Map<String, Object>>> filteredPolicyMetadataSet = authorativeToscaProvider
139             .getNodeTemplateMetadataSet(pfDao, "apexMetadata_adaptive", "2.3.1");
140         assertEquals(1, filteredPolicyMetadataSet.size());
141
142         //Get invalid metadataSet
143         List<Map<ToscaEntityKey, Map<String, Object>>> filteredMetadataSetInvalid = authorativeToscaProvider
144             .getNodeTemplateMetadataSet(pfDao, "invalidname", "1.0.0");
145         assertThat(filteredMetadataSetInvalid).isEmpty();
146     }
147
148     @Test
149     public void testToscaNodeTemplatesGet() throws Exception {
150
151         assertThatThrownBy(() -> {
152             authorativeToscaProvider.getToscaNodeTemplate(null, null, null);
153         }).hasMessageMatching(DAO_IS_NULL);
154
155         assertNotNull(toscaServiceTemplate);
156         authorativeToscaProvider.createToscaNodeTemplates(pfDao, toscaServiceTemplate);
157
158         //Fetch all node templates if id is null
159         List<ToscaNodeTemplate> gotToscaNodeTemplates = authorativeToscaProvider
160             .getToscaNodeTemplate(pfDao, null, null);
161         assertEquals(3, gotToscaNodeTemplates.size());
162
163         // Get filtered node templates
164         List<ToscaNodeTemplate> filteredNodeTemplates = authorativeToscaProvider
165             .getToscaNodeTemplate(pfDao, "apexMetadata_adaptive", "2.3.1");
166         assertEquals(1, filteredNodeTemplates.size());
167
168         //Get invalid node template
169         List<ToscaNodeTemplate> filteredNodeTemplatesInvalid = authorativeToscaProvider
170             .getToscaNodeTemplate(pfDao, "invalidname", "1.0.0");
171         assertThat(filteredNodeTemplatesInvalid).isEmpty();
172     }
173
174     @Test
175     public void testToscaNodeTemplatesCreate() throws Exception {
176         assertThatThrownBy(() -> {
177             authorativeToscaProvider.createToscaNodeTemplates(null, null);
178         }).hasMessageMatching(DAO_IS_NULL);
179
180         assertThatThrownBy(() -> {
181             authorativeToscaProvider.createToscaNodeTemplates(null, new ToscaServiceTemplate());
182         }).hasMessageMatching(DAO_IS_NULL);
183
184         assertThatThrownBy(() -> {
185             authorativeToscaProvider.createToscaNodeTemplates(pfDao, null);
186         }).hasMessageMatching("^toscaServiceTemplate is marked .*on.*ull but is null$");
187
188         ToscaServiceTemplate createdNodeTemplates =
189             authorativeToscaProvider.createToscaNodeTemplates(pfDao, toscaServiceTemplate);
190         assertThat(createdNodeTemplates.getToscaTopologyTemplate().getNodeTemplates()).hasSize(3);
191         assertThat(createdNodeTemplates.getToscaTopologyTemplate().getNodeTemplates().get("apexMetadata_grpc")
192             .getMetadata()).containsKey("threshold");
193
194         authorativeToscaProvider.createToscaNodeTemplates(pfDao, createToscaNodeTemplate);
195         assertThat(authorativeToscaProvider.getNodeTemplateMetadataSet(pfDao, null, null)).hasSize(4);
196
197         //Create node template with invalid node type
198         createToscaNodeTemplate.getToscaTopologyTemplate().getNodeTemplates().get("apexMetadata_adaptive")
199             .setType("invalid.type");
200         assertThatThrownBy(() -> {
201             authorativeToscaProvider.createToscaNodeTemplates(pfDao, createToscaNodeTemplate);
202         }).hasMessageMatching("^NODE_TYPE .* for toscaNodeTemplate .* does not exist$");
203
204     }
205
206     @Test
207     public void testToscaNodeTemplateUpdate() throws Exception {
208         assertThatThrownBy(() -> {
209             authorativeToscaProvider.updateToscaNodeTemplates(null, null);
210         }).hasMessageMatching(DAO_IS_NULL);
211
212         assertThatThrownBy(() -> {
213             authorativeToscaProvider.updateToscaNodeTemplates(null, new ToscaServiceTemplate());
214         }).hasMessageMatching(DAO_IS_NULL);
215
216         assertThatThrownBy(() -> {
217             authorativeToscaProvider.updateToscaNodeTemplates(pfDao, null);
218         }).hasMessageMatching("^serviceTemplate is marked non-null but is null$");
219
220         authorativeToscaProvider.createToscaNodeTemplates(pfDao, toscaServiceTemplate);
221         ToscaServiceTemplate updatedTemplate =
222             authorativeToscaProvider.updateToscaNodeTemplates(pfDao, updatedToscaServiceTemplate);
223         assertEquals("Updated Metadata set for GRPC",
224             updatedTemplate.getToscaTopologyTemplate().getNodeTemplates().get("apexMetadata_grpc")
225                 .getDescription());
226
227         //Update nodeTemplate with invalid node type
228         updatedToscaServiceTemplate.getToscaTopologyTemplate().getNodeTemplates().get("apexMetadata_grpc")
229             .setTypeVersion("0.0.0");
230         assertThatThrownBy(() -> {
231             authorativeToscaProvider.updateToscaNodeTemplates(pfDao, updatedToscaServiceTemplate);
232         }).hasMessageMatching("^NODE_TYPE .* for toscaNodeTemplate .* does not exist$");
233     }
234
235     @Test
236     public void testToscaNodeTemplatetDelete() throws Exception {
237         assertThatThrownBy(() -> {
238             authorativeToscaProvider.deleteToscaNodeTemplate(null, null, null);
239         }).hasMessageMatching(DAO_IS_NULL);
240
241         assertThatThrownBy(() -> {
242             authorativeToscaProvider.deleteToscaNodeTemplate(null, null, "0.0.1");
243         }).hasMessageMatching(DAO_IS_NULL);
244
245         assertThatThrownBy(() -> {
246             authorativeToscaProvider.deleteToscaNodeTemplate(pfDao, null, null);
247         }).hasMessageMatching("^name is marked .*on.*ull but is null$");
248
249         assertThatThrownBy(() -> {
250             authorativeToscaProvider.deleteToscaNodeTemplate(pfDao, "name", null);
251         }).hasMessageMatching("^version is marked .*on.*ull but is null$");
252
253         authorativeToscaProvider.createToscaNodeTemplates(pfDao, toscaServiceTemplate);
254         assertThatThrownBy(() -> {
255             authorativeToscaProvider.deleteToscaNodeTemplate(pfDao, "dummyname", "1.0.1");
256         }).hasMessage("node template dummyname:1.0.1 not found");
257
258
259         ToscaServiceTemplate responseTemplate =
260             authorativeToscaProvider.deleteToscaNodeTemplate(pfDao, "apexMetadata_decisionMaker",
261                 "1.0.0");
262
263         assertTrue(responseTemplate.getToscaTopologyTemplate().getNodeTemplates()
264             .containsKey("apexMetadata_decisionMaker"));
265         assertThat(responseTemplate.getToscaTopologyTemplate().getNodeTemplates()).hasSize(1);
266
267         assertThat(authorativeToscaProvider.getNodeTemplateMetadataSet(pfDao, null, null)).hasSize(2);
268
269     }
270
271     @Test
272     public void testNodeTemplatesWithExistingPolicy() throws Exception {
273         String policyString = ResourceUtils.getResourceAsString(POLICY_WITH_METADATA_SET_REF);
274         ToscaServiceTemplate policyServiceTemplate =
275             yamlJsonTranslator.fromYaml(policyString, ToscaServiceTemplate.class);
276
277         createPolicyTypes();
278         //Create policy with metadataSet reference in it
279         authorativeToscaProvider.createPolicies(pfDao, policyServiceTemplate);
280         assertThat(authorativeToscaProvider.getPolicyList(pfDao, null, null)).hasSize(1);
281         assertEquals("apexMetadata_decisionMaker", authorativeToscaProvider
282             .getPolicyList(pfDao, null, null).get(0).getMetadata().get("metadataSetName"));
283
284         //Create node templates
285         authorativeToscaProvider.createToscaNodeTemplates(pfDao, toscaServiceTemplate);
286
287         //delete node templates referenced in existing policy
288         assertThatThrownBy(() -> {
289             authorativeToscaProvider
290                 .deleteToscaNodeTemplate(pfDao, "apexMetadata_decisionMaker", "1.0.0");
291         }).hasMessageEndingWith("Node template is in use, it is referenced in Tosca Policy "
292             + "operational.apex.decisionMaker version 1.0.0");
293
294         //delete unreferenced node template
295         authorativeToscaProvider.deleteToscaNodeTemplate(pfDao, "apexMetadata_adaptive", "2.3.1");
296         assertThat(authorativeToscaProvider.getNodeTemplateMetadataSet(pfDao, null, null)).hasSize(2);
297     }
298
299     private void createPolicyTypes() throws CoderException, PfModelException {
300         Object yamlObject =
301             new Yaml().load(ResourceUtils.getResourceAsString(APEX_POLICY_TYPE_YAML));
302         String yamlAsJsonString = new StandardCoder().encode(yamlObject);
303
304         ToscaServiceTemplate toscaServiceTemplatePolicyType =
305             standardCoder.decode(yamlAsJsonString, ToscaServiceTemplate.class);
306
307         assertNotNull(toscaServiceTemplatePolicyType);
308         new AuthorativeToscaProvider().createPolicyTypes(pfDao, toscaServiceTemplatePolicyType);
309     }
310
311 }