2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2022-2023 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.junit.After;
33 import org.junit.Before;
34 import org.junit.Test;
35 import org.onap.policy.common.utils.coder.CoderException;
36 import org.onap.policy.common.utils.coder.StandardCoder;
37 import org.onap.policy.common.utils.coder.YamlJsonTranslator;
38 import org.onap.policy.common.utils.resources.ResourceUtils;
39 import org.onap.policy.models.base.PfModelException;
40 import org.onap.policy.models.dao.DaoParameters;
41 import org.onap.policy.models.dao.PfDao;
42 import org.onap.policy.models.dao.PfDaoFactory;
43 import org.onap.policy.models.dao.impl.DefaultPfDao;
44 import org.onap.policy.models.tosca.authorative.concepts.ToscaEntityKey;
45 import org.onap.policy.models.tosca.authorative.concepts.ToscaNodeTemplate;
46 import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
47 import org.yaml.snakeyaml.Yaml;
50 * Test of the {@link AuthorativeToscaProvider} class.
52 public class AuthorativeToscaProviderNodeTemplateTest {
55 private static final String NODE_TEMPLATES_JSON = "nodetemplates/nodetemplates.metadatasets.input.tosca.json";
56 private static final String UPDATED_METADATA_SET_JSON = "nodetemplates/TestUpdateMetadataSet.json";
57 private static final String CREATE_METADATA_SET_JSON = "nodetemplates/TestCreateMetadataSet.json";
58 private static final String POLICY_WITH_METADATA_SET_REF = "policies/apex.policy.decisionmaker.input.tosca.yaml";
59 private static final String APEX_POLICY_TYPE_YAML = "policytypes/onap.policies.native.Apex.yaml";
60 private static final String DAO_IS_NULL = "^dao is marked .*on.*ull but is null$";
61 private static ToscaServiceTemplate toscaServiceTemplate;
62 private static ToscaServiceTemplate updatedToscaServiceTemplate;
63 private static ToscaServiceTemplate createToscaNodeTemplate;
65 private StandardCoder standardCoder;
66 private AuthorativeToscaProvider authorativeToscaProvider = new AuthorativeToscaProvider();
67 private YamlJsonTranslator yamlJsonTranslator = new YamlJsonTranslator();
70 * Read policy metadataSet input json.
71 * @throws Exception Coder exception
74 public void fetchToscaNodeTemplatesJson() throws Exception {
75 standardCoder = new StandardCoder();
76 toscaServiceTemplate =
77 standardCoder.decode(ResourceUtils.getResourceAsString(NODE_TEMPLATES_JSON), ToscaServiceTemplate.class);
78 updatedToscaServiceTemplate =
79 standardCoder.decode(ResourceUtils.getResourceAsString(UPDATED_METADATA_SET_JSON),
80 ToscaServiceTemplate.class);
81 createToscaNodeTemplate = standardCoder.decode(ResourceUtils.getResourceAsString(
82 CREATE_METADATA_SET_JSON), ToscaServiceTemplate.class);
86 * Set up DAO towards the database.
88 * @throws Exception on database errors
91 public void setupDao() throws Exception {
92 final DaoParameters daoParameters = new DaoParameters();
93 daoParameters.setPluginClass(DefaultPfDao.class.getName());
95 daoParameters.setPersistenceUnit("ToscaConceptTest");
97 Properties jdbcProperties = new Properties();
98 jdbcProperties.setProperty("javax.persistence.jdbc.user", "policy");
99 jdbcProperties.setProperty("javax.persistence.jdbc.password", "P01icY");
100 if (System.getProperty("USE-MARIADB") != null) {
101 jdbcProperties.setProperty("javax.persistence.jdbc.driver", "org.mariadb.jdbc.Driver");
102 jdbcProperties.setProperty("javax.persistence.jdbc.url", "jdbc:mariadb://localhost:3306/policy");
104 jdbcProperties.setProperty("javax.persistence.jdbc.driver", "org.h2.Driver");
105 jdbcProperties.setProperty("javax.persistence.jdbc.url",
106 "jdbc:h2:mem:AuthorativeToscaProviderNodeTemplatesTest");
108 daoParameters.setJdbcProperties(jdbcProperties);
110 pfDao = new PfDaoFactory().createPfDao(daoParameters);
111 pfDao.init(daoParameters);
115 public void teardown() {
120 public void testPolicyMetadataSetsGet() throws Exception {
122 assertThatThrownBy(() -> {
123 authorativeToscaProvider.getNodeTemplateMetadataSet(null, null, null);
124 }).hasMessageMatching(DAO_IS_NULL);
126 assertNotNull(toscaServiceTemplate);
127 authorativeToscaProvider.createToscaNodeTemplates(pfDao, toscaServiceTemplate);
129 //Fetch all metadataSet if id is null
130 List<Map<ToscaEntityKey, Map<String, Object>>> gotPolicyMetadataSets = authorativeToscaProvider
131 .getNodeTemplateMetadataSet(pfDao, null, null);
132 assertEquals(3, gotPolicyMetadataSets.size());
134 // Get filtered metadataSet
135 List<Map<ToscaEntityKey, Map<String, Object>>> filteredPolicyMetadataSet = authorativeToscaProvider
136 .getNodeTemplateMetadataSet(pfDao, "apexMetadata_adaptive", "2.3.1");
137 assertEquals(1, filteredPolicyMetadataSet.size());
139 //Get invalid metadataSet
140 List<Map<ToscaEntityKey, Map<String, Object>>> filteredMetadataSetInvalid = authorativeToscaProvider
141 .getNodeTemplateMetadataSet(pfDao, "invalidname", "1.0.0");
142 assertThat(filteredMetadataSetInvalid).isEmpty();
146 public void testToscaNodeTemplatesGet() throws Exception {
148 assertThatThrownBy(() -> {
149 authorativeToscaProvider.getToscaNodeTemplate(null, null, null);
150 }).hasMessageMatching(DAO_IS_NULL);
152 assertNotNull(toscaServiceTemplate);
153 authorativeToscaProvider.createToscaNodeTemplates(pfDao, toscaServiceTemplate);
155 //Fetch all node templates if id is null
156 List<ToscaNodeTemplate> gotToscaNodeTemplates = authorativeToscaProvider
157 .getToscaNodeTemplate(pfDao, null, null);
158 assertEquals(3, gotToscaNodeTemplates.size());
160 // Get filtered node templates
161 List<ToscaNodeTemplate> filteredNodeTemplates = authorativeToscaProvider
162 .getToscaNodeTemplate(pfDao, "apexMetadata_adaptive", "2.3.1");
163 assertEquals(1, filteredNodeTemplates.size());
165 //Get invalid node template
166 List<ToscaNodeTemplate> filteredNodeTemplatesInvalid = authorativeToscaProvider
167 .getToscaNodeTemplate(pfDao, "invalidname", "1.0.0");
168 assertThat(filteredNodeTemplatesInvalid).isEmpty();
172 public void testToscaNodeTemplatesCreate() throws Exception {
173 assertThatThrownBy(() -> {
174 authorativeToscaProvider.createToscaNodeTemplates(null, null);
175 }).hasMessageMatching(DAO_IS_NULL);
177 assertThatThrownBy(() -> {
178 authorativeToscaProvider.createToscaNodeTemplates(null, new ToscaServiceTemplate());
179 }).hasMessageMatching(DAO_IS_NULL);
181 assertThatThrownBy(() -> {
182 authorativeToscaProvider.createToscaNodeTemplates(pfDao, null);
183 }).hasMessageMatching("^toscaServiceTemplate is marked .*on.*ull but is null$");
185 ToscaServiceTemplate createdNodeTemplates =
186 authorativeToscaProvider.createToscaNodeTemplates(pfDao, toscaServiceTemplate);
187 assertThat(createdNodeTemplates.getToscaTopologyTemplate().getNodeTemplates()).hasSize(3);
188 assertThat(createdNodeTemplates.getToscaTopologyTemplate().getNodeTemplates().get("apexMetadata_grpc")
189 .getMetadata()).containsKey("threshold");
191 authorativeToscaProvider.createToscaNodeTemplates(pfDao, createToscaNodeTemplate);
192 assertThat(authorativeToscaProvider.getNodeTemplateMetadataSet(pfDao, null, null)).hasSize(4);
194 //Create node template with invalid node type
195 createToscaNodeTemplate.getToscaTopologyTemplate().getNodeTemplates().get("apexMetadata_adaptive")
196 .setType("invalid.type");
197 assertThatThrownBy(() -> {
198 authorativeToscaProvider.createToscaNodeTemplates(pfDao, createToscaNodeTemplate);
199 }).hasMessageMatching("^NODE_TYPE .* for toscaNodeTemplate .* does not exist$");
204 public void testToscaNodeTemplateUpdate() throws Exception {
205 assertThatThrownBy(() -> {
206 authorativeToscaProvider.updateToscaNodeTemplates(null, null);
207 }).hasMessageMatching(DAO_IS_NULL);
209 assertThatThrownBy(() -> {
210 authorativeToscaProvider.updateToscaNodeTemplates(null, new ToscaServiceTemplate());
211 }).hasMessageMatching(DAO_IS_NULL);
213 assertThatThrownBy(() -> {
214 authorativeToscaProvider.updateToscaNodeTemplates(pfDao, null);
215 }).hasMessageMatching("^serviceTemplate is marked non-null but is null$");
217 authorativeToscaProvider.createToscaNodeTemplates(pfDao, toscaServiceTemplate);
218 ToscaServiceTemplate updatedTemplate =
219 authorativeToscaProvider.updateToscaNodeTemplates(pfDao, updatedToscaServiceTemplate);
220 assertEquals("Updated Metadata set for GRPC",
221 updatedTemplate.getToscaTopologyTemplate().getNodeTemplates().get("apexMetadata_grpc")
224 //Update nodeTemplate with invalid node type
225 updatedToscaServiceTemplate.getToscaTopologyTemplate().getNodeTemplates().get("apexMetadata_grpc")
226 .setTypeVersion("0.0.0");
227 assertThatThrownBy(() -> {
228 authorativeToscaProvider.updateToscaNodeTemplates(pfDao, updatedToscaServiceTemplate);
229 }).hasMessageMatching("^NODE_TYPE .* for toscaNodeTemplate .* does not exist$");
233 public void testToscaNodeTemplatetDelete() throws Exception {
234 assertThatThrownBy(() -> {
235 authorativeToscaProvider.deleteToscaNodeTemplate(null, null, null);
236 }).hasMessageMatching(DAO_IS_NULL);
238 assertThatThrownBy(() -> {
239 authorativeToscaProvider.deleteToscaNodeTemplate(null, null, "0.0.1");
240 }).hasMessageMatching(DAO_IS_NULL);
242 assertThatThrownBy(() -> {
243 authorativeToscaProvider.deleteToscaNodeTemplate(pfDao, null, null);
244 }).hasMessageMatching("^name is marked .*on.*ull but is null$");
246 assertThatThrownBy(() -> {
247 authorativeToscaProvider.deleteToscaNodeTemplate(pfDao, "name", null);
248 }).hasMessageMatching("^version is marked .*on.*ull but is null$");
250 authorativeToscaProvider.createToscaNodeTemplates(pfDao, toscaServiceTemplate);
251 assertThatThrownBy(() -> {
252 authorativeToscaProvider.deleteToscaNodeTemplate(pfDao, "dummyname", "1.0.1");
253 }).hasMessage("node template dummyname:1.0.1 not found");
256 ToscaServiceTemplate responseTemplate =
257 authorativeToscaProvider.deleteToscaNodeTemplate(pfDao, "apexMetadata_decisionMaker",
260 assertTrue(responseTemplate.getToscaTopologyTemplate().getNodeTemplates()
261 .containsKey("apexMetadata_decisionMaker"));
262 assertThat(responseTemplate.getToscaTopologyTemplate().getNodeTemplates()).hasSize(1);
264 assertThat(authorativeToscaProvider.getNodeTemplateMetadataSet(pfDao, null, null)).hasSize(2);
269 public void testNodeTemplatesWithExistingPolicy() throws Exception {
270 String policyString = ResourceUtils.getResourceAsString(POLICY_WITH_METADATA_SET_REF);
271 ToscaServiceTemplate policyServiceTemplate =
272 yamlJsonTranslator.fromYaml(policyString, ToscaServiceTemplate.class);
275 //Create policy with metadataSet reference in it
276 authorativeToscaProvider.createPolicies(pfDao, policyServiceTemplate);
277 assertThat(authorativeToscaProvider.getPolicyList(pfDao, null, null)).hasSize(1);
278 assertEquals("apexMetadata_decisionMaker", authorativeToscaProvider
279 .getPolicyList(pfDao, null, null).get(0).getMetadata().get("metadataSetName"));
281 //Create node templates
282 authorativeToscaProvider.createToscaNodeTemplates(pfDao, toscaServiceTemplate);
284 //delete node templates referenced in existing policy
285 assertThatThrownBy(() -> {
286 authorativeToscaProvider
287 .deleteToscaNodeTemplate(pfDao, "apexMetadata_decisionMaker", "1.0.0");
288 }).hasMessageEndingWith("Node template is in use, it is referenced in Tosca Policy "
289 + "operational.apex.decisionMaker version 1.0.0");
291 //delete unreferenced node template
292 authorativeToscaProvider.deleteToscaNodeTemplate(pfDao, "apexMetadata_adaptive", "2.3.1");
293 assertThat(authorativeToscaProvider.getNodeTemplateMetadataSet(pfDao, null, null)).hasSize(2);
296 private void createPolicyTypes() throws CoderException, PfModelException {
298 new Yaml().load(ResourceUtils.getResourceAsString(APEX_POLICY_TYPE_YAML));
299 String yamlAsJsonString = new StandardCoder().encode(yamlObject);
301 ToscaServiceTemplate toscaServiceTemplatePolicyType =
302 standardCoder.decode(yamlAsJsonString, ToscaServiceTemplate.class);
304 assertNotNull(toscaServiceTemplatePolicyType);
305 new AuthorativeToscaProvider().createPolicyTypes(pfDao, toscaServiceTemplatePolicyType);