2  * Copyright © 2016-2017 European Support Limited
 
   4  * Licensed under the Apache License, Version 2.0 (the "License");
 
   5  * you may not use this file except in compliance with the License.
 
   6  * You may obtain a copy of the License at
 
   8  *      http://www.apache.org/licenses/LICENSE-2.0
 
  10  * Unless required by applicable law or agreed to in writing, software
 
  11  * distributed under the License is distributed on an "AS IS" BASIS,
 
  12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
  13  * See the License for the specific language governing permissions and
 
  14  * limitations under the License.
 
  17 package org.openecomp.sdc.translator;
 
  19 import org.apache.commons.collections4.CollectionUtils;
 
  20 import org.apache.commons.lang3.tuple.Pair;
 
  21 import org.codehaus.jackson.map.ObjectMapper;
 
  22 import org.junit.Assert;
 
  23 import org.openecomp.core.translator.api.HeatToToscaTranslator;
 
  24 import org.openecomp.core.utilities.file.FileUtils;
 
  25 import org.openecomp.sdc.common.utils.SdcCommon;
 
  26 import org.openecomp.sdc.logging.api.Logger;
 
  27 import org.openecomp.sdc.logging.api.LoggerFactory;
 
  28 import org.openecomp.sdc.tosca.datatypes.ToscaServiceModel;
 
  29 import org.openecomp.sdc.tosca.datatypes.model.GroupDefinition;
 
  30 import org.openecomp.sdc.tosca.datatypes.model.NodeTemplate;
 
  31 import org.openecomp.sdc.tosca.datatypes.model.RequirementAssignment;
 
  32 import org.openecomp.sdc.tosca.datatypes.model.ServiceTemplate;
 
  33 import org.openecomp.sdc.tosca.datatypes.model.TopologyTemplate;
 
  34 import org.openecomp.sdc.tosca.services.DataModelUtil;
 
  35 import org.openecomp.sdc.tosca.services.ToscaConstants;
 
  36 import org.openecomp.sdc.tosca.services.ToscaExtensionYamlUtil;
 
  37 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.ComputeConsolidationData;
 
  38 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.ComputeTemplateConsolidationData;
 
  39 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.ConsolidationData;
 
  40 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.EntityConsolidationData;
 
  41 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.FileComputeConsolidationData;
 
  42 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.FileNestedConsolidationData;
 
  43 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.FilePortConsolidationData;
 
  44 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.GetAttrFuncData;
 
  45 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.NestedConsolidationData;
 
  46 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.NestedTemplateConsolidationData;
 
  47 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.PortTemplateConsolidationData;
 
  48 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.RequirementAssignmentData;
 
  49 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.SubInterfaceTemplateConsolidationData;
 
  50 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.TypeComputeConsolidationData;
 
  51 import org.openecomp.sdc.translator.services.heattotosca.globaltypes.GlobalTypesGenerator;
 
  54 import java.io.FileInputStream;
 
  55 import java.io.FileNotFoundException;
 
  56 import java.io.IOException;
 
  57 import java.io.InputStream;
 
  59 import java.nio.file.NotDirectoryException;
 
  60 import java.util.ArrayList;
 
  61 import java.util.HashMap;
 
  62 import java.util.List;
 
  63 import java.util.ListIterator;
 
  65 import java.util.Objects;
 
  66 import java.util.Optional;
 
  68 public class TestUtils {
 
  69   private static final String MANIFEST_NAME = SdcCommon.MANIFEST_NAME;
 
  70   private static String zipFilename = "VSP.zip";
 
  71   private static String validationFilename = "validationOutput.json";
 
  73   private static Logger logger = (Logger) LoggerFactory.getLogger(TestUtils.class);
 
  79   public static void addFilesToTranslator(HeatToToscaTranslator heatToToscaTranslator, String path)
 
  81     File manifestFile = new File(path);
 
  82     File[] files = manifestFile.listFiles();
 
  85     Assert.assertNotNull("manifest files is empty", files);
 
  87     for (File file : files) {
 
  89       try (FileInputStream fis = new FileInputStream(file)) {
 
  91         fileContent = FileUtils.toByteArray(fis);
 
  93         if (file.getName().equals(MANIFEST_NAME)) {
 
  94           heatToToscaTranslator.addManifest(MANIFEST_NAME, fileContent);
 
  96           if (!file.getName().equals(zipFilename) && (!file.getName().equals(validationFilename))) {
 
  97             heatToToscaTranslator.addFile(file.getName(), fileContent);
 
 105    * Get tosca service template models for the files in a directory
 
 107    * @param baseDirPath base directory for the tosca file
 
 108    * @return Map of <ServiceTemplateFilename, ServiceTemplate> for the files in this directory
 
 110   private static Map<String, ServiceTemplate> getServiceTemplates(String baseDirPath) {
 
 111     Map<String, ServiceTemplate> serviceTemplateMap = new HashMap<>();
 
 112     ToscaExtensionYamlUtil toscaExtensionYamlUtil = new ToscaExtensionYamlUtil();
 
 113     baseDirPath = "." + baseDirPath + "/";
 
 115       String[] fileList = {};
 
 116       URL filesDirUrl = TestUtils.class.getClassLoader().getResource(baseDirPath);
 
 117       if (filesDirUrl != null && filesDirUrl.getProtocol().equals("file")) {
 
 118         fileList = new File(filesDirUrl.toURI()).list();
 
 120         Assert.fail("Invalid expected output files directory");
 
 122       for (String fileName : fileList) {
 
 124         URL resource = TestUtils.class.getClassLoader().getResource(baseDirPath + fileName);
 
 125         ServiceTemplate serviceTemplate = FileUtils.readViaInputStream(resource,
 
 126             stream -> toscaExtensionYamlUtil.yamlToObject(stream, ServiceTemplate.class));
 
 128         serviceTemplateMap.put(fileName, serviceTemplate);
 
 130     } catch (Exception e) {
 
 132       Assert.fail(e.getMessage());
 
 134     return serviceTemplateMap;
 
 138    * Get tosca service template models
 
 140    * @param expectedResultMap Map of filename and payload of the expected result files
 
 141    * @return Map of <ServiceTemplateFilename, ServiceTemplate> for the files in this directory
 
 143   public static Map<String, ServiceTemplate> getServiceTemplates(Map<String, byte[]>
 
 145     Map<String, ServiceTemplate> serviceTemplateMap = new HashMap<>();
 
 146     ToscaExtensionYamlUtil toscaExtensionYamlUtil = new ToscaExtensionYamlUtil();
 
 147     for (String fileName : expectedResultMap.keySet()) {
 
 148       ServiceTemplate serviceTemplate = toscaExtensionYamlUtil.yamlToObject
 
 149           (new String(expectedResultMap.get(fileName)), ServiceTemplate.class);
 
 150       serviceTemplateMap.put(fileName, serviceTemplate);
 
 152     return serviceTemplateMap;
 
 156   public static ToscaServiceModel loadToscaServiceModel(String serviceTemplatesPath,
 
 157                                                         String globalServiceTemplatesPath,
 
 158                                                         String entryDefinitionServiceTemplate)
 
 160     ToscaExtensionYamlUtil toscaExtensionYamlUtil = new ToscaExtensionYamlUtil();
 
 161     Map<String, ServiceTemplate> serviceTemplates = new HashMap<>();
 
 162     if (entryDefinitionServiceTemplate == null) {
 
 163       entryDefinitionServiceTemplate = "MainServiceTemplate.yaml";
 
 166     serviceTemplates = getServiceTemplates(serviceTemplatesPath);
 
 167     if (globalServiceTemplatesPath != null) {
 
 168       serviceTemplates = getServiceTemplates(globalServiceTemplatesPath);
 
 171     return new ToscaServiceModel(null, serviceTemplates, entryDefinitionServiceTemplate);
 
 174   public static ServiceTemplate loadServiceTemplate(String serviceTemplatePath)
 
 176     ServiceTemplate serviceTemplateFromYaml = new ServiceTemplate();
 
 177     ToscaExtensionYamlUtil toscaExtensionYamlUtil = new ToscaExtensionYamlUtil();
 
 178     URL urlFile = TestUtils.class.getResource(serviceTemplatePath);
 
 179     if (urlFile != null) {
 
 180       File pathFile = new File(urlFile.getFile());
 
 181       File[] files = pathFile.listFiles();
 
 182       for (File file : files) {
 
 183         try (InputStream yamlFile = new FileInputStream(file)) {
 
 184           serviceTemplateFromYaml =
 
 185               toscaExtensionYamlUtil.yamlToObject(yamlFile, ServiceTemplate.class);
 
 186           createConcreteRequirementObjectsInServiceTemplate(serviceTemplateFromYaml,
 
 187               toscaExtensionYamlUtil);
 
 190           } catch (IOException ignore) {
 
 191             logger.debug("", ignore);
 
 193         } catch (FileNotFoundException e) {
 
 195         } catch (IOException e) {
 
 200       throw new NotDirectoryException(serviceTemplatePath);
 
 202     return serviceTemplateFromYaml;
 
 206   public static void loadServiceTemplates(String serviceTemplatesPath,
 
 207                                           ToscaExtensionYamlUtil toscaExtensionYamlUtil,
 
 208                                           Map<String, ServiceTemplate> serviceTemplates)
 
 210     URL urlFile = TestUtils.class.getResource(serviceTemplatesPath);
 
 211     if (urlFile != null) {
 
 212       File pathFile = new File(urlFile.getFile());
 
 213       File[] files = pathFile.listFiles();
 
 215         addServiceTemplateFiles(serviceTemplates, files, toscaExtensionYamlUtil);
 
 217         throw new NotDirectoryException(serviceTemplatesPath);
 
 220       throw new NotDirectoryException(serviceTemplatesPath);
 
 224   private static void addServiceTemplateFiles(Map<String, ServiceTemplate> serviceTemplates,
 
 226                                               ToscaExtensionYamlUtil toscaExtensionYamlUtil)
 
 228     for (File file : files) {
 
 229       try (InputStream yamlFile = new FileInputStream(file)) {
 
 230         ServiceTemplate serviceTemplateFromYaml =
 
 231             toscaExtensionYamlUtil.yamlToObject(yamlFile, ServiceTemplate.class);
 
 232         createConcreteRequirementObjectsInServiceTemplate(serviceTemplateFromYaml,
 
 233             toscaExtensionYamlUtil);
 
 234         serviceTemplates.put(file.getName(), serviceTemplateFromYaml);
 
 237         } catch (IOException ignore) {
 
 238           logger.debug("", ignore);
 
 240       } catch (FileNotFoundException e) {
 
 242       } catch (IOException e) {
 
 248   private static void createConcreteRequirementObjectsInServiceTemplate(ServiceTemplate
 
 249                                                                             serviceTemplateFromYaml,
 
 250                                                                         ToscaExtensionYamlUtil
 
 251                                                                             toscaExtensionYamlUtil) {
 
 253     if (serviceTemplateFromYaml == null
 
 254         || serviceTemplateFromYaml.getTopology_template() == null
 
 255         || serviceTemplateFromYaml.getTopology_template().getNode_templates() == null) {
 
 259     //Creating concrete objects
 
 260     Map<String, NodeTemplate> nodeTemplates =
 
 261         serviceTemplateFromYaml.getTopology_template().getNode_templates();
 
 262     for (Map.Entry<String, NodeTemplate> entry : nodeTemplates.entrySet()) {
 
 263       NodeTemplate nodeTemplate = entry.getValue();
 
 264       List<Map<String, RequirementAssignment>> requirements = nodeTemplate.getRequirements();
 
 265       List<Map<String, RequirementAssignment>> concreteRequirementList = new ArrayList<>();
 
 266       if (requirements != null) {
 
 267         ListIterator<Map<String, RequirementAssignment>> reqListIterator = requirements
 
 269         while (reqListIterator.hasNext()) {
 
 270           Map<String, RequirementAssignment> requirement = reqListIterator.next();
 
 271           Map<String, RequirementAssignment> concreteRequirement = new HashMap<>();
 
 272           for (Map.Entry<String, RequirementAssignment> reqEntry : requirement.entrySet()) {
 
 273             RequirementAssignment requirementAssignment = (toscaExtensionYamlUtil
 
 274                 .yamlToObject(toscaExtensionYamlUtil.objectToYaml(reqEntry.getValue()),
 
 275                     RequirementAssignment.class));
 
 276             concreteRequirement.put(reqEntry.getKey(), requirementAssignment);
 
 277             concreteRequirementList.add(concreteRequirement);
 
 278             reqListIterator.remove();
 
 281         requirements.clear();
 
 282         requirements.addAll(concreteRequirementList);
 
 283         nodeTemplate.setRequirements(requirements);
 
 285       System.out.println();
 
 286       //toscaExtensionYamlUtil.yamlToObject(nodeTemplate, NodeTemplate.class);
 
 290   public static void updateMultiplePortConsolidationDatas(String serviceTemplateName,
 
 291                                                           List<String> portNodeTemplateIds,
 
 292                                                           List<List<String>> nodesConnectedInIds,
 
 293                                                           List<List<String>> nodesConnectedOutIds,
 
 294                                                           List<List<String>> groupIds,
 
 295                                                           List<List<String>> getAttrInIds,
 
 296                                                           List<List<Pair<String, GetAttrFuncData>>> getAttrOutFuncDataList,
 
 297                                                           ConsolidationData consolidationData) {
 
 298     for (int i = 0; i < portNodeTemplateIds.size(); i++) {
 
 299       updatePortConsolidationData(serviceTemplateName, portNodeTemplateIds.get(i),
 
 300           nodesConnectedInIds.get(i), nodesConnectedOutIds.get(i),
 
 301           groupIds.get(i), getAttrInIds.get(i), getAttrOutFuncDataList.get(i), consolidationData);
 
 305   public static void addPortSubInterface(
 
 306       SubInterfaceConsolidationDataTestInfo subInterfaceConsolidationDataTestInfo) {
 
 307     PortTemplateConsolidationData portTemplateConsolidationData =
 
 308         subInterfaceConsolidationDataTestInfo.getConsolidationData().getPortConsolidationData().getFilePortConsolidationData
 
 309             (subInterfaceConsolidationDataTestInfo.getServiceTemplateFileName()).getPortTemplateConsolidationData(
 
 310             subInterfaceConsolidationDataTestInfo.getPortNodeTemplateId());
 
 312     SubInterfaceTemplateConsolidationData subInterface =
 
 313         new SubInterfaceTemplateConsolidationData();
 
 314     subInterface.setNodeTemplateId(subInterfaceConsolidationDataTestInfo.getSubInterfaceId());
 
 315     subInterface.setNetworkRole(subInterfaceConsolidationDataTestInfo.getNetworkRole());
 
 316     subInterface.setResourceGroupCount(
 
 317         subInterfaceConsolidationDataTestInfo.getResourceGroupCount());
 
 319     updateRelationsForEntityConsolidationData(
 
 320         subInterfaceConsolidationDataTestInfo.getNodesConnectedIn(),
 
 321         subInterfaceConsolidationDataTestInfo.getNodesConnectedOut(), null,
 
 322         subInterfaceConsolidationDataTestInfo.getNodesGetAttrIn(),
 
 323         subInterfaceConsolidationDataTestInfo.getNodesGetAttrOut(), subInterface);
 
 325     portTemplateConsolidationData.addSubInterfaceConsolidationData(
 
 326         subInterfaceConsolidationDataTestInfo.getSubInterfaceType(), subInterface);
 
 330   public static void updatePortConsolidationData(String serviceTemplateFileName,
 
 331                                                  String portNodeTemplateId,
 
 332                                                  List<String> nodesConnectedInIds,
 
 333                                                  List<String> nodesConnectedOutIds,
 
 334                                                  List<String> groupIds, List<String> getAttrInIds,
 
 335                                                  List<Pair<String, GetAttrFuncData>> getAttrOutFuncDataList,
 
 336                                                  ConsolidationData consolidationData) {
 
 338     PortTemplateConsolidationData portTemplateConsolidationData =
 
 339         createPortTemplateConsolidationData(portNodeTemplateId);
 
 341     updateRelationsForEntityConsolidationData(nodesConnectedInIds,
 
 342         nodesConnectedOutIds, groupIds, getAttrInIds, getAttrOutFuncDataList,
 
 343         portTemplateConsolidationData);
 
 345     consolidationData.getPortConsolidationData()
 
 346         .getFilePortConsolidationData(serviceTemplateFileName)
 
 347         .setPortTemplateConsolidationData(portNodeTemplateId, portTemplateConsolidationData);
 
 350   public static PortTemplateConsolidationData createPortTemplateConsolidationData(
 
 351       String portNodeTemplateId) {
 
 352     PortTemplateConsolidationData portTemplateConsolidationData =
 
 353         new PortTemplateConsolidationData();
 
 354     portTemplateConsolidationData.setNodeTemplateId(portNodeTemplateId);
 
 355     return portTemplateConsolidationData;
 
 358   public static void initPortConsolidationData(String serviceTemplateFileName,
 
 359                                                ConsolidationData consolidationData) {
 
 361     consolidationData.getPortConsolidationData()
 
 362         .setFilePortConsolidationData(serviceTemplateFileName, new FilePortConsolidationData());
 
 365   public static void updateComputeTemplateConsolidationData(String serviceTemplateFileName,
 
 366                                                             String computeNodeTypeName,
 
 367                                                             String computeNodeTemplateId,
 
 368                                                             List<String> nodeIdsConnectedIn,
 
 369                                                             List<String> nodeIdsConnectedOut,
 
 370                                                             List<String> volumeIds,
 
 371                                                             List<String> groupIds,
 
 372                                                             List<String> getAttrInIds,
 
 373                                                             List<Pair<String, GetAttrFuncData>> getAttrOutIds,
 
 374                                                             List<Pair<String, String>> portTypeToIdList,
 
 375                                                             ConsolidationData consolidationData) {
 
 377     initComputeNodeTemplateIdInConsolidationData(serviceTemplateFileName, computeNodeTypeName,
 
 378         computeNodeTemplateId, consolidationData);
 
 380     Map<String, List<RequirementAssignmentData>> volumes =
 
 381         consolidationData.getComputeConsolidationData().getFileComputeConsolidationData
 
 382             (serviceTemplateFileName).getTypeComputeConsolidationData(computeNodeTypeName)
 
 383             .getComputeTemplateConsolidationData(computeNodeTemplateId).getVolumes();
 
 385     ComputeTemplateConsolidationData computeTemplateConsolidationData =
 
 386         createComputeTemplateConsolidationData(computeNodeTemplateId, portTypeToIdList, volumes);
 
 388     updateRelationsForEntityConsolidationData(nodeIdsConnectedIn,
 
 389         nodeIdsConnectedOut, groupIds, getAttrInIds, getAttrOutIds,
 
 390         computeTemplateConsolidationData);
 
 392     updateVolumes(computeTemplateConsolidationData, volumeIds);
 
 394     consolidationData.getComputeConsolidationData()
 
 395         .getFileComputeConsolidationData(serviceTemplateFileName)
 
 396         .getTypeComputeConsolidationData(computeNodeTypeName)
 
 397         .setComputeTemplateConsolidationData(computeNodeTemplateId,
 
 398             computeTemplateConsolidationData);
 
 401   private static void updateRelationsForEntityConsolidationData(List<String> nodeIdsConnectedIn,
 
 402                                                                 List<String> nodeIdsConnectedOut,
 
 403                                                                 List<String> groupIds,
 
 404                                                                 List<String> getAttrInIds,
 
 405                                                                 List<Pair<String, GetAttrFuncData>> getAttrOutFuncDataList,
 
 406                                                                 EntityConsolidationData entity) {
 
 407     updateRelationsIn(entity, nodeIdsConnectedIn);
 
 408     updateRelationsOut(entity, nodeIdsConnectedOut);
 
 409     updateGetAttrIn(entity, getAttrInIds);
 
 410     updateGetAttrOut(entity, getAttrOutFuncDataList);
 
 411     entity.setGroupIds(groupIds);
 
 414   public static void initComputeNodeTemplateIdInConsolidationData(String serviceTemplateFileName,
 
 415                                                                   String computeNodeTypeName,
 
 416                                                                   String computeNodeTemplateId,
 
 417                                                                   ConsolidationData consolidationData) {
 
 420         .isNull(consolidationData.getComputeConsolidationData().getFileComputeConsolidationData
 
 421             (serviceTemplateFileName))) {
 
 422       consolidationData.getComputeConsolidationData().setFileComputeConsolidationData
 
 423           (serviceTemplateFileName, new FileComputeConsolidationData());
 
 425     TypeComputeConsolidationData typeComputeConsolidationData =
 
 426         consolidationData.getComputeConsolidationData().getFileComputeConsolidationData
 
 427             (serviceTemplateFileName).getTypeComputeConsolidationData(computeNodeTypeName);
 
 430         typeComputeConsolidationData.getComputeTemplateConsolidationData(computeNodeTemplateId) ==
 
 433       consolidationData.getComputeConsolidationData()
 
 434           .getFileComputeConsolidationData(serviceTemplateFileName)
 
 435           .getTypeComputeConsolidationData(computeNodeTypeName)
 
 436           .setComputeTemplateConsolidationData(computeNodeTemplateId,
 
 437               new ComputeTemplateConsolidationData());
 
 442   public static void updateNestedConsolidationData(String serviceTemplateName,
 
 443                                                    List<String> substitutionNodeTemplateIds,
 
 444                                                    ConsolidationData consolidationData) {
 
 445     if (Objects.isNull(consolidationData.getNestedConsolidationData())) {
 
 446       consolidationData.setNestedConsolidationData(new NestedConsolidationData());
 
 449     FileNestedConsolidationData fileNestedConsolidationData = new FileNestedConsolidationData();
 
 450     for (String substitutionNodeTemplateId : substitutionNodeTemplateIds) {
 
 451       NestedTemplateConsolidationData nestedTemplateConsolidationData =
 
 452           new NestedTemplateConsolidationData();
 
 453       nestedTemplateConsolidationData.setNodeTemplateId(substitutionNodeTemplateId);
 
 454       fileNestedConsolidationData.setNestedTemplateConsolidationData(substitutionNodeTemplateId,
 
 455           nestedTemplateConsolidationData);
 
 457     consolidationData.getNestedConsolidationData()
 
 458         .setFileNestedConsolidationData(serviceTemplateName, fileNestedConsolidationData);
 
 461   public static ComputeTemplateConsolidationData createComputeTemplateConsolidationData(
 
 462       String computeNodeTemplateId,
 
 463       List<Pair<String, String>> portTypeToIdList,
 
 464       Map<String, List<RequirementAssignmentData>> volumes) {
 
 465     ComputeTemplateConsolidationData compute = new ComputeTemplateConsolidationData();
 
 466     compute.setNodeTemplateId(computeNodeTemplateId);
 
 467     if (portTypeToIdList != null) {
 
 468       for (Pair<String, String> port : portTypeToIdList) {
 
 469         compute.addPort(port.getLeft(), port.getRight());
 
 472     compute.setVolumes(volumes);
 
 476   private static void updateRelationsIn(EntityConsolidationData entity,
 
 477                                         List<String> idsPontingTome) {
 
 478     if (CollectionUtils.isEmpty(idsPontingTome)) {
 
 482     for (String pointingId : idsPontingTome) {
 
 484           .addNodesConnectedIn(pointingId, entity.getNodeTemplateId(), new RequirementAssignment());
 
 488   private static void updateRelationsOut(EntityConsolidationData entity,
 
 489                                          List<String> idsToUpdate) {
 
 490     if (CollectionUtils.isEmpty(idsToUpdate)) {
 
 494     for (String id : idsToUpdate) {
 
 495       entity.addNodesConnectedOut(id, id, new RequirementAssignment());
 
 499   private static void updateGetAttrIn(EntityConsolidationData entity,
 
 500                                       List<String> idsToUpdate) {
 
 501     if (CollectionUtils.isEmpty(idsToUpdate)) {
 
 505     for (String id : idsToUpdate) {
 
 506       entity.addNodesGetAttrIn(id, new GetAttrFuncData());
 
 510   private static void updateGetAttrOut(EntityConsolidationData entity,
 
 511                                        List<Pair<String, GetAttrFuncData>> getAttrOutIds) {
 
 512     if (CollectionUtils.isEmpty(getAttrOutIds)) {
 
 516     for (Pair<String, GetAttrFuncData> getAttrOutFunc : getAttrOutIds) {
 
 517       entity.addNodesGetAttrOut(getAttrOutFunc.getLeft(), getAttrOutFunc.getRight());
 
 521   private static void updateVolumes(ComputeTemplateConsolidationData compute,
 
 522                                     List<String> volumeIds) {
 
 523     if (CollectionUtils.isEmpty(volumeIds)) {
 
 527     for (String id : volumeIds) {
 
 528       RequirementAssignment requirementAssignment = new RequirementAssignment();
 
 529       requirementAssignment.setNode(id);
 
 530       compute.addVolume(id, requirementAssignment);
 
 534   public static void initComputeNodeTypeInConsolidationData(String serviceTemplateFileName,
 
 535                                                             String computeNodeTypeName,
 
 536                                                             ConsolidationData consolidationData) {
 
 537     ComputeConsolidationData computeConsolidationData =
 
 538         consolidationData.getComputeConsolidationData();
 
 539     if (!computeConsolidationData.getAllServiceTemplateFileNames()
 
 540         .contains(serviceTemplateFileName)) {
 
 541       computeConsolidationData
 
 542           .setFileComputeConsolidationData(serviceTemplateFileName,
 
 543               new FileComputeConsolidationData());
 
 545     computeConsolidationData
 
 546         .getFileComputeConsolidationData(serviceTemplateFileName).setTypeComputeConsolidationData(
 
 547         computeNodeTypeName, new TypeComputeConsolidationData());
 
 550   public static Map<String, List<RequirementAssignmentData>> getNodeConnectedOutList(
 
 551       NodeTemplate nodeTemplate, String requirementKey) {
 
 552     Map<String, List<RequirementAssignmentData>> requirementAssignmentDataMap = new HashMap<>();
 
 553     Optional<List<RequirementAssignmentData>> requirementAssignmentDataList =
 
 554         TestUtils.createRequirementAssignmentDataList(nodeTemplate, requirementKey);
 
 555     if (requirementAssignmentDataList.isPresent()) {
 
 556       for (RequirementAssignmentData requirementAssignmentData : requirementAssignmentDataList
 
 558         String connectedNodeTemplateId = requirementAssignmentData.getRequirementAssignment()
 
 560         requirementAssignmentDataMap
 
 561             .computeIfAbsent(connectedNodeTemplateId, k -> new ArrayList<>());
 
 562         requirementAssignmentDataMap.get(connectedNodeTemplateId).add(requirementAssignmentData);
 
 565     return requirementAssignmentDataMap;
 
 568   public static Map<String, List<GetAttrFuncData>> getNodesGetAttrIn(NodeTemplate nodeTemplate,
 
 569                                                                      String nodeTemplateId) {
 
 570     Map<String, List<GetAttrFuncData>> nodesGetAttrIn = new HashMap<>();
 
 571     List<GetAttrFuncData> getAttrList = new ArrayList<>();
 
 572     ObjectMapper mapper = new ObjectMapper();
 
 573     Map<String, Object> nodeTemplateProperties = nodeTemplate.getProperties();
 
 574     for (Map.Entry<String, Object> propertyEntry : nodeTemplateProperties.entrySet()) {
 
 575       Map<String, List> propertyValue = mapper.convertValue(propertyEntry.getValue(), Map.class);
 
 576       for (Map.Entry<String, List> entry : propertyValue.entrySet()) {
 
 577         if (entry.getKey().equals("get_attribute")) {
 
 578           GetAttrFuncData data = new GetAttrFuncData();
 
 579           data.setFieldName(propertyEntry.getKey());
 
 580           data.setAttributeName(entry.getValue().get(1).toString());
 
 581           getAttrList.add(data);
 
 584       System.out.println();
 
 586     nodesGetAttrIn.put(nodeTemplateId, getAttrList);
 
 587     return nodesGetAttrIn;
 
 590   public static void updatePortsInComputeTemplateConsolidationData(
 
 591       List<Pair<String, String>> portIdToTypeList, ComputeTemplateConsolidationData
 
 593     compute.setPorts(new HashMap<>());
 
 594     for (Pair<String, String> portIdToType : portIdToTypeList) {
 
 595       compute.getPorts().putIfAbsent(portIdToType.getLeft(), new ArrayList<>());
 
 596       compute.getPorts().get(portIdToType.getLeft()).add(portIdToType.getRight());
 
 600   public static Map<String, List<RequirementAssignmentData>> getNodeConnectedInList(
 
 601       String sourceNodeTemplateId,
 
 602       ServiceTemplate serviceTemplate, String requirementKey) {
 
 603     Optional<List<RequirementAssignmentData>> requirementAssignmentDataList = Optional.empty();
 
 604     List<RequirementAssignmentData> assignmentDataList = new ArrayList<>();
 
 605     Map<String, List<RequirementAssignmentData>> requirementAssignmentDataMap = new HashMap<>();
 
 606     Map<String, NodeTemplate> nodeTemplates = serviceTemplate.getTopology_template()
 
 607         .getNode_templates();
 
 608     for (Map.Entry<String, NodeTemplate> entry : nodeTemplates.entrySet()) {
 
 609       String nodeTemplateId = entry.getKey();
 
 610       List<Map<String, RequirementAssignment>> requirements = entry.getValue().getRequirements();
 
 611       if (requirements != null) {
 
 612         for (Map<String, RequirementAssignment> requirement : requirements) {
 
 613           if (requirement.get(requirementKey) != null) {
 
 614             RequirementAssignment requirementAssignment = requirement.get(requirementKey);
 
 615             if (requirementAssignment != null) {
 
 616               if (requirementAssignment.getNode().equals(sourceNodeTemplateId)) {
 
 617                 RequirementAssignmentData data = new RequirementAssignmentData(requirementKey,
 
 618                     requirementAssignment);
 
 619                 assignmentDataList.add(data);
 
 624         requirementAssignmentDataList = Optional.ofNullable(assignmentDataList);
 
 625         if (requirementAssignmentDataList.isPresent()) {
 
 626           for (RequirementAssignmentData requirementAssignmentData : requirementAssignmentDataList
 
 628             requirementAssignmentDataMap.computeIfAbsent(nodeTemplateId, k -> new ArrayList<>());
 
 629             requirementAssignmentDataMap.get(nodeTemplateId).add(requirementAssignmentData);
 
 632         requirementAssignmentDataList = Optional.empty();
 
 635     return requirementAssignmentDataMap;
 
 638   public static List<String> getGroupsForNode(ServiceTemplate serviceTemplate, String
 
 640     List<String> entityGroups = new ArrayList<>();
 
 641     Map<String, GroupDefinition> groups = serviceTemplate.getTopology_template().getGroups();
 
 642     Map<String, NodeTemplate> nodeTemplates =
 
 643         serviceTemplate.getTopology_template().getNode_templates();
 
 644     for (Map.Entry<String, GroupDefinition> entry : groups.entrySet()) {
 
 645       String groupId = entry.getKey();
 
 646       GroupDefinition groupDefinition = entry.getValue();
 
 647       if (groupDefinition.getType().contains("HeatStack")) {
 
 650       List<String> groupMembers = groupDefinition.getMembers();
 
 651       for (String member : groupMembers) {
 
 652         if (groups.containsKey(member)) {
 
 655         if (member.equals(nodeTemplateId)) {
 
 656           entityGroups.add(groupId);
 
 663   private static Optional<List<RequirementAssignmentData>> createRequirementAssignmentDataList(
 
 664       NodeTemplate nodeTemplate, String requirementKey) {
 
 666     Optional<List<RequirementAssignment>> requirementAssignmentLink =
 
 667         DataModelUtil.getRequirementAssignment(nodeTemplate.getRequirements(), requirementKey);
 
 668     if (!requirementAssignmentLink.isPresent()) {
 
 669       return Optional.empty();
 
 672     List<RequirementAssignmentData> requirementAssignmentDataList = new ArrayList<>();
 
 673     for (RequirementAssignment requirementAssignment : requirementAssignmentLink.get()) {
 
 674       RequirementAssignmentData requirementAssignmentData = new RequirementAssignmentData
 
 675           (requirementKey, requirementAssignment);
 
 676       requirementAssignmentDataList.add(requirementAssignmentData);
 
 678     return Optional.ofNullable(requirementAssignmentDataList);
 
 681   public static Optional<List<RequirementAssignmentData>> getRequirementAssignmentDataList(
 
 682       NodeTemplate nodeTemplate, String requirementKey) {
 
 683     List<RequirementAssignmentData> returnedReqAssignmentDataList = new ArrayList<>();
 
 684     Optional<List<RequirementAssignmentData>> requirementAssignmentDataList =
 
 685         TestUtils.createRequirementAssignmentDataList(nodeTemplate, requirementKey);
 
 687     if (requirementAssignmentDataList.isPresent()) {
 
 688       for (RequirementAssignmentData requirementAssignmentData : requirementAssignmentDataList
 
 690         returnedReqAssignmentDataList.add(requirementAssignmentData);
 
 692       return Optional.of(returnedReqAssignmentDataList);
 
 694     return Optional.empty();
 
 697   public static ServiceTemplate createInitServiceTemplate() {
 
 698     ServiceTemplate initServiceTemplate = new ServiceTemplate();
 
 699     Map<String, String> templateMetadata = new HashMap<>();
 
 700     templateMetadata.put(ToscaConstants.ST_METADATA_TEMPLATE_NAME, "Test");
 
 701     initServiceTemplate.setTosca_definitions_version(ToscaConstants.TOSCA_DEFINITIONS_VERSION);
 
 702     initServiceTemplate.setMetadata(templateMetadata);
 
 703     initServiceTemplate.setTopology_template(new TopologyTemplate());
 
 704     initServiceTemplate.setImports(GlobalTypesGenerator.getGlobalTypesImportList());
 
 705     return initServiceTemplate;