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