diff options
author | andre.schmid <andre.schmid@est.tech> | 2019-07-31 13:40:17 +0000 |
---|---|---|
committer | andre.schmid <andre.schmid@est.tech> | 2019-07-31 13:40:17 +0000 |
commit | 527fe8bdac1f1c7c59738c598996dc8c842a22e3 (patch) | |
tree | 815745b7dea0a0ffba8eccc2ef9dca7deb9b914e | |
parent | d0d5690f13b9c794044bfe6bd7ac87557dd3dcea (diff) |
Fix one validation error that was going to stdout instead of normal
handling through ThreadsLocalHolder singleton.
Issue-ID: SDC-2344
Change-Id: I34827aa1314f2b65eff7b92fce7890eeddbca0e6
Signed-off-by: andre.schmid <andre.schmid@est.tech>
-rw-r--r-- | pom.xml | 13 | ||||
-rw-r--r-- | src/main/java/org/onap/sdc/toscaparser/api/TopologyTemplate.java | 5 | ||||
-rw-r--r-- | src/main/java/org/onap/sdc/toscaparser/api/common/JToscaValidationIssue.java | 20 | ||||
-rw-r--r-- | src/test/java/org/onap/sdc/toscaparser/api/JToscaMetadataParse.java | 58 | ||||
-rw-r--r-- | src/test/resources/csars/tmpCSAR_Huawei_vSPGW_fixed.csar | bin | 43627 -> 45116 bytes | |||
-rw-r--r-- | src/test/resources/csars/tmpCSAR_Huawei_vSPGW_without_required_inputs.csar | bin | 0 -> 43627 bytes |
6 files changed, 89 insertions, 7 deletions
@@ -23,6 +23,7 @@ <!-- ==================== --> <!-- Versions --> + <hamcrest.version>2.1</hamcrest.version> <!-- ==================== --> <!-- Global project version --> @@ -65,6 +66,18 @@ <version>1.1.2</version> <scope>test</scope> </dependency> --> <dependency> + <groupId>org.hamcrest</groupId> + <artifactId>hamcrest</artifactId> + <version>${hamcrest.version}</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.hamcrest</groupId> + <artifactId>hamcrest-library</artifactId> + <version>${hamcrest.version}</version> + <scope>test</scope> + </dependency> + <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> diff --git a/src/main/java/org/onap/sdc/toscaparser/api/TopologyTemplate.java b/src/main/java/org/onap/sdc/toscaparser/api/TopologyTemplate.java index 2160527..efc6948 100644 --- a/src/main/java/org/onap/sdc/toscaparser/api/TopologyTemplate.java +++ b/src/main/java/org/onap/sdc/toscaparser/api/TopologyTemplate.java @@ -119,7 +119,10 @@ public class TopologyTemplate { } if ((parsedParams != null && parsedParams.get(input.getName()) == null || parsedParams == null) && input.isRequired() && input.getDefault() == null) { - System.out.format("Log warning: The required parameter \"%s\" is not provided\n", input.getName()); + ThreadLocalsHolder.getCollector().appendValidationIssue(new JToscaValidationIssue("JE003", + String.format("MissingRequiredFieldError: The required input \"%s\" was not provided" + , input.getName())) + ); } alInputs.add(input); } diff --git a/src/main/java/org/onap/sdc/toscaparser/api/common/JToscaValidationIssue.java b/src/main/java/org/onap/sdc/toscaparser/api/common/JToscaValidationIssue.java index 19c9583..cd5cbc5 100644 --- a/src/main/java/org/onap/sdc/toscaparser/api/common/JToscaValidationIssue.java +++ b/src/main/java/org/onap/sdc/toscaparser/api/common/JToscaValidationIssue.java @@ -20,6 +20,8 @@ package org.onap.sdc.toscaparser.api.common; +import java.util.Objects; + public class JToscaValidationIssue { private String code; @@ -52,4 +54,22 @@ public class JToscaValidationIssue { public String toString() { return "JToscaError [code=" + code + ", message=" + message + "]"; } + + @Override + public boolean equals(final Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + final JToscaValidationIssue that = (JToscaValidationIssue) o; + return Objects.equals(code, that.code) && + Objects.equals(message, that.message); + } + + @Override + public int hashCode() { + return Objects.hash(code, message); + } } diff --git a/src/test/java/org/onap/sdc/toscaparser/api/JToscaMetadataParse.java b/src/test/java/org/onap/sdc/toscaparser/api/JToscaMetadataParse.java index 3f5290d..2ec41b2 100644 --- a/src/test/java/org/onap/sdc/toscaparser/api/JToscaMetadataParse.java +++ b/src/test/java/org/onap/sdc/toscaparser/api/JToscaMetadataParse.java @@ -20,15 +20,23 @@ package org.onap.sdc.toscaparser.api; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.containsInAnyOrder; +import static org.hamcrest.Matchers.hasSize; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.io.File; +import java.net.URL; +import java.util.ArrayList; +import java.util.Collection; import java.util.LinkedHashMap; +import java.util.Map; import org.junit.Test; import org.onap.sdc.toscaparser.api.common.JToscaException; +import org.onap.sdc.toscaparser.api.common.JToscaValidationIssue; import org.onap.sdc.toscaparser.api.utils.JToscaErrorCodes; import org.onap.sdc.toscaparser.api.utils.ThreadLocalsHolder; @@ -36,8 +44,7 @@ public class JToscaMetadataParse { @Test public void testMetadataParsedCorrectly() throws JToscaException { - String fileStr = JToscaMetadataParse.class.getClassLoader().getResource("csars/csar_hello_world.csar").getFile(); - File file = new File(fileStr); + final File file = loadCsar("csars/csar_hello_world.csar"); ToscaTemplate toscaTemplate = new ToscaTemplate(file.getAbsolutePath(), null, true, null); LinkedHashMap<String, Object> metadataProperties = toscaTemplate.getMetaProperties("TOSCA.meta"); assertNotNull(metadataProperties); @@ -48,17 +55,49 @@ public class JToscaMetadataParse { @Test public void noWarningsAfterParse() throws JToscaException { - String fileStr = JToscaMetadataParse.class.getClassLoader().getResource("csars/tmpCSAR_Huawei_vSPGW_fixed.csar").getFile(); - File file = new File(fileStr); + final File file = loadCsar("csars/tmpCSAR_Huawei_vSPGW_fixed.csar"); ToscaTemplate toscaTemplate = new ToscaTemplate(file.getAbsolutePath(), null, true, null); int validationIssuesCaught = ThreadLocalsHolder.getCollector().validationIssuesCaught(); assertTrue(validationIssuesCaught == 0); } @Test + public void requiredInputErrorsAfterParse() throws JToscaException { + final File file = loadCsar("csars/tmpCSAR_Huawei_vSPGW_without_required_inputs.csar"); + new ToscaTemplate(file.getAbsolutePath(), null, true, null); + + final Map<String, JToscaValidationIssue> validationIssues = ThreadLocalsHolder.getCollector() + .getValidationIssues(); + final Collection<JToscaValidationIssue> actualValidationIssueList = validationIssues.values(); + + final Collection<JToscaValidationIssue> expectedValidationIssueList = new ArrayList<>(); + final String errorCode = "JE003"; + final String errorFormat = "MissingRequiredFieldError: The required input \"%s\" was not provided"; + expectedValidationIssueList.add(new JToscaValidationIssue(errorCode + , String.format(errorFormat, "nf_naming_code"))); + expectedValidationIssueList.add(new JToscaValidationIssue(errorCode + , String.format(errorFormat, "nf_type"))); + expectedValidationIssueList.add(new JToscaValidationIssue(errorCode + , String.format(errorFormat, "nf_role"))); + expectedValidationIssueList.add(new JToscaValidationIssue(errorCode + , String.format(errorFormat, "min_instances"))); + expectedValidationIssueList.add(new JToscaValidationIssue(errorCode + , String.format(errorFormat, "max_instances"))); + expectedValidationIssueList.add(new JToscaValidationIssue(errorCode + , String.format(errorFormat, "nf_function"))); + + assertThat("The actual and the expected validation issue lists should have the same size" + , actualValidationIssueList, hasSize(expectedValidationIssueList.size()) + ); + + assertThat("The actual and the expected validation issue lists should be the same" + , actualValidationIssueList, containsInAnyOrder(expectedValidationIssueList.toArray(new JToscaValidationIssue[0])) + ); + } + + @Test public void testEmptyCsar() throws JToscaException { - String fileStr = JToscaMetadataParse.class.getClassLoader().getResource("csars/emptyCsar.csar").getFile(); - File file = new File(fileStr); + final File file = loadCsar("csars/emptyCsar.csar"); try { ToscaTemplate toscaTemplate = new ToscaTemplate(file.getAbsolutePath(), null, true, null); } catch (JToscaException e) { @@ -78,4 +117,11 @@ public class JToscaMetadataParse { assertTrue(e.getCode().equals(JToscaErrorCodes.PATH_NOT_VALID.getValue())); } } + + private File loadCsar(final String csarFilePath) { + final URL resourceUrl = JToscaMetadataParse.class.getClassLoader().getResource(csarFilePath); + assertNotNull(String.format("Could not load CSAR file '%s'", csarFilePath), resourceUrl); + + return new File(resourceUrl.getFile()); + } } diff --git a/src/test/resources/csars/tmpCSAR_Huawei_vSPGW_fixed.csar b/src/test/resources/csars/tmpCSAR_Huawei_vSPGW_fixed.csar Binary files differindex 194fabb..9dc29c7 100644 --- a/src/test/resources/csars/tmpCSAR_Huawei_vSPGW_fixed.csar +++ b/src/test/resources/csars/tmpCSAR_Huawei_vSPGW_fixed.csar diff --git a/src/test/resources/csars/tmpCSAR_Huawei_vSPGW_without_required_inputs.csar b/src/test/resources/csars/tmpCSAR_Huawei_vSPGW_without_required_inputs.csar Binary files differnew file mode 100644 index 0000000..194fabb --- /dev/null +++ b/src/test/resources/csars/tmpCSAR_Huawei_vSPGW_without_required_inputs.csar |