From ca4c0d939cdb3bcabec2bef0636bee4aa403cee3 Mon Sep 17 00:00:00 2001 From: Adam Wudzinski Date: Fri, 18 Sep 2020 13:50:33 +0200 Subject: Add warnings field to oclip json response Add new field called "warnings" to oclip json response. All ignored errors are now reported as warnings. Signed-off-by: Adam Wudzinski Issue-ID: VNFSDK-596 Change-Id: Ifebfb09b54156f0566858e942d73a7a5ef34721f --- .../java/org/onap/cvc/csar/VTPValidateCSAR.java | 75 +++++++++++++++------ .../java/org/onap/cvc/csar/CsarValidatorTest.java | 21 ++++++ .../pnf/r130206/csar-option1-warning-2.csar | Bin 0 -> 8624 bytes 3 files changed, 76 insertions(+), 20 deletions(-) create mode 100644 csarvalidation/src/test/resources/pnf/r130206/csar-option1-warning-2.csar diff --git a/csarvalidation/src/main/java/org/onap/cvc/csar/VTPValidateCSAR.java b/csarvalidation/src/main/java/org/onap/cvc/csar/VTPValidateCSAR.java index 95ad56f..74697f1 100644 --- a/csarvalidation/src/main/java/org/onap/cvc/csar/VTPValidateCSAR.java +++ b/csarvalidation/src/main/java/org/onap/cvc/csar/VTPValidateCSAR.java @@ -16,11 +16,12 @@ package org.onap.cvc.csar; +import com.google.gson.Gson; import java.util.ArrayList; +import java.util.Collections; import java.util.Date; import java.util.List; import java.util.Properties; - import org.onap.cli.fw.cmd.OnapCommand; import org.onap.cli.fw.error.OnapCommandException; import org.onap.cli.fw.error.OnapCommandExecutionFailed; @@ -33,19 +34,20 @@ import org.onap.cvc.csar.CSARArchive.CSARError; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.google.gson.Gson; - /** * Validates CSAR */ @OnapCommandSchema(schema = "vtp-validate-csar.yaml") public class VTPValidateCSAR extends OnapCommand { + private static Gson gson = new Gson(); private static final Logger LOG = LoggerFactory.getLogger(VTPValidateCSAR.class); public static final String PNF_ATTRIBUTE_NAME = "pnf"; public static class CSARValidation { + public static class VNF { + private String name; private String vendor; private String version; @@ -55,30 +57,39 @@ public class VTPValidateCSAR extends OnapCommand { public String getName() { return name; } + public void setName(String name) { this.name = name; } + public String getVendor() { return vendor; } + public void setVendor(String vendor) { this.vendor = vendor; } + public String getVersion() { return version; } + public void setVersion(String version) { this.version = version; } + public String getType() { return type; } + public void setType(String type) { this.type = type; } + public String getMode() { return mode; } + public void setMode(String mode) { this.mode = mode; } @@ -89,35 +100,52 @@ public class VTPValidateCSAR extends OnapCommand { private String criteria; public static class Result { + private boolean passed; private String vnfreqName; private String description; private List errors = new ArrayList<>(); + private List warnings = new ArrayList<>(); + public boolean isPassed() { return passed; } + public void setPassed(boolean passed) { this.passed = passed; } + public String getVnfreqName() { return vnfreqName; } + public void setVnfreqName(String vnfreqName) { this.vnfreqName = vnfreqName; } + public List getErrors() { - return errors; + return Collections.unmodifiableList(errors); } - public void setErrors(List errors) { - this.errors = errors; + + public void addError(CSARError error) { + this.errors.add(error); } + public String getDescription() { return description; } + public void setDescription(String description) { this.description = description; } + public List getWarnings() { + return Collections.unmodifiableList(warnings); + } + + public void addErrorAsWarning(CSARError error) { + this.warnings.add(error); + } } private List results = new ArrayList<>(); @@ -176,6 +204,7 @@ public class VTPValidateCSAR extends OnapCommand { } private static Properties properties = new Properties(); + static { try { properties.load(VTPValidateCSAR.class.getResourceAsStream("/vnfreqs.properties")); @@ -191,23 +220,23 @@ public class VTPValidateCSAR extends OnapCommand { boolean isPnf = (boolean) getParametersMap().get(PNF_ATTRIBUTE_NAME).getValue(); boolean overallPass = true; - try(CSARArchive csar = isPnf ? new PnfCSARArchive(): new CSARArchive()){ + try (CSARArchive csar = isPnf ? new PnfCSARArchive() : new CSARArchive()) { csar.init(path); csar.parse(); CSARValidation validation = createCsarValidationFor(csar); String keyErrors = isPnf ? "pnferrors.ignored" : "vnferrors.ignored"; - List ignoreCodes = this.getPropertiesList(keyErrors); + List ignoreCodes = this.getPropertiesList(keyErrors); //Add SOL004 error codes CSARValidation.Result resultSOL004 = new CSARValidation.Result(); resultSOL004.setVnfreqName("SOL004"); resultSOL004.setDescription(csar.getSOL004Version()); - for (CSARError error: csar.getErrors()) { + for (CSARError error : csar.getErrors()) { if (!ignoreCodes.contains(error.getCode())) { - resultSOL004.getErrors().add(error); + resultSOL004.addError(error); overallPass = false; } } @@ -217,7 +246,7 @@ public class VTPValidateCSAR extends OnapCommand { //Run thru the vnfreqs requirement checks String keyReqs = isPnf ? "pnfreqs.enabled" : "vnfreqs.enabled"; - for (String vnfreq: this.getPropertiesList(keyReqs)) { + for (String vnfreq : this.getPropertiesList(keyReqs)) { CSARValidation.Result result = new CSARValidation.Result(); result.setVnfreqName(vnfreq); @@ -235,7 +264,7 @@ public class VTPValidateCSAR extends OnapCommand { } private boolean validateVnfOrPnf(String path, CSARValidation validation, - List < String > ignoreCodes, String vnfreq, CSARValidation.Result result, boolean isPnf, boolean overallPass) { + List ignoreCodes, String vnfreq, CSARValidation.Result result, boolean isPnf, boolean overallPass) { try { String command = "csar-validate-" + vnfreq; OnapCommand cmd = OnapCommandRegistrar.getRegistrar().get(command, this.getInfo().getProduct()); @@ -245,10 +274,12 @@ public class VTPValidateCSAR extends OnapCommand { result.setDescription(cmd.getDescription()); cmd.execute(); - for (CSARError error: (List < CSARError > ) cmd.getResult().getOutput()) { - if (!ignoreCodes.contains(error.getCode()) && !ignoreCodes.contains(vnfreq + "-" + error.getCode())) { - result.getErrors().add(error); + for (CSARError error : (List) cmd.getResult().getOutput()) { + if (!isErrorIgnored(ignoreCodes, vnfreq, error)) { + result.addError(error); overallPass = false; + } else { + result.addErrorAsWarning(error); } } @@ -257,12 +288,16 @@ public class VTPValidateCSAR extends OnapCommand { } catch (Exception e) { result.setPassed(false); overallPass = false; - result.getErrors().add(new CSARArchive.CSARErrorUnknown(e.getMessage())); + result.addError(new CSARArchive.CSARErrorUnknown(e.getMessage())); validation.getResults().add(result); } return overallPass; } + private boolean isErrorIgnored(List ignoreCodes, String vnfreq, CSARError error) { + return ignoreCodes.contains(error.getCode()) || ignoreCodes.contains(vnfreq + "-" + error.getCode()); + } + static CSARValidation createCsarValidationFor(CSARArchive csar) { //Fill up the basic details CSARValidation validation = new CSARValidation(); @@ -276,11 +311,11 @@ public class VTPValidateCSAR extends OnapCommand { private void setOperationResult(CSARValidation validation) throws Exception { //NOSONAR this.getResult().getRecordsMap().get("vnf").getValues().add( - gson.toJson(validation.getVnf())); + gson.toJson(validation.getVnf())); this.getResult().getRecordsMap().get("date").getValues().add(validation.getDate()); this.getResult().getRecordsMap().get("criteria").getValues().add(validation.getCriteria()); this.getResult().getRecordsMap().get("results").getValues().add( - gson.toJson(validation.getResults())); + gson.toJson(validation.getResults())); this.getResult().setOutput(gson.toJson(validation)); this.getResult().setType(OnapCommandResultType.TEXT); @@ -288,7 +323,7 @@ public class VTPValidateCSAR extends OnapCommand { private void setPnfValueIfAvailable(boolean isPnf, OnapCommand cmd) throws OnapCommandInvalidParameterValue { final OnapCommandParameter pnf = cmd.getParametersMap().get(PNF_ATTRIBUTE_NAME); - if(pnf!=null) { + if (pnf != null) { pnf.setValue(isPnf); } } @@ -296,7 +331,7 @@ public class VTPValidateCSAR extends OnapCommand { private List getPropertiesList(String key) { String[] enabledReqs = properties.getProperty(key, "").split(","); List list = new ArrayList<>(); - for(String req: enabledReqs) { + for (String req : enabledReqs) { if (!req.isEmpty()) { list.add(req); } diff --git a/csarvalidation/src/test/java/org/onap/cvc/csar/CsarValidatorTest.java b/csarvalidation/src/test/java/org/onap/cvc/csar/CsarValidatorTest.java index d742ca6..299aff2 100644 --- a/csarvalidation/src/test/java/org/onap/cvc/csar/CsarValidatorTest.java +++ b/csarvalidation/src/test/java/org/onap/cvc/csar/CsarValidatorTest.java @@ -29,6 +29,7 @@ import org.onap.cli.main.OnapCli; import java.net.URISyntaxException; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; import static org.onap.cvc.csar.cc.sol004.IntegrationTestUtils.absoluteFilePath; @@ -37,6 +38,26 @@ public class CsarValidatorTest { private static final String NO_CERTIFICATE_RULE = "r130206"; private static final String OPERATION_STATUS_FAILED = "FAILED"; + @Test + public void shouldReportErrorAsWarningWhenErrorIsIgnored() throws URISyntaxException { + // given + OnapCliWrapper cli = new OnapCliWrapper(new String[]{ + "--product", "onap-dublin", + "csar-validate", + "--format", "json", + "--pnf", + "--csar", absoluteFilePath("pnf/r130206/csar-option1-warning-2.csar")}); + + // when + cli.handle(); + + // then + final OnapCommandResult onapCommandResult = cli.getCommandResult(); + assertTrue(onapCommandResult.getOutput().toString().contains( + "\"warnings\":[{\"vnfreqNo\":\"R130206\",\"code\":\"0x1006\",\"message\":\"Warning. Consider adding package " + + "integrity and authenticity assurance according to ETSI NFV-SOL 004 Security Option 1\",\"file\":\"\",\"lineNumber\":-1}]}")); + } + @Test public void shouldReportThanVnfValidationFailed() throws URISyntaxException { // given diff --git a/csarvalidation/src/test/resources/pnf/r130206/csar-option1-warning-2.csar b/csarvalidation/src/test/resources/pnf/r130206/csar-option1-warning-2.csar new file mode 100644 index 0000000..748efbb Binary files /dev/null and b/csarvalidation/src/test/resources/pnf/r130206/csar-option1-warning-2.csar differ -- cgit 1.2.3-korg