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;
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) {
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,
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();
}
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);
}
*/
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);
;
}
@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);
}
@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);