VLAN Tagging - Display naming convention warning 15/54815/2
authorojasdubey <ojas.dubey@amdocs.com>
Thu, 14 Jun 2018 14:44:39 +0000 (20:14 +0530)
committerOren Kleks <orenkle@amdocs.com>
Wed, 20 Jun 2018 07:44:44 +0000 (07:44 +0000)
Vlan tagging HEAT validation doesn't show
appropriate warning when naming convention is not
followed

Change-Id: I98d998ac425a66f0f0b362aecd5da6c867c5b7eb
Issue-ID: SDC-1431
Signed-off-by: ojasdubey <ojas.dubey@amdocs.com>
16 files changed:
openecomp-bdd/resources/uploads/vlan-tagging-positive.zip
openecomp-be/lib/openecomp-heat-lib/src/main/java/org/openecomp/sdc/heat/services/HeatResourceUtil.java [new file with mode: 0644]
openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/datatypes/heattotosca/unifiedmodel/consolidation/FilePortConsolidationData.java
openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/ConsolidationDataUtil.java
openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/HeatToToscaUtil.java
openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/java/org/openecomp/sdc/translator/services/heattotosca/impl/resourcetranslation/ContrailV2VlanToInterfaceResourceConnectionTest.java
openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/main/java/org/openecomp/sdc/validation/impl/validators/namingconvention/VirtualMachineInterfaceGuidelineValidator.java
openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/java/org/openecomp/sdc/validation/impl/validators/namingconvention/VirtualMachineInterfaceGuidelineValidatorTest.java
openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/guideLineValidator/vlan_validation/modeled_through_resource_group/negative_get_resource/input/nested.yml
openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/guideLineValidator/vlan_validation/modeled_through_resource_group/negative_test/input/nested.yml
openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/guideLineValidator/vlan_validation/modeled_through_resource_group/negative_test_non_string/input/nested.yml
openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/guideLineValidator/vlan_validation/modeled_through_resource_group/positive_test/input/nested.yml
openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/guideLineValidator/vlan_validation/naming_convention/positive_test/input/nested.yml
openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/guideLineValidator/vlan_validation/single_vlan_resource/negative_test/two_vlans/nested.yml
openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/guideLineValidator/vlan_validation/single_vlan_resource/negative_test/vlan_and_nova/nested.yml
openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/guideLineValidator/vlan_validation/single_vlan_resource/positive_test/input/nested.yml

index 22e66af..b451977 100644 (file)
Binary files a/openecomp-bdd/resources/uploads/vlan-tagging-positive.zip and b/openecomp-bdd/resources/uploads/vlan-tagging-positive.zip differ
diff --git a/openecomp-be/lib/openecomp-heat-lib/src/main/java/org/openecomp/sdc/heat/services/HeatResourceUtil.java b/openecomp-be/lib/openecomp-heat-lib/src/main/java/org/openecomp/sdc/heat/services/HeatResourceUtil.java
new file mode 100644 (file)
index 0000000..a44b019
--- /dev/null
@@ -0,0 +1,110 @@
+/*
+ * Copyright © 2016-2018 European Support Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.openecomp.sdc.heat.services;
+
+import java.util.Objects;
+import java.util.Optional;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.openecomp.sdc.heat.datatypes.model.HeatResourcesTypes;
+
+public class HeatResourceUtil {
+
+    private static final String UNDERSCORE = "_";
+    private static final String WORDS_REGEX = "(\\w+)";
+    private static final String PORT_RESOURCE_ID_REGEX_SUFFIX = "(_\\d+)*";
+    private static final String PORT_RESOURCE_ID_REGEX_PREFIX =
+            WORDS_REGEX + PORT_RESOURCE_ID_REGEX_SUFFIX;
+    private static final String PORT_INT_RESOURCE_ID_REGEX_PREFIX = PORT_RESOURCE_ID_REGEX_PREFIX
+            + UNDERSCORE + "int_"+ WORDS_REGEX + UNDERSCORE;
+    private static final String SUB_INTERFACE_INT_RESOURCE_ID_REGEX_PREFIX =
+            PORT_RESOURCE_ID_REGEX_PREFIX + UNDERSCORE + "subint_"+ WORDS_REGEX + UNDERSCORE;
+
+    public static Optional<String> evaluateNetworkRoleFromResourceId(String resourceId,
+                                                                     String resourceType) {
+        Optional<PortType> portType = getPortType(resourceType);
+        if (portType.isPresent()) {
+            String portResourceIdRegex =
+                    PORT_RESOURCE_ID_REGEX_PREFIX + UNDERSCORE + WORDS_REGEX + UNDERSCORE
+                            + portType.get().getPortTypeName() + PORT_RESOURCE_ID_REGEX_SUFFIX;
+            String portIntResourceIdRegex =
+                    PORT_INT_RESOURCE_ID_REGEX_PREFIX + portType.get().getPortTypeName()
+                            + PORT_RESOURCE_ID_REGEX_SUFFIX;
+
+            String portNetworkRole = getNetworkRole(resourceId, portResourceIdRegex);
+            String portIntNetworkRole = getNetworkRole(resourceId, portIntResourceIdRegex);
+
+            return Optional.ofNullable(Objects.nonNull(portNetworkRole)
+                    ? portNetworkRole : portIntNetworkRole);
+        }
+        return Optional.empty();
+    }
+
+    private static Optional<PortType> getPortType(String resourceType) {
+        if (resourceType.equals(
+                HeatResourcesTypes.CONTRAIL_V2_VIRTUAL_MACHINE_INTERFACE_RESOURCE_TYPE.getHeatResource())) {
+            return Optional.of(PortType.VMI);
+        } else if (resourceType.equals(
+                HeatResourcesTypes.NEUTRON_PORT_RESOURCE_TYPE.getHeatResource())) {
+            return Optional.of(PortType.PORT);
+        }
+        return Optional.empty();
+    }
+
+    public static Optional<String> extractNetworkRoleFromSubInterfaceId(String  resourceId,
+                                                                        String resourceType) {
+        Optional<PortType> portType = getPortType(resourceType);
+        if (portType.isPresent()) {
+            String subInterfaceResourceIdRegex =
+                    SUB_INTERFACE_INT_RESOURCE_ID_REGEX_PREFIX + portType.get().getPortTypeName()
+                            + PORT_RESOURCE_ID_REGEX_SUFFIX;
+
+            return Optional.ofNullable(getNetworkRole(resourceId, subInterfaceResourceIdRegex));
+        }
+        return Optional.empty();
+    }
+
+    private enum PortType {
+        PORT("port"),
+        VMI("vmi");
+
+        private String portTypeName;
+
+        PortType(String portTypeName) {
+            this.portTypeName = portTypeName;
+        }
+
+        public String getPortTypeName() {
+            return portTypeName;
+        }
+    }
+
+    private static String getNetworkRole(String portResourceId, String portIdRegex) {
+        Pattern pattern = Pattern.compile(portIdRegex);
+        Matcher matcher = pattern.matcher(portResourceId);
+        if (matcher.matches()) {
+            String networkRole = matcher.group(3);
+            //Assuming network role will not contain ONLY digits
+            if (!networkRole.matches("\\d+")) {
+                return matcher.group(3);
+            }
+        }
+        return null;
+    }
+
+}
index 9335dd4..3aaf47c 100644 (file)
@@ -23,7 +23,7 @@ import java.util.Optional;
 import java.util.Set;
 
 import org.openecomp.sdc.heat.datatypes.model.Resource;
-import org.openecomp.sdc.translator.services.heattotosca.HeatToToscaUtil;
+import org.openecomp.sdc.heat.services.HeatResourceUtil;
 
 
 public class FilePortConsolidationData {
@@ -93,16 +93,14 @@ public class FilePortConsolidationData {
         return consolidationData;
     }
 
-    private PortTemplateConsolidationData createPortTemplateConsolidationData(
-            String portNodeTemplateId, String portResourceId, String portResourceType) {
+    public PortTemplateConsolidationData createPortTemplateConsolidationData(String portNodeTemplateId,
+                                                                             String portResourceId,
+                                                                             String portResourceType) {
         PortTemplateConsolidationData consolidationData = new PortTemplateConsolidationData();
         consolidationData.setNodeTemplateId(portNodeTemplateId);
-        Optional<String> portNetworkRole = HeatToToscaUtil.evaluateNetworkRoleFromResourceId(portResourceId,
+        Optional<String> portNetworkRole = HeatResourceUtil.evaluateNetworkRoleFromResourceId(portResourceId,
                 portResourceType);
         portNetworkRole.ifPresent(consolidationData::setNetworkRole);
         return consolidationData;
     }
-
-
-
 }
index 64c2168..0d8a07a 100644 (file)
@@ -21,6 +21,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 import java.util.Optional;
+
 import org.apache.commons.collections4.MapUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.onap.sdc.tosca.datatypes.model.RequirementAssignment;
@@ -142,8 +143,8 @@ public class ConsolidationDataUtil {
         PortTemplateConsolidationData portTemplateConsolidationData =
                 filePortConsolidationData.getPortTemplateConsolidationData(portNodeTemplateId);
         if (portTemplateConsolidationData == null) {
-            portTemplateConsolidationData = getInitPortTemplateConsolidationData(portNodeTemplateId,
-                    portResourceId, portResourceType);
+            portTemplateConsolidationData = filePortConsolidationData
+                    .createPortTemplateConsolidationData(portNodeTemplateId, portResourceId, portResourceType);
             filePortConsolidationData.setPortTemplateConsolidationData(portNodeTemplateId,
                     portTemplateConsolidationData);
         }
@@ -151,18 +152,6 @@ public class ConsolidationDataUtil {
         return portTemplateConsolidationData;
     }
 
-    private static PortTemplateConsolidationData getInitPortTemplateConsolidationData(String portNodeTemplateId,
-                                                                                             String portResourceId,
-                                                                                             String portResourceType) {
-        PortTemplateConsolidationData portTemplateConsolidationData = new PortTemplateConsolidationData();
-        portTemplateConsolidationData.setNodeTemplateId(portNodeTemplateId);
-        Optional<String> portNetworkRole = HeatToToscaUtil.evaluateNetworkRoleFromResourceId(portResourceId,
-                portResourceType);
-        portNetworkRole.ifPresent(portTemplateConsolidationData::setNetworkRole);
-        return portTemplateConsolidationData;
-    }
-
-
     public static Optional<SubInterfaceTemplateConsolidationData> getSubInterfaceTemplateConsolidationData(
             TranslateTo subInterfaceTo, String subInterfaceNodeTemplateId) {
 
@@ -197,8 +186,9 @@ public class ConsolidationDataUtil {
             Optional<String> portResourceId = getSubInterfaceParentPortResourceId(parentPortNodeTemplateId,
                     subInterfaceTo);
             if (portResourceId.isPresent()) {
-                portTemplateConsolidationData = getInitPortTemplateConsolidationData(parentPortNodeTemplateId,
-                        portResourceId.get(), HeatToToscaUtil.getResourceType(portResourceId.get(), subInterfaceTo
+                portTemplateConsolidationData = filePortConsolidationData.createPortTemplateConsolidationData(
+                        parentPortNodeTemplateId, portResourceId.get(),
+                        HeatToToscaUtil.getResourceType(portResourceId.get(), subInterfaceTo
                                 .getHeatOrchestrationTemplate(), subInterfaceTo.getHeatFileName()));
             } else {
                 portTemplateConsolidationData = new PortTemplateConsolidationData();
index dd23e2d..f2773ae 100644 (file)
@@ -16,6 +16,7 @@
 
 package org.openecomp.sdc.translator.services.heattotosca;
 
+import static org.openecomp.sdc.heat.services.HeatResourceUtil.extractNetworkRoleFromSubInterfaceId;
 import static org.openecomp.sdc.translator.services.heattotosca.impl.functiontranslation.FunctionTranslator.getFunctionTranslateTo;
 
 import java.io.IOException;
@@ -29,8 +30,6 @@ import java.util.Map;
 import java.util.Objects;
 import java.util.Optional;
 import java.util.Set;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
 import org.apache.commons.collections4.CollectionUtils;
@@ -59,6 +58,7 @@ import org.openecomp.core.utilities.file.FileUtils;
 import org.openecomp.core.utilities.orchestration.OnboardingTypesEnum;
 import org.openecomp.core.validation.util.MessageContainerUtil;
 import org.openecomp.sdc.common.errors.CoreException;
+import org.openecomp.sdc.common.errors.SdcRuntimeException;
 import org.openecomp.sdc.common.utils.SdcCommon;
 import org.openecomp.sdc.datatypes.error.ErrorLevel;
 import org.openecomp.sdc.datatypes.error.ErrorMessage;
@@ -110,15 +110,6 @@ public class HeatToToscaUtil {
     private static final String GET_ATTR = "get_attr";
     private static final String GET_RESOURCE = "get_resource";
     private static final String UNDERSCORE = "_";
-    private static final String WORDS_REGEX = "(\\w+)";
-    private static final String PORT_RESOURCE_ID_REGEX_SUFFIX = "(_\\d+)*";
-    private static final String PORT_RESOURCE_ID_REGEX_PREFIX = WORDS_REGEX + PORT_RESOURCE_ID_REGEX_SUFFIX;
-    private static final String PORT_INT_RESOURCE_ID_REGEX_PREFIX =
-            PORT_RESOURCE_ID_REGEX_PREFIX + UNDERSCORE + "int_" + WORDS_REGEX + UNDERSCORE;
-    private static final String SUB_INTERFACE_INT_RESOURCE_ID_REGEX_PREFIX =
-            PORT_RESOURCE_ID_REGEX_PREFIX + UNDERSCORE + "subint_" + WORDS_REGEX + UNDERSCORE;
-    private static final String SUB_INTERFACE_REGEX =
-            WORDS_REGEX + PORT_RESOURCE_ID_REGEX_SUFFIX + "_subint_(\\w_+)*vmi" + PORT_RESOURCE_ID_REGEX_SUFFIX;
 
     /**
      * Load and translate template data translator output.
@@ -132,7 +123,7 @@ public class HeatToToscaUtil {
         try (InputStream fileContent = fileNameContentMap.getFileContent(SdcCommon.MANIFEST_NAME)) {
             heatToToscaTranslator.addManifest(SdcCommon.MANIFEST_NAME, FileUtils.toByteArray(fileContent));
         } catch (IOException e) {
-            throw new RuntimeException("Failed to read manifest", e);
+            throw new SdcRuntimeException("Failed to read manifest", e);
         }
 
         fileNameContentMap.getFileList().stream().filter(fileName -> !(fileName.equals(SdcCommon.MANIFEST_NAME)))
@@ -151,7 +142,7 @@ public class HeatToToscaUtil {
             return heatToToscaTranslator.translate();
         } catch (IOException e) {
             // rethrow as a RuntimeException to keep the signature backward compatible
-            throw new RuntimeException("Failed to read Heat template tree", e);
+            throw new SdcRuntimeException("Failed to read Heat template tree", e);
         }
     }
 
@@ -348,7 +339,7 @@ public class HeatToToscaUtil {
                                                                                 Object propertyValue) {
 
         Object entity;
-        Object translatedId;
+        Object translatedId = null;
 
         if (Objects.isNull(propertyValue)) {
             return Optional.empty();
@@ -362,19 +353,16 @@ public class HeatToToscaUtil {
             String key = entry.getKey();
             referenceType = getReferenceTypeFromAttachedResouce(key);
 
-      if (!FunctionTranslationFactory.getInstance(entry.getKey()).isPresent()) {
-        translatedId = null;
-      } else {
-        FunctionTranslator functionTranslator = new FunctionTranslator(getFunctionTranslateTo(null, null,
-                heatFileName, heatOrchestrationTemplate, context), null, entry.getValue(), null);
-        translatedId = FunctionTranslationFactory.getInstance(entry.getKey()).get()
-            .translateFunction(functionTranslator);
-      }
-      if (translatedId instanceof String
-          && !new FunctionTranslator().isResourceSupported((String) translatedId)) {
-        translatedId = null;
-      }
-
+            if (FunctionTranslationFactory.getInstance(entry.getKey()).isPresent()) {
+                FunctionTranslator functionTranslator = new FunctionTranslator(getFunctionTranslateTo(null, null,
+                        heatFileName, heatOrchestrationTemplate, context), null, entry.getValue(), null);
+                translatedId = FunctionTranslationFactory.getInstance(entry.getKey()).get()
+                        .translateFunction(functionTranslator);
+                if (translatedId instanceof String
+                        && !new FunctionTranslator().isResourceSupported((String) translatedId)) {
+                    translatedId = null;
+                }
+            }
         } else {
             translatedId = propertyValue;
             entity = propertyValue;
@@ -1412,71 +1400,4 @@ public class HeatToToscaUtil {
         return networkRole;
     }
 
-    public static Optional<String> evaluateNetworkRoleFromResourceId(String resourceId, String resourceType) {
-        Optional<PortType> portType = getPortType(resourceType);
-        if (portType.isPresent()) {
-            String portResourceIdRegex =
-                    PORT_RESOURCE_ID_REGEX_PREFIX + UNDERSCORE + WORDS_REGEX + UNDERSCORE + portType.get()
-                                                                                                    .getPortTypeName()
-                            + PORT_RESOURCE_ID_REGEX_SUFFIX;
-            String portIntResourceIdRegex = PORT_INT_RESOURCE_ID_REGEX_PREFIX + portType.get().getPortTypeName()
-                                                    + PORT_RESOURCE_ID_REGEX_SUFFIX;
-
-            String portNetworkRole = getNetworkRole(resourceId, portResourceIdRegex);
-            String portIntNetworkRole = getNetworkRole(resourceId, portIntResourceIdRegex);
-
-            return Optional.ofNullable(Objects.nonNull(portNetworkRole) ? portNetworkRole : portIntNetworkRole);
-        }
-        return Optional.empty();
-    }
-
-    private static Optional<PortType> getPortType(String resourceType) {
-        if (resourceType
-                    .equals(HeatResourcesTypes.CONTRAIL_V2_VIRTUAL_MACHINE_INTERFACE_RESOURCE_TYPE.getHeatResource())) {
-            return Optional.of(PortType.VMI);
-        } else if (resourceType.equals(HeatResourcesTypes.NEUTRON_PORT_RESOURCE_TYPE.getHeatResource())) {
-            return Optional.of(PortType.PORT);
-        }
-        return Optional.empty();
-    }
-
-    public static Optional<String> extractNetworkRoleFromSubInterfaceId(String resourceId, String resourceType) {
-        Optional<PortType> portType = getPortType(resourceType);
-        if (portType.isPresent()) {
-            String subInterfaceResourceIdRegex =
-                    SUB_INTERFACE_INT_RESOURCE_ID_REGEX_PREFIX + portType.get().getPortTypeName()
-                            + PORT_RESOURCE_ID_REGEX_SUFFIX;
-
-            return Optional.ofNullable(getNetworkRole(resourceId, subInterfaceResourceIdRegex));
-        }
-        return Optional.empty();
-    }
-
-    private enum PortType {
-        PORT("port"), VMI("vmi");
-
-        private String portTypeName;
-
-        PortType(String portTypeName) {
-            this.portTypeName = portTypeName;
-        }
-
-        public String getPortTypeName() {
-            return portTypeName;
-        }
-    }
-
-    private static String getNetworkRole(String portResourceId, String portIdRegex) {
-        Pattern pattern = Pattern.compile(portIdRegex);
-        Matcher matcher = pattern.matcher(portResourceId);
-        if (matcher.matches()) {
-            String networkRole = matcher.group(3);
-            //Assuming network role will not contain ONLY digits
-            if (!networkRole.matches("\\d+")) {
-                return matcher.group(3);
-            }
-        }
-        return null;
-    }
-
 }
index 4a0615d..ada0a2c 100644 (file)
@@ -18,24 +18,26 @@ package org.openecomp.sdc.translator.services.heattotosca.impl.resourcetranslati
 
 import com.google.common.collect.ArrayListMultimap;
 import com.google.common.collect.ListMultimap;
+
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 import org.openecomp.sdc.heat.datatypes.model.HeatResourcesTypes;
 import org.openecomp.sdc.heat.datatypes.model.Resource;
 import org.openecomp.sdc.heat.services.HeatConstants;
+import org.openecomp.sdc.heat.services.HeatResourceUtil;
 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.FilePortConsolidationData;
 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.PortTemplateConsolidationData;
 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.SubInterfaceTemplateConsolidationData;
 import org.openecomp.sdc.translator.services.heattotosca.HeatToToscaUtil;
 
-import java.io.IOException;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-
 public class ContrailV2VlanToInterfaceResourceConnectionTest extends BaseResourceTranslationTest {
 
   private static final String PORT_NODE_TEMPLATE_ID_FOR_ATTR_TEST = "vdbe_untr_vmi";
@@ -136,7 +138,7 @@ public class ContrailV2VlanToInterfaceResourceConnectionTest extends BaseResourc
         "vm_type_subint_networkrole_vmi");
 
     subInterfaceResourceIds.forEach(resourceId -> {
-      Optional<String> networkRole = HeatToToscaUtil.extractNetworkRoleFromSubInterfaceId(
+      Optional<String> networkRole = HeatResourceUtil.extractNetworkRoleFromSubInterfaceId(
         resourceId,
         HeatResourcesTypes.CONTRAIL_V2_VIRTUAL_MACHINE_INTERFACE_RESOURCE_TYPE.getHeatResource());
       Assert.assertTrue(networkRole.isPresent()
@@ -151,7 +153,7 @@ public class ContrailV2VlanToInterfaceResourceConnectionTest extends BaseResourc
         "vm_type_11_subint_11_vmi_11");
 
     subInterfaceResourceIds.forEach(resourceId -> {
-        Optional<String> networkRole = HeatToToscaUtil.extractNetworkRoleFromSubInterfaceId(
+        Optional<String> networkRole = HeatResourceUtil.extractNetworkRoleFromSubInterfaceId(
           resourceId,
           HeatResourcesTypes.CONTRAIL_V2_VIRTUAL_MACHINE_INTERFACE_RESOURCE_TYPE.getHeatResource());
         Assert.assertFalse(networkRole.isPresent());
index de4dc79..4347d6c 100644 (file)
@@ -1,5 +1,17 @@
 package org.openecomp.sdc.validation.impl.validators.namingconvention;
 
+import static org.openecomp.sdc.heat.datatypes.model.HeatResourcesTypes.CONTRAIL_V2_VIRTUAL_MACHINE_INTERFACE_RESOURCE_TYPE;
+import static org.openecomp.sdc.heat.datatypes.model.HeatResourcesTypes.NEUTRON_PORT_RESOURCE_TYPE;
+import static org.openecomp.sdc.heat.datatypes.model.HeatResourcesTypes.NOVA_SERVER_RESOURCE_TYPE;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.Set;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
 import org.openecomp.core.validation.ErrorMessageCode;
 import org.openecomp.core.validation.errors.ErrorMessagesFormatBuilder;
 import org.openecomp.core.validation.types.GlobalValidationContext;
@@ -7,29 +19,12 @@ import org.openecomp.sdc.datatypes.error.ErrorLevel;
 import org.openecomp.sdc.heat.datatypes.DefinedHeatParameterTypes;
 import org.openecomp.sdc.heat.datatypes.model.Resource;
 import org.openecomp.sdc.heat.services.HeatConstants;
+import org.openecomp.sdc.heat.services.HeatResourceUtil;
 import org.openecomp.sdc.heat.services.HeatStructureUtil;
 import org.openecomp.sdc.validation.ResourceValidator;
 import org.openecomp.sdc.validation.ValidationContext;
 import org.openecomp.sdc.validation.type.NamingConventionValidationContext;
 
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Optional;
-import java.util.Set;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-
-import static org.openecomp.sdc.heat.datatypes.model.HeatResourcesTypes.CONTRAIL_V2_VIRTUAL_MACHINE_INTERFACE_RESOURCE_TYPE;
-import static org.openecomp.sdc.heat.datatypes.model.HeatResourcesTypes.NEUTRON_PORT_RESOURCE_TYPE;
-import static org.openecomp.sdc.heat.datatypes.model.HeatResourcesTypes.NOVA_SERVER_RESOURCE_TYPE;
-
-/**
- * @author KATYR
- * @since February 05, 2018
- */
-
 public class VirtualMachineInterfaceGuidelineValidator implements ResourceValidator {
   private static final ErrorMessageCode ERROR_CODE_VLAN_GUIDELINE1 = new ErrorMessageCode
       ("VlANG1");
@@ -37,8 +32,6 @@ public class VirtualMachineInterfaceGuidelineValidator implements ResourceValida
       ("VlANG2");
   private static final ErrorMessageCode ERROR_CODE_VLAN_GUIDELINE3 = new ErrorMessageCode
       ("VlANG3");
-  private static final String UNDERSCORE = "_";
-  private static final String VMI = "vmi";
 
 
   @Override
@@ -53,8 +46,7 @@ public class VirtualMachineInterfaceGuidelineValidator implements ResourceValida
             namingConventionValidationContext);
         validateSingleVirtualMachineInterfaceInFile(fileName, globalContext,
             namingConventionValidationContext);
-        validateNamingConvention(fileName, resourceEntry, globalContext
-        );
+        validateSubInterfaceNamingConvention(fileName, resourceEntry, globalContext);
       }
   }
 
@@ -63,32 +55,28 @@ public class VirtualMachineInterfaceGuidelineValidator implements ResourceValida
                                               GlobalValidationContext globalContext,
                                               NamingConventionValidationContext namingConventionValidationContext) {
 
-    Object refsPropertyValue = resourceEntry.getValue().getProperties()
-        .get(HeatConstants.VMI_REFS_PROPERTY_NAME);
+    Object refsPropertyValue = resourceEntry.getValue().getProperties().get(HeatConstants.VMI_REFS_PROPERTY_NAME);
     if (Objects.isNull(refsPropertyValue)) {
       addViolationToContext(fileName, globalContext, ErrorLevel.WARNING, ERROR_CODE_VLAN_GUIDELINE1,
-          Messages.VLAN_GUIDELINE_VALIDATION_NOT_MODELED_THROUGH_RESOURCE_GROUP,
-          resourceEntry.getKey());
+          Messages.VLAN_GUIDELINE_VALIDATION_NOT_MODELED_THROUGH_RESOURCE_GROUP, resourceEntry.getKey());
       return;
     }
-    final boolean modeledThroughResourceGroup =
-        isModeledThroughResourceGroup(fileName, globalContext,
-            namingConventionValidationContext,
-            refsPropertyValue);
+    final boolean modeledThroughResourceGroup = isModeledThroughResourceGroup(fileName, globalContext,
+            namingConventionValidationContext, refsPropertyValue);
     if (!modeledThroughResourceGroup) {
       addViolationToContext(fileName, globalContext, ErrorLevel.WARNING, ERROR_CODE_VLAN_GUIDELINE1,
-          Messages.VLAN_GUIDELINE_VALIDATION_NOT_MODELED_THROUGH_RESOURCE_GROUP,
-          resourceEntry.getKey());
+          Messages.VLAN_GUIDELINE_VALIDATION_NOT_MODELED_THROUGH_RESOURCE_GROUP, resourceEntry.getKey());
     }
 
   }
 
 
-  private void validateNamingConvention(String fileName, Map.Entry<String, Resource>
-      resourceEntry, GlobalValidationContext globalContext) {
+  private void validateSubInterfaceNamingConvention(String fileName, Map.Entry<String, Resource> resourceEntry,
+                                                    GlobalValidationContext globalContext) {
     final String resourceId = resourceEntry.getKey();
-    final String networkRole = extractNetworkRoleFromResourceId(resourceId);
-    if (Objects.isNull(networkRole)) {
+    final Optional<String> networkRole = HeatResourceUtil.extractNetworkRoleFromSubInterfaceId(resourceId, resourceEntry
+            .getValue().getType());
+    if (!networkRole.isPresent()) {
       addViolationToContext(fileName, globalContext, ErrorLevel.WARNING, ERROR_CODE_VLAN_GUIDELINE3,
           Messages.VLAN_GUIDELINE_VALIDATION_NAMING_CONVENTION, resourceId);
     }
@@ -115,8 +103,8 @@ public class VirtualMachineInterfaceGuidelineValidator implements ResourceValida
 
   private boolean fileContainsNonVlanResources(Map<String, Resource> resources,
                                                Set<String> forbiddenTypes) {
-    for (String resourceName : resources.keySet()) {
-      if (forbiddenTypes.contains(resources.get(resourceName).getType())) {
+    for (Map.Entry<String, Resource> resourceEntry : resources.entrySet()) {
+      if (forbiddenTypes.contains(resourceEntry.getValue().getType())) {
         return true;
       }
     }
@@ -125,8 +113,8 @@ public class VirtualMachineInterfaceGuidelineValidator implements ResourceValida
 
   private int countVlanResources(Map<String, Resource> resources) {
     int numVlanResources = 0;
-    for (String resourceName : resources.keySet()) {
-      final String resourceType = resources.get(resourceName).getType();
+    for (Map.Entry<String, Resource> resourceEntry : resources.entrySet()) {
+      final String resourceType = resourceEntry.getValue().getType();
       if (resourceType.equals
           (CONTRAIL_V2_VIRTUAL_MACHINE_INTERFACE_RESOURCE_TYPE.getHeatResource())) {
         numVlanResources++;
@@ -149,8 +137,7 @@ public class VirtualMachineInterfaceGuidelineValidator implements ResourceValida
 
 
   private Optional<Object> getVlanTagPropertyValue(Resource resource) {
-    Object vmiProperties = resource.getProperties()
-        .get(HeatConstants.VMI_PROPERTIES_PROPERTY_NAME);
+    Object vmiProperties = resource.getProperties().get(HeatConstants.VMI_PROPERTIES_PROPERTY_NAME);
     if (Objects.nonNull(vmiProperties) && vmiProperties instanceof Map) {
       return Optional.ofNullable(((Map) vmiProperties)
           .get(HeatConstants.VMI_SUB_INTERFACE_VLAN_TAG_PROPERTY_NAME));
@@ -205,19 +192,6 @@ public class VirtualMachineInterfaceGuidelineValidator implements ResourceValida
   }
 
 
-  private static String extractNetworkRoleFromResourceId(String resourceId) {
-
-    List<String> splitSubInterfaceResourceId =
-        Arrays.asList(resourceId.toLowerCase().split(UNDERSCORE));
-
-    int vmiIndex = splitSubInterfaceResourceId.indexOf(VMI);
-    if (vmiIndex > 0) {
-      return splitSubInterfaceResourceId.get(vmiIndex - 1);
-    }
-
-    return null;
-  }
-
 
   private enum Messages {
     VLAN_GUIDELINE_VALIDATION_NOT_MODELED_THROUGH_RESOURCE_GROUP("VLAN Resource will not be " +
@@ -225,9 +199,7 @@ public class VirtualMachineInterfaceGuidelineValidator implements ResourceValida
     VLAN_GUIDELINE_VALIDATION_SINGLE_VLAN("There should not be any Compute Server Node, Port, " +
         "Parent Port in nested file [%s]"),
     VLAN_GUIDELINE_VALIDATION_NAMING_CONVENTION(
-        "Network role associated with VLAN Sub-interface " +
-            "id" +
-            "[%s] is not following the naming convention");
+        "Network role associated with VLAN Sub-interface id[%s] is not following the naming convention");
 
     private final String errorMessage;
 
index 407adae..4d3718e 100644 (file)
@@ -1,5 +1,7 @@
 package org.openecomp.sdc.validation.impl.validators.namingconvention;
 
+import java.util.Map;
+
 import org.openecomp.core.validation.types.MessageContainer;
 import org.openecomp.sdc.heat.datatypes.model.HeatResourcesTypes;
 import org.openecomp.sdc.validation.impl.validators.NamingConventionGuideLineValidator;
@@ -7,8 +9,6 @@ import org.openecomp.sdc.validation.util.ValidationTestUtil;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
-import java.util.Map;
-
 public class VirtualMachineInterfaceGuidelineValidatorTest {
   private static final String PATH =
       "/org/openecomp/validation/validators/guideLineValidator/vlan_validation/";
@@ -47,7 +47,7 @@ public class VirtualMachineInterfaceGuidelineValidatorTest {
     Assert.assertEquals(
         messages.get("nested.yml").getErrorMessageList().get(0).getMessage(),
         "WARNING: [VlANG1]: VLAN Resource will not be translated as the VLAN Sub-interface " +
-            "[template_vmi_Vlan_2] is not modeled as resource group");
+            "[vdbe_0_subint_untr_vmi_0] is not modeled as resource group");
   }
 
   @Test
@@ -68,7 +68,7 @@ public class VirtualMachineInterfaceGuidelineValidatorTest {
     Assert.assertEquals(
         messages.get("nested.yml").getErrorMessageList().get(0).getMessage(),
         "WARNING: [VlANG1]: VLAN Resource will not be translated as the VLAN Sub-interface " +
-            "[template_vmi_Vlan_2] is not modeled as resource group");
+            "[vdbe_0_subint_untr_vmi_0] is not modeled as resource group");
   }
 
   @Test
@@ -89,7 +89,7 @@ public class VirtualMachineInterfaceGuidelineValidatorTest {
     Assert.assertEquals(
         messages.get("nested.yml").getErrorMessageList().get(0).getMessage(),
         "WARNING: [VlANG1]: VLAN Resource will not be translated as the VLAN Sub-interface " +
-            "[template_vmi_Vlan_2] is not modeled as resource group");
+            "[vdbe_0_subint_untr_vmi_0] is not modeled as resource group");
   }
 
 
index 0975493..785bb79 100644 (file)
@@ -29,7 +29,7 @@ parameters:
 resources:
 
   
-  template_vmi_Vlan_2:
+  vdbe_0_subint_untr_vmi_0:
     type: OS::ContrailV2::VirtualMachineInterface
     properties:
       name:
@@ -72,7 +72,7 @@ resources:
       virtual_network_refs: [{ get_param: net2 },{ get_param: net1 }]
       virtual_machine_interface_refs: [ { get_param: p1 }]
 
-  template_vmi_Vlan_3_arrayParameter:
+  vdbe_0_subint_untr_vmi_1:
     type: OS::ContrailV2::VirtualMachineInterface
     properties:
       name: