diff options
author | AvinashS <avinash.s@huawei.com> | 2017-10-12 14:23:42 +0530 |
---|---|---|
committer | AvinashS <avinash.s@huawei.com> | 2017-10-12 14:23:42 +0530 |
commit | 4fad64a80480eefa441cdebec0f1f7115eacb477 (patch) | |
tree | 62dafd7e414ebbc41cb6188135d0665d63abfda4 /csarvalidation/src/main/java/org/onap | |
parent | 524c870ae13b75bcd7c895738d9580073a13551d (diff) |
Enhance validation with new VNF types
Add validation for vEPC sample.
Removed strict validation for metadata in
MRF.yaml file with no defined standard.
Change-Id: I1ebb4c4c77923b00b7a4074184fbaa4659a6095a
IssueId: VNFSDK-107
Signed-off-by: AvinashS <avinash.s@huawei.com>
Diffstat (limited to 'csarvalidation/src/main/java/org/onap')
-rw-r--r-- | csarvalidation/src/main/java/org/onap/validation/csar/CsarUtil.java | 9 | ||||
-rw-r--r-- | csarvalidation/src/main/java/org/onap/validation/csar/CsarValidator.java | 86 |
2 files changed, 66 insertions, 29 deletions
diff --git a/csarvalidation/src/main/java/org/onap/validation/csar/CsarUtil.java b/csarvalidation/src/main/java/org/onap/validation/csar/CsarUtil.java index dbead03..f915168 100644 --- a/csarvalidation/src/main/java/org/onap/validation/csar/CsarUtil.java +++ b/csarvalidation/src/main/java/org/onap/validation/csar/CsarUtil.java @@ -78,6 +78,13 @@ public class CsarUtil { input = zipFile.getInputStream(entry); File file = new File(extPlace, entry.getName()); + + //Currently it does not support xml based VNF descriptors. + //So skip and proceed to YAML defined files validation only. + if (file.getAbsolutePath().contains("xml"+System.getProperty("file.separator"))) { + continue; + } + if (!file.getParentFile().exists()) { FileUtil.createDirectory(file.getParentFile().getAbsolutePath()); } @@ -90,7 +97,9 @@ public class CsarUtil { } bos.write(buffer, 0, length); } + unzipFileNames.put(file.getName(), file.getAbsolutePath()); + } finally { closeOutputStream(bos); closeInputStream(input); diff --git a/csarvalidation/src/main/java/org/onap/validation/csar/CsarValidator.java b/csarvalidation/src/main/java/org/onap/validation/csar/CsarValidator.java index 46200a7..57870be 100644 --- a/csarvalidation/src/main/java/org/onap/validation/csar/CsarValidator.java +++ b/csarvalidation/src/main/java/org/onap/validation/csar/CsarValidator.java @@ -16,10 +16,12 @@ package org.onap.validation.csar; +import org.apache.commons.io.FilenameUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.*; import java.nio.file.Files; +import java.nio.file.Path; import java.nio.file.Paths; import static java.nio.charset.StandardCharsets.*; import java.util.*; @@ -31,13 +33,17 @@ public class CsarValidator { private static final Logger LOG = LoggerFactory.getLogger(CsarValidator.class); + //Schema files + // static private ValidatorSchemaLoader vsl; + // Map of CSAR file and un-zipped file indices - static HashMap<String, String> csarFiles; + static private HashMap<String, String> csarFiles; // Map of packageId and CSAR files private static HashMap<String, HashMap<String, String>> csar = new HashMap<String, HashMap<String, String>>(); + private static String MAINSERV_TEMPLATE; - public CsarValidator(String packageId, String csarWithPath) { + public CsarValidator(String packageId, String csarWithPath) { try { FileInputStream is = new FileInputStream(csarWithPath); @@ -45,6 +51,7 @@ public class CsarValidator { LOG.error("CSAR %s is not found! " +ErrorCodes.RESOURCE_MISSING); throw new ValidationException(ErrorCodes.RESOURCE_MISSING); } + try { csarFiles = CsarUtil.csarExtract(csarWithPath); if(!csarFiles.isEmpty()) { @@ -57,7 +64,13 @@ public class CsarValidator { LOG.error("CSAR %s is not a valid CSAR/ZIP file! ", e1); } - } + + try { + // vsl = new ValidatorSchemaLoader(); + } catch (Exception e) { + e.printStackTrace(); + } + } public static boolean validateCsar() { @@ -94,8 +107,6 @@ public class CsarValidator { } } - - public static boolean validateCsarMeta() { String cfile = csarFiles.get(CommonConstants.CSAR_META); @@ -139,7 +150,6 @@ public class CsarValidator { } } - return false; } @@ -151,20 +161,29 @@ public class CsarValidator { return false; } try { - if (!cfile.isEmpty() && cfile.contains(System.getProperty("file.separator") + + if (cfile.contains(System.getProperty("file.separator") + CommonConstants.TOSCA_METADATA + System.getProperty("file.separator") + CommonConstants.TOSCA_META)) { - String value = checkEntryFor(cfile, "Entry-Definitions:"); + String value = CheckEntryFor(cfile, "Entry-Definitions:"); String[] splitPath = value.split("/"); String subValue = splitPath[splitPath.length - 1]; if (value.isEmpty() || subValue.isEmpty()) { return false; - //Check if Entry-Defintions pointed file exists in CSAR - } else if (!(null == csarFiles.get(value)) || - !(null == csarFiles.get(subValue))) { - return true; + //Check if Entry-Defintions pointed file exists in CSAR + } else { + if (!(null == csarFiles.get(value))) { + MAINSERV_TEMPLATE = csarFiles.get(value); + return true; + } + else if (!(null == csarFiles.get(subValue))) { + MAINSERV_TEMPLATE = csarFiles.get(subValue); + return true; + } + else { + MAINSERV_TEMPLATE = CommonConstants.MAINSERV_TEMPLATE; + } } } } catch (IOException | NullPointerException e) { @@ -181,21 +200,19 @@ public class CsarValidator { // Infuture load from the respective file template/schema List<String> mListMetadata = Arrays.asList("vnf_product_name", "vnf_provider_id", "vnf_package_version", "vnf_release_data_time"); - boolean mfResult = checkEntryFor(CommonConstants.MAINSERV_MANIFEST, mListMetadata, key); - - List<String> tListMetadata = Arrays.asList("vendor", "csarVersion", - "csarProvider", "id", "version", "csarType", "name", "vnfdVersion", - "vnfmType"); - boolean tResult = checkEntryFor(CommonConstants.MAINSERV_TEMPLATE, tListMetadata, key); - if (!tResult || !mfResult) { - return false; - } else { - return true; + boolean mfResult = CheckEntryFor(CommonConstants.MAINSERV_MANIFEST, mListMetadata, key); + String mrfFile = MAINSERV_TEMPLATE; + if(!Paths.get(mrfFile).isAbsolute()){ + mrfFile = csarFiles.get(FilenameUtils.getName(mrfFile)); + } + if(StringUtils.isEmpty(mrfFile)){ + return false; } + return true; } - private static String checkEntryFor(String fileWithPath, String attribute) throws IOException { + private static String CheckEntryFor(String fileWithPath, String attribute) throws IOException { List<String> lines = Files.readAllLines(Paths.get(fileWithPath), UTF_8); @@ -207,17 +224,21 @@ public class CsarValidator { return null; } - private static boolean checkEntryFor(String cFile, List<String> attributes, String key) { - String tFileWithPath = csarFiles.get(cFile); + private static boolean CheckEntryFor(String cFile, List<String> attributes, String key) { + String tFileWithPath; + + if (! Paths.get(cFile).isAbsolute()) { + cFile = csarFiles.get(FilenameUtils.getName(cFile)); + } - if(StringUtils.isEmpty(tFileWithPath)) { + if(StringUtils.isEmpty(cFile)) { return false; } Yaml yaml = new Yaml(); Map<String, ?> values; try { - values = (Map<String, ?>) yaml.load(new FileInputStream(new File(tFileWithPath))); + values = (Map<String, ?>) yaml.load(new FileInputStream(new File(cFile))); } catch (FileNotFoundException e) { LOG.error("FILE_NOT_FOUND" + ":" + "Exception caught while trying to find the file ! " + e.getMessage(), e); return false; @@ -231,19 +252,26 @@ public class CsarValidator { .map(Object::toString) .collect(Collectors.toList()); + // If no attributes provided, take it easy + // there are no mandatory fields to be + // validated. + if (attributes == null) { + return true; + } if (subValues.size() != attributes.size() && lResultNonNull.size() != attributes.size()) { return false; } - //2. Validate the exact mandatory attributes with expected attributes list + //Validate the exact mandatory(not defined in SOL004 yet) + // attributes with expected attributes list List<? super String> lResult = subValues.keySet().stream() .filter(attributes::contains) .collect(Collectors.toList()); // System.out.println(result); - if (lResult.size() != attributes.size()) { + if (lResult.size() == 0) { return false; } return true; |