2  * Copyright © 2016-2018 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.services.heattotosca.buildconsolidationdata;
 
  19 import static org.openecomp.sdc.translator.services.heattotosca.buildconsolidationdata.TestConstants.MAIN_SERVICE_TEMPLATE;
 
  20 import static org.openecomp.sdc.translator.services.heattotosca.buildconsolidationdata.TestConstants.TEST_DEPENDS_ON_INVALID_DEPENDENCY_CANDIDATE;
 
  21 import static org.openecomp.sdc.translator.services.heattotosca.buildconsolidationdata.TestConstants.TEST_DEPENDS_ON_MULTIPLE_COMPUTE;
 
  22 import static org.openecomp.sdc.translator.services.heattotosca.buildconsolidationdata.TestConstants.TEST_DEPENDS_ON_NODES_CONNECTED_IN;
 
  23 import static org.openecomp.sdc.translator.services.heattotosca.buildconsolidationdata.TestConstants.TEST_DEPENDS_ON_NODES_CONNECTED_IN_AND_OUT;
 
  24 import static org.openecomp.sdc.translator.services.heattotosca.buildconsolidationdata.TestConstants.TEST_DEPENDS_ON_NODES_CONNECTED_OUT;
 
  25 import static org.openecomp.sdc.translator.services.heattotosca.buildconsolidationdata.TestConstants.TEST_DEPENDS_ON_NO_DEPENDENCY;
 
  26 import static org.openecomp.sdc.translator.services.heattotosca.buildconsolidationdata.TestConstants.TEST_MULTIPLE_MULTI_LEVEL_NESTED_RESOURCE;
 
  27 import static org.openecomp.sdc.translator.services.heattotosca.buildconsolidationdata.TestConstants.TEST_MULTIPLE_NESTED_RESOURCE;
 
  28 import static org.openecomp.sdc.translator.services.heattotosca.buildconsolidationdata.TestConstants.TEST_SECURITY_RULE_PORT_MULTI_LEVEL_NESTED_CONNECTION;
 
  29 import static org.openecomp.sdc.translator.services.heattotosca.buildconsolidationdata.TestConstants.TEST_SECURITY_RULE_PORT_MULTI_LEVEL_NESTED_SHARED_PORT;
 
  30 import static org.openecomp.sdc.translator.services.heattotosca.buildconsolidationdata.TestConstants.TEST_SECURITY_RULE_PORT_NESTED_CONNECTION;
 
  31 import static org.openecomp.sdc.translator.services.heattotosca.buildconsolidationdata.TestConstants.TEST_SINGLE_NESTED_RESOURCE;
 
  33 import com.fasterxml.jackson.databind.ObjectMapper;
 
  34 import org.apache.commons.collections4.CollectionUtils;
 
  35 import org.junit.Assert;
 
  36 import org.openecomp.sdc.tosca.datatypes.ToscaCapabilityType;
 
  37 import org.openecomp.sdc.tosca.datatypes.ToscaNodeType;
 
  38 import org.openecomp.sdc.tosca.datatypes.ToscaRelationshipType;
 
  39 import org.onap.sdc.tosca.datatypes.model.GroupDefinition;
 
  40 import org.onap.sdc.tosca.datatypes.model.NodeTemplate;
 
  41 import org.onap.sdc.tosca.datatypes.model.NodeType;
 
  42 import org.onap.sdc.tosca.datatypes.model.RequirementAssignment;
 
  43 import org.onap.sdc.tosca.datatypes.model.ServiceTemplate;
 
  44 import org.openecomp.sdc.tosca.services.DataModelUtil;
 
  45 import org.openecomp.sdc.tosca.services.ToscaConstants;
 
  46 import org.openecomp.sdc.tosca.services.impl.ToscaAnalyzerServiceImpl;
 
  47 import org.openecomp.sdc.translator.datatypes.heattotosca.TranslationContext;
 
  48 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.ComputeTemplateConsolidationData;
 
  49 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.ConsolidationData;
 
  50 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.FileNestedConsolidationData;
 
  51 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.GetAttrFuncData;
 
  52 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.NestedConsolidationData;
 
  53 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.NestedTemplateConsolidationData;
 
  54 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.PortTemplateConsolidationData;
 
  55 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.RequirementAssignmentData;
 
  56 import org.openecomp.sdc.translator.services.heattotosca.ConsolidationDataUtil;
 
  57 import org.openecomp.sdc.translator.services.heattotosca.HeatToToscaUtil;
 
  59 import java.util.ArrayList;
 
  60 import java.util.HashMap;
 
  61 import java.util.Iterator;
 
  62 import java.util.LinkedHashMap;
 
  63 import java.util.LinkedList;
 
  64 import java.util.List;
 
  66 import java.util.Objects;
 
  67 import java.util.Optional;
 
  70 public class ConsolidationDataTestUtil {
 
  72   public static void validateVolumeInConsolidationData(String computeNodeTemplateId,
 
  73                                                        ComputeTemplateConsolidationData
 
  74                                                            computeTemplateConsolidationData,
 
  75                                                        ServiceTemplate expectedServiceTemplate,
 
  77     Assert.assertNotNull(computeTemplateConsolidationData);
 
  78     //Get the volume information from consolidation data
 
  79     Map<String, List<RequirementAssignmentData>> volumeConsolidationData =
 
  80         computeTemplateConsolidationData.getVolumes();
 
  82     if(testName.equals("Negative")) {
 
  83       Assert.assertNull(volumeConsolidationData);
 
  87     //Get the volume requirement information from the output translated template
 
  88     NodeTemplate computeNode = DataModelUtil.getNodeTemplate(expectedServiceTemplate,
 
  89         computeNodeTemplateId);
 
  91     if(!isComputeNodeType(expectedServiceTemplate, computeNode.getType()) ) {
 
  92       //According to toplogy only Compute->volume relationship is valid
 
  93       Assert.assertNull(volumeConsolidationData);
 
  97     Assert.assertNotNull(computeNode);
 
  98     List<String> computeVolumeRequirementsNodes = new ArrayList<>();
 
  99     List<Map<String, RequirementAssignment>> requirementList = computeNode.getRequirements();
 
 100     if(requirementList != null){
 
 101       for(Map<String, RequirementAssignment> req : requirementList){
 
 102         Set<String> reqKeySet = req.keySet();
 
 103         for(String reqKey : reqKeySet){
 
 104           //populating the "node" property of all the requirements "local_storage" related to volume
 
 105           if(reqKey.equals(ToscaConstants.LOCAL_STORAGE_REQUIREMENT_ID)){
 
 106             RequirementAssignment requirementAssignment = new ObjectMapper().convertValue(req.get
 
 107                 (reqKey), RequirementAssignment.class);
 
 108             computeVolumeRequirementsNodes.add(requirementAssignment.getNode());
 
 112       isVolumeComputeRequirement(computeVolumeRequirementsNodes, volumeConsolidationData);
 
 116   private static void isVolumeComputeRequirement(List<String> computeVolumeRequirementsNodes,
 
 117                                                  Map<String, List<RequirementAssignmentData>>
 
 118                                                      volumeConsolidationData) {
 
 119     Assert.assertEquals(computeVolumeRequirementsNodes.size(), volumeConsolidationData.size());
 
 120     for(String volumeNodeTemplateId : computeVolumeRequirementsNodes) {
 
 121       Assert.assertNotNull(volumeConsolidationData.containsKey(volumeNodeTemplateId));
 
 122       List<RequirementAssignmentData> requirementAssignmentDataList = volumeConsolidationData.get
 
 123           (volumeNodeTemplateId);
 
 124       for(RequirementAssignmentData requirementAssignmentData : requirementAssignmentDataList){
 
 125         Assert.assertTrue(requirementAssignmentData.getRequirementId().equals(ToscaConstants
 
 126             .LOCAL_STORAGE_REQUIREMENT_ID));
 
 132   public static void validatePortsInConsolidationData(String computeNodeTemplateId,
 
 133                                                       ComputeTemplateConsolidationData
 
 134                                                           computeTemplateConsolidationData,
 
 135                                                       ServiceTemplate outputServiceTemplate){
 
 136     Map<String,List<String>> consolidatedMap = computeTemplateConsolidationData.getPorts();
 
 137     Map<String,List<String>> expectedMap = getPortsInConsolidationData(outputServiceTemplate).get
 
 138         (computeNodeTemplateId);
 
 139     if(expectedMap == null && consolidatedMap == null){
 
 142     for(String consolidatedKey : consolidatedMap.keySet()){
 
 143       List<String> consolidatedList = consolidatedMap.get(consolidatedKey);
 
 144       if (expectedMap != null) {
 
 145         List<String> expectedList = expectedMap.get(consolidatedKey);
 
 146         if (expectedList == null) {
 
 149         if (!CollectionUtils.isEqualCollection(consolidatedList, expectedList)) {
 
 156   public static void validateDependsOnInConsolidationData(String computeNodeTemplateId,
 
 157                                                           ComputeTemplateConsolidationData computeTemplateConsolidationData,
 
 158                                                           ServiceTemplate outputServiceTemplate,
 
 160     Map<String, NodeTemplate> outputNodeTemplates = outputServiceTemplate.getTopology_template()
 
 161         .getNode_templates();
 
 162     Map<String, List<RequirementAssignmentData>> nodesConnectedIn =
 
 163         computeTemplateConsolidationData.getNodesConnectedIn();
 
 164     Map<String, List<RequirementAssignmentData>> nodesConnectedOut =
 
 165         computeTemplateConsolidationData.getNodesConnectedOut();
 
 167     if(testName.equals(TEST_DEPENDS_ON_INVALID_DEPENDENCY_CANDIDATE) ||
 
 168         testName.equals(TEST_DEPENDS_ON_NO_DEPENDENCY)) {
 
 169       Assert.assertNull(nodesConnectedIn);
 
 170       Assert.assertNull(nodesConnectedOut);
 
 173     //key - nodetemplate id , value - requirementassignment
 
 174     Map<String, List<RequirementAssignment>> outputDependsOnNodeRequirementMap = new HashMap<>();
 
 175     for(Map.Entry<String, NodeTemplate> entry : outputNodeTemplates.entrySet()) {
 
 176       NodeTemplate nodeTemplate = entry.getValue();
 
 177       List<Map<String, RequirementAssignment>> nodeRequirements = nodeTemplate.getRequirements();
 
 178       if(nodeRequirements != null){
 
 179         for(Map<String, RequirementAssignment> req : nodeRequirements) {
 
 180           Set<String> keySet = req.keySet();
 
 181           for(String key : keySet) {
 
 182             if(key.equals(ToscaConstants.DEPENDS_ON_REQUIREMENT_ID))
 
 183               //collect all dependency requirements in a map with key -> node template id
 
 184               outputDependsOnNodeRequirementMap.computeIfAbsent(entry.getKey(), k -> new ArrayList<>())
 
 191     if(testName.equals(TEST_DEPENDS_ON_NODES_CONNECTED_OUT)){
 
 192       Assert.assertNull(nodesConnectedIn);
 
 193       validateDependsOnNodesConnectedOut(computeNodeTemplateId, nodesConnectedOut,
 
 194           outputDependsOnNodeRequirementMap, outputServiceTemplate);
 
 197     if(testName.equals(TEST_DEPENDS_ON_NODES_CONNECTED_IN)){
 
 198       Assert.assertNull(nodesConnectedOut);
 
 199       validateDependsOnNodesConnectedIn(computeNodeTemplateId, nodesConnectedIn,
 
 200           outputDependsOnNodeRequirementMap,
 
 201           outputServiceTemplate);
 
 204     if(testName.equals(TEST_DEPENDS_ON_NODES_CONNECTED_IN_AND_OUT)){
 
 205       Assert.assertNotNull(nodesConnectedIn);
 
 206       Assert.assertNotNull(nodesConnectedOut);
 
 207       validateDependsOnNodesConnectedOut(computeNodeTemplateId, nodesConnectedOut,
 
 208           outputDependsOnNodeRequirementMap,
 
 209           outputServiceTemplate);
 
 210       validateDependsOnNodesConnectedIn(computeNodeTemplateId, nodesConnectedIn,
 
 211           outputDependsOnNodeRequirementMap,
 
 212           outputServiceTemplate);
 
 215     if(testName.equals(TEST_DEPENDS_ON_MULTIPLE_COMPUTE)){
 
 216       if(nodesConnectedOut != null)
 
 217         validateDependsOnNodesConnectedOut(computeNodeTemplateId, nodesConnectedOut,
 
 218             outputDependsOnNodeRequirementMap,
 
 219             outputServiceTemplate);
 
 220       if(nodesConnectedIn != null)
 
 221         validateDependsOnNodesConnectedIn(computeNodeTemplateId, nodesConnectedIn,
 
 222             outputDependsOnNodeRequirementMap,
 
 223             outputServiceTemplate);
 
 229   private static void validateDependsOnNodesConnectedIn(String computeNodeTemplateId,
 
 231                                                             List<RequirementAssignmentData>>
 
 233                                                         Map<String, List<RequirementAssignment>>
 
 234                                                             outputDependsOnNodeRequirementMap,
 
 235                                                         ServiceTemplate outputServiceTemplate) {
 
 236     ToscaAnalyzerServiceImpl analyzerService = new ToscaAnalyzerServiceImpl();
 
 237     for(Map.Entry<String, List<RequirementAssignment>> entry : outputDependsOnNodeRequirementMap
 
 239       String sourceNodeTemplateId = entry.getKey();
 
 240       Optional<NodeTemplate> sourceNodeTemplate = analyzerService.getNodeTemplateById
 
 241           (outputServiceTemplate, sourceNodeTemplateId);
 
 242       String sourceNodeType = sourceNodeTemplate.get().getType();
 
 243       for(Object obj : entry.getValue()){
 
 244         RequirementAssignment req = new ObjectMapper().convertValue(obj, RequirementAssignment
 
 246         String targetNodeTemplateId = req.getNode();
 
 247         Optional<NodeTemplate> targetNodeTemplate = analyzerService.getNodeTemplateById
 
 248             (outputServiceTemplate, targetNodeTemplateId);
 
 250         String targetNodeType = targetNodeTemplate.get().getType();
 
 251         boolean isValidTargetForConnectedIn = false;
 
 252         if(isComputeNodeType(outputServiceTemplate, targetNodeType)) {
 
 253           isValidTargetForConnectedIn = true;
 
 254         } else if(isPortNodeType(outputServiceTemplate, targetNodeType)) {
 
 255           isValidTargetForConnectedIn = true;
 
 258         if(isValidTargetForConnectedIn) {
 
 259           //Should be present if target node is compute or port
 
 260           if(computeNodeTemplateId.equals(entry.getKey()))
 
 261             Assert.assertTrue(nodesConnectedIn.containsKey(entry.getKey()));
 
 264         if(sourceNodeType.startsWith(ToscaNodeType.NOVA_SERVER)
 
 265             && (targetNodeType.startsWith(ToscaNodeType.NOVA_SERVER)
 
 266             || targetNodeType.startsWith(ToscaNodeType.NEUTRON_PORT)
 
 267             || targetNodeType.startsWith(ToscaNodeType.CONTRAILV2_VIRTUAL_MACHINE_INTERFACE))) {
 
 268           //Ignore Compute->Port, Compute->Compute, Compute->Volume relationship
 
 269           Assert.assertFalse(nodesConnectedIn.containsKey(targetNodeTemplateId));
 
 272         if(sourceNodeType.startsWith(ToscaNodeType.NEUTRON_PORT)
 
 273             && (targetNodeType.startsWith(ToscaNodeType.NOVA_SERVER)
 
 274             || targetNodeType.startsWith(ToscaNodeType.NEUTRON_PORT)
 
 275             || targetNodeType.startsWith(ToscaNodeType.CONTRAILV2_VIRTUAL_MACHINE_INTERFACE))) {
 
 276           //Ignore Port->Port, Port->Compute, Port->Volume relationship
 
 277           Assert.assertFalse(nodesConnectedIn.containsKey(targetNodeTemplateId));
 
 283   private static boolean isComputeNodeType(ServiceTemplate serviceTemplate,
 
 286     if(nodeType.equals(ToscaNodeType.NOVA_SERVER) ||
 
 287         nodeType.equals(ToscaNodeType.NATIVE_COMPUTE))
 
 290     Map<String, NodeType> nodeTypes = serviceTemplate.getNode_types();
 
 291     if(nodeTypes.containsKey(nodeType)) {
 
 292       NodeType nodeTypeInfo = nodeTypes.get(nodeType);
 
 293       if(nodeTypeInfo.getDerived_from().equals(ToscaNodeType.NOVA_SERVER))
 
 299   private static boolean isPortNodeType(ServiceTemplate serviceTemplate,
 
 301     if(nodeType.equals(ToscaNodeType.NEUTRON_PORT) ||
 
 302         nodeType.equals(ToscaNodeType.CONTRAILV2_VIRTUAL_MACHINE_INTERFACE))
 
 305     Map<String, NodeType> nodeTypes = serviceTemplate.getNode_types();
 
 306     if(nodeTypes.containsKey(nodeType)) {
 
 307       NodeType nodeTypeInfo = nodeTypes.get(nodeType);
 
 308       if(nodeTypeInfo.getDerived_from().equals(ToscaNodeType.NEUTRON_PORT) ||
 
 309           nodeTypeInfo.getDerived_from().equals(ToscaNodeType.CONTRAILV2_VIRTUAL_MACHINE_INTERFACE))
 
 315   private static void validateDependsOnNodesConnectedOut(String computeNodeTemplateId,
 
 317                                                              List<RequirementAssignmentData>>
 
 319                                                          Map<String, List<RequirementAssignment>>
 
 320                                                              outputDependsOnNodeRequirementMap,
 
 321                                                          ServiceTemplate outputServiceTemplate) {
 
 322     ToscaAnalyzerServiceImpl analyzerService = new ToscaAnalyzerServiceImpl();
 
 323     //Iterating the map <nodeTemplateId, all the requirements of that node>
 
 324     for(Map.Entry<String, List<RequirementAssignment>> entry : outputDependsOnNodeRequirementMap
 
 326       String sourceNodeTemplateId = entry.getKey();
 
 327       Optional<NodeTemplate> sourceNodeTemplate = analyzerService.getNodeTemplateById
 
 328           (outputServiceTemplate, sourceNodeTemplateId);
 
 329       String sourceNodeType = sourceNodeTemplate.get().getType();
 
 330       boolean isValidSourceForConnectedOut = false;
 
 331       if(isComputeNodeType(outputServiceTemplate, sourceNodeType)) {
 
 332         isValidSourceForConnectedOut = true;
 
 333       } else if(isPortNodeType(outputServiceTemplate, sourceNodeType)) {
 
 334         isValidSourceForConnectedOut = true;
 
 336       for(Object obj : entry.getValue()){
 
 337         RequirementAssignment req = new ObjectMapper().convertValue(obj, RequirementAssignment
 
 339         String targetNodeTemplateId = req.getNode();
 
 340         Optional<NodeTemplate> targetNodeTemplate = analyzerService.getNodeTemplateById
 
 341             (outputServiceTemplate, targetNodeTemplateId);
 
 342         String targetNodeType = targetNodeTemplate.get().getType();
 
 344         if(isValidSourceForConnectedOut) {
 
 345           //Should be present if source node is compute or port
 
 346           if(computeNodeTemplateId.equals(entry.getKey()))
 
 347             Assert.assertTrue(nodesConnectedOut.containsKey(targetNodeTemplateId));
 
 350         if(sourceNodeType.startsWith(ToscaNodeType.NOVA_SERVER)
 
 351             && (targetNodeType.startsWith(ToscaNodeType.NOVA_SERVER)
 
 352             || targetNodeType.startsWith(ToscaNodeType.NEUTRON_PORT)
 
 353             || targetNodeType.startsWith(ToscaNodeType.CONTRAILV2_VIRTUAL_MACHINE_INTERFACE))) {
 
 354           //Ignore Compute->Port, Compute->Compute, Compute->Volume relationship
 
 355           Assert.assertFalse(nodesConnectedOut.containsKey(targetNodeTemplateId));
 
 358         if(sourceNodeType.startsWith(ToscaNodeType.NEUTRON_PORT)
 
 359             && (targetNodeType.startsWith(ToscaNodeType.NOVA_SERVER)
 
 360             || targetNodeType.startsWith(ToscaNodeType.NEUTRON_PORT)
 
 361             || targetNodeType.startsWith(ToscaNodeType.CONTRAILV2_VIRTUAL_MACHINE_INTERFACE))) {
 
 362           //Ignore Port->Port, Port->Compute, Port->Volume relationship
 
 363           Assert.assertFalse(nodesConnectedOut.containsKey(targetNodeTemplateId));
 
 369   private static Map<String,Map<String,List<String>>> getPortsInConsolidationData(ServiceTemplate
 
 371     Map<String,Map<String,List<String>>> portMap = new LinkedHashMap<>();
 
 372     Map<String, NodeTemplate> nodeTempMap = output.getTopology_template().getNode_templates();
 
 373     for(String nodeName : nodeTempMap.keySet()){
 
 374       NodeTemplate node = nodeTempMap.get(nodeName);
 
 375       if(ToscaNodeType.NEUTRON_PORT.equals(node.getType()) || ToscaNodeType
 
 376           .CONTRAILV2_VIRTUAL_MACHINE_INTERFACE.equals(node.getType())){
 
 377         List<Map<String, RequirementAssignment>>  reqAssignList = node.getRequirements();
 
 378         if(reqAssignList != null) {
 
 379           for (Map<String, RequirementAssignment> reqAssignMap : reqAssignList) {
 
 380             //RequirementAssignment req = reqAssignMap.get("binding");
 
 381             RequirementAssignment req = new ObjectMapper().convertValue(reqAssignMap.get("binding"),
 
 382                 RequirementAssignment.class);
 
 385               String portNode = req.getNode();
 
 386               if (!portMap.containsKey(portNode)) {
 
 387                 portMap.put(portNode, new LinkedHashMap<>());
 
 389               Map<String, List<String>> portTypMaps = portMap.get(portNode);
 
 390               String id = ConsolidationDataUtil.getPortType(nodeName);
 
 391               if (!portTypMaps.containsKey(id)) {
 
 392                 portTypMaps.put(id, new ArrayList<>());
 
 394               List<String> portIds = portTypMaps.get(id);
 
 395               portIds.add(nodeName);
 
 404   public static void validateGroupsInConsolidationData(String computeNodeTemplateId,
 
 405                                                        ComputeTemplateConsolidationData
 
 406                                                            computeTemplateConsolidationData,
 
 407                                                        ServiceTemplate expectedServiceTemplate) {
 
 408     Assert.assertNotNull(computeTemplateConsolidationData);
 
 409     List<String> groupIds = computeTemplateConsolidationData.getGroupIds();
 
 410     if (groupIds != null) {
 
 411       for (String groupId : groupIds) {
 
 412         isComputeGroupMember(expectedServiceTemplate, computeNodeTemplateId, groupId);
 
 417   private static void isComputeGroupMember(ServiceTemplate expectedServiceTemplate, String
 
 418       computeNodeTemplateId, String groupId) {
 
 419     //Check if the collected group id is in the member list of the groups
 
 420     GroupDefinition group = expectedServiceTemplate.getTopology_template().getGroups().get(groupId);
 
 421     List<String> groupMembers = group.getMembers();
 
 422     Assert.assertNotNull(groupMembers);
 
 423     Assert.assertTrue(groupMembers.contains(computeNodeTemplateId));
 
 426   public static void validateNestedConsolidationDataNodeTemplateIds(ConsolidationData consolidationData,
 
 427                                                                     Map<String, ServiceTemplate>
 
 428                                                                       expectedServiceTemplateModels ){
 
 429     Map<String,List<String>> consolidatedMap = getSubstituteNodeTemplateIds(consolidationData);
 
 430     Map<String,List<String>> expectedMap = getSubstituteMapping(expectedServiceTemplateModels);
 
 431     for(String consolidatedKey : consolidatedMap.keySet()){
 
 432       List<String> consolidatedList = consolidatedMap.get(consolidatedKey);
 
 433       List<String> expectedList = expectedMap.get(consolidatedKey);
 
 434       if(expectedList == null ){
 
 436       } if(!CollectionUtils.isEqualCollection(consolidatedList,expectedList)){
 
 442   private static Map<String,List<String>> getSubstituteNodeTemplateIds(ConsolidationData
 
 444     Map<String,List<String>> nestedNodeTemplateIdMap = new HashMap<>();
 
 445     NestedConsolidationData nestedConsolidationData =
 
 446         consolidationData.getNestedConsolidationData();
 
 447     Set<String> serviceTemplateFileNames =
 
 448         nestedConsolidationData.getAllServiceTemplateFileNames();
 
 449     for (String fileName : serviceTemplateFileNames) {
 
 450       FileNestedConsolidationData fileNestedConsolidationData =
 
 451           nestedConsolidationData.getFileNestedConsolidationData(fileName);
 
 452       if (Objects.isNull(fileNestedConsolidationData)) {
 
 455       Set<String> nestedNodeTemplateIds =
 
 456           fileNestedConsolidationData.getAllNestedNodeTemplateIds();
 
 457       if (nestedNodeTemplateIds != null) {
 
 458         List<String> fileNestedNodeTemplateIds = new ArrayList<>();
 
 459         fileNestedNodeTemplateIds.addAll(nestedNodeTemplateIds);
 
 460         nestedNodeTemplateIdMap.put(fileName, fileNestedNodeTemplateIds);
 
 463     return nestedNodeTemplateIdMap;
 
 466   private static Map<String,List<String>> getSubstituteMapping(Map<String, ServiceTemplate>
 
 467                                                                    expectedServiceTemplateModels ){
 
 468     Map<String,List<String>> map = new LinkedHashMap<>();
 
 469     for(String key : expectedServiceTemplateModels.keySet()){
 
 470       ServiceTemplate serviceTemplate = expectedServiceTemplateModels.get(key);
 
 471       if(serviceTemplate.getTopology_template() != null && serviceTemplate
 
 472           .getTopology_template().getNode_templates() != null) {
 
 473         for (String key1 : serviceTemplate.getTopology_template().getNode_templates().keySet()) {
 
 474           NodeTemplate nodeTemplate = serviceTemplate.getTopology_template().getNode_templates()
 
 476           if (nodeTemplate.getType().contains(ToscaNodeType.ABSTRACT_NODE_TYPE_PREFIX + "heat.")) {
 
 478             List<String> subNodeTempIdList = map.get(key);
 
 479             if (subNodeTempIdList == null) {
 
 480               subNodeTempIdList = new ArrayList<>();
 
 481               map.put(key, subNodeTempIdList);
 
 483             subNodeTempIdList.add(key1);
 
 491   public static void validateComputeConnectivityIn(ComputeTemplateConsolidationData
 
 492                                                        computeTemplateConsolidationData,
 
 493                                                    ServiceTemplate expectedServiceTemplate){
 
 494     Map<String,List<RequirementAssignmentData>> nodesConnectedIn = computeTemplateConsolidationData.
 
 495         getNodesConnectedIn();
 
 496     if(nodesConnectedIn==null){
 
 499     boolean found = false;
 
 500     for(String nodeIdConnTo : nodesConnectedIn.keySet()){
 
 501       List<RequirementAssignmentData> connectToList = nodesConnectedIn.get(nodeIdConnTo);
 
 502       List<Map<String, RequirementAssignment>> requirementsList = expectedServiceTemplate
 
 503           .getTopology_template().getNode_templates().get(nodeIdConnTo).getRequirements();
 
 504       for(RequirementAssignmentData requirementAssignmentData : connectToList) {
 
 505         for (Map<String, RequirementAssignment> requirementAssignmentMap : requirementsList) {
 
 506           RequirementAssignment requirementAssignment =
 
 507               new ObjectMapper().convertValue(requirementAssignmentMap.values().iterator().next(),
 
 508                   RequirementAssignment.class);
 
 509           if (requirementAssignment.getNode().equals(requirementAssignmentData.getRequirementAssignment().getNode())) {
 
 510             Assert.assertEquals(requirementAssignment.getCapability(),requirementAssignmentData.getRequirementAssignment().getCapability());
 
 511             Assert.assertEquals(requirementAssignment.getNode(),requirementAssignmentData.getRequirementAssignment().getNode());
 
 512             Assert.assertEquals(requirementAssignment.getRelationship(),requirementAssignmentData.getRequirementAssignment()
 
 525   public static void validateComputeConnectivityOut(String computeNodeTemplateId,
 
 526                                                     ComputeTemplateConsolidationData
 
 527                                                         computeTemplateConsolidationData,
 
 528                                                     ServiceTemplate expectedServiceTemplate){
 
 529     Map<String,List<RequirementAssignmentData>> nodesConnectedOut = computeTemplateConsolidationData.
 
 530         getNodesConnectedOut();
 
 531     if(nodesConnectedOut==null){
 
 534     boolean found = false;
 
 535     for(String nodeIdConnFrom : nodesConnectedOut.keySet()){
 
 536       List<RequirementAssignmentData> connectToList = nodesConnectedOut.get(nodeIdConnFrom);
 
 537       List<Map<String, RequirementAssignment>> requirementsList = expectedServiceTemplate
 
 538           .getTopology_template().getNode_templates().get(computeNodeTemplateId).getRequirements();
 
 539       for(RequirementAssignmentData requirementAssignmentData : connectToList) {
 
 540         for (Map<String, RequirementAssignment> requirementAssignmentMap : requirementsList) {
 
 541           RequirementAssignment requirementAssignment =
 
 542               new ObjectMapper().convertValue(requirementAssignmentMap.values().iterator().next(),
 
 543                   RequirementAssignment.class);
 
 544           if (requirementAssignment.getNode().equals(requirementAssignmentData.getRequirementAssignment().getNode())) {
 
 545             Assert.assertEquals(requirementAssignment.getCapability(),requirementAssignmentData.getRequirementAssignment().getCapability());
 
 546             Assert.assertEquals(requirementAssignment.getNode(),requirementAssignmentData.getRequirementAssignment().getNode());
 
 547             Assert.assertEquals(requirementAssignment.getRelationship(),requirementAssignmentData.getRequirementAssignment()
 
 560   public static void validatePortConnectivityIn(PortTemplateConsolidationData
 
 561                                                     portTemplateConsolidationData,
 
 562                                                 ServiceTemplate expectedServiceTemplate){
 
 563     Map<String,List<RequirementAssignmentData>> nodesConnectedIn = portTemplateConsolidationData.
 
 564         getNodesConnectedIn();
 
 565     if(nodesConnectedIn==null){
 
 568     boolean found = false;
 
 569     for(String nodeIdConnTo : nodesConnectedIn.keySet()){
 
 570       List<RequirementAssignmentData> connectToList = nodesConnectedIn.get(nodeIdConnTo);
 
 571       List<Map<String, RequirementAssignment>> requirementsList = expectedServiceTemplate
 
 572           .getTopology_template().getNode_templates().get(nodeIdConnTo).getRequirements();
 
 573       for(RequirementAssignmentData requirementAssignmentData : connectToList) {
 
 574         for (Map<String, RequirementAssignment> requirementAssignmentMap : requirementsList) {
 
 575           RequirementAssignment requirementAssignment =
 
 576               new ObjectMapper().convertValue(requirementAssignmentMap.values().iterator().next(),
 
 577                   RequirementAssignment.class);
 
 578           if (requirementAssignment.getNode().equals(requirementAssignmentData.getRequirementAssignment().getNode())) {
 
 579             Assert.assertEquals(requirementAssignment.getCapability(),requirementAssignmentData.getRequirementAssignment().getCapability());
 
 580             Assert.assertEquals(requirementAssignment.getNode(),requirementAssignmentData.getRequirementAssignment().getNode());
 
 581             Assert.assertEquals(requirementAssignment.getRelationship(),requirementAssignmentData.getRequirementAssignment()
 
 594   public static void validatePortConnectivityOut(String portNodeTemplateId,
 
 595                                                  PortTemplateConsolidationData
 
 596                                                      portTemplateConsolidationData,
 
 597                                                  ServiceTemplate expectedServiceTemplate){
 
 598     Map<String, List<RequirementAssignmentData>> nodesConnectedOut =
 
 599         portTemplateConsolidationData.getNodesConnectedOut();
 
 600     if(nodesConnectedOut==null){
 
 603     boolean found = false;
 
 604     for(String nodeIdConnFrom : nodesConnectedOut.keySet()){
 
 605       List<RequirementAssignmentData> connectToList = nodesConnectedOut.get(nodeIdConnFrom);
 
 606       List<Map<String, RequirementAssignment>> requirementsList = expectedServiceTemplate
 
 607           .getTopology_template().getNode_templates().get(portNodeTemplateId).getRequirements();
 
 608       for(RequirementAssignmentData requirementAssignmentData : connectToList) {
 
 609         for (Map<String, RequirementAssignment> requirementAssignmentMap : requirementsList) {
 
 610           RequirementAssignment requirementAssignment =
 
 611               new ObjectMapper().convertValue(requirementAssignmentMap.values().iterator().next(),
 
 612                   RequirementAssignment.class);
 
 613           if (requirementAssignment.getNode().equals(requirementAssignmentData.getRequirementAssignment().getNode())) {
 
 614             Assert.assertEquals(requirementAssignment.getCapability(),requirementAssignmentData.getRequirementAssignment().getCapability());
 
 615             Assert.assertEquals(requirementAssignment.getNode(),requirementAssignmentData.getRequirementAssignment().getNode());
 
 616             Assert.assertEquals(requirementAssignment.getRelationship(),requirementAssignmentData.getRequirementAssignment()
 
 629   public static void validateGetAttr(TranslationContext translationContext, Map<String,
 
 631       expectedServiceTemplateModels,String testName){
 
 632     ConsolidationData consolidationData = translationContext.getConsolidationData();
 
 633     Assert.assertNotNull(consolidationData);
 
 634     if(TestConstants.TEST_GET_ATTR_FOR_MORE_THAN_ONE_ATTR_IN_ATTR_LIST.equals(testName)){
 
 635       PortTemplateConsolidationData portTemplateConsolidationData = consolidationData
 
 636           .getPortConsolidationData().getFilePortConsolidationData("ep-jsa_netServiceTemplate.yaml")
 
 637           .getPortTemplateConsolidationData("VMI1");
 
 638       Assert.assertNotNull(portTemplateConsolidationData);
 
 639       Assert.assertEquals(2, portTemplateConsolidationData.getNodesGetAttrIn().size());
 
 640       List<GetAttrFuncData> attrFuncDataList = portTemplateConsolidationData.getNodesGetAttrIn()
 
 642       Assert.assertEquals(1,attrFuncDataList.size());
 
 643       Assert.assertEquals("name",attrFuncDataList.get(0).getFieldName());
 
 644       Assert.assertEquals("name",attrFuncDataList.get(0).getAttributeName());
 
 646       attrFuncDataList = portTemplateConsolidationData.getNodesGetAttrIn()
 
 648       Assert.assertEquals(1,attrFuncDataList.size());
 
 649       Assert.assertEquals("name",attrFuncDataList.get(0).getFieldName());
 
 650       Assert.assertEquals("virtual_machine_interface_allowed_address_pairs",attrFuncDataList.get(0).getAttributeName());
 
 652       ComputeTemplateConsolidationData computeTemplateConsolidationDataFSB2 = consolidationData
 
 653           .getComputeConsolidationData()
 
 654           .getFileComputeConsolidationData("ep-jsa_netServiceTemplate.yaml")
 
 655           .getTypeComputeConsolidationData("org.openecomp.resource.vfc.nodes.heat.FSB2")
 
 656           .getComputeTemplateConsolidationData("FSB2");
 
 657       Assert.assertEquals(1,computeTemplateConsolidationDataFSB2.getNodesGetAttrOut().size());
 
 658       List<GetAttrFuncData> attrFuncDataOutList = computeTemplateConsolidationDataFSB2
 
 659           .getNodesGetAttrOut().get("VMI1");
 
 660       Assert.assertEquals(1,attrFuncDataOutList.size());
 
 661       Assert.assertEquals("name",attrFuncDataOutList.get(0).getFieldName());
 
 662       Assert.assertEquals("virtual_machine_interface_allowed_address_pairs",attrFuncDataOutList
 
 663           .get(0).getAttributeName());
 
 664       ComputeTemplateConsolidationData computeTemplateConsolidationDataFSB1 = consolidationData
 
 665           .getComputeConsolidationData()
 
 666           .getFileComputeConsolidationData("ep-jsa_netServiceTemplate.yaml")
 
 667           .getTypeComputeConsolidationData("org.openecomp.resource.vfc.nodes.heat.FSB1")
 
 668           .getComputeTemplateConsolidationData("FSB1");
 
 669       Assert.assertEquals(1,computeTemplateConsolidationDataFSB1.getNodesGetAttrOut().size());
 
 670       List<GetAttrFuncData> attrFuncDataOutList2 = computeTemplateConsolidationDataFSB1
 
 671           .getNodesGetAttrOut().get("VMI1");
 
 672       Assert.assertEquals(1,attrFuncDataOutList2.size());
 
 673       Assert.assertEquals("name",attrFuncDataOutList2.get(0).getFieldName());
 
 674       Assert.assertEquals("name",attrFuncDataOutList2
 
 675           .get(0).getAttributeName());
 
 676     } else if(TestConstants.TEST_IGNORE_GET_ATTR_FROM_OUTPUT.equals(testName)){
 
 677       if(!consolidationData.getPortConsolidationData().getAllServiceTemplateFileNames().isEmpty()){
 
 678         Iterator<String> itr = consolidationData.getPortConsolidationData()
 
 679             .getFilePortConsolidationData("MainServiceTemplate.yaml").getAllPortNodeTemplateIds()
 
 681         while(itr.hasNext()){
 
 682           String key = itr.next();
 
 683           PortTemplateConsolidationData portTemplateConsolidationData = consolidationData
 
 684               .getPortConsolidationData()
 
 685               .getFilePortConsolidationData("MainServiceTemplate.yaml")
 
 686               .getPortTemplateConsolidationData(key);
 
 687           Assert.assertNull(portTemplateConsolidationData.getOutputParametersGetAttrIn());
 
 690     } else if(TestConstants.TEST_GET_ATTR_FOR_NOT_SUPPORTED_ATTR_IN_ATTR_LIST.equals(testName)){
 
 691       Assert.assertNull(consolidationData.getPortConsolidationData()
 
 692           .getFilePortConsolidationData("MainServiceTemplate.yaml")
 
 693           .getPortTemplateConsolidationData("FSB1_Internal2").getNodesGetAttrIn());
 
 694     } else if(TestConstants.TEST_GET_ATTR_FOR_ONLY_RESOURCE_NAME.equals(testName)){
 
 695       PortTemplateConsolidationData portTemplateConsolidationData = consolidationData
 
 696           .getPortConsolidationData().getFilePortConsolidationData("MainServiceTemplate.yaml")
 
 697           .getPortTemplateConsolidationData("VMI1");
 
 698       Assert.assertNotNull(portTemplateConsolidationData);
 
 699       Assert.assertEquals("name",portTemplateConsolidationData.getNodesGetAttrIn().get("FSB1").
 
 700           get(0).getFieldName());
 
 701       Assert.assertEquals("tenant_id",portTemplateConsolidationData.getNodesGetAttrIn().get("FSB1").
 
 702           get(0).getAttributeName());
 
 703     } else if(TestConstants.TEST_GET_ATTR_FOR_NONE_TO_PORT_OR_COMPUTE.equals(testName)){
 
 704       ComputeTemplateConsolidationData computeTemplateConsolidationData = consolidationData
 
 705           .getComputeConsolidationData()
 
 706           .getFileComputeConsolidationData("MainServiceTemplate.yaml")
 
 707           .getTypeComputeConsolidationData("org.openecomp.resource.vfc.nodes.heat.compute")
 
 708           .getComputeTemplateConsolidationData("server_compute_get_attr_test");
 
 709       Assert.assertEquals("user_data_format",computeTemplateConsolidationData
 
 710           .getNodesGetAttrOut().get("server_pcm_001").get(0).getFieldName());
 
 711       Assert.assertEquals("oam_net_gw",computeTemplateConsolidationData
 
 712           .getNodesGetAttrOut().get("server_pcm_001").get(0).getAttributeName());
 
 713     } else if(TestConstants.TEST_OUTPUT_GET_ATTR.equals(testName)){
 
 714       ComputeTemplateConsolidationData computeTemplateConsolidationData1 = consolidationData
 
 715           .getComputeConsolidationData()
 
 716           .getFileComputeConsolidationData("firstnet_fgi_frwlServiceTemplate.yaml")
 
 717           .getTypeComputeConsolidationData("org.openecomp.resource.vfc.nodes.heat.cgi_fw")
 
 718           .getComputeTemplateConsolidationData("CGI_FW_SERVER_1");
 
 719       Assert.assertEquals("cgi_fw_01_left_mac_1",computeTemplateConsolidationData1
 
 720           .getOutputParametersGetAttrIn()
 
 721           .get(0).getFieldName());
 
 722       Assert.assertEquals("addresses",computeTemplateConsolidationData1.getOutputParametersGetAttrIn()
 
 723           .get(0).getAttributeName());
 
 724       ComputeTemplateConsolidationData computeTemplateConsolidationData2 = consolidationData
 
 725           .getComputeConsolidationData()
 
 726           .getFileComputeConsolidationData("firstnet_fgi_frwlServiceTemplate.yaml")
 
 727           .getTypeComputeConsolidationData("org.openecomp.resource.vfc.nodes.heat.cgi_fw")
 
 728           .getComputeTemplateConsolidationData("CGI_FW_SERVER_2");
 
 729       Assert.assertEquals(1,computeTemplateConsolidationData2
 
 730           .getNodesGetAttrIn().get("CGI_FW_SERVER_2").size());
 
 731       Assert.assertEquals("availability_zone",computeTemplateConsolidationData2
 
 732           .getNodesGetAttrIn().get("CGI_FW_SERVER_2").get(0).getFieldName());
 
 733       Assert.assertEquals("addresses",computeTemplateConsolidationData2
 
 734           .getNodesGetAttrIn().get("CGI_FW_SERVER_2").get(0).getAttributeName());
 
 735       Assert.assertEquals(1,computeTemplateConsolidationData2
 
 736           .getNodesGetAttrOut().get("CGI_FW_SERVER_2").size());
 
 737       Assert.assertEquals("availability_zone",computeTemplateConsolidationData2
 
 738           .getNodesGetAttrOut().get("CGI_FW_SERVER_2").get(0).getFieldName());
 
 739       Assert.assertEquals("addresses",computeTemplateConsolidationData2
 
 740           .getNodesGetAttrOut().get("CGI_FW_SERVER_2").get(0).getAttributeName());
 
 741       Assert.assertEquals("cgi_fw_01_left_mac_2",computeTemplateConsolidationData2
 
 742           .getOutputParametersGetAttrIn().get(0).getFieldName());
 
 743       Assert.assertEquals("addresses",computeTemplateConsolidationData2
 
 744           .getOutputParametersGetAttrIn().get(0).getAttributeName());
 
 745       Assert.assertEquals("cgi_fw_01_left_mac_3",computeTemplateConsolidationData2
 
 746           .getOutputParametersGetAttrIn().get(1).getFieldName());
 
 747       Assert.assertEquals("addresses",computeTemplateConsolidationData2
 
 748           .getOutputParametersGetAttrIn().get(1).getAttributeName());
 
 749       Assert.assertEquals("cgi_fw_01_left_mac_4",computeTemplateConsolidationData2
 
 750           .getOutputParametersGetAttrIn().get(2).getFieldName());
 
 751       Assert.assertEquals("addresses",computeTemplateConsolidationData2
 
 752           .getOutputParametersGetAttrIn().get(2).getAttributeName());
 
 753       Assert.assertEquals("cgi_fw_01_left_mac_5",computeTemplateConsolidationData2
 
 754           .getOutputParametersGetAttrIn().get(3).getFieldName());
 
 755       Assert.assertEquals("addresses",computeTemplateConsolidationData2
 
 756           .getOutputParametersGetAttrIn().get(3).getAttributeName());
 
 757       Assert.assertEquals("cgi_fw_01_left_mac_5",computeTemplateConsolidationData2
 
 758           .getOutputParametersGetAttrIn().get(4).getFieldName());
 
 759       Assert.assertEquals("addresses",computeTemplateConsolidationData2
 
 760           .getOutputParametersGetAttrIn().get(4).getAttributeName());
 
 761       Assert.assertEquals("cgi_fw_01_left_mac_6",computeTemplateConsolidationData2
 
 762           .getOutputParametersGetAttrIn().get(5).getFieldName());
 
 763       Assert.assertEquals("addresses",computeTemplateConsolidationData2
 
 764           .getOutputParametersGetAttrIn().get(5).getAttributeName());
 
 765       Assert.assertEquals("cgi_fw_01_left_mac_9",computeTemplateConsolidationData2
 
 766           .getOutputParametersGetAttrIn().get(6).getFieldName());
 
 767       Assert.assertEquals("addresses",computeTemplateConsolidationData2
 
 768           .getOutputParametersGetAttrIn().get(6).getAttributeName());
 
 769       Assert.assertEquals("cgi_fw_01_left_mac_10",computeTemplateConsolidationData2
 
 770           .getOutputParametersGetAttrIn().get(7).getFieldName());
 
 771       Assert.assertEquals("addresses",computeTemplateConsolidationData2
 
 772           .getOutputParametersGetAttrIn().get(7).getAttributeName());
 
 773       PortTemplateConsolidationData portTemplateConsolidationData = consolidationData
 
 774           .getPortConsolidationData().getFilePortConsolidationData("firstnet_fgi_frwlServiceTemplate.yaml")
 
 775           .getPortTemplateConsolidationData("contrail_vmi_subinterface");
 
 776       Assert.assertEquals("cgi_fw_01_left_mac_7",portTemplateConsolidationData
 
 777           .getOutputParametersGetAttrIn().get(0).getFieldName());
 
 778       Assert.assertEquals("virtual_machine_interface_properties",portTemplateConsolidationData
 
 779           .getOutputParametersGetAttrIn().get(0).getAttributeName());
 
 780       Assert.assertEquals("cgi_fw_01_left_mac_8",portTemplateConsolidationData
 
 781           .getOutputParametersGetAttrIn().get(1).getFieldName());
 
 782       Assert.assertEquals("virtual_machine_interface_allowed_address_pairs",
 
 783           portTemplateConsolidationData.getOutputParametersGetAttrIn()
 
 784               .get(1).getAttributeName());
 
 785       Assert.assertEquals("cgi_fw_01_left_mac_10",portTemplateConsolidationData
 
 786           .getOutputParametersGetAttrIn().get(2).getFieldName());
 
 787       Assert.assertEquals("virtual_machine_interface_allowed_address_pairs",
 
 788           portTemplateConsolidationData.getOutputParametersGetAttrIn()
 
 789               .get(2).getAttributeName());
 
 793   public static void validateNestedConsolidationData(TranslationContext context,
 
 795     ConsolidationData consolidationData = context.getConsolidationData();
 
 796     if (testName.equals(TEST_SINGLE_NESTED_RESOURCE)) {
 
 797       String nestedNodeTemplateId = "server_pcm_001";
 
 798       NestedTemplateConsolidationData nestedTemplateConsolidationData =
 
 799           consolidationData.getNestedConsolidationData()
 
 800               .getFileNestedConsolidationData(MAIN_SERVICE_TEMPLATE)
 
 801               .getNestedTemplateConsolidationData(nestedNodeTemplateId);
 
 802       //Validate basic null attributes
 
 803       validateBasicNestedConsolidationData(nestedTemplateConsolidationData);
 
 804       //Validate nodeTemplateId
 
 805       Assert.assertEquals(nestedTemplateConsolidationData.getNodeTemplateId(), nestedNodeTemplateId);
 
 806       //Validate nodes connected in (will only be populated for dependsOn relationships)
 
 807       Map<String, List<RequirementAssignmentData>> nodesConnectedIn =
 
 808           nestedTemplateConsolidationData.getNodesConnectedIn();
 
 809       List<String> dependentNodes = new LinkedList<>();
 
 810       dependentNodes.add("packet_mirror_network");
 
 812       //Validate get attribute in
 
 813       Map<String, List<GetAttrFuncData>> nodesGetAttrIn =
 
 814           nestedTemplateConsolidationData.getNodesGetAttrIn();
 
 815       String getAttrNodeTemplateId = "server_compute_get_attr_test";
 
 816       List<GetAttrFuncData> getAttrFuncData = nodesGetAttrIn.get(getAttrNodeTemplateId);
 
 817       Assert.assertNotNull(getAttrFuncData);
 
 818       Assert.assertEquals(getAttrFuncData.size(), 2);
 
 819       Assert.assertEquals(getAttrFuncData.get(0).getFieldName(), "metadata");
 
 820       Assert.assertEquals(getAttrFuncData.get(0).getAttributeName(), "server_pcm_id");
 
 821       Assert.assertEquals(getAttrFuncData.get(1).getFieldName(), "user_data_format");
 
 822       Assert.assertEquals(getAttrFuncData.get(1).getAttributeName(), "oam_net_gw");
 
 824       //Validate output parameter get attribute in
 
 825       List<GetAttrFuncData> outputParametersGetAttrIn =
 
 826           nestedTemplateConsolidationData.getOutputParametersGetAttrIn();
 
 827       Assert.assertNotNull(outputParametersGetAttrIn);
 
 828       Assert.assertEquals(outputParametersGetAttrIn.size(), 1);
 
 829       Assert.assertEquals(outputParametersGetAttrIn.get(0).getFieldName(), "output_attr_1");
 
 830       Assert.assertEquals(outputParametersGetAttrIn.get(0).getAttributeName(), "pcm_vol");
 
 832     } else if (testName.equals(TEST_MULTIPLE_NESTED_RESOURCE)) {
 
 833       List<String> nestedNodeTemplateIds = new ArrayList<>();
 
 834       nestedNodeTemplateIds.add("server_pcm_001");
 
 835       nestedNodeTemplateIds.add("server_pcm_002");
 
 836       nestedNodeTemplateIds.add("server_pcm_003");
 
 838       for (String nestedNodeTemplateId : nestedNodeTemplateIds) {
 
 839         NestedTemplateConsolidationData nestedTemplateConsolidationData =
 
 840             consolidationData.getNestedConsolidationData()
 
 841                 .getFileNestedConsolidationData(MAIN_SERVICE_TEMPLATE)
 
 842                 .getNestedTemplateConsolidationData(nestedNodeTemplateId);
 
 843         //Validate basic null attributes
 
 844         validateBasicNestedConsolidationData(nestedTemplateConsolidationData);
 
 845         //Validate nodeTemplateId
 
 846         Assert.assertEquals(nestedTemplateConsolidationData.getNodeTemplateId(),
 
 847             nestedNodeTemplateId);
 
 848         if (nestedNodeTemplateId.equals("server_pcm_001")) {
 
 849           //Validate nodes connected in (will only be populated for dependsOn relationships)
 
 850           Map<String, List<RequirementAssignmentData>> nodesConnectedIn =
 
 851               nestedTemplateConsolidationData.getNodesConnectedIn();
 
 852           List<String> dependentNodes = new LinkedList<>();
 
 853           dependentNodes.add("packet_mirror_network");
 
 855           Assert.assertNull(nestedTemplateConsolidationData.getNodesConnectedIn());
 
 858       String nestedNodeTemplateId = "server_pcm_001";
 
 860       //Validate get attribute in
 
 861       NestedTemplateConsolidationData nestedTemplateConsolidationData =
 
 862           consolidationData.getNestedConsolidationData()
 
 863               .getFileNestedConsolidationData(MAIN_SERVICE_TEMPLATE)
 
 864               .getNestedTemplateConsolidationData("server_pcm_002");
 
 865       Map<String, List<GetAttrFuncData>> nodesGetAttrIn =
 
 866           nestedTemplateConsolidationData.getNodesGetAttrIn();
 
 867       String getAttrNodeTemplateId = "server_pcm_001";
 
 868       List<GetAttrFuncData> getAttrFuncData = nodesGetAttrIn.get(getAttrNodeTemplateId);
 
 869       Assert.assertNotNull(getAttrFuncData);
 
 870       Assert.assertEquals(getAttrFuncData.size(), 1);
 
 871       Assert.assertEquals(getAttrFuncData.get(0).getFieldName(), "user_data_format");
 
 872       Assert.assertEquals(getAttrFuncData.get(0).getAttributeName(), "pcm_vol");
 
 873       //Validate output parameter get attribute in
 
 874       List<GetAttrFuncData> outputParametersGetAttrIn =
 
 875           nestedTemplateConsolidationData.getOutputParametersGetAttrIn();
 
 876       Assert.assertNotNull(outputParametersGetAttrIn);
 
 877       Assert.assertEquals(outputParametersGetAttrIn.size(), 1);
 
 878       Assert.assertEquals(outputParametersGetAttrIn.get(0).getFieldName(), "output_attr_2");
 
 879       Assert.assertEquals(outputParametersGetAttrIn.get(0).getAttributeName(), "oam_net_ip");
 
 882       nestedTemplateConsolidationData = consolidationData.getNestedConsolidationData()
 
 883           .getFileNestedConsolidationData(MAIN_SERVICE_TEMPLATE)
 
 884           .getNestedTemplateConsolidationData("server_pcm_001");
 
 885       nodesGetAttrIn = nestedTemplateConsolidationData.getNodesGetAttrIn();
 
 886       getAttrNodeTemplateId = "server_pcm_002";
 
 887       getAttrFuncData = nodesGetAttrIn.get(getAttrNodeTemplateId);
 
 888       Assert.assertNotNull(getAttrFuncData);
 
 889       Assert.assertEquals(getAttrFuncData.size(), 1);
 
 890       Assert.assertEquals(getAttrFuncData.get(0).getFieldName(), "metadata");
 
 891       Assert.assertEquals(getAttrFuncData.get(0).getAttributeName(), "server_pcm_id");
 
 892       //Validate output parameter get attribute in
 
 893       outputParametersGetAttrIn = nestedTemplateConsolidationData.getOutputParametersGetAttrIn();
 
 894       Assert.assertNotNull(outputParametersGetAttrIn);
 
 895       Assert.assertEquals(outputParametersGetAttrIn.size(), 1);
 
 896       Assert.assertEquals(outputParametersGetAttrIn.get(0).getFieldName(), "output_attr_1");
 
 897       Assert.assertEquals(outputParametersGetAttrIn.get(0).getAttributeName(), "pcm_vol");
 
 899       nestedTemplateConsolidationData = consolidationData.getNestedConsolidationData()
 
 900           .getFileNestedConsolidationData(MAIN_SERVICE_TEMPLATE)
 
 901           .getNestedTemplateConsolidationData("server_pcm_003");
 
 902       Assert.assertNull(nestedTemplateConsolidationData.getNodesGetAttrIn());
 
 903       Assert.assertNull(nestedTemplateConsolidationData.getOutputParametersGetAttrIn());
 
 905     } else if (testName.equals(TEST_MULTIPLE_MULTI_LEVEL_NESTED_RESOURCE)) {
 
 906       String nestedNodeTemplateId = "test_nested";
 
 907       NestedTemplateConsolidationData nestedTemplateConsolidationData =
 
 908           consolidationData.getNestedConsolidationData()
 
 909               .getFileNestedConsolidationData(MAIN_SERVICE_TEMPLATE)
 
 910               .getNestedTemplateConsolidationData(nestedNodeTemplateId);
 
 911       //Validate basic null attributes
 
 912       validateBasicNestedConsolidationData(nestedTemplateConsolidationData);
 
 913       //Validate nodeTemplateId
 
 914       Assert.assertEquals(nestedTemplateConsolidationData.getNodeTemplateId(),
 
 915           nestedNodeTemplateId);
 
 916       //Validate nodes connected in (will only be populated for dependsOn relationships)
 
 917       Map<String, List<RequirementAssignmentData>> nodesConnectedIn =
 
 918           nestedTemplateConsolidationData.getNodesConnectedIn();
 
 919       List<String> dependentNodes = new LinkedList<>();
 
 920       dependentNodes.add("packet_mirror_network");
 
 921       //Validate output parameter get attribute in
 
 922       List<GetAttrFuncData> getAttrFuncData =
 
 923           nestedTemplateConsolidationData.getNodesGetAttrIn().get("packet_mirror_network");
 
 924       Assert.assertNotNull(getAttrFuncData);
 
 925       Assert.assertEquals(getAttrFuncData.size(), 1);
 
 926       Assert.assertEquals(getAttrFuncData.get(0).getFieldName(), "shared");
 
 927       Assert.assertEquals(getAttrFuncData.get(0).getAttributeName(), "output_attr_1");
 
 928       Assert.assertNull(nestedTemplateConsolidationData.getOutputParametersGetAttrIn());
 
 930       nestedNodeTemplateId = "test_nested2";
 
 931       nestedTemplateConsolidationData = consolidationData.getNestedConsolidationData()
 
 932               .getFileNestedConsolidationData("nestedServiceTemplate.yaml")
 
 933               .getNestedTemplateConsolidationData(nestedNodeTemplateId);
 
 934       //Validate basic null attributes
 
 935       validateBasicNestedConsolidationData(nestedTemplateConsolidationData);
 
 936       //Validate nodeTemplateId
 
 937       Assert.assertEquals(nestedTemplateConsolidationData.getNodeTemplateId(),
 
 938           nestedNodeTemplateId);
 
 939       Assert.assertNull(nestedTemplateConsolidationData.getNodesConnectedIn());
 
 940       //Validate output parameter get attribute in
 
 941       getAttrFuncData = nestedTemplateConsolidationData.getNodesGetAttrIn().get("server_cmaui_1");
 
 942       Assert.assertNotNull(getAttrFuncData);
 
 943       Assert.assertEquals(getAttrFuncData.size(), 1);
 
 944       Assert.assertEquals(getAttrFuncData.get(0).getFieldName(), "metadata");
 
 945       Assert.assertEquals(getAttrFuncData.get(0).getAttributeName(), "availability_zone_0");
 
 947       List<GetAttrFuncData> outputParametersGetAttrIn1 =
 
 948           nestedTemplateConsolidationData.getOutputParametersGetAttrIn();
 
 949       Assert.assertNotNull(outputParametersGetAttrIn1);
 
 950       Assert.assertEquals(outputParametersGetAttrIn1.size(), 1);
 
 951       Assert.assertEquals(outputParametersGetAttrIn1.get(0).getFieldName(), "output_attr_1");
 
 952       Assert.assertEquals(outputParametersGetAttrIn1.get(0).getAttributeName(), "availability_zone_0");
 
 956   private static void validateBasicNestedConsolidationData(NestedTemplateConsolidationData
 
 957                                                                nestedTemplateConsolidationData) {
 
 958     Assert.assertNull(nestedTemplateConsolidationData.getGroupIds());
 
 959     Assert.assertNull(nestedTemplateConsolidationData.getNodesConnectedOut());
 
 960     //Assert.assertNull(nestedTemplateConsolidationData.getNodesGetAttrOut());
 
 963   private static void validateNestedNodesConnectedInDependency(Map<String,
 
 964                                                   List<RequirementAssignmentData>> nodesConnectedIn,
 
 965                                                            String nestedNodeTemplateId,
 
 966                                                            List<String> dependentNodeTemplateIds) {
 
 967     Assert.assertNotNull(nodesConnectedIn);
 
 968     for (String dependentNodeTemplateId : dependentNodeTemplateIds) {
 
 969       List<RequirementAssignmentData> requirementAssignmentData =
 
 970           nodesConnectedIn.get(dependentNodeTemplateId);
 
 971       Assert.assertNotNull(requirementAssignmentData);
 
 972       for (RequirementAssignmentData data : requirementAssignmentData) {
 
 973         Assert.assertEquals(data.getRequirementId(), ToscaConstants.DEPENDS_ON_REQUIREMENT_ID);
 
 974         Assert.assertEquals(data.getRequirementAssignment().getCapability(), ToscaCapabilityType
 
 976         Assert.assertEquals(data.getRequirementAssignment().getNode(), nestedNodeTemplateId);
 
 977         Assert.assertEquals(data.getRequirementAssignment().getRelationship(),
 
 978             ToscaRelationshipType.NATIVE_DEPENDS_ON);
 
 983   public static void validateNestedNodesConnectedInSecurityRuleToPort(String testName,
 
 984                                                                        TranslationContext context)  {
 
 985     ConsolidationData consolidationData = context.getConsolidationData();
 
 986     if (testName.equals(TEST_SECURITY_RULE_PORT_NESTED_CONNECTION) ||
 
 987         testName.equals(TestConstants.TEST_SECURITY_RULE_PORT_NESTED_SHARED_PORT)) {
 
 988       String nestedNodeTemplateId = "test_nested";
 
 989       NestedTemplateConsolidationData nestedTemplateConsolidationData =
 
 990           consolidationData.getNestedConsolidationData()
 
 991               .getFileNestedConsolidationData(MAIN_SERVICE_TEMPLATE)
 
 992               .getNestedTemplateConsolidationData(nestedNodeTemplateId);
 
 993       //Validate basic null attributes
 
 994       validateBasicNestedConsolidationData(nestedTemplateConsolidationData);
 
 995       //Validate nodeTemplateId
 
 997           .assertEquals(nestedTemplateConsolidationData.getNodeTemplateId(), nestedNodeTemplateId);
 
 998       String securityRuleNodeTemplateId = "jsa_security_group1";
 
 999       validateNestedNodesConnectedInSecurityRuleToPort(HeatToToscaUtil
 
1000               .getServiceTemplateFromContext(MAIN_SERVICE_TEMPLATE, context).get(),
 
1001           nestedNodeTemplateId, securityRuleNodeTemplateId,
 
1002           nestedTemplateConsolidationData);
 
1003       securityRuleNodeTemplateId = "jsa_security_group2";
 
1004       validateNestedNodesConnectedInSecurityRuleToPort(HeatToToscaUtil
 
1005               .getServiceTemplateFromContext(MAIN_SERVICE_TEMPLATE, context).get(),
 
1006           nestedNodeTemplateId, securityRuleNodeTemplateId,
 
1007           nestedTemplateConsolidationData);
 
1008       if (testName.equals(TestConstants.TEST_SECURITY_RULE_PORT_NESTED_SHARED_PORT)) {
 
1009         nestedNodeTemplateId = "test_nestedArrayParam";
 
1010         Assert.assertEquals(nestedNodeTemplateId, consolidationData.getNestedConsolidationData()
 
1011             .getFileNestedConsolidationData(MAIN_SERVICE_TEMPLATE)
 
1012             .getNestedTemplateConsolidationData(nestedNodeTemplateId).getNodeTemplateId());
 
1013         Assert.assertNull(consolidationData.getNestedConsolidationData()
 
1014             .getFileNestedConsolidationData(MAIN_SERVICE_TEMPLATE)
 
1015             .getNestedTemplateConsolidationData(nestedNodeTemplateId).getNodesConnectedIn());
 
1017     } else if (testName.equals(TEST_SECURITY_RULE_PORT_MULTI_LEVEL_NESTED_CONNECTION) ||
 
1018         testName.equals(TEST_SECURITY_RULE_PORT_MULTI_LEVEL_NESTED_SHARED_PORT)) {
 
1019       String nestedNodeTemplateId = "test_nested2Level";
 
1020       Assert.assertEquals(nestedNodeTemplateId, consolidationData.getNestedConsolidationData()
 
1021           .getFileNestedConsolidationData("nested1ServiceTemplate.yaml")
 
1022           .getNestedTemplateConsolidationData(nestedNodeTemplateId).getNodeTemplateId());
 
1023       Assert.assertNull(consolidationData.getNestedConsolidationData()
 
1024           .getFileNestedConsolidationData("nested1ServiceTemplate.yaml")
 
1025           .getNestedTemplateConsolidationData(nestedNodeTemplateId).getNodesConnectedIn());
 
1026       nestedNodeTemplateId = "test_nested3Level";
 
1027       Assert.assertEquals(nestedNodeTemplateId, consolidationData.getNestedConsolidationData()
 
1028           .getFileNestedConsolidationData("nested2ServiceTemplate.yaml")
 
1029           .getNestedTemplateConsolidationData(nestedNodeTemplateId).getNodeTemplateId());
 
1030       Assert.assertNull(consolidationData.getNestedConsolidationData()
 
1031           .getFileNestedConsolidationData("nested2ServiceTemplate.yaml")
 
1032           .getNestedTemplateConsolidationData(nestedNodeTemplateId).getNodesConnectedIn());
 
1033       nestedNodeTemplateId = "test_nested4Level";
 
1034       Assert.assertEquals(nestedNodeTemplateId, consolidationData.getNestedConsolidationData()
 
1035           .getFileNestedConsolidationData("nested3ServiceTemplate.yaml")
 
1036           .getNestedTemplateConsolidationData(nestedNodeTemplateId).getNodeTemplateId());
 
1037       Assert.assertNull(consolidationData.getNestedConsolidationData()
 
1038           .getFileNestedConsolidationData("nested3ServiceTemplate.yaml")
 
1039           .getNestedTemplateConsolidationData(nestedNodeTemplateId).getNodesConnectedIn());
 
1041       //Validate main service template
 
1043       nestedNodeTemplateId = "test_nested1Level";
 
1044       NestedTemplateConsolidationData nestedTemplateConsolidationData =
 
1045           consolidationData.getNestedConsolidationData()
 
1046               .getFileNestedConsolidationData(MAIN_SERVICE_TEMPLATE)
 
1047               .getNestedTemplateConsolidationData(nestedNodeTemplateId);
 
1048       //Validate basic null attributes
 
1049       validateBasicNestedConsolidationData(nestedTemplateConsolidationData);
 
1050       //Validate nodeTemplateId
 
1052           .assertEquals(nestedTemplateConsolidationData.getNodeTemplateId(), nestedNodeTemplateId);
 
1053       String securityRuleNodeTemplateId = "jsa_security_group1";
 
1054       validateNestedNodesConnectedInSecurityRuleToPort(HeatToToscaUtil
 
1055               .getServiceTemplateFromContext(MAIN_SERVICE_TEMPLATE, context).get(),
 
1056           nestedNodeTemplateId, securityRuleNodeTemplateId,
 
1057           nestedTemplateConsolidationData);
 
1058       securityRuleNodeTemplateId = "jsa_security_group2";
 
1059       validateNestedNodesConnectedInSecurityRuleToPort(HeatToToscaUtil
 
1060               .getServiceTemplateFromContext(MAIN_SERVICE_TEMPLATE, context).get(),
 
1061           nestedNodeTemplateId, securityRuleNodeTemplateId,
 
1062           nestedTemplateConsolidationData);
 
1064       nestedNodeTemplateId = "test_resourceGroup";
 
1065       nestedTemplateConsolidationData = consolidationData.getNestedConsolidationData()
 
1066               .getFileNestedConsolidationData(MAIN_SERVICE_TEMPLATE)
 
1067               .getNestedTemplateConsolidationData(nestedNodeTemplateId);
 
1068       //Validate basic null attributes
 
1069       validateBasicNestedConsolidationData(nestedTemplateConsolidationData);
 
1070       //Validate nodeTemplateId
 
1072           .assertEquals(nestedTemplateConsolidationData.getNodeTemplateId(), nestedNodeTemplateId);
 
1073       securityRuleNodeTemplateId = "jsa_security_group2";
 
1074       validateNestedNodesConnectedInSecurityRuleToPort(HeatToToscaUtil
 
1075               .getServiceTemplateFromContext(MAIN_SERVICE_TEMPLATE, context).get(),
 
1076           nestedNodeTemplateId, securityRuleNodeTemplateId,
 
1077           nestedTemplateConsolidationData);
 
1078       securityRuleNodeTemplateId = "jsa_security_group2";
 
1079       validateNestedNodesConnectedInSecurityRuleToPort(HeatToToscaUtil
 
1080               .getServiceTemplateFromContext(MAIN_SERVICE_TEMPLATE, context).get(),
 
1081           nestedNodeTemplateId, securityRuleNodeTemplateId,
 
1082           nestedTemplateConsolidationData);
 
1084       nestedNodeTemplateId = "test_nestedInvalidConnectionToNova";
 
1085       Assert.assertEquals(nestedNodeTemplateId, consolidationData.getNestedConsolidationData()
 
1086           .getFileNestedConsolidationData(MAIN_SERVICE_TEMPLATE)
 
1087           .getNestedTemplateConsolidationData(nestedNodeTemplateId).getNodeTemplateId());
 
1088       Assert.assertNull(consolidationData.getNestedConsolidationData()
 
1089           .getFileNestedConsolidationData(MAIN_SERVICE_TEMPLATE)
 
1090           .getNestedTemplateConsolidationData(nestedNodeTemplateId).getNodesConnectedIn());
 
1094   private static void validateNestedNodesConnectedInSecurityRuleToPort(ServiceTemplate
 
1096                                                                        String nestedNodeTemplateId,
 
1098                                                                            securityRuleNodeTemplateId,
 
1099                                                                        NestedTemplateConsolidationData nestedTemplateConsolidationData) {
 
1100     Map<String, List<RequirementAssignmentData>> consolidationDataNodesConnectedIn =
 
1101         nestedTemplateConsolidationData.getNodesConnectedIn();
 
1102     Assert.assertNotNull(consolidationDataNodesConnectedIn);
 
1103     NodeTemplate securityRuleNodeTemplate = DataModelUtil.getNodeTemplate(serviceTemplate,
 
1104         securityRuleNodeTemplateId);
 
1105     List<Map<String, RequirementAssignment>> securityRuleNodeTemplateRequirements =
 
1106         securityRuleNodeTemplate.getRequirements();
 
1107     for (Map<String, RequirementAssignment> req : securityRuleNodeTemplateRequirements) {
 
1108       String requirementId = req.keySet().toArray()[0].toString();
 
1109       if (requirementId.equals(ToscaConstants.PORT_REQUIREMENT_ID)) {
 
1110         RequirementAssignment requirementAssignment = req.get(requirementId);
 
1111         if (requirementAssignment.getNode().equals(nestedNodeTemplateId)) {
 
1112           validateSecurityRulePortNestedConsolidationData(requirementAssignment,
 
1113               securityRuleNodeTemplateId, consolidationDataNodesConnectedIn);
 
1119   private static void validateSecurityRulePortNestedConsolidationData(RequirementAssignment
 
1120                                                                         requirementAssignment,
 
1121                                                                  String securityRuleNodeTemplateId,
 
1123                                                                         List<RequirementAssignmentData>> consolidationDataNodesConnectedIn) {
 
1124     List<RequirementAssignmentData> requirementAssignmentDataList =
 
1125         consolidationDataNodesConnectedIn.get(securityRuleNodeTemplateId);
 
1126     Assert.assertNotNull(requirementAssignmentDataList);
 
1127     boolean result = false;
 
1128     for (RequirementAssignmentData data : requirementAssignmentDataList) {
 
1129       RequirementAssignment dataRequirementAssignment = data.getRequirementAssignment();
 
1130       result = DataModelUtil
 
1131           .compareRequirementAssignment(requirementAssignment, dataRequirementAssignment);
 
1136     Assert.assertTrue(result);