Adding error codes to HEAT Validator 75/24675/2
authorAbhai Singh <Abhai.Singh@amdocs.com>
Tue, 21 Nov 2017 06:21:29 +0000 (11:51 +0530)
committerAvi Gaffa <avi.gaffa@amdocs.com>
Wed, 22 Nov 2017 09:39:00 +0000 (09:39 +0000)
Added error code to ContrailValidator

Issue-Id :SDC-572

Change-Id: Ib0cb270d9c6222677373b2660c77cdd1aaa15367
Signed-off-by: Abhai Singh <Abhai.Singh@amdocs.com>
openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/main/java/org/openecomp/sdc/validation/impl/validators/ContrailValidator.java
openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/java/org/openecomp/sdc/validation/impl/validators/ContrailValidatorTest.java
openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/contrailvalidatorresources/invalidHeatStructure/MANIFEST.json [new file with mode: 0644]
openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/contrailvalidatorresources/invalidHeatStructure/first.yaml [new file with mode: 0644]
openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/contrailvalidatorresources/invalidHeatStructureParsingError/MANIFEST.json [new file with mode: 0644]
openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/contrailvalidatorresources/invalidHeatStructureParsingError/first.yaml [new file with mode: 0644]
openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/contrailvalidatorresources/parseException/MANIFEST.json [new file with mode: 0644]
openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/contrailvalidatorresources/parseException/first.yaml [new file with mode: 0644]
openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/contrailvalidatorresources/parseException/second.yaml [new file with mode: 0644]

index 7d90726..5045c80 100644 (file)
 package org.openecomp.sdc.validation.impl.validators;
 
 import org.apache.commons.collections4.MapUtils;
+import org.openecomp.core.validation.ErrorMessageCode;
 import org.openecomp.sdc.tosca.services.YamlUtil;
-import org.openecomp.sdc.validation.Validator;
 import org.openecomp.core.validation.errors.ErrorMessagesFormatBuilder;
+import org.openecomp.sdc.validation.Validator;
 import org.openecomp.core.validation.types.GlobalValidationContext;
 import org.openecomp.sdc.common.errors.Messages;
 import org.openecomp.sdc.datatypes.error.ErrorLevel;
@@ -50,6 +51,10 @@ import java.util.Optional;
 public class ContrailValidator implements Validator {
   public static final MdcDataDebugMessage mdcDataDebugMessage = new MdcDataDebugMessage();
   protected static Logger logger = (Logger) LoggerFactory.getLogger(ContrailValidator.class);
+  private static final ErrorMessageCode ERROR_CODE_CTL_1 = new ErrorMessageCode("CTL1");
+  private static final ErrorMessageCode ERROR_CODE_CTL_2 = new ErrorMessageCode("CTL2");
+  private static final ErrorMessageCode ERROR_CODE_CTL_3 = new ErrorMessageCode("CTL3");
+  private static final ErrorMessageCode ERROR_CODE_CTL_4 = new ErrorMessageCode("CTL4");
 
   @Override
   public void validate(GlobalValidationContext globalContext) {
@@ -113,7 +118,7 @@ public class ContrailValidator implements Validator {
       globalContext.addMessage(
           contrailResourcesMappingTo.getContrailV1Resources().keySet().iterator().next(),
           ErrorLevel.WARNING, ErrorMessagesFormatBuilder.getErrorWithParameters(
-              Messages.MERGE_OF_CONTRAIL2_AND_CONTRAIL3_RESOURCES.getErrorMessage(),
+                  ERROR_CODE_CTL_2, Messages.MERGE_OF_CONTRAIL2_AND_CONTRAIL3_RESOURCES.getErrorMessage(),
               contrailResourcesMappingTo.fetchContrailV1Resources(),
               contrailResourcesMappingTo.fetchContrailV2Resources()),
           LoggerTragetServiceName.MERGE_OF_CONTRAIL_2_AND_3,
@@ -128,8 +133,9 @@ public class ContrailValidator implements Validator {
     Optional<InputStream> fileContent = globalContext.getFileContent(fileName);
     if (!fileContent.isPresent()) {
       globalContext.addMessage(fileName, ErrorLevel.ERROR, ErrorMessagesFormatBuilder
-              .getErrorWithParameters(Messages.INVALID_HEAT_FORMAT_REASON.getErrorMessage(),
-                  "The file '" + fileName + "' has no content"),
+          .getErrorWithParameters(ERROR_CODE_CTL_1, Messages.INVALID_HEAT_FORMAT_REASON
+                  .getErrorMessage(),
+          "The file '" + fileName + "' has no content"),
           LoggerTragetServiceName.VALIDATE_HEAT_FORMAT, LoggerErrorDescription.INVALID_HEAT_FORMAT);
       return Optional.empty();
     }
@@ -175,28 +181,33 @@ public class ContrailValidator implements Validator {
                                                      GlobalValidationContext globalContext) {
 
     mdcDataDebugMessage.debugEntryMessage("file", fileName);
-
+    globalContext.setMessageCode(ERROR_CODE_CTL_4);
     HeatOrchestrationTemplate heatOrchestrationTemplate =
         ValidationUtil.checkHeatOrchestrationPreCondition(fileName, globalContext);
 
     if (heatOrchestrationTemplate == null) {
       return;
     }
+    validateResourcePrefix(fileName, globalContext, heatOrchestrationTemplate);
+    mdcDataDebugMessage.debugExitMessage("file", fileName);
+  }
 
-    Map<String, Resource> resourcesMap = heatOrchestrationTemplate.getResources();
+  private void validateResourcePrefix(String fileName, GlobalValidationContext globalContext,
+                                      HeatOrchestrationTemplate heatOrchestrationTemplate) {
 
-    if( ! MapUtils.isEmpty(resourcesMap)) {
+    mdcDataDebugMessage.debugEntryMessage("file", fileName);
+    Map<String, Resource> resourcesMap = heatOrchestrationTemplate.getResources();
+    if(!MapUtils.isEmpty(resourcesMap)) {
       for (Map.Entry<String, Resource> resourceEntry : resourcesMap.entrySet()) {
         String type = resourceEntry.getValue().getType();
         if (Objects.nonNull(type) && type.startsWith(HeatConstants.CONTRAIL_RESOURCE_PREFIX)) {
           globalContext.addMessage(fileName, ErrorLevel.WARNING, ErrorMessagesFormatBuilder
-                  .getErrorWithParameters(Messages.CONTRAIL_2_IN_USE.getErrorMessage(),
-                      resourceEntry.getKey()), LoggerTragetServiceName.CONTRAIL_2_IN_USE,
+              .getErrorWithParameters(ERROR_CODE_CTL_3, Messages.CONTRAIL_2_IN_USE.getErrorMessage(),
+              resourceEntry.getKey()), LoggerTragetServiceName.CONTRAIL_2_IN_USE,
               LoggerErrorDescription.CONTRAIL_2_IN_USE);
         }
       }
     }
-
     mdcDataDebugMessage.debugExitMessage("file", fileName);
   }
 
index 30b7f68..f921102 100644 (file)
@@ -36,32 +36,58 @@ import java.util.Map;
  */
 public class ContrailValidatorTest {
 
+  private static final String RESOURCE_PATH = "/org/openecomp/validation/validators/contrailvalidatorresources";
   private Validator validator = new ContrailValidator();
 
   @Test
   public void testWarningMessageExistWhenConrailV1AndV2ResourcesCollidesInSameHeatFile() {
     Map<String, MessageContainer> messages = ValidationTestUtil.testValidator(validator,
-        "/org/openecomp/validation/validators/contrailvalidatorresources/collidesinsameheatfile/");
+        RESOURCE_PATH + "/collidesinsameheatfile/");
     validateMessage(messages,
-        "WARNING: HEAT Package includes both Contrail 2 and Contrail 3 resources. Contrail 2 resources can be found in  file 'first.yaml' , resources :'jsa_net1' . Contrail 3 resources can be found in  file 'first.yaml' , resources :'jsa_net2' ",
+        "WARNING: [CTL2]: HEAT Package includes both Contrail 2 and Contrail 3 " +
+            "resources. Contrail 2 resources can be found in  file 'first.yaml' , resources :" +
+            "'jsa_net1' . Contrail 3 resources can be found in  file 'first.yaml' , resources :" +
+            "'jsa_net2' ",
         "first.yaml", 2);
   }
 
+  @Test
+  public void testParseException(){
+    Map<String, MessageContainer> messages = ValidationTestUtil.testValidator(validator,
+        RESOURCE_PATH + "/parseException/");
+    validateMessage(messages,
+        "ERROR: [CTL4]: Invalid HEAT format problem - [while scanning for the next " +
+            "token\n" + "found character '\\t(TAB)' that cannot start any token. " +
+            "(Do not use \\t(TAB) for indentation)\n" +
+            " in 'reader', line 10, column 1:\n" +
+            "    \t\t\tresources:\n" +
+            "    ^\n" +
+            "]",
+        "first.yaml", 1);
+
+  }
+
   @Test
   public void testWarningMessageExistWhenConrailV1AndV2ResourcesCollidesInDifferentHeatFiles() {
     Map<String, MessageContainer> messages = ValidationTestUtil.testValidator(validator,
-        "/org/openecomp/validation/validators/contrailvalidatorresources/collidesindifferentheatfiles/");
+        RESOURCE_PATH + "/collidesindifferentheatfiles/");
     validateMessage(messages,
-        "WARNING: HEAT Package includes both Contrail 2 and Contrail 3 resources. Contrail 2 resources can be found in  file 'first.yaml' , resources :'jsa_net1', 'jsa_net3' . Contrail 3 resources can be found in  file 'second.yaml' , resources :'jsa_net2', 'jsa_net4',  file 'first.yaml' , resources :'jsa_net5' ",
+        "WARNING: [CTL2]: HEAT Package includes both Contrail 2 and Contrail 3 " +
+            "resources. Contrail 2 resources can be found in  file 'first.yaml' , resources :" +
+            "'jsa_net1', 'jsa_net3' . Contrail 3 resources can be found in  file 'second.yaml' , " +
+            "resources :'jsa_net2', 'jsa_net4',  file 'first.yaml' , resources :'jsa_net5' ",
         "first.yaml", 3);
   }
 
   @Test
   public void testWarningMessageNotExistWhenConrailV1AndV2ResourcesCollidesInNonHeatFile() {
     Map<String, MessageContainer> messages = ValidationTestUtil.testValidator(validator,
-        "/org/openecomp/validation/validators/contrailvalidatorresources/collidesinnontheatfiles/");
+        RESOURCE_PATH + "/collidesinnontheatfiles/");
     validateMessage(messages,
-        "WARNING: HEAT Package includes both Contrail 2 and Contrail 3 resources. Contrail 2 resources can be found in  file 'first.yaml' , resources :'jsa_net1' . Contrail 3 resources can be found in  file 'second.yaml' , resources :'jsa_net2' ",
+        "WARNING: [CTL2]: HEAT Package includes both Contrail 2 and Contrail 3 " +
+            "resources. Contrail 2 resources can be found in  file 'first.yaml' , resources :" +
+            "'jsa_net1' . Contrail 3 resources can be found in  file 'second.yaml' , " +
+            "resources :'jsa_net2' ",
         "first.yaml", 2);
     ;
   }
@@ -69,9 +95,10 @@ public class ContrailValidatorTest {
   @Test
   public void testWarningMessageNotExistWhenOnlyConrailV1Resources() {
     Map<String, MessageContainer> messages = ValidationTestUtil.testValidator(validator,
-        "/org/openecomp/validation/validators/contrailvalidatorresources/notcollides/");
+        RESOURCE_PATH + "/notcollides/");
     validateMessage(messages,
-        "WARNING: Contrail 2.x deprecated resource is in use, Resource ID [jsa_net1]", "first.yaml",
+        "WARNING: [CTL3]: Contrail 2.x deprecated resource is in use, " +
+            "Resource ID [jsa_net1]", "first.yaml",
         2);
   }
 
@@ -79,13 +106,34 @@ public class ContrailValidatorTest {
   @Test
   public void testWarningMessageOnResourceWithContrailType() {
     Map<String, MessageContainer> messages = ValidationTestUtil.testValidator(validator,
-        "/org/openecomp/validation/validators/contrailvalidatorresources/validatenocontrailresource/");
+        RESOURCE_PATH + "/validatenocontrailresource/");
     validateMessage(messages,
-        "WARNING: Contrail 2.x deprecated resource is in use, Resource ID [template_NetworkPolicy]",
+        "WARNING: [CTL3]: Contrail 2.x deprecated resource is in use, " +
+            "Resource ID [template_NetworkPolicy]",
         "first.yaml", 1);
-    ;
   }
 
+  @Test
+  public void testInvalidHeatStructure(){
+    Map<String, MessageContainer> messages = ValidationTestUtil.testValidator(validator,
+        RESOURCE_PATH + "/invalidHeatStructure/");
+    validateMessage(messages,
+        "ERROR: [CTL1]: Invalid HEAT format problem - [The file 'first.yaml' " +
+            "has no content]",
+        "first.yaml", 1);
+  }
+
+  @Test
+  public void testInvalidHeatStructuredueToParsingError(){
+    Map<String, MessageContainer> messages = ValidationTestUtil.testValidator(validator,
+        RESOURCE_PATH + "/invalidHeatStructure/");
+    validateMessage(messages,
+        "ERROR: [CTL1]: Invalid HEAT format problem - [The file 'first.yaml' " +
+            "has no content]",
+        "first.yaml", 1);
+  }
+
+
   private void validateMessage(Map<String, MessageContainer> messages, String expectedMessage,
                                String fileNameWithErrorToCheck, int sizeOfFileMessageList) {
     Assert.assertEquals(messages.size(), 1);
diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/contrailvalidatorresources/invalidHeatStructure/MANIFEST.json b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/contrailvalidatorresources/invalidHeatStructure/MANIFEST.json
new file mode 100644 (file)
index 0000000..0e8bebb
--- /dev/null
@@ -0,0 +1,12 @@
+{
+  "name": "validTest",
+  "description": "Valid Test",
+  "version": "1610",
+  "data": [
+    {
+      "file": "first.yaml",
+      "type": "HEAT",
+      "isBase": true
+    }
+  ]
+}
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/contrailvalidatorresources/invalidHeatStructure/first.yaml b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/contrailvalidatorresources/invalidHeatStructure/first.yaml
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/contrailvalidatorresources/invalidHeatStructureParsingError/MANIFEST.json b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/contrailvalidatorresources/invalidHeatStructureParsingError/MANIFEST.json
new file mode 100644 (file)
index 0000000..0e8bebb
--- /dev/null
@@ -0,0 +1,12 @@
+{
+  "name": "validTest",
+  "description": "Valid Test",
+  "version": "1610",
+  "data": [
+    {
+      "file": "first.yaml",
+      "type": "HEAT",
+      "isBase": true
+    }
+  ]
+}
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/contrailvalidatorresources/invalidHeatStructureParsingError/first.yaml b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/contrailvalidatorresources/invalidHeatStructureParsingError/first.yaml
new file mode 100644 (file)
index 0000000..a50ca86
--- /dev/null
@@ -0,0 +1,18 @@
+heat_template_version: 2013-05-23a
+description: cmaui server template for vMMSC
+
+parameters:
+  nems_traffic_name:
+    description: dummy
+    type: string
+
+resources:
+  jsa_net1:
+      type: OS::Contrail::VirtualNetwork
+      proaperties:
+        name: {get_param: nems_traffic_name}
+  jsa_net2:
+      taype: OS::ContrailV2::VirtualNetwork
+      propaerties:
+        name: {get_param: nems_traffic_name}
+
diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/contrailvalidatorresources/parseException/MANIFEST.json b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/contrailvalidatorresources/parseException/MANIFEST.json
new file mode 100644 (file)
index 0000000..15650ae
--- /dev/null
@@ -0,0 +1,17 @@
+{
+  "name": "validTest",
+  "description": "Valid Test",
+  "version": "1610",
+  "data": [
+    {
+      "file": "first.yaml",
+      "type": "HEAT",
+      "isBase": true
+    },
+    {
+      "file": "second.yaml",
+      "type": "HEAT",
+      "isBase": false
+    }
+  ]
+}
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/contrailvalidatorresources/parseException/first.yaml b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/contrailvalidatorresources/parseException/first.yaml
new file mode 100644 (file)
index 0000000..24fe191
--- /dev/null
@@ -0,0 +1,22 @@
+heat_template_version: 2013-05-23
+
+description: cmaui server template for vMMSC
+
+parameters:
+  nems_traffic_name:
+    description: dummy
+    type: string
+
+                       resources:
+  jsa_net1:
+      type: OS::Contrail::VirtualNetwork
+      properties:
+        name: {get_param: }
+  jsa_net3:
+      type: OS::Contrail::VirtualNetwork
+      properties:
+        name: {get_param: nems_traffic_name}
+  jsa_net5:
+      type: OS::ContrailV2::VirtualNetwork
+      properties:
+        name: {get_param: nems_traffic_name}
diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/contrailvalidatorresources/parseException/second.yaml b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/contrailvalidatorresources/parseException/second.yaml
new file mode 100644 (file)
index 0000000..f8cadfe
--- /dev/null
@@ -0,0 +1,19 @@
+heat_template_version: 2013-05-23
+
+description: cmaui server template for vMMSC
+
+parameters:
+  nems_traffic_name:
+    description: dummy
+    type: string
+
+resources:
+  jsa_net2:
+      type: OS::ContrailV2::VirtualNetwork
+      properties:
+        name: {get_param: nems_traffic_name}
+  jsa_net4:
+      type: OS::ContrailV2::VirtualNetwork
+      properties:
+        name: {get_param: nems_traffic_name}
+