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.ci.tests.utils.validation;
23 import static org.testng.AssertJUnit.assertTrue;
26 import java.nio.charset.StandardCharsets;
27 import java.nio.file.Files;
28 import java.nio.file.Path;
29 import java.util.ArrayList;
30 import java.util.List;
33 import org.openecomp.sdc.be.model.Resource;
34 import org.openecomp.sdc.ci.tests.datatypes.GroupHeatMetaDefinition;
35 import org.openecomp.sdc.ci.tests.datatypes.HeatMetaFirstLevelDefinition;
36 import org.openecomp.sdc.ci.tests.datatypes.TypeHeatMetaDefinition;
37 import org.openecomp.sdc.ci.tests.datatypes.enums.UserRoleEnum;
38 import org.openecomp.sdc.ci.tests.utils.CsarParserUtils;
39 import org.openecomp.sdc.ci.tests.utils.general.ElementFactory;
40 import org.openecomp.sdc.ci.tests.utils.rest.BaseRestUtils;
41 import org.openecomp.sdc.ci.tests.utils.rest.ImportRestUtils;
42 import org.openecomp.sdc.common.rest.api.RestResponseAsByteArray;
43 import org.openecomp.sdc.common.util.ZipUtil;
45 public class CsarValidationUtils {
47 public static void validateCsarVfArtifact(String csarUUID, Resource resource) throws Exception {
49 List<TypeHeatMetaDefinition> listTypeHeatMetaDefinition = CsarParserUtils.getListTypeHeatMetaDefinition(csarUUID);
51 "check group count, expected: " + getGroupCount(listTypeHeatMetaDefinition) + ", actual: "
52 + resource.getGroups().size(),
53 getGroupCount(listTypeHeatMetaDefinition) == resource.getGroups().size());
55 "check artifact count, expected: " + getArtifactCount(listTypeHeatMetaDefinition, false) + ", actual: "
56 + resource.getDeploymentArtifacts().size(),
57 getArtifactCount(listTypeHeatMetaDefinition, false) == resource.getDeploymentArtifacts().size());
61 /*public static List<TypeHeatMetaDefinition> getListTypeHeatMetaDefinition(String csarUUID) throws Exception {
63 String artifactHeatMetaLocation = "Artifacts/HEAT.meta";
64 JSONParser parser = new JSONParser();
65 String csarPayload = getCsarPayload(csarUUID, artifactHeatMetaLocation);
66 if (csarPayload != null) {
67 Object parse = parser.parse(csarPayload);
68 JSONObject jsonObject = (JSONObject) parse;
69 JSONObject jsonObjectImportStructure = (JSONObject) jsonObject.get("importStructure");
70 List<TypeHeatMetaDefinition> listHeatMetaDefenition = new ArrayList<TypeHeatMetaDefinition>();
71 listHeatMetaDefenition = getArtifactsByGroup(jsonObjectImportStructure, listHeatMetaDefenition);
72 return listHeatMetaDefenition;
78 /*public static List<TypeHeatMetaDefinition> getListTypeHeatMetaDefinition(File csarUUID) throws Exception {
80 String artifactHeatMetaLocation = "Artifacts/HEAT.meta";
81 JSONParser parser = new JSONParser();
82 String csarPayload = getCsarPayload(csarUUID, artifactHeatMetaLocation);
83 if (csarPayload != null) {
84 Object parse = parser.parse(csarPayload);
85 JSONObject jsonObject = (JSONObject) parse;
86 JSONObject jsonObjectImportStructure = (JSONObject) jsonObject.get("importStructure");
87 List<TypeHeatMetaDefinition> listHeatMetaDefenition = new ArrayList<TypeHeatMetaDefinition>();
88 listHeatMetaDefenition = getArtifactsByGroup(jsonObjectImportStructure, listHeatMetaDefenition);
89 return listHeatMetaDefenition;
95 private static Integer getGroupCount(List<TypeHeatMetaDefinition> listHeatMetaDefenition) {
97 for (TypeHeatMetaDefinition typeHeatMetaDefinition : listHeatMetaDefenition) {
98 count = count + typeHeatMetaDefinition.getGroupHeatMetaDefinition().size();
103 private static Integer getArtifactCount(List<TypeHeatMetaDefinition> listHeatMetaDefenition, Boolean isEnvIncluded) {
105 List<HeatMetaFirstLevelDefinition> uniqeArtifactList = new ArrayList<>();
107 for (TypeHeatMetaDefinition typeHeatMetaDefinition : listHeatMetaDefenition) {
108 for (GroupHeatMetaDefinition groupHeatMetaDefinition : typeHeatMetaDefinition
109 .getGroupHeatMetaDefinition()) {
111 count = count + groupHeatMetaDefinition.getArtifactList().size();
113 for (HeatMetaFirstLevelDefinition fileName : groupHeatMetaDefinition.getArtifactList()) {
114 if (!fileName.getFileName().contains(".env") && !uniqeArtifactList.contains(fileName)) {
115 uniqeArtifactList.add(fileName);
125 /*protected static List<TypeHeatMetaDefinition> getArtifactsByGroup(JSONObject jsonObjectImportStructure, List<TypeHeatMetaDefinition> listHeatMetaDefenition) {
127 @SuppressWarnings("unchecked")
128 Set<Object> typeSet = jsonObjectImportStructure.keySet();
129 for (Object type : typeSet) {
130 TypeHeatMetaDefinition heatMetaDefenition = new TypeHeatMetaDefinition();
131 log.debug(type.toString());
132 log.debug("{}", jsonObjectImportStructure.get(type));
133 JSONArray array = (JSONArray) jsonObjectImportStructure.get(type);
134 heatMetaDefenition.setTypeName((String) type);
135 List<GroupHeatMetaDefinition> groupHeatMetaDefinitions = new ArrayList<GroupHeatMetaDefinition>();
136 heatMetaDefenition.setGroupHeatMetaDefinition(fetchArtifactByGroupFromJsonArray(array, groupHeatMetaDefinitions, true, false));
137 listHeatMetaDefenition.add(heatMetaDefenition);
139 return listHeatMetaDefenition;
142 /* protected static List<GroupHeatMetaDefinition> fetchArtifactByGroupFromJsonArray(JSONArray array, List<GroupHeatMetaDefinition> listGroupHeatMetaDefinition, Boolean openNewGroup, Boolean isNested) {
144 GroupHeatMetaDefinition groupHeatMetaDefinition;
147 for (int i = 0; i < array.size(); i++) {
149 groupHeatMetaDefinition = new GroupHeatMetaDefinition();
150 int groupNumber = listGroupHeatMetaDefinition.size() + 1;
151 log.debug("groupName={}", groupNumber);
152 groupHeatMetaDefinition.setGroup(groupNumber);
153 listGroupHeatMetaDefinition.add(groupHeatMetaDefinition);
154 PropertyHeatMetaDefinition propertyHeatMetaDefinition = new PropertyHeatMetaDefinition();
155 propertyHeatMetaDefinition.setName("isBase");
156 propertyHeatMetaDefinition.setValue(false);
157 groupHeatMetaDefinition.setPropertyHeatMetaDefinition(propertyHeatMetaDefinition);
159 groupHeatMetaDefinition = listGroupHeatMetaDefinition.get(listGroupHeatMetaDefinition.size() - 1);
160 JSONObject jsonObject = (JSONObject) array.get(i);
161 fetchArtifactByGroupFromJsonObject(listGroupHeatMetaDefinition, groupHeatMetaDefinition, jsonObject, isNested);
164 return listGroupHeatMetaDefinition;
168 /*public static void fetchArtifactByGroupFromJsonObject(List<GroupHeatMetaDefinition> listGroupHeatMetaDefinition, GroupHeatMetaDefinition groupHeatMetaDefinition, JSONObject jsonObject, Boolean isNested) {
169 @SuppressWarnings("unchecked")
170 Set<Object> groupsKey = jsonObject.keySet();
171 for (Object groupKey : groupsKey) {
172 String groupKeyStr = (String) groupKey;
173 if (groupKeyStr.equals("isBase")) {
174 PropertyHeatMetaDefinition propertyHeatMetaDefinition = new PropertyHeatMetaDefinition();
175 propertyHeatMetaDefinition.setName(groupKeyStr);
176 propertyHeatMetaDefinition.setValue((boolean) jsonObject.get(groupKeyStr));
177 if (!groupHeatMetaDefinition.getPropertyHeatMetaDefinition().equals(propertyHeatMetaDefinition)) {
178 groupHeatMetaDefinition.getPropertyHeatMetaDefinition().setValue((boolean) jsonObject.get(groupKeyStr));
181 if (groupKeyStr.equals("fileName")) {
182 String artifactName = (String) jsonObject.get(groupKeyStr);
183 String artifactType = ArtifactTypeEnum.HEAT_ARTIFACT.getType();
185 artifactType = ArtifactTypeEnum.HEAT_NESTED.getType();
187 if(jsonObject.get("type") != null && isNested == false){
188 artifactType = (String) jsonObject.get("type");
190 HeatMetaFirstLevelDefinition heatMetaFirstLevelDefinition = new HeatMetaFirstLevelDefinition(artifactName, artifactType);
191 List<HeatMetaFirstLevelDefinition> listArtifactNames = groupHeatMetaDefinition.getArtifactList();
192 listArtifactNames.add(heatMetaFirstLevelDefinition);
193 groupHeatMetaDefinition.setArtifactList(listArtifactNames);
195 if((groupKeyStr.equals("env"))){
196 if (jsonObject.get(groupKeyStr) instanceof JSONObject){
197 fetchArtifactByGroupFromJsonObject(listGroupHeatMetaDefinition, groupHeatMetaDefinition, (JSONObject) jsonObject.get(groupKeyStr), false);
199 assertTrue("Expected object is JSONObject, but actual: " + jsonObject.get(groupKeyStr).getClass(), jsonObject.get(groupKeyStr).getClass().equals("JSONObject"));
202 if((groupKeyStr.equals("nested"))){
203 if (jsonObject.get(groupKeyStr) instanceof JSONArray){
204 fetchArtifactByGroupFromJsonArray((JSONArray) jsonObject.get(groupKeyStr), listGroupHeatMetaDefinition, false, true);
206 assertTrue("Expected object is JSONArray, but actual: " + jsonObject.get(groupKeyStr).getClass(), jsonObject.get(groupKeyStr).getClass().equals("JSONArray"));
209 }else if (!(groupKeyStr.equals("isBase") || groupKeyStr.equals("type") || groupKeyStr.equals("env"))) {
210 if (jsonObject.get(groupKeyStr) instanceof JSONArray){
211 fetchArtifactByGroupFromJsonArray((JSONArray) jsonObject.get(groupKeyStr), listGroupHeatMetaDefinition, false, false);
213 assertTrue("Expected object is JSONArray, but actual: " + jsonObject.get(groupKeyStr).getClass(), jsonObject.get(groupKeyStr).getClass().equals("JSONArray"));
220 /*public static List<TypeHeatMetaDefinition> getListTypeHeatMetaDefinition(String csarUUID) throws Exception {
222 String artifactHeatMetaLocation = "Artifacts/HEAT.meta";
223 JSONParser parser = new JSONParser();
224 String csarPayload = getCsarPayload(csarUUID, artifactHeatMetaLocation);
225 if (csarPayload != null) {
226 Object parse = parser.parse(csarPayload);
227 JSONObject jsonObject = (JSONObject) parse;
228 JSONObject jsonObjectImportStructure = (JSONObject) jsonObject.get("importStructure");
229 List<TypeHeatMetaDefinition> listHeatMetaDefenition = new ArrayList<TypeHeatMetaDefinition>();
230 listHeatMetaDefenition = getArtifactsByGroup(jsonObjectImportStructure, listHeatMetaDefenition);
231 return listHeatMetaDefenition;
237 protected static List<TypeHeatMetaDefinition> getArtifactsByGroup(JSONObject jsonObjectImportStructure,
238 List<TypeHeatMetaDefinition> listHeatMetaDefenition) {
240 @SuppressWarnings("unchecked")
241 Set<Object> typeSet = jsonObjectImportStructure.keySet();
242 for (Object type : typeSet) {
243 TypeHeatMetaDefinition heatMetaDefenition = new TypeHeatMetaDefinition();
244 log.debug(type.toString());
245 log.debug("{}", jsonObjectImportStructure.get(type));
246 JSONArray array = (JSONArray) jsonObjectImportStructure.get(type);
247 heatMetaDefenition.setTypeName((String) type);
248 List<GroupHeatMetaDefinition> groupHeatMetaDefinitions = new ArrayList<GroupHeatMetaDefinition>();
249 heatMetaDefenition.setGroupHeatMetaDefinition(fetchArtifactByGroup(array, groupHeatMetaDefinitions, true));
250 listHeatMetaDefenition.add(heatMetaDefenition);
252 return listHeatMetaDefenition;
255 protected static List<GroupHeatMetaDefinition> fetchArtifactByGroup(JSONArray array,
256 List<GroupHeatMetaDefinition> listGroupHeatMetaDefinition, Boolean openNewGroup) {
258 GroupHeatMetaDefinition groupHeatMetaDefinition;
261 for (int i = 0; i < array.size(); i++) {
263 groupHeatMetaDefinition = new GroupHeatMetaDefinition();
264 int groupNumber = listGroupHeatMetaDefinition.size() + 1;
265 log.debug("groupName={}", groupNumber);
266 groupHeatMetaDefinition.setGroup(groupNumber);
267 listGroupHeatMetaDefinition.add(groupHeatMetaDefinition);
268 PropertyHeatMetaDefinition propertyHeatMetaDefinition = new PropertyHeatMetaDefinition();
269 propertyHeatMetaDefinition.setName("isBase");
270 propertyHeatMetaDefinition.setValue(false);
271 groupHeatMetaDefinition.setPropertyHeatMetaDefinition(propertyHeatMetaDefinition);
273 groupHeatMetaDefinition = listGroupHeatMetaDefinition.get(listGroupHeatMetaDefinition.size() - 1);
274 JSONObject jsonObject = (JSONObject) array.get(i);
275 @SuppressWarnings("unchecked")
276 Set<Object> groupsKey = jsonObject.keySet();
277 for (Object groupKey : groupsKey) {
278 String groupKeyStr = (String) groupKey;
279 if (groupKeyStr.equals("isBase")) {
280 PropertyHeatMetaDefinition propertyHeatMetaDefinition = new PropertyHeatMetaDefinition();
281 propertyHeatMetaDefinition.setName(groupKeyStr);
282 propertyHeatMetaDefinition.setValue((boolean) jsonObject.get(groupKeyStr));
283 if (!groupHeatMetaDefinition.getPropertyHeatMetaDefinition()
284 .equals(propertyHeatMetaDefinition)) {
285 groupHeatMetaDefinition.getPropertyHeatMetaDefinition()
286 .setValue((boolean) jsonObject.get(groupKeyStr));
289 if (groupKeyStr.equals("fileName") || groupKeyStr.equals("env")) {
290 String artifactName = (String) jsonObject.get(groupKeyStr);
291 List<String> listArtifactNames = groupHeatMetaDefinition.getArtifactList();
292 listArtifactNames.add(artifactName);
293 groupHeatMetaDefinition.setArtifactList(listArtifactNames);
295 if (!groupKeyStr.equals("isBase")) {
296 fetchArtifactByGroup((JSONArray) jsonObject.get(groupKeyStr), listGroupHeatMetaDefinition,
303 return listGroupHeatMetaDefinition;
306 private static Integer getArtifactCount(List<TypeHeatMetaDefinition> listHeatMetaDefenition,
307 Boolean isEnvIncluded) {
309 List<String> uniqeArtifactList = new ArrayList<>();
311 for (TypeHeatMetaDefinition typeHeatMetaDefinition : listHeatMetaDefenition) {
312 for (GroupHeatMetaDefinition groupHeatMetaDefinition : typeHeatMetaDefinition
313 .getGroupHeatMetaDefinition()) {
315 count = count + groupHeatMetaDefinition.getArtifactList().size();
317 for (String fileName : groupHeatMetaDefinition.getArtifactList()) {
318 if (!fileName.contains(".env") && !uniqeArtifactList.contains(fileName)) {
319 uniqeArtifactList.add(fileName);
329 private static Integer getGroupCount(List<TypeHeatMetaDefinition> listHeatMetaDefenition) {
331 for (TypeHeatMetaDefinition typeHeatMetaDefinition : listHeatMetaDefenition) {
332 count = count + typeHeatMetaDefinition.getGroupHeatMetaDefinition().size();
337 private static String groupNameBuilder(Resource resource) {
338 String separator = "::";
339 String module = "module-";
340 String groupName = resource.getSystemName() + separator + module;
344 public static void validateCsarVfArtifact(String csarUUID, Resource resource) throws Exception {
346 List<TypeHeatMetaDefinition> listTypeHeatMetaDefinition = getListTypeHeatMetaDefinition(csarUUID);
348 "check group count, expected: " + getGroupCount(listTypeHeatMetaDefinition) + ", actual: "
349 + resource.getGroups().size(),
350 getGroupCount(listTypeHeatMetaDefinition) == resource.getGroups().size());
352 "check artifact count, expected: " + getArtifactCount(listTypeHeatMetaDefinition, false) + ", actual: "
353 + resource.getDeploymentArtifacts().size(),
354 getArtifactCount(listTypeHeatMetaDefinition, false) == resource.getDeploymentArtifacts().size());
358 public static void validateToscaDefinitonObjectVsResource(ToscaDefinition toscaDefinition, Resource resource)
362 "check resource instance count, expected: " + getResourceInstanceCount(toscaDefinition) + ", actual: "
363 + resource.getComponentInstances().size(),
364 getResourceInstanceCount(toscaDefinition) == resource.getComponentInstances().size());
366 "check resource instance relation count, expected: " + getResourceInstanceRelationCount(toscaDefinition)
367 + ", actual: " + resource.getComponentInstancesRelations().size(),
368 getResourceInstanceRelationCount(toscaDefinition) == resource.getComponentInstancesRelations().size());
372 public static Integer getResourceInstanceCount(ToscaDefinition toscaDefinition) {
374 return toscaDefinition.getTopology_template().getNode_templates().size();
377 public static Integer getResourceInstanceRelationCount(ToscaDefinition toscaDefinition) {
379 // List<ToscaNodeTemplatesTopologyTemplateDefinition> toscaNodeTemplatesTopologyTemplateDefinition = toscaDefinition
380 // .getTopology_template().getToscaNodeTemplatesTopologyTemplateDefinition();
381 Map<String,ToscaNodeTemplatesTopologyTemplateDefinition> toscaNodeTemplatesTopologyTemplateDefinition = toscaDefinition.getTopology_template().getNode_templates();
382 for (int i = 0; i < toscaNodeTemplatesTopologyTemplateDefinition.size(); i++) {
383 // List<ToscaRequirementsNodeTemplatesDefinition> requirements = toscaNodeTemplatesTopologyTemplateDefinition.get(i).getRequirements();
385 for(Entry entry: toscaDefinition.getTopology_template().getNode_templates().entrySet() ){
386 if (entry.getValue().equals("requirements")){
391 if (requirements != null) {
392 for (ToscaRequirementsNodeTemplatesDefinition requirement : requirements) {
393 if (requirement.getNode() != null) {
403 private static void validateCsarVfgroup(String csarUUID, Resource resource) {
405 List<GroupDefinition> groups = resource.getGroups();
406 for (GroupDefinition groupDefinition : groups) {
407 List<String> artifacts = groupDefinition.getArtifacts();
408 assertTrue("group description is null", groupDefinition.getDescription() != null);
409 assertTrue("InvariantUUID is null", groupDefinition.getInvariantUUID() != null);
410 // groupDefinition.getMembers();
412 "name format mismatch, expected: " + groupNameBuilder(resource) + "[0-9], actual: "
413 + groupDefinition.getName(),
414 groupDefinition.getName().contains(groupNameBuilder(resource)));
415 // groupDefinition.getProperties();
416 // groupDefinition.getPropertyValueCounter();
417 assertTrue(groupDefinition.getType().equals(getGroupType()));
420 String expectedCsarUUID = csarUUID;
421 // String expectedToscaResourceName = "org.openecomp.resource.vf." +
422 // WordUtils.capitalize(resourceDetails.getName().toLowerCase());
424 // assertTrue("csarUUID : " + buildAssertMessage(expectedCsarUUID,
425 // resource.getCsarUUID()),
426 // expectedCsarUUID.equals(resource.getCsarUUID()));
427 // assertTrue("toscaResourceName : " +
428 // buildAssertMessage(expectedToscaResourceName,
429 // resource.getToscaResourceName()),
430 // expectedToscaResourceName.equals(resource.getToscaResourceName()));
432 // RestResponse getResourceResponse =
433 // ResourceRestUtils.getResource(resource.getUniqueId());
434 // Resource getResource =
435 // ResponseParser.parseToObjectUsingMapper(getResourceResponse.getResponse(),
437 // assertTrue("csarUUID : " + buildAssertMessage(expectedCsarUUID,
438 // getResource.getCsarUUID()),
439 // expectedCsarUUID.equals(getResource.getCsarUUID()));
440 // assertTrue("toscaResourceName : " +
441 // buildAssertMessage(expectedToscaResourceName,
442 // getResource.getToscaResourceName()),
443 // expectedToscaResourceName.equals(getResource.getToscaResourceName()));
447 private static String getGroupType() {
448 return "org.openecomp.groups.VfModule";