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
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.tosca.authorative.provider;
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;
29 import java.util.List;
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.PfConceptKey;
41 import org.onap.policy.models.base.PfModelException;
42 import org.onap.policy.models.dao.DaoParameters;
43 import org.onap.policy.models.dao.PfDao;
44 import org.onap.policy.models.dao.PfDaoFactory;
45 import org.onap.policy.models.dao.impl.DefaultPfDao;
46 import org.onap.policy.models.tosca.authorative.concepts.ToscaEntityKey;
47 import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeTemplate;
48 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
49 import org.yaml.snakeyaml.Yaml;
52 * Test of the {@link AuthorativeToscaProvider} class.
54 public class AuthorativeToscaProviderNodeTemplateTest {
57 private static final String NODE_TEMPLATES_JSON = "nodetemplates/nodetemplates.metadatasets.input.tosca.json";
58 private static final String UPDATED_METADATA_SET_JSON = "nodetemplates/TestUpdateMetadataSet.json";
59 private static final String CREATE_METADATA_SET_JSON = "nodetemplates/TestCreateMetadataSet.json";
60 private static final String POLICY_WITH_METADATA_SET_REF = "policies/apex.policy.decisionmaker.input.tosca.yaml";
61 private static final String APEX_POLICY_TYPE_YAML = "policytypes/onap.policies.native.Apex.yaml";
62 private static final String DAO_IS_NULL = "^dao is marked .*on.*ull but is null$";
63 private static ToscaServiceTemplate toscaServiceTemplate;
64 private static ToscaServiceTemplate updatedToscaServiceTemplate;
65 private static ToscaServiceTemplate createToscaNodeTemplate;
67 private StandardCoder standardCoder;
68 private AuthorativeToscaProvider authorativeToscaProvider = new AuthorativeToscaProvider();
69 private YamlJsonTranslator yamlJsonTranslator = new YamlJsonTranslator();
72 * Read policy metadataSet input json.
73 * @throws Exception Coder exception
76 public void fetchToscaNodeTemplatesJson() throws Exception {
77 standardCoder = new StandardCoder();
78 toscaServiceTemplate =
79 standardCoder.decode(ResourceUtils.getResourceAsString(NODE_TEMPLATES_JSON), ToscaServiceTemplate.class);
80 updatedToscaServiceTemplate =
81 standardCoder.decode(ResourceUtils.getResourceAsString(UPDATED_METADATA_SET_JSON),
82 ToscaServiceTemplate.class);
83 createToscaNodeTemplate = standardCoder.decode(ResourceUtils.getResourceAsString(
84 CREATE_METADATA_SET_JSON), ToscaServiceTemplate.class);
88 * Set up DAO towards the database.
90 * @throws Exception on database errors
93 public void setupDao() throws Exception {
94 final DaoParameters daoParameters = new DaoParameters();
95 daoParameters.setPluginClass(DefaultPfDao.class.getName());
97 daoParameters.setPersistenceUnit("ToscaConceptTest");
99 Properties jdbcProperties = new Properties();
100 jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_USER, "policy");
101 jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_PASSWORD, "P01icY");
103 if (System.getProperty("USE-MARIADB") != null) {
104 jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_DRIVER, "org.mariadb.jdbc.Driver");
105 jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_URL, "jdbc:mariadb://localhost:3306/policy");
107 jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_DRIVER, "org.h2.Driver");
108 jdbcProperties.setProperty(PersistenceUnitProperties.JDBC_URL,
109 "jdbc:h2:mem:AuthorativeToscaProviderNodeTemplatesTest");
112 daoParameters.setJdbcProperties(jdbcProperties);
114 pfDao = new PfDaoFactory().createPfDao(daoParameters);
115 pfDao.init(daoParameters);
119 public void teardown() {
124 public void testPolicyMetadataSetsGet() throws Exception {
126 assertThatThrownBy(() -> {
127 authorativeToscaProvider.getNodeTemplateMetadataSet(null, null, null);
128 }).hasMessageMatching(DAO_IS_NULL);
130 assertNotNull(toscaServiceTemplate);
131 authorativeToscaProvider.createToscaNodeTemplates(pfDao, toscaServiceTemplate);
132 List<Map<PfConceptKey, ToscaNodeTemplate>> gotPolicyMetadataSets1 = authorativeToscaProvider
133 .getToscaNodeTemplate(pfDao, null, null);
134 assertEquals(3, gotPolicyMetadataSets1.size());
136 //Fetch all metadataSet if id is null
137 List<Map<ToscaEntityKey, Map<String, Object>>> gotPolicyMetadataSets = authorativeToscaProvider
138 .getNodeTemplateMetadataSet(pfDao, null, null);
139 assertEquals(3, gotPolicyMetadataSets.size());
141 // Get filtered metadataSet
142 List<Map<ToscaEntityKey, Map<String, Object>>> filteredPolicyMetadataSet = authorativeToscaProvider
143 .getNodeTemplateMetadataSet(pfDao, "apexMetadata_adaptive", "2.3.1");
144 assertEquals(1, filteredPolicyMetadataSet.size());
146 //Get invalid metadataSet
147 List<Map<ToscaEntityKey, Map<String, Object>>> filteredMetadataSetInvalid = authorativeToscaProvider
148 .getNodeTemplateMetadataSet(pfDao, "invalidname", "1.0.0");
149 assertThat(filteredMetadataSetInvalid).isEmpty();
153 public void testToscaNodeTemplatesGet() throws Exception {
155 assertThatThrownBy(() -> {
156 authorativeToscaProvider.getToscaNodeTemplate(null, null, null);
157 }).hasMessageMatching(DAO_IS_NULL);
159 assertNotNull(toscaServiceTemplate);
160 authorativeToscaProvider.createToscaNodeTemplates(pfDao, toscaServiceTemplate);
162 //Fetch all node templates if id is null
163 List<Map<PfConceptKey, ToscaNodeTemplate>> gotToscaNodeTemplates = authorativeToscaProvider
164 .getToscaNodeTemplate(pfDao, null, null);
165 assertEquals(3, gotToscaNodeTemplates.size());
167 // Get filtered node templates
168 List<Map<PfConceptKey, ToscaNodeTemplate>> filteredNodeTemplates = authorativeToscaProvider
169 .getToscaNodeTemplate(pfDao, "apexMetadata_adaptive", "2.3.1");
170 assertEquals(1, filteredNodeTemplates.size());
172 //Get invalid node template
173 List<Map<PfConceptKey, ToscaNodeTemplate>> filteredNodeTemplatesInvalid = authorativeToscaProvider
174 .getToscaNodeTemplate(pfDao, "invalidname", "1.0.0");
175 assertThat(filteredNodeTemplatesInvalid).isEmpty();
179 public void testToscaNodeTemplatesCreate() throws Exception {
180 assertThatThrownBy(() -> {
181 authorativeToscaProvider.createToscaNodeTemplates(null, null);
182 }).hasMessageMatching(DAO_IS_NULL);
184 assertThatThrownBy(() -> {
185 authorativeToscaProvider.createToscaNodeTemplates(null, new ToscaServiceTemplate());
186 }).hasMessageMatching(DAO_IS_NULL);
188 assertThatThrownBy(() -> {
189 authorativeToscaProvider.createToscaNodeTemplates(pfDao, null);
190 }).hasMessageMatching("^toscaServiceTemplate is marked .*on.*ull but is null$");
192 ToscaServiceTemplate createdNodeTemplates =
193 authorativeToscaProvider.createToscaNodeTemplates(pfDao, toscaServiceTemplate);
194 assertThat(createdNodeTemplates.getToscaTopologyTemplate().getNodeTemplates()).hasSize(3);
195 assertThat(createdNodeTemplates.getToscaTopologyTemplate().getNodeTemplates().get("apexMetadata_grpc")
196 .getMetadata()).containsKey("threshold");
198 authorativeToscaProvider.createToscaNodeTemplates(pfDao, createToscaNodeTemplate);
199 assertThat(authorativeToscaProvider.getNodeTemplateMetadataSet(pfDao, null, null)).hasSize(4);
201 //Create node template with invalid node type
202 createToscaNodeTemplate.getToscaTopologyTemplate().getNodeTemplates().get("apexMetadata_adaptive")
203 .setType("invalid.type");
204 assertThatThrownBy(() -> {
205 authorativeToscaProvider.createToscaNodeTemplates(pfDao, createToscaNodeTemplate);
206 }).hasMessageMatching("^NODE_TYPE .* for toscaNodeTemplate .* does not exist$");
211 public void testToscaNodeTemplateUpdate() throws Exception {
212 assertThatThrownBy(() -> {
213 authorativeToscaProvider.updateToscaNodeTemplates(null, null);
214 }).hasMessageMatching(DAO_IS_NULL);
216 assertThatThrownBy(() -> {
217 authorativeToscaProvider.updateToscaNodeTemplates(null, new ToscaServiceTemplate());
218 }).hasMessageMatching(DAO_IS_NULL);
220 assertThatThrownBy(() -> {
221 authorativeToscaProvider.updateToscaNodeTemplates(pfDao, null);
222 }).hasMessageMatching("^serviceTemplate is marked non-null but is null$");
224 authorativeToscaProvider.createToscaNodeTemplates(pfDao, toscaServiceTemplate);
225 ToscaServiceTemplate updatedTemplate =
226 authorativeToscaProvider.updateToscaNodeTemplates(pfDao, updatedToscaServiceTemplate);
227 assertEquals("Updated Metadata set for GRPC",
228 updatedTemplate.getToscaTopologyTemplate().getNodeTemplates().get("apexMetadata_grpc")
231 //Update nodeTemplate with invalid node type
232 updatedToscaServiceTemplate.getToscaTopologyTemplate().getNodeTemplates().get("apexMetadata_grpc")
233 .setTypeVersion("0.0.0");
234 assertThatThrownBy(() -> {
235 authorativeToscaProvider.updateToscaNodeTemplates(pfDao, updatedToscaServiceTemplate);
236 }).hasMessageMatching("^NODE_TYPE .* for toscaNodeTemplate .* does not exist$");
240 public void testToscaNodeTemplatetDelete() throws Exception {
241 assertThatThrownBy(() -> {
242 authorativeToscaProvider.deleteToscaNodeTemplate(null, null, null);
243 }).hasMessageMatching(DAO_IS_NULL);
245 assertThatThrownBy(() -> {
246 authorativeToscaProvider.deleteToscaNodeTemplate(null, null, "0.0.1");
247 }).hasMessageMatching(DAO_IS_NULL);
249 assertThatThrownBy(() -> {
250 authorativeToscaProvider.deleteToscaNodeTemplate(pfDao, null, null);
251 }).hasMessageMatching("^name is marked .*on.*ull but is null$");
253 assertThatThrownBy(() -> {
254 authorativeToscaProvider.deleteToscaNodeTemplate(pfDao, "name", null);
255 }).hasMessageMatching("^version is marked .*on.*ull but is null$");
257 authorativeToscaProvider.createToscaNodeTemplates(pfDao, toscaServiceTemplate);
258 assertThatThrownBy(() -> {
259 authorativeToscaProvider.deleteToscaNodeTemplate(pfDao, "dummyname", "1.0.1");
260 }).hasMessage("node template dummyname:1.0.1 not found");
263 ToscaServiceTemplate responseTemplate =
264 authorativeToscaProvider.deleteToscaNodeTemplate(pfDao, "apexMetadata_decisionMaker",
267 assertTrue(responseTemplate.getToscaTopologyTemplate().getNodeTemplates()
268 .containsKey("apexMetadata_decisionMaker"));
269 assertThat(responseTemplate.getToscaTopologyTemplate().getNodeTemplates()).hasSize(1);
271 assertThat(authorativeToscaProvider.getNodeTemplateMetadataSet(pfDao, null, null)).hasSize(2);
276 public void testNodeTemplatesWithExistingPolicy() throws Exception {
277 String policyString = ResourceUtils.getResourceAsString(POLICY_WITH_METADATA_SET_REF);
278 ToscaServiceTemplate policyServiceTemplate =
279 yamlJsonTranslator.fromYaml(policyString, ToscaServiceTemplate.class);
282 //Create policy with metadataSet reference in it
283 authorativeToscaProvider.createPolicies(pfDao, policyServiceTemplate);
284 assertThat(authorativeToscaProvider.getPolicyList(pfDao, null, null)).hasSize(1);
285 assertEquals("apexMetadata_decisionMaker", authorativeToscaProvider
286 .getPolicyList(pfDao, null, null).get(0).getMetadata().get("metadataSetName"));
288 //Create node templates
289 authorativeToscaProvider.createToscaNodeTemplates(pfDao, toscaServiceTemplate);
291 //delete node templates referenced in existing policy
292 assertThatThrownBy(() -> {
293 authorativeToscaProvider
294 .deleteToscaNodeTemplate(pfDao, "apexMetadata_decisionMaker", "1.0.0");
295 }).hasMessageEndingWith("Node template is in use, it is referenced in Tosca Policy "
296 + "operational.apex.decisionMaker version 1.0.0");
298 //delete unreferenced node template
299 authorativeToscaProvider.deleteToscaNodeTemplate(pfDao, "apexMetadata_adaptive", "2.3.1");
300 assertThat(authorativeToscaProvider.getNodeTemplateMetadataSet(pfDao, null, null)).hasSize(2);
303 private void createPolicyTypes() throws CoderException, PfModelException {
305 new Yaml().load(ResourceUtils.getResourceAsString(APEX_POLICY_TYPE_YAML));
306 String yamlAsJsonString = new StandardCoder().encode(yamlObject);
308 ToscaServiceTemplate toscaServiceTemplatePolicyType =
309 standardCoder.decode(yamlAsJsonString, ToscaServiceTemplate.class);
311 assertNotNull(toscaServiceTemplatePolicyType);
312 new AuthorativeToscaProvider().createPolicyTypes(pfDao, toscaServiceTemplatePolicyType);