aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLianhao Lu <lianhao.lu@intel.com>2018-08-30 14:42:29 +0800
committerLianhao Lu <lianhao.lu@intel.com>2018-08-30 15:08:20 +0800
commita2998ffa850a8661a378910d77f670dfebbb6690 (patch)
treed14e8b4854f8672b9adfe926c20c584bd5560922
parent7debff083837e36ccba3f54fa2962f0d1261f438 (diff)
Test for vnf requirement R-26881
Implement test for vnf requirement R-26881: The VNF provider MUST provide the binaries and images needed to instantiate the VNF (VNF and VNFC images). Change-Id: Idce2e598e98365b87ad0491975adbb0f76b38604 Issue-ID: VNFSDK-313 Signed-off-by: Lianhao Lu <lianhao.lu@intel.com>
-rw-r--r--setup.py1
-rw-r--r--tests/vnfreq/test_pkg_reqs.py21
-rw-r--r--vnfsdk_pkgtools/vnfreq/pkg_reqs.py27
3 files changed, 49 insertions, 0 deletions
diff --git a/setup.py b/setup.py
index ec55196..e46f4e2 100644
--- a/setup.py
+++ b/setup.py
@@ -88,6 +88,7 @@ setup(
],
'vnfsdk.pkgtools.vnfreq': [
'R-04298 = vnfsdk_pkgtools.vnfreq.pkg_reqs:R04298',
+ 'R-26881 = vnfsdk_pkgtools.vnfreq.pkg_reqs:R26881',
'R-66070 = vnfsdk_pkgtools.vnfreq.pkg_reqs:R66070',
'R-77707 = vnfsdk_pkgtools.vnfreq.pkg_reqs:R77707',
],
diff --git a/tests/vnfreq/test_pkg_reqs.py b/tests/vnfreq/test_pkg_reqs.py
index 0ab8b8c..3f85856 100644
--- a/tests/vnfreq/test_pkg_reqs.py
+++ b/tests/vnfreq/test_pkg_reqs.py
@@ -62,3 +62,24 @@ def test_R04298(mocker, tmpdir):
p1.remove()
check_result('R-04298', reader, None,
'No testing scripts found')
+
+def test_R26881(mocker, tmpdir):
+ p1 = tmpdir.join('entry.yaml')
+ p1.write("")
+ p2 = tmpdir.join('image')
+ p2.write("")
+
+ reader = mocker.Mock()
+ reader.destination = str(tmpdir)
+ reader.entry_definitions = 'entry.yaml'
+
+ validator = mocker.Mock()
+ node = mocker.Mock()
+ validator.tosca.nodetemplates = [node]
+ node.entity_tpl = {'artifacts': {'sw_image': {'file': 'image',
+ 'type': 'tosca.artifacts.nfv.SwImage',
+ }
+ }
+ }
+ check_result('R-26881', reader, validator, None)
+
diff --git a/vnfsdk_pkgtools/vnfreq/pkg_reqs.py b/vnfsdk_pkgtools/vnfreq/pkg_reqs.py
index 6153fa4..2592017 100644
--- a/vnfsdk_pkgtools/vnfreq/pkg_reqs.py
+++ b/vnfsdk_pkgtools/vnfreq/pkg_reqs.py
@@ -20,6 +20,7 @@ import six
from stevedore import driver
from vnfsdk_pkgtools.packager import csar
+from vnfsdk_pkgtools.validator import toscaparser_validator as tv
from vnfsdk_pkgtools import vnfreq
@@ -68,3 +69,29 @@ class R04298(vnfreq.TesterBase):
raise vnfreq.VnfRequirementError("No testing scripts found")
return 0
+
+class R26881(vnfreq.TesterBase):
+ ID = "R-26881"
+ DESC = ("The VNF provider MUST provide the binaries and images needed "
+ "to instantiate the VNF (VNF and VNFC images).")
+
+ def _do_check(self, reader, tosca):
+ entry_path = os.path.dirname(os.path.join(reader.destination,
+ reader.entry_definitions))
+ valid_artifacts = []
+ for node in getattr(tosca.tosca, 'nodetemplates', []):
+ if tosca.is_type(node, 'tosca.nodes.nfv.Vdu.Compute') or \
+ tosca.is_type(node, 'tosca.nodes.nfv.Vdu.VirtualStorage'):
+ # TODO(llu) nfv-toscaparser now doesn't support artifacts
+ # yet, we have to hack it for now.
+ # See https://jira.opnfv.org/browse/PARSER-184.
+ for name, props in node.entity_tpl.get('artifacts', {}).iteritems():
+ file = props.get('file', None)
+ if file and \
+ os.path.isfile(os.path.join(entry_path, file)) or \
+ os.path.isfile(os.path.join(reader.destination, file)):
+ valid_artifacts.append(file)
+ if not valid_artifacts:
+ raise vnfreq.VnfRequirementError("No valid binaries or images for VNF instantion found")
+ return 0
+