2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 package org.openecomp.sdc.validation.impl.validators;
24 import org.openecomp.core.validation.types.MessageContainer;
25 import org.openecomp.sdc.common.errors.Messages;
26 import org.openecomp.sdc.datatypes.error.ErrorMessage;
27 import org.openecomp.sdc.validation.Validator;
28 import org.openecomp.sdc.validation.util.ValidationTestUtil;
29 import org.testng.Assert;
30 import org.testng.annotations.Test;
32 import java.io.IOException;
33 import java.util.List;
37 public class HeatValidatorTest {
40 private static final String RESOURCE_PATH = "/org/openecomp/validation/validators/heat_validator";
41 private Validator validator = new HeatValidator();
44 public void testInvalidHeatFormat() {
45 Map<String, MessageContainer> messages = ValidationTestUtil.testValidator(validator,
46 RESOURCE_PATH + "/invalid_heat_format/negative_test/input");
48 Assert.assertNotNull(messages);
49 Assert.assertEquals(messages.size(), 1);
51 Assert.assertEquals(messages.get("hot-nimbus-psm_v1.0.yaml").getErrorMessageList().size(), 1);
53 messages.get("hot-nimbus-psm_v1.0.yaml").getErrorMessageList().get(0).getMessage(),
54 "ERROR: [HOT12]: Invalid HEAT format problem - [Cannot create property=kuku for " +
55 "JavaBean=Resource{type='null', properties=null, metadata=null, depends_on=null, " +
56 "update_policy='null', deletion_policy='null'}\n" + " in 'reader', line 25, column 5:\n" +
57 " kuku: kuku\n" + " ^\n" +
58 "Unable to find property 'kuku' on class: org.openecomp.sdc.heat.datatypes.model." +
59 "Resource\n" + " in 'reader', line 25, column 11:\n" + " kuku: kuku\n" +
64 public void testDependsOn() {
65 Map<String, MessageContainer> messages = ValidationTestUtil.testValidator(validator,
66 RESOURCE_PATH + "/depends_on_points_to_existing_resource/input");
68 Assert.assertNotNull(messages);
69 Assert.assertEquals(messages.size(), 1);
71 Assert.assertEquals(messages.get("hot-nimbus-pps_v1.0.yaml").getErrorMessageList().size(), 2);
73 messages.get("hot-nimbus-pps_v1.0.yaml").getErrorMessageList().get(0).getMessage(),
74 "ERROR: [HOT8]: a Missing resource in depend On, Missing Resource ID [resource_not_exist]");
76 messages.get("hot-nimbus-pps_v1.0.yaml").getErrorMessageList().get(1).getMessage(),
77 "ERROR: [HOT7]: a Missing resource in depend On, Missing Resource ID [resource_3]");
82 public void testResourcesReferencesExistInHeat() throws IOException {
83 Map<String, MessageContainer> messages = ValidationTestUtil.testValidator(new HeatValidator(),
84 RESOURCE_PATH + "/resource_references_exist_in_heat/negative_test/input");
86 Assert.assertNotNull(messages);
87 Assert.assertEquals(messages.size(), 1);
89 Assert.assertEquals(messages.get("hot-nimbus-pps_v1.0.yaml").getErrorMessageList().size(), 2);
91 messages.get("hot-nimbus-pps_v1.0.yaml").getErrorMessageList().get(0).getMessage(),
92 "ERROR: [HOT16]: Referenced resource - not_existing_resource not found");
94 messages.get("hot-nimbus-pps_v1.0.yaml").getErrorMessageList().get(1).getMessage(),
95 "ERROR: [HOT13]: invalid get_resource syntax is in use - null , get_resource " +
96 "function should get the resource id of the referenced resource");
101 public void testGetResourceValueIsValid() {
102 Map<String, MessageContainer> messages = ValidationTestUtil.testValidator(new HeatValidator(),
103 RESOURCE_PATH + "/get_resource_value_valid/negative_test/input");
105 Assert.assertNotNull(messages);
106 Assert.assertEquals(messages.size(), 1);
108 Assert.assertEquals(messages.get("hot-nimbus-pps_v1.0.yaml").getErrorMessageList().size(), 3);
110 messages.get("hot-nimbus-pps_v1.0.yaml").getErrorMessageList().get(0).getMessage(),
111 "ERROR: [HOT13]: invalid get_resource syntax is in use - [param_1, param_2] , " +
112 "get_resource function should get the resource id of the referenced resource");
114 messages.get("hot-nimbus-pps_v1.0.yaml").getErrorMessageList().get(1).getMessage(),
115 "ERROR: [HOT13]: invalid get_resource syntax is in use - {get_param=param_1} , " +
116 "get_resource function should get the resource id of the referenced resource");
118 messages.get("hot-nimbus-pps_v1.0.yaml").getErrorMessageList().get(2).getMessage(),
119 "ERROR: [HOT13]: invalid get_resource syntax is in use - null , get_resource " +
120 "function should get the resource id of the referenced resource");
124 public void testTwoResourcesDoesNotHoldSameId() throws IOException {
125 Map<String, MessageContainer> messages = ValidationTestUtil.testValidator(new HeatValidator(),
126 RESOURCE_PATH + "/two_resources_does_not_hold_same_id/positive_test/input");
127 Assert.assertNotNull(messages);
128 Assert.assertEquals(messages.size(), 0);
132 public void testWithWrongFileExtension(){
133 Map<String, MessageContainer> messages = ValidationTestUtil.testValidator(new HeatValidator(),
134 RESOURCE_PATH + "/wrongFileExtension");
135 Assert.assertNotNull(messages);
136 Assert.assertEquals(messages.get("single.aad").getErrorMessageList().get(0).getMessage(),
137 "ERROR: [HOT2]: Wrong ENV file extension - single.aad");
138 Assert.assertEquals(messages.get("single.ya").getErrorMessageList().get(0).getMessage(),
139 "ERROR: [HOT6]: Wrong HEAT file extension - single.ya");
143 public void testWithMissingManifestContent(){
144 Map<String, MessageContainer> messages = ValidationTestUtil.testValidator(new HeatValidator(),
145 RESOURCE_PATH + "/missingManifestContent");
146 Assert.assertNotNull(messages);
147 Assert.assertEquals(messages.get("single.yaml").getErrorMessageList().get(0).getMessage(),
148 "ERROR: [HOT9]: Invalid HEAT format problem - [missing template version]");
149 Assert.assertEquals(messages.get("single.yaml").getErrorMessageList().get(1).getMessage(),
150 "WARNING: [HOT10]: Invalid HEAT format problem - " +
151 "[The heat file does not contain any resources]");
155 public void testWithInvalidHeatContent(){
156 Map<String, MessageContainer> messages = ValidationTestUtil.testValidator(new HeatValidator(),
157 RESOURCE_PATH + "/invalidHeatContent");
158 Assert.assertNotNull(messages);
159 Assert.assertEquals(messages.get("single.yaml").getErrorMessageList().get(0).getMessage(),
160 "ERROR: [HOT9]: Invalid HEAT format problem - [missing template version]");
161 Assert.assertEquals(messages.get("single.yaml").getErrorMessageList().get(1).getMessage(),
162 "WARNING: [HOT10]: Invalid HEAT format problem - " +
163 "[The heat file does not contain any resources]");
164 Assert.assertEquals(messages.get("mount_iso_script.sh").getErrorMessageList().get(0).
166 "WARNING: [HOT11]: Artifact file is not referenced.");
170 public void testGeneratedArtifactExistInHeat() throws IOException {
171 Map<String, MessageContainer> messages = ValidationTestUtil.testValidator(new HeatValidator(),
172 RESOURCE_PATH + "/generated_artifact_exist/negative_test/input");
173 Assert.assertNotNull(messages);
174 Assert.assertEquals(messages.size(), 3);
175 checkGeneratedArtifactMessage(HeatValidator.VENDOR_LICENSE_MODEL_XML, messages);
176 checkGeneratedArtifactMessage(HeatValidator.VF_LICENSE_MODEL_XML, messages);
177 checkGeneratedArtifactMessage(HeatValidator.HEAT_META, messages);
181 private void checkGeneratedArtifactMessage(String fileName, Map<String, MessageContainer> messages) {
182 List<ErrorMessage> errorMessages = messages.get(fileName).getErrorMessageList();
183 Assert.assertEquals(errorMessages.size(), 2);
184 Assert.assertEquals(errorMessages.get(0).getMessage(),
185 "WARNING: [HOT11]: Artifact file is not referenced.");
186 String message = String.format(Messages.GENERATED_ARTIFACT_IN_USE.getErrorMessage(), fileName);
187 Assert.assertTrue(errorMessages.get(1).getMessage().contains(message));
191 public void negativeTestGetParamPointToExistingParameter() throws IOException {
192 Map<String, MessageContainer> messages = ValidationTestUtil.testValidator(new HeatValidator(),
193 RESOURCE_PATH + "/get_param_points_to_existing_parameter/negative_test/input");
195 Assert.assertNotNull(messages);
196 Assert.assertEquals(messages.size(), 1);
198 Assert.assertEquals(messages.get("hot-nimbus-psm_v1.0.yaml").getErrorMessageList().size(), 1);
200 messages.get("hot-nimbus-psm_v1.0.yaml").getErrorMessageList().get(0).getMessage(),
201 "ERROR: [HOT1]: Referenced parameter - not_existing_param_1 - not found, used in " +
202 "resource [server_pcrf_psm_001]");
206 public void testGetAttrFromNested() throws IOException {
207 Map<String, MessageContainer> messages =ValidationTestUtil.testValidator(new HeatValidator(),
208 RESOURCE_PATH + "/get_attr_from_nested/negative_test/input");
210 Assert.assertNotNull(messages);
211 Assert.assertEquals(messages.size(), 1);
213 Assert.assertEquals(messages.get("hot-nimbus-psm_v1.0.yaml").getErrorMessageList().size(), 1);
215 messages.get("hot-nimbus-psm_v1.0.yaml").getErrorMessageList().get(0).getMessage(),
216 "ERROR: [HOT17]: get_attr attribute not found, Attribute name [nested_output], " +
217 "Resource ID [server_pcrf_psm_001]");
221 public void testDefaultValueAlignWithType() throws IOException {
222 Map<String, MessageContainer> messages =ValidationTestUtil.testValidator(new HeatValidator(),
223 RESOURCE_PATH + "/default_value_align_with_type/negative_test/input");
225 Assert.assertNotNull(messages);
226 Assert.assertEquals(messages.size(), 1);
228 Assert.assertEquals(messages.get("hot-nimbus-pps_v1.0.yaml").getErrorMessageList().size(), 1);
230 messages.get("hot-nimbus-pps_v1.0.yaml").getErrorMessageList().get(0).getMessage(),
231 "ERROR: [HOT4]: Parameter - pcrf_pps_image_name_1 default value not align with " +
237 public void testEnvParametersMatchDefinedHeatParameterTypes() throws IOException {
238 Map<String, MessageContainer> messages =ValidationTestUtil.testValidator(new HeatValidator(),
239 RESOURCE_PATH + "/env_parameters_match_defined_types/negative_test/input");
241 Assert.assertNotNull(messages);
242 Assert.assertEquals(messages.size(), 1);
244 Assert.assertEquals(messages.get("hot-nimbus-pps_v1.0.env").getErrorMessageList().size(), 1);
246 messages.get("hot-nimbus-pps_v1.0.env").getErrorMessageList().get(0).getMessage(),
247 "ERROR: [HOT5]: Parameter env value pcrf_pps_flavor_name not align with type");
252 public void testReferencedArtifactsExist() throws IOException {
253 Map<String, MessageContainer> messages =ValidationTestUtil.testValidator(new HeatValidator(),
254 RESOURCE_PATH + "/referenced_artifacts_exist/negative_test/input");
256 Assert.assertNotNull(messages);
257 Assert.assertEquals(messages.size(), 1);
259 Assert.assertEquals(messages.get("hot-nimbus-pps_v1.0.yaml").getErrorMessageList().size(), 1);
261 messages.get("hot-nimbus-pps_v1.0.yaml").getErrorMessageList().get(0).getMessage(),
262 "ERROR: [HOT15]: Missing artifact - nimbus-ethernet");
267 public void testEnvContentIsSubSetOfHeatParameters() throws IOException {
268 Map<String, MessageContainer> messages =ValidationTestUtil.testValidator(validator,
269 RESOURCE_PATH + "/env_content_is_subset_of_heat/negative_test/input");
271 Assert.assertNotNull(messages);
272 Assert.assertEquals(messages.size(), 1);
274 Assert.assertEquals(messages.get("hot-nimbus-pps_v1.0.env").getErrorMessageList().size(), 1);
276 messages.get("hot-nimbus-pps_v1.0.env").getErrorMessageList().get(0).getMessage(),
277 "ERROR: [HOT3]: Env file hot-nimbus-pps_v1.0.env includes a parameter not in " +
278 "HEAT - mock_param");
282 public void testGetParamPseudoParameters() {
283 Map<String, MessageContainer> messages =ValidationTestUtil.testValidator(new HeatValidator(),
284 RESOURCE_PATH + "/pseudo_parameters/input");
286 Assert.assertNotNull(messages);
287 Assert.assertEquals(messages.size(), 0);
291 public void testNoErrorWhenEmptyValueForParameterInEnv() {
292 Map<String, MessageContainer> messages = ValidationTestUtil.testValidator(validator,
293 RESOURCE_PATH + "/env_empty_value/input");
295 Assert.assertNotNull(messages);
296 Assert.assertEquals(messages.size(), 0);