Sorted out unit-test libraries in onboarding
[sdc.git] / openecomp-be / lib / openecomp-sdc-validation-lib / openecomp-sdc-validation-impl / src / test / java / org / openecomp / sdc / validation / impl / validators / HeatValidatorTest.java
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 java.io.IOException;
25 import java.util.List;
26 import java.util.Map;
27 import org.junit.Assert;
28 import org.junit.Test;
29 import org.openecomp.core.validation.types.MessageContainer;
30 import org.openecomp.sdc.common.errors.Messages;
31 import org.openecomp.sdc.datatypes.error.ErrorMessage;
32 import org.openecomp.sdc.validation.Validator;
33 import org.openecomp.sdc.validation.util.ValidationTestUtil;
34
35
36 public class HeatValidatorTest {
37
38
39   private static final String RESOURCE_PATH = "/org/openecomp/validation/validators/heat_validator";
40   private Validator validator = new HeatValidator();
41
42   @Test
43   public void testInvalidHeatFormat() {
44     Map<String, MessageContainer> messages = ValidationTestUtil.testValidator(validator,
45         RESOURCE_PATH + "/invalid_heat_format/negative_test/input");
46
47     Assert.assertNotNull(messages);
48     Assert.assertEquals(messages.size(), 1);
49
50     Assert.assertEquals(messages.get("hot-nimbus-psm_v1.0.yaml").getErrorMessageList().size(), 1);
51     Assert.assertEquals(
52         messages.get("hot-nimbus-psm_v1.0.yaml").getErrorMessageList().get(0).getMessage(),
53         "ERROR: [HOT12]: Invalid HEAT format problem - [Cannot create property=kuku for " +
54             "JavaBean=Resource{type='null', properties=null, metadata=null, depends_on=null, " +
55             "update_policy='null', deletion_policy='null'}\n" + " in 'reader', line 25, column 5:\n" +
56             "        kuku: kuku\n" + "        ^\n" +
57             "Unable to find property 'kuku' on class: org.openecomp.sdc.heat.datatypes.model." +
58             "Resource\n" + " in 'reader', line 25, column 11:\n" + "        kuku: kuku\n" +
59             "              ^\n" + "]");
60   }
61
62   @Test
63   public void testDependsOn() {
64     Map<String, MessageContainer> messages = ValidationTestUtil.testValidator(validator,
65         RESOURCE_PATH + "/depends_on_points_to_existing_resource/input");
66
67     Assert.assertNotNull(messages);
68     Assert.assertEquals(messages.size(), 1);
69
70     Assert.assertEquals(messages.get("hot-nimbus-pps_v1.0.yaml").getErrorMessageList().size(), 2);
71     Assert.assertEquals(
72         messages.get("hot-nimbus-pps_v1.0.yaml").getErrorMessageList().get(0).getMessage(),
73         "ERROR: [HOT8]: a Missing resource in depend On, Missing Resource ID [resource_not_exist]");
74     Assert.assertEquals(
75         messages.get("hot-nimbus-pps_v1.0.yaml").getErrorMessageList().get(1).getMessage(),
76         "ERROR: [HOT7]: a Missing resource in depend On, Missing Resource ID [resource_3]");
77   }
78
79
80   @Test
81   public void testResourcesReferencesExistInHeat() throws IOException {
82     Map<String, MessageContainer> messages = ValidationTestUtil.testValidator(new HeatValidator(),
83         RESOURCE_PATH + "/resource_references_exist_in_heat/negative_test/input");
84
85     Assert.assertNotNull(messages);
86     Assert.assertEquals(messages.size(), 1);
87
88     Assert.assertEquals(messages.get("hot-nimbus-pps_v1.0.yaml").getErrorMessageList().size(), 2);
89     Assert.assertEquals(
90         messages.get("hot-nimbus-pps_v1.0.yaml").getErrorMessageList().get(0).getMessage(),
91         "ERROR: [HOT16]: Referenced resource - not_existing_resource not found");
92     Assert.assertEquals(
93         messages.get("hot-nimbus-pps_v1.0.yaml").getErrorMessageList().get(1).getMessage(),
94         "ERROR: [HOT13]: invalid get_resource syntax is in use - null , get_resource " +
95             "function should get the resource id of the referenced resource");
96   }
97
98
99   @Test
100   public void testGetResourceValueIsValid() {
101     Map<String, MessageContainer> messages = ValidationTestUtil.testValidator(new HeatValidator(),
102         RESOURCE_PATH + "/get_resource_value_valid/negative_test/input");
103
104     Assert.assertNotNull(messages);
105     Assert.assertEquals(messages.size(), 1);
106
107     Assert.assertEquals(messages.get("hot-nimbus-pps_v1.0.yaml").getErrorMessageList().size(), 3);
108     Assert.assertEquals(
109         messages.get("hot-nimbus-pps_v1.0.yaml").getErrorMessageList().get(0).getMessage(),
110         "ERROR: [HOT13]: invalid get_resource syntax is in use - [param_1, param_2] , " +
111             "get_resource function should get the resource id of the referenced resource");
112     Assert.assertEquals(
113         messages.get("hot-nimbus-pps_v1.0.yaml").getErrorMessageList().get(1).getMessage(),
114         "ERROR: [HOT13]: invalid get_resource syntax is in use - {get_param=param_1} , " +
115             "get_resource function should get the resource id of the referenced resource");
116     Assert.assertEquals(
117         messages.get("hot-nimbus-pps_v1.0.yaml").getErrorMessageList().get(2).getMessage(),
118         "ERROR: [HOT13]: invalid get_resource syntax is in use - null , get_resource " +
119             "function should get the resource id of the referenced resource");
120   }
121
122   @Test
123   public void testTwoResourcesDoesNotHoldSameId() throws IOException {
124     Map<String, MessageContainer> messages = ValidationTestUtil.testValidator(new HeatValidator(),
125         RESOURCE_PATH + "/two_resources_does_not_hold_same_id/positive_test/input");
126     Assert.assertNotNull(messages);
127     Assert.assertEquals(messages.size(), 0);
128   }
129
130   @Test
131   public void testWithWrongFileExtension(){
132     Map<String, MessageContainer> messages = ValidationTestUtil.testValidator(new HeatValidator(),
133         RESOURCE_PATH + "/wrongFileExtension");
134     Assert.assertNotNull(messages);
135     Assert.assertEquals(messages.get("single.aad").getErrorMessageList().get(0).getMessage(),
136         "ERROR: [HOT2]: Wrong ENV file extension - single.aad");
137     Assert.assertEquals(messages.get("single.ya").getErrorMessageList().get(0).getMessage(),
138         "ERROR: [HOT6]: Wrong HEAT file extension - single.ya");
139   }
140
141   @Test
142   public void testWithMissingManifestContent(){
143     Map<String, MessageContainer> messages = ValidationTestUtil.testValidator(new HeatValidator(),
144         RESOURCE_PATH + "/missingManifestContent");
145     Assert.assertNotNull(messages);
146     Assert.assertEquals(messages.get("single.yaml").getErrorMessageList().get(0).getMessage(),
147         "ERROR: [HOT9]: Invalid HEAT format problem - [missing template version]");
148     Assert.assertEquals(messages.get("single.yaml").getErrorMessageList().get(1).getMessage(),
149         "WARNING: [HOT10]: Invalid HEAT format problem - " +
150             "[The heat file does not contain any resources]");
151   }
152
153   @Test
154   public void testWithInvalidHeatContent(){
155     Map<String, MessageContainer> messages = ValidationTestUtil.testValidator(new HeatValidator(),
156         RESOURCE_PATH + "/invalidHeatContent");
157     Assert.assertNotNull(messages);
158     Assert.assertEquals(messages.get("single.yaml").getErrorMessageList().get(0).getMessage(),
159         "ERROR: [HOT9]: Invalid HEAT format problem - [missing template version]");
160     Assert.assertEquals(messages.get("single.yaml").getErrorMessageList().get(1).getMessage(),
161         "WARNING: [HOT10]: Invalid HEAT format problem - " +
162             "[The heat file does not contain any resources]");
163     Assert.assertEquals(messages.get("mount_iso_script.sh").getErrorMessageList().get(0).
164                                                                                                 getMessage(),
165             "WARNING: [HOT11]: Artifact file is not referenced.");
166   }
167
168   @Test
169   public void testGeneratedArtifactExistInHeat() throws IOException {
170     Map<String, MessageContainer> messages = ValidationTestUtil.testValidator(new HeatValidator(),
171             RESOURCE_PATH + "/generated_artifact_exist/negative_test/input");
172     Assert.assertNotNull(messages);
173     Assert.assertEquals(messages.size(), 3);
174     checkGeneratedArtifactMessage(HeatValidator.VENDOR_LICENSE_MODEL_XML, messages);
175     checkGeneratedArtifactMessage(HeatValidator.VF_LICENSE_MODEL_XML, messages);
176     checkGeneratedArtifactMessage(HeatValidator.HEAT_META, messages);
177   }
178
179
180   private void checkGeneratedArtifactMessage(String fileName, Map<String, MessageContainer> messages) {
181       List<ErrorMessage> errorMessages = messages.get(fileName).getErrorMessageList();
182       Assert.assertEquals(errorMessages.size(), 2);
183       Assert.assertEquals(errorMessages.get(0).getMessage(),
184             "WARNING: [HOT11]: Artifact file is not referenced.");
185       String message = String.format(Messages.GENERATED_ARTIFACT_IN_USE.getErrorMessage(), fileName);
186       Assert.assertTrue(errorMessages.get(1).getMessage().contains(message));
187   }
188
189   @Test
190   public void negativeTestGetParamPointToExistingParameter() throws IOException {
191     Map<String, MessageContainer> messages = ValidationTestUtil.testValidator(new HeatValidator(),
192         RESOURCE_PATH + "/get_param_points_to_existing_parameter/negative_test/input");
193
194     Assert.assertNotNull(messages);
195     Assert.assertEquals(messages.size(), 1);
196
197     Assert.assertEquals(messages.get("hot-nimbus-psm_v1.0.yaml").getErrorMessageList().size(), 1);
198     Assert.assertEquals(
199         messages.get("hot-nimbus-psm_v1.0.yaml").getErrorMessageList().get(0).getMessage(),
200         "ERROR: [HOT1]: Referenced parameter - not_existing_param_1 - not found, used in " +
201             "resource [server_pcrf_psm_001]");
202   }
203
204   @Test
205   public void testGetAttrFromNested() throws IOException {
206     Map<String, MessageContainer> messages =ValidationTestUtil.testValidator(new HeatValidator(),
207         RESOURCE_PATH + "/get_attr_from_nested/negative_test/input");
208
209     Assert.assertNotNull(messages);
210     Assert.assertEquals(messages.size(), 1);
211
212     Assert.assertEquals(messages.get("hot-nimbus-psm_v1.0.yaml").getErrorMessageList().size(), 1);
213     Assert.assertEquals(
214         messages.get("hot-nimbus-psm_v1.0.yaml").getErrorMessageList().get(0).getMessage(),
215         "ERROR: [HOT17]: get_attr attribute not found, Attribute name [nested_output], " +
216             "Resource ID [server_pcrf_psm_001]");
217   }
218
219   @Test
220   public void testDefaultValueAlignWithType() throws IOException {
221     Map<String, MessageContainer> messages =ValidationTestUtil.testValidator(new HeatValidator(),
222         RESOURCE_PATH + "/default_value_align_with_type/negative_test/input");
223
224     Assert.assertNotNull(messages);
225     Assert.assertEquals(messages.size(), 1);
226
227     Assert.assertEquals(messages.get("hot-nimbus-pps_v1.0.yaml").getErrorMessageList().size(), 1);
228     Assert.assertEquals(
229         messages.get("hot-nimbus-pps_v1.0.yaml").getErrorMessageList().get(0).getMessage(),
230         "ERROR: [HOT4]: Parameter - pcrf_pps_image_name_1 default value not align with " +
231             "type number");
232   }
233
234
235   @Test
236   public void testEnvParametersMatchDefinedHeatParameterTypes() throws IOException {
237     Map<String, MessageContainer> messages =ValidationTestUtil.testValidator(new HeatValidator(),
238         RESOURCE_PATH + "/env_parameters_match_defined_types/negative_test/input");
239
240     Assert.assertNotNull(messages);
241     Assert.assertEquals(messages.size(), 1);
242
243     Assert.assertEquals(messages.get("hot-nimbus-pps_v1.0.env").getErrorMessageList().size(), 1);
244     Assert.assertEquals(
245         messages.get("hot-nimbus-pps_v1.0.env").getErrorMessageList().get(0).getMessage(),
246         "ERROR: [HOT5]: Parameter env value pcrf_pps_flavor_name not align with type");
247
248   }
249
250   @Test
251   public void testReferencedArtifactsExist() throws IOException {
252     Map<String, MessageContainer> messages =ValidationTestUtil.testValidator(new HeatValidator(),
253         RESOURCE_PATH + "/referenced_artifacts_exist/negative_test/input");
254
255     Assert.assertNotNull(messages);
256     Assert.assertEquals(messages.size(), 1);
257
258     Assert.assertEquals(messages.get("hot-nimbus-pps_v1.0.yaml").getErrorMessageList().size(), 1);
259     Assert.assertEquals(
260         messages.get("hot-nimbus-pps_v1.0.yaml").getErrorMessageList().get(0).getMessage(),
261         "ERROR: [HOT15]: Missing artifact - nimbus-ethernet");
262
263   }
264
265   @Test
266   public void testEnvContentIsSubSetOfHeatParameters() throws IOException {
267     Map<String, MessageContainer> messages =ValidationTestUtil.testValidator(validator,
268         RESOURCE_PATH + "/env_content_is_subset_of_heat/negative_test/input");
269
270     Assert.assertNotNull(messages);
271     Assert.assertEquals(messages.size(), 1);
272
273     Assert.assertEquals(messages.get("hot-nimbus-pps_v1.0.env").getErrorMessageList().size(), 1);
274     Assert.assertEquals(
275         messages.get("hot-nimbus-pps_v1.0.env").getErrorMessageList().get(0).getMessage(),
276         "ERROR: [HOT3]: Env file hot-nimbus-pps_v1.0.env includes a parameter not in " +
277             "HEAT - mock_param");
278   }
279
280   @Test
281   public void testGetParamPseudoParameters() {
282     Map<String, MessageContainer> messages =ValidationTestUtil.testValidator(new HeatValidator(),
283         RESOURCE_PATH + "/pseudo_parameters/input");
284
285     Assert.assertNotNull(messages);
286     Assert.assertEquals(messages.size(), 0);
287
288   }
289   @Test
290   public void testNoErrorWhenEmptyValueForParameterInEnv() {
291     Map<String, MessageContainer> messages = ValidationTestUtil.testValidator(validator,
292         RESOURCE_PATH + "/env_empty_value/input");
293
294     Assert.assertNotNull(messages);
295     Assert.assertEquals(messages.size(), 0);
296   }
297
298 }