96b9ad613d4776e6d257dd146f5fb462378a1440
[sdc.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
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
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
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=========================================================
19  */
20
21 package org.openecomp.sdc.validation.impl.validators;
22
23
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;
31
32 import java.io.IOException;
33 import java.util.List;
34 import java.util.Map;
35
36
37 public class HeatValidatorTest {
38
39
40   private static final String RESOURCE_PATH = "/org/openecomp/validation/validators/heat_validator";
41   private Validator validator = new HeatValidator();
42
43   @Test
44   public void testInvalidHeatFormat() {
45     Map<String, MessageContainer> messages = ValidationTestUtil.testValidator(validator,
46         RESOURCE_PATH + "/invalid_heat_format/negative_test/input");
47
48     Assert.assertNotNull(messages);
49     Assert.assertEquals(messages.size(), 1);
50
51     Assert.assertEquals(messages.get("hot-nimbus-psm_v1.0.yaml").getErrorMessageList().size(), 1);
52     Assert.assertEquals(
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" +
60             "              ^\n" + "]");
61   }
62
63   @Test
64   public void testDependsOn() {
65     Map<String, MessageContainer> messages = ValidationTestUtil.testValidator(validator,
66         RESOURCE_PATH + "/depends_on_points_to_existing_resource/input");
67
68     Assert.assertNotNull(messages);
69     Assert.assertEquals(messages.size(), 1);
70
71     Assert.assertEquals(messages.get("hot-nimbus-pps_v1.0.yaml").getErrorMessageList().size(), 2);
72     Assert.assertEquals(
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]");
75     Assert.assertEquals(
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]");
78   }
79
80
81   @Test
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");
85
86     Assert.assertNotNull(messages);
87     Assert.assertEquals(messages.size(), 1);
88
89     Assert.assertEquals(messages.get("hot-nimbus-pps_v1.0.yaml").getErrorMessageList().size(), 2);
90     Assert.assertEquals(
91         messages.get("hot-nimbus-pps_v1.0.yaml").getErrorMessageList().get(0).getMessage(),
92         "ERROR: [HOT16]: Referenced resource - not_existing_resource not found");
93     Assert.assertEquals(
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");
97   }
98
99
100   @Test
101   public void testGetResourceValueIsValid() {
102     Map<String, MessageContainer> messages = ValidationTestUtil.testValidator(new HeatValidator(),
103         RESOURCE_PATH + "/get_resource_value_valid/negative_test/input");
104
105     Assert.assertNotNull(messages);
106     Assert.assertEquals(messages.size(), 1);
107
108     Assert.assertEquals(messages.get("hot-nimbus-pps_v1.0.yaml").getErrorMessageList().size(), 3);
109     Assert.assertEquals(
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");
113     Assert.assertEquals(
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");
117     Assert.assertEquals(
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");
121   }
122
123   @Test
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);
129   }
130
131   @Test
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");
140   }
141
142   @Test
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]");
152   }
153
154   @Test
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).
165                                                                                                 getMessage(),
166             "WARNING: [HOT11]: Artifact file is not referenced.");
167   }
168
169   @Test
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);
178   }
179
180
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));
188   }
189
190   @Test
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");
194
195     Assert.assertNotNull(messages);
196     Assert.assertEquals(messages.size(), 1);
197
198     Assert.assertEquals(messages.get("hot-nimbus-psm_v1.0.yaml").getErrorMessageList().size(), 1);
199     Assert.assertEquals(
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]");
203   }
204
205   @Test
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");
209
210     Assert.assertNotNull(messages);
211     Assert.assertEquals(messages.size(), 1);
212
213     Assert.assertEquals(messages.get("hot-nimbus-psm_v1.0.yaml").getErrorMessageList().size(), 1);
214     Assert.assertEquals(
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]");
218   }
219
220   @Test
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");
224
225     Assert.assertNotNull(messages);
226     Assert.assertEquals(messages.size(), 1);
227
228     Assert.assertEquals(messages.get("hot-nimbus-pps_v1.0.yaml").getErrorMessageList().size(), 1);
229     Assert.assertEquals(
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 " +
232             "type number");
233   }
234
235
236   @Test
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");
240
241     Assert.assertNotNull(messages);
242     Assert.assertEquals(messages.size(), 1);
243
244     Assert.assertEquals(messages.get("hot-nimbus-pps_v1.0.env").getErrorMessageList().size(), 1);
245     Assert.assertEquals(
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");
248
249   }
250
251   @Test
252   public void testReferencedArtifactsExist() throws IOException {
253     Map<String, MessageContainer> messages =ValidationTestUtil.testValidator(new HeatValidator(),
254         RESOURCE_PATH + "/referenced_artifacts_exist/negative_test/input");
255
256     Assert.assertNotNull(messages);
257     Assert.assertEquals(messages.size(), 1);
258
259     Assert.assertEquals(messages.get("hot-nimbus-pps_v1.0.yaml").getErrorMessageList().size(), 1);
260     Assert.assertEquals(
261         messages.get("hot-nimbus-pps_v1.0.yaml").getErrorMessageList().get(0).getMessage(),
262         "ERROR: [HOT15]: Missing artifact - nimbus-ethernet");
263
264   }
265
266   @Test
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");
270
271     Assert.assertNotNull(messages);
272     Assert.assertEquals(messages.size(), 1);
273
274     Assert.assertEquals(messages.get("hot-nimbus-pps_v1.0.env").getErrorMessageList().size(), 1);
275     Assert.assertEquals(
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");
279   }
280
281   @Test
282   public void testGetParamPseudoParameters() {
283     Map<String, MessageContainer> messages =ValidationTestUtil.testValidator(new HeatValidator(),
284         RESOURCE_PATH + "/pseudo_parameters/input");
285
286     Assert.assertNotNull(messages);
287     Assert.assertEquals(messages.size(), 0);
288
289   }
290   @Test
291   public void testNoErrorWhenEmptyValueForParameterInEnv() {
292     Map<String, MessageContainer> messages = ValidationTestUtil.testValidator(validator,
293         RESOURCE_PATH + "/env_empty_value/input");
294
295     Assert.assertNotNull(messages);
296     Assert.assertEquals(messages.size(), 0);
297   }
298
299 }