Test for vnf requirement R-77707 61/63661/2
authorLianhao Lu <lianhao.lu@intel.com>
Thu, 30 Aug 2018 02:24:40 +0000 (10:24 +0800)
committerLianhao Lu <lianhao.lu@intel.com>
Thu, 30 Aug 2018 02:46:35 +0000 (10:46 +0800)
Implement test for vnf requirement R-77707: provider MUST include a
Manifest File that contains a list of all the components in the VNF
package.

Change-Id: Ief3f8af2cce20d003007147f106ba9c72bcde292
Issue-ID: VNFSDK-317
Signed-off-by: Lianhao Lu <lianhao.lu@intel.com>
setup.py
tests/vnfreq/test_pkg_reqs.py
vnfsdk_pkgtools/vnfreq/pkg_reqs.py

index cba146a..395931e 100644 (file)
--- a/setup.py
+++ b/setup.py
@@ -88,6 +88,7 @@ setup(
         ],
         'vnfsdk.pkgtools.vnfreq': [
             'R-66070 = vnfsdk_pkgtools.vnfreq.pkg_reqs:R66070',
+            'R-77707 = vnfsdk_pkgtools.vnfreq.pkg_reqs:R77707',
         ],
     },
 
index b712212..b83a860 100644 (file)
@@ -17,11 +17,36 @@ import pytest
 
 from vnfsdk_pkgtools import vnfreq
 
-def test_R66070_fail(mocker):
+
+def check_result(reqid, reader, tosca, expected_fail_msg):
+    tester = vnfreq.get_vnfreq_tester(reqid)
+    tester.check(reader, tosca)
+    if expected_fail_msg:
+        assert isinstance(tester.err, vnfreq.VnfRequirementError)
+        assert expected_fail_msg in str(tester.err)
+    else:
+        assert tester.err == 0
+
+
+def test_R66070(mocker):
     reader = mocker.Mock()
     reader.manifest = None
+    check_result('R-66070', reader, None, 'No manifest file found')
+
+
+def test_R77707(mocker, tmpdir):
+    # check only manifest file - success
+    p1 = tmpdir.join("manifest.mf")
+    p1.write("manifest")
+    reader = mocker.Mock()
+    reader.destination = str(tmpdir)
+    reader.entry_manifest_file = "manifest.mf"
+    reader.manifest.digests = {}
+    check_result('R-77707', reader, None, None)
 
-    tester = vnfreq.get_vnfreq_tester("R-66070")
-    tester.check(reader, None)
-    assert isinstance(tester.err, vnfreq.VnfRequirementError)
+    # check additional file - fail
+    p2 = tmpdir.mkdir('sub').join("non-existing")
+    p2.write("non existing")
+    check_result('R-77707', reader, None,
+                 'Package component sub/non-existing not found in manifest file')
 
index c5b20f7..5bc5c6b 100644 (file)
 #
 
 import abc
+import os
 
 import six
 from stevedore import driver
 
+from vnfsdk_pkgtools.packager import csar
 from vnfsdk_pkgtools import vnfreq
 
 
@@ -35,3 +37,19 @@ class R66070(vnfreq.TesterBase):
         # Existing reader.manifest already means a valid manifest file
         # no futher check needed.
         return 0
+
+
+class R77707(vnfreq.TesterBase):
+    ID = "R-77707"
+    DESC = ("The VNF provider MUST include a Manifest File that contains "
+            "a list of all the components in the VNF package.")
+
+    def _do_check(self, reader, tosca):
+        for root, dirs, files in os.walk(reader.destination):
+            for file in files:
+                full_path = os.path.join(root, file)
+                rel_path = os.path.relpath(full_path, reader.destination)
+                if rel_path not in (reader.entry_manifest_file, csar.META_FILE):
+                    if rel_path not in reader.manifest.digests:
+                        raise vnfreq.VnfRequirementError("Package component %s not found in manifest file" % rel_path)
+        return 0