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')
#
import abc
+import os
import six
from stevedore import driver
+from vnfsdk_pkgtools.packager import csar
from vnfsdk_pkgtools import vnfreq
# 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