Test for vnf requirement R-26881 83/63683/2
authorLianhao Lu <lianhao.lu@intel.com>
Thu, 30 Aug 2018 06:42:29 +0000 (14:42 +0800)
committerLianhao Lu <lianhao.lu@intel.com>
Thu, 30 Aug 2018 07:08:20 +0000 (15:08 +0800)
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>
setup.py
tests/vnfreq/test_pkg_reqs.py
vnfsdk_pkgtools/vnfreq/pkg_reqs.py

index ec55196..e46f4e2 100644 (file)
--- 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',
         ],
index 0ab8b8c..3f85856 100644 (file)
@@ -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)
+
index 6153fa4..2592017 100644 (file)
@@ -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
+