Manifest is optional in ETSI SOL004 manifest 37/107537/2
authorMichaelMorris <michael.morris@est.tech>
Tue, 12 May 2020 10:19:47 +0000 (11:19 +0100)
committerOfir Sonsino <ofir.sonsino@intl.att.com>
Tue, 16 Jun 2020 05:41:19 +0000 (05:41 +0000)
SOL004MetaDirectoryValidtor enforces all files contained in an ETSI SOL004 CSAR are included in the manifest file, however the manifest itself is not mandatory to include in the manifest

Signed-off-by: MichaelMorris <michael.morris@est.tech>
Issue-ID: SDC-3057
Change-Id: I460071ecbd21578edb0603f600da0ac1ea877539

openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/impl/orchestration/csar/validation/SOL004MetaDirectoryValidator.java
openecomp-be/backend/openecomp-sdc-vendor-software-product-manager/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/impl/orchestration/csar/validation/SOL004MetaDirectoryValidatorTest.java

index 1d1ffdb..f41b44f 100644 (file)
@@ -467,12 +467,16 @@ class SOL004MetaDirectoryValidator implements Validator {
      */
     private void verifyFilesBeingReferred(final Set<String> referredFileSet, final Set<String> packageFileSet) {
         packageFileSet.forEach(filePath -> {
-            if (!referredFileSet.contains(filePath)) {
+            if (!isManifestFile(filePath) && !referredFileSet.contains(filePath)) {
                 reportError(ErrorLevel.ERROR,
                     String.format(Messages.MISSING_MANIFEST_REFERENCE.getErrorMessage(), filePath));
             }
         });
     }
+    
+    private boolean isManifestFile(final String filePath) {
+        return filePath.equals(toscaMetadata.getMetaEntries().get(ETSI_ENTRY_MANIFEST.getName()));
+    }
 
     private List<String> filterSources(final List<String> source) {
         return source.stream()
index d64faa0..d6ff702 100644 (file)
@@ -340,6 +340,61 @@ public class SOL004MetaDirectoryValidatorTest {
         final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
         assertExpectedErrors("Manifest referenced import file missing", errors, 1);
     }
+    
+    @Test
+    public void testGivenDefinitionFile_whenFileInPackageNotInManifest_thenErrorIsReturned() {
+        final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
+
+        handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
+        manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
+
+        handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
+        manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
+
+        handler.addFile(SAMPLE_SOURCE, "".getBytes());
+
+        final byte [] sampleDefinitionFile =
+            getResourceBytesOrFail("validation.files/definition/sampleDefinitionFile2.yaml");
+        handler.addFile("Definitions/etsi_nfv_sol001_pnfd_2_5_2_types.yaml", sampleDefinitionFile);
+        manifestBuilder.withSource("Definitions/etsi_nfv_sol001_pnfd_2_5_2_types.yaml");
+
+        manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
+        handler.addFile(TOSCA_DEFINITION_FILEPATH,
+            getResourceBytesOrFail("validation.files/definition/sampleDefinitionFile2.yaml"));
+
+        handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
+
+        final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
+        assertExpectedErrors("Artifact is not being referenced in manifest file", errors, 1);
+    }
+    
+    @Test
+    public void testGivenDefinitionFile_whenManifestNotreferencedInManifest_thenNoErrorIsReturned() {
+        final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
+
+        handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
+        manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
+
+        handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
+        manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
+
+        handler.addFile(SAMPLE_SOURCE, "".getBytes());
+        manifestBuilder.withSource(SAMPLE_SOURCE);
+
+        final byte [] sampleDefinitionFile =
+            getResourceBytesOrFail("validation.files/definition/sampleDefinitionFile2.yaml");
+        handler.addFile("Definitions/etsi_nfv_sol001_pnfd_2_5_2_types.yaml", sampleDefinitionFile);
+        manifestBuilder.withSource("Definitions/etsi_nfv_sol001_pnfd_2_5_2_types.yaml");
+
+        manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
+        handler.addFile(TOSCA_DEFINITION_FILEPATH,
+            getResourceBytesOrFail("validation.files/definition/sampleDefinitionFile2.yaml"));
+
+        handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
+
+        final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
+        assertEquals(0, errors.size());
+    }
 
     /**
      * Reference with invalid YAML format.