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 org.openecomp.sdc.be.model.Resource;
24 import org.openecomp.sdc.ci.tests.datatypes.GroupHeatMetaDefinition;
25 import org.openecomp.sdc.ci.tests.datatypes.HeatMetaFirstLevelDefinition;
26 import org.openecomp.sdc.ci.tests.datatypes.TypeHeatMetaDefinition;
27 import org.openecomp.sdc.ci.tests.utils.CsarParserUtils;
29 import java.util.ArrayList;
30 import java.util.List;
32 import static org.testng.AssertJUnit.assertTrue;
34 public class CsarValidationUtils {
36 public static void validateCsarVfArtifact(String csarUUID, Resource resource) throws Exception {
38 List<TypeHeatMetaDefinition> listTypeHeatMetaDefinition = CsarParserUtils.getListTypeHeatMetaDefinition(csarUUID);
40 "check group count, expected: " + getGroupCount(listTypeHeatMetaDefinition) + ", actual: "
41 + resource.getGroups().size(),
42 getGroupCount(listTypeHeatMetaDefinition) == resource.getGroups().size());
44 "check artifact count, expected: " + getArtifactCount(listTypeHeatMetaDefinition, false) + ", actual: "
45 + resource.getDeploymentArtifacts().size(),
46 getArtifactCount(listTypeHeatMetaDefinition, false) == resource.getDeploymentArtifacts().size());
50 /*public static List<TypeHeatMetaDefinition> getListTypeHeatMetaDefinition(String csarUUID) throws Exception {
52 String artifactHeatMetaLocation = "Artifacts/HEAT.meta";
53 JSONParser parser = new JSONParser();
54 String csarPayload = getCsarPayload(csarUUID, artifactHeatMetaLocation);
55 if (csarPayload != null) {
56 Object parse = parser.parse(csarPayload);
57 JSONObject jsonObject = (JSONObject) parse;
58 JSONObject jsonObjectImportStructure = (JSONObject) jsonObject.get("importStructure");
59 List<TypeHeatMetaDefinition> listHeatMetaDefenition = new ArrayList<TypeHeatMetaDefinition>();
60 listHeatMetaDefenition = getArtifactsByGroup(jsonObjectImportStructure, listHeatMetaDefenition);
61 return listHeatMetaDefenition;
67 /*public static List<TypeHeatMetaDefinition> getListTypeHeatMetaDefinition(File csarUUID) throws Exception {
69 String artifactHeatMetaLocation = "Artifacts/HEAT.meta";
70 JSONParser parser = new JSONParser();
71 String csarPayload = getCsarPayload(csarUUID, artifactHeatMetaLocation);
72 if (csarPayload != null) {
73 Object parse = parser.parse(csarPayload);
74 JSONObject jsonObject = (JSONObject) parse;
75 JSONObject jsonObjectImportStructure = (JSONObject) jsonObject.get("importStructure");
76 List<TypeHeatMetaDefinition> listHeatMetaDefenition = new ArrayList<TypeHeatMetaDefinition>();
77 listHeatMetaDefenition = getArtifactsByGroup(jsonObjectImportStructure, listHeatMetaDefenition);
78 return listHeatMetaDefenition;
84 private static Integer getGroupCount(List<TypeHeatMetaDefinition> listHeatMetaDefenition) {
86 for (TypeHeatMetaDefinition typeHeatMetaDefinition : listHeatMetaDefenition) {
87 count = count + typeHeatMetaDefinition.getGroupHeatMetaDefinition().size();
92 private static Integer getArtifactCount(List<TypeHeatMetaDefinition> listHeatMetaDefenition, Boolean isEnvIncluded) {
94 List<HeatMetaFirstLevelDefinition> uniqeArtifactList = new ArrayList<>();
96 for (TypeHeatMetaDefinition typeHeatMetaDefinition : listHeatMetaDefenition) {
97 for (GroupHeatMetaDefinition groupHeatMetaDefinition : typeHeatMetaDefinition
98 .getGroupHeatMetaDefinition()) {
100 count = count + groupHeatMetaDefinition.getArtifactList().size();
102 for (HeatMetaFirstLevelDefinition fileName : groupHeatMetaDefinition.getArtifactList()) {
103 if (!fileName.getFileName().contains(".env") && !uniqeArtifactList.contains(fileName)) {
104 uniqeArtifactList.add(fileName);
114 /*protected static List<TypeHeatMetaDefinition> getArtifactsByGroup(JSONObject jsonObjectImportStructure, List<TypeHeatMetaDefinition> listHeatMetaDefenition) {
116 @SuppressWarnings("unchecked")
117 Set<Object> typeSet = jsonObjectImportStructure.keySet();
118 for (Object type : typeSet) {
119 TypeHeatMetaDefinition heatMetaDefenition = new TypeHeatMetaDefinition();
120 log.debug(type.toString());
121 log.debug("{}", jsonObjectImportStructure.get(type));
122 JSONArray array = (JSONArray) jsonObjectImportStructure.get(type);
123 heatMetaDefenition.setTypeName((String) type);
124 List<GroupHeatMetaDefinition> groupHeatMetaDefinitions = new ArrayList<GroupHeatMetaDefinition>();
125 heatMetaDefenition.setGroupHeatMetaDefinition(fetchArtifactByGroupFromJsonArray(array, groupHeatMetaDefinitions, true, false));
126 listHeatMetaDefenition.add(heatMetaDefenition);
128 return listHeatMetaDefenition;
131 /* protected static List<GroupHeatMetaDefinition> fetchArtifactByGroupFromJsonArray(JSONArray array, List<GroupHeatMetaDefinition> listGroupHeatMetaDefinition, Boolean openNewGroup, Boolean isNested) {
133 GroupHeatMetaDefinition groupHeatMetaDefinition;
136 for (int i = 0; i < array.size(); i++) {
138 groupHeatMetaDefinition = new GroupHeatMetaDefinition();
139 int groupNumber = listGroupHeatMetaDefinition.size() + 1;
140 log.debug("groupName={}", groupNumber);
141 groupHeatMetaDefinition.setGroup(groupNumber);
142 listGroupHeatMetaDefinition.add(groupHeatMetaDefinition);
143 PropertyHeatMetaDefinition propertyHeatMetaDefinition = new PropertyHeatMetaDefinition();
144 propertyHeatMetaDefinition.setName("isBase");
145 propertyHeatMetaDefinition.setValue(false);
146 groupHeatMetaDefinition.setPropertyHeatMetaDefinition(propertyHeatMetaDefinition);
148 groupHeatMetaDefinition = listGroupHeatMetaDefinition.get(listGroupHeatMetaDefinition.size() - 1);
149 JSONObject jsonObject = (JSONObject) array.get(i);
150 fetchArtifactByGroupFromJsonObject(listGroupHeatMetaDefinition, groupHeatMetaDefinition, jsonObject, isNested);
153 return listGroupHeatMetaDefinition;
157 /*public static void fetchArtifactByGroupFromJsonObject(List<GroupHeatMetaDefinition> listGroupHeatMetaDefinition, GroupHeatMetaDefinition groupHeatMetaDefinition, JSONObject jsonObject, Boolean isNested) {
158 @SuppressWarnings("unchecked")
159 Set<Object> groupsKey = jsonObject.keySet();
160 for (Object groupKey : groupsKey) {
161 String groupKeyStr = (String) groupKey;
162 if (groupKeyStr.equals("isBase")) {
163 PropertyHeatMetaDefinition propertyHeatMetaDefinition = new PropertyHeatMetaDefinition();
164 propertyHeatMetaDefinition.setName(groupKeyStr);
165 propertyHeatMetaDefinition.setValue((boolean) jsonObject.get(groupKeyStr));
166 if (!groupHeatMetaDefinition.getPropertyHeatMetaDefinition().equals(propertyHeatMetaDefinition)) {
167 groupHeatMetaDefinition.getPropertyHeatMetaDefinition().setValue((boolean) jsonObject.get(groupKeyStr));
170 if (groupKeyStr.equals("fileName")) {
171 String artifactName = (String) jsonObject.get(groupKeyStr);
172 String artifactType = ArtifactTypeEnum.HEAT_ARTIFACT.getType();
174 artifactType = ArtifactTypeEnum.HEAT_NESTED.getType();
176 if(jsonObject.get("type") != null && isNested == false){
177 artifactType = (String) jsonObject.get("type");
179 HeatMetaFirstLevelDefinition heatMetaFirstLevelDefinition = new HeatMetaFirstLevelDefinition(artifactName, artifactType);
180 List<HeatMetaFirstLevelDefinition> listArtifactNames = groupHeatMetaDefinition.getArtifactList();
181 listArtifactNames.add(heatMetaFirstLevelDefinition);
182 groupHeatMetaDefinition.setArtifactList(listArtifactNames);
184 if((groupKeyStr.equals("env"))){
185 if (jsonObject.get(groupKeyStr) instanceof JSONObject){
186 fetchArtifactByGroupFromJsonObject(listGroupHeatMetaDefinition, groupHeatMetaDefinition, (JSONObject) jsonObject.get(groupKeyStr), false);
188 assertTrue("Expected object is JSONObject, but actual: " + jsonObject.get(groupKeyStr).getClass(), jsonObject.get(groupKeyStr).getClass().equals("JSONObject"));
191 if((groupKeyStr.equals("nested"))){
192 if (jsonObject.get(groupKeyStr) instanceof JSONArray){
193 fetchArtifactByGroupFromJsonArray((JSONArray) jsonObject.get(groupKeyStr), listGroupHeatMetaDefinition, false, true);
195 assertTrue("Expected object is JSONArray, but actual: " + jsonObject.get(groupKeyStr).getClass(), jsonObject.get(groupKeyStr).getClass().equals("JSONArray"));
198 }else if (!(groupKeyStr.equals("isBase") || groupKeyStr.equals("type") || groupKeyStr.equals("env"))) {
199 if (jsonObject.get(groupKeyStr) instanceof JSONArray){
200 fetchArtifactByGroupFromJsonArray((JSONArray) jsonObject.get(groupKeyStr), listGroupHeatMetaDefinition, false, false);
202 assertTrue("Expected object is JSONArray, but actual: " + jsonObject.get(groupKeyStr).getClass(), jsonObject.get(groupKeyStr).getClass().equals("JSONArray"));
209 /*public static List<TypeHeatMetaDefinition> getListTypeHeatMetaDefinition(String csarUUID) throws Exception {
211 String artifactHeatMetaLocation = "Artifacts/HEAT.meta";
212 JSONParser parser = new JSONParser();
213 String csarPayload = getCsarPayload(csarUUID, artifactHeatMetaLocation);
214 if (csarPayload != null) {
215 Object parse = parser.parse(csarPayload);
216 JSONObject jsonObject = (JSONObject) parse;
217 JSONObject jsonObjectImportStructure = (JSONObject) jsonObject.get("importStructure");
218 List<TypeHeatMetaDefinition> listHeatMetaDefenition = new ArrayList<TypeHeatMetaDefinition>();
219 listHeatMetaDefenition = getArtifactsByGroup(jsonObjectImportStructure, listHeatMetaDefenition);
220 return listHeatMetaDefenition;
226 protected static List<TypeHeatMetaDefinition> getArtifactsByGroup(JSONObject jsonObjectImportStructure,
227 List<TypeHeatMetaDefinition> listHeatMetaDefenition) {
229 @SuppressWarnings("unchecked")
230 Set<Object> typeSet = jsonObjectImportStructure.keySet();
231 for (Object type : typeSet) {
232 TypeHeatMetaDefinition heatMetaDefenition = new TypeHeatMetaDefinition();
233 log.debug(type.toString());
234 log.debug("{}", jsonObjectImportStructure.get(type));
235 JSONArray array = (JSONArray) jsonObjectImportStructure.get(type);
236 heatMetaDefenition.setTypeName((String) type);
237 List<GroupHeatMetaDefinition> groupHeatMetaDefinitions = new ArrayList<GroupHeatMetaDefinition>();
238 heatMetaDefenition.setGroupHeatMetaDefinition(fetchArtifactByGroup(array, groupHeatMetaDefinitions, true));
239 listHeatMetaDefenition.add(heatMetaDefenition);
241 return listHeatMetaDefenition;
244 protected static List<GroupHeatMetaDefinition> fetchArtifactByGroup(JSONArray array,
245 List<GroupHeatMetaDefinition> listGroupHeatMetaDefinition, Boolean openNewGroup) {
247 GroupHeatMetaDefinition groupHeatMetaDefinition;
250 for (int i = 0; i < array.size(); i++) {
252 groupHeatMetaDefinition = new GroupHeatMetaDefinition();
253 int groupNumber = listGroupHeatMetaDefinition.size() + 1;
254 log.debug("groupName={}", groupNumber);
255 groupHeatMetaDefinition.setGroup(groupNumber);
256 listGroupHeatMetaDefinition.add(groupHeatMetaDefinition);
257 PropertyHeatMetaDefinition propertyHeatMetaDefinition = new PropertyHeatMetaDefinition();
258 propertyHeatMetaDefinition.setName("isBase");
259 propertyHeatMetaDefinition.setValue(false);
260 groupHeatMetaDefinition.setPropertyHeatMetaDefinition(propertyHeatMetaDefinition);
262 groupHeatMetaDefinition = listGroupHeatMetaDefinition.get(listGroupHeatMetaDefinition.size() - 1);
263 JSONObject jsonObject = (JSONObject) array.get(i);
264 @SuppressWarnings("unchecked")
265 Set<Object> groupsKey = jsonObject.keySet();
266 for (Object groupKey : groupsKey) {
267 String groupKeyStr = (String) groupKey;
268 if (groupKeyStr.equals("isBase")) {
269 PropertyHeatMetaDefinition propertyHeatMetaDefinition = new PropertyHeatMetaDefinition();
270 propertyHeatMetaDefinition.setName(groupKeyStr);
271 propertyHeatMetaDefinition.setValue((boolean) jsonObject.get(groupKeyStr));
272 if (!groupHeatMetaDefinition.getPropertyHeatMetaDefinition()
273 .equals(propertyHeatMetaDefinition)) {
274 groupHeatMetaDefinition.getPropertyHeatMetaDefinition()
275 .setValue((boolean) jsonObject.get(groupKeyStr));
278 if (groupKeyStr.equals("fileName") || groupKeyStr.equals("env")) {
279 String artifactName = (String) jsonObject.get(groupKeyStr);
280 List<String> listArtifactNames = groupHeatMetaDefinition.getArtifactList();
281 listArtifactNames.add(artifactName);
282 groupHeatMetaDefinition.setArtifactList(listArtifactNames);
284 if (!groupKeyStr.equals("isBase")) {
285 fetchArtifactByGroup((JSONArray) jsonObject.get(groupKeyStr), listGroupHeatMetaDefinition,
292 return listGroupHeatMetaDefinition;
295 private static Integer getArtifactCount(List<TypeHeatMetaDefinition> listHeatMetaDefenition,
296 Boolean isEnvIncluded) {
298 List<String> uniqeArtifactList = new ArrayList<>();
300 for (TypeHeatMetaDefinition typeHeatMetaDefinition : listHeatMetaDefenition) {
301 for (GroupHeatMetaDefinition groupHeatMetaDefinition : typeHeatMetaDefinition
302 .getGroupHeatMetaDefinition()) {
304 count = count + groupHeatMetaDefinition.getArtifactList().size();
306 for (String fileName : groupHeatMetaDefinition.getArtifactList()) {
307 if (!fileName.contains(".env") && !uniqeArtifactList.contains(fileName)) {
308 uniqeArtifactList.add(fileName);
318 private static Integer getGroupCount(List<TypeHeatMetaDefinition> listHeatMetaDefenition) {
320 for (TypeHeatMetaDefinition typeHeatMetaDefinition : listHeatMetaDefenition) {
321 count = count + typeHeatMetaDefinition.getGroupHeatMetaDefinition().size();
326 private static String groupNameBuilder(Resource resource) {
327 String separator = "::";
328 String module = "module-";
329 String groupName = resource.getSystemName() + separator + module;
333 public static void validateCsarVfArtifact(String csarUUID, Resource resource) throws Exception {
335 List<TypeHeatMetaDefinition> listTypeHeatMetaDefinition = getListTypeHeatMetaDefinition(csarUUID);
337 "check group count, expected: " + getGroupCount(listTypeHeatMetaDefinition) + ", actual: "
338 + resource.getGroups().size(),
339 getGroupCount(listTypeHeatMetaDefinition) == resource.getGroups().size());
341 "check artifact count, expected: " + getArtifactCount(listTypeHeatMetaDefinition, false) + ", actual: "
342 + resource.getDeploymentArtifacts().size(),
343 getArtifactCount(listTypeHeatMetaDefinition, false) == resource.getDeploymentArtifacts().size());
347 public static void validateToscaDefinitonObjectVsResource(ToscaDefinition toscaDefinition, Resource resource)
351 "check resource instance count, expected: " + getResourceInstanceCount(toscaDefinition) + ", actual: "
352 + resource.getComponentInstances().size(),
353 getResourceInstanceCount(toscaDefinition) == resource.getComponentInstances().size());
355 "check resource instance relation count, expected: " + getResourceInstanceRelationCount(toscaDefinition)
356 + ", actual: " + resource.getComponentInstancesRelations().size(),
357 getResourceInstanceRelationCount(toscaDefinition) == resource.getComponentInstancesRelations().size());
361 public static Integer getResourceInstanceCount(ToscaDefinition toscaDefinition) {
363 return toscaDefinition.getTopology_template().getNode_templates().size();
366 public static Integer getResourceInstanceRelationCount(ToscaDefinition toscaDefinition) {
368 // List<ToscaNodeTemplatesTopologyTemplateDefinition> toscaNodeTemplatesTopologyTemplateDefinition = toscaDefinition
369 // .getTopology_template().getToscaNodeTemplatesTopologyTemplateDefinition();
370 Map<String,ToscaNodeTemplatesTopologyTemplateDefinition> toscaNodeTemplatesTopologyTemplateDefinition = toscaDefinition.getTopology_template().getNode_templates();
371 for (int i = 0; i < toscaNodeTemplatesTopologyTemplateDefinition.size(); i++) {
372 // List<ToscaRequirementsNodeTemplatesDefinition> requirements = toscaNodeTemplatesTopologyTemplateDefinition.get(i).getRequirements();
374 for(Entry entry: toscaDefinition.getTopology_template().getNode_templates().entrySet() ){
375 if (entry.getValue().equals("requirements")){
380 if (requirements != null) {
381 for (ToscaRequirementsNodeTemplatesDefinition requirement : requirements) {
382 if (requirement.getNode() != null) {
392 private static void validateCsarVfgroup(String csarUUID, Resource resource) {
394 List<GroupDefinition> groups = resource.getGroups();
395 for (GroupDefinition groupDefinition : groups) {
396 List<String> artifacts = groupDefinition.getArtifacts();
397 assertTrue("group description is null", groupDefinition.getDescription() != null);
398 assertTrue("InvariantUUID is null", groupDefinition.getInvariantUUID() != null);
399 // groupDefinition.getMembers();
401 "name format mismatch, expected: " + groupNameBuilder(resource) + "[0-9], actual: "
402 + groupDefinition.getName(),
403 groupDefinition.getName().contains(groupNameBuilder(resource)));
404 // groupDefinition.getProperties();
405 // groupDefinition.getPropertyValueCounter();
406 assertTrue(groupDefinition.getType().equals(getGroupType()));
409 String expectedCsarUUID = csarUUID;
410 // String expectedToscaResourceName = "org.openecomp.resource.vf." +
411 // WordUtils.capitalize(resourceDetails.getName().toLowerCase());
413 // assertTrue("csarUUID : " + buildAssertMessage(expectedCsarUUID,
414 // resource.getCsarUUID()),
415 // expectedCsarUUID.equals(resource.getCsarUUID()));
416 // assertTrue("toscaResourceName : " +
417 // buildAssertMessage(expectedToscaResourceName,
418 // resource.getToscaResourceName()),
419 // expectedToscaResourceName.equals(resource.getToscaResourceName()));
421 // RestResponse getResourceResponse =
422 // ResourceRestUtils.getResource(resource.getUniqueId());
423 // Resource getResource =
424 // ResponseParser.parseToObjectUsingMapper(getResourceResponse.getResponse(),
426 // assertTrue("csarUUID : " + buildAssertMessage(expectedCsarUUID,
427 // getResource.getCsarUUID()),
428 // expectedCsarUUID.equals(getResource.getCsarUUID()));
429 // assertTrue("toscaResourceName : " +
430 // buildAssertMessage(expectedToscaResourceName,
431 // getResource.getToscaResourceName()),
432 // expectedToscaResourceName.equals(getResource.getToscaResourceName()));
436 private static String getGroupType() {
437 return "org.openecomp.groups.VfModule";