Support vnf_release_date_time in manifest 55/98955/1
authorLianhao Lu <lianhao.lu@intel.com>
Fri, 29 Nov 2019 04:58:35 +0000 (12:58 +0800)
committerLianhao Lu <lianhao.lu@intel.com>
Fri, 29 Nov 2019 04:58:35 +0000 (12:58 +0800)
SOL004 v2.6.1 changes the manifest metadata key name from
'vnf_release_data_time' in v2.4.1 to 'vnf_release_date_time'. Support
the new chagnes while keeping backward compatibile with v2.4.1.

Change-Id: I205285f05963dc4d60d6867866b5b2fe114d8da3
Issue-ID: VNFSDK-420
Signed-off-by: Lianhao Lu <lianhao.lu@intel.com>
tests/packager/test_manifest.py
vnfsdk_pkgtools/packager/csar.py
vnfsdk_pkgtools/packager/manifest.py

index 9a0a5d5..7fa3474 100644 (file)
@@ -24,9 +24,16 @@ METADATA = '\n'.join(["metadata:",
                       "vnf_product_name: test",
                       "vnf_provider_id: test",
                       "vnf_package_version:1.0",
-                      "vnf_release_data_time: 2017-09-15T15:00:10+08:00",
+                      "vnf_release_date_time: 2017-09-15T15:00:10+08:00",
                       ])
 
+METADATA_241 = '\n'.join(["metadata:",
+                          "vnf_product_name: test",
+                          "vnf_provider_id: test",
+                          "vnf_package_version: 1.0",
+                          "vnf_release_data_time: 2017-09-15T15:00:10+08:00",
+                        ])
+
 METADATA_MISSING_KEY = '\n'.join(["metadata:",
                                    "vnf_product_name: test",
                                    "vnf_provider_id: test",
@@ -61,7 +68,7 @@ CMS = '\n'.join(['-----BEGIN CMS-----',
 
 FILE_SOURCE_ONLY = '\n'.join(['Source: source1',
                               'Source: source2',
-                           ])
+                            ])
 
 NON_MANO_ARTIFACTS = '\n'.join(['non_mano_artifact_sets:',
                                 'foo_bar:',
@@ -69,7 +76,7 @@ NON_MANO_ARTIFACTS = '\n'.join(['non_mano_artifact_sets:',
                                 'prv.happy-nfv.cool:',
                                 'Source: happy/cool/123.html',
                                 'Source: happy/cool/cool.json',
-                             ])
+                              ])
 
 
 def test_metadata(tmpdir):
@@ -80,7 +87,22 @@ def test_metadata(tmpdir):
     assert m.metadata['vnf_product_name'] == 'test'
     assert m.metadata['vnf_provider_id'] == 'test'
     assert m.metadata['vnf_package_version'] == '1.0'
-    assert m.metadata['vnf_release_data_time'] == '2017-09-15T15:00:10+08:00'
+    assert m.metadata['vnf_release_date_time'] == '2017-09-15T15:00:10+08:00'
+
+
+def test_metadata_241(tmpdir):
+    # metadata for SOL004 v2.4.1
+    p = tmpdir.mkdir('csar').join('test.mf')
+    p.write(METADATA_241)
+
+    m = manifest.Manifest(p.dirname, 'test.mf')
+    assert m.metadata['vnf_product_name'] == 'test'
+    assert m.metadata['vnf_provider_id'] == 'test'
+    assert m.metadata['vnf_package_version'] == '1.0'
+    assert m.metadata['vnf_release_date_time'] == '2017-09-15T15:00:10+08:00'
+
+    m241 = manifest.Manifest(p.dirname, 'test.mf', sol241=True)
+    assert METADATA_241 in m241.return_as_string()
 
 
 def test_metadata_missing_key(tmpdir):
index 1797644..3b4cec6 100644 (file)
@@ -56,7 +56,7 @@ def write(source, entry, destination, args):
                            args.tests, args.certificate)
 
     if args.manifest:
-        manifest_file = manifest.Manifest(source, args.manifest)
+        manifest_file = manifest.Manifest(source, args.manifest, args.sol241)
         manifest_file_full_path = os.path.join(source, args.manifest)
     elif args.certificate or args.digest:
         raise ValueError("Must specify manifest file if certificate or digest is specified")
index 3c65b94..a518f31 100644 (file)
@@ -24,7 +24,7 @@ from vnfsdk_pkgtools.packager import utils
 
 METADATA_KEYS = [ 'vnf_provider_id',
                   'vnf_product_name',
-                  'vnf_release_data_time',
+                  'vnf_release_date_time',
                   'vnf_package_version']
 DIGEST_KEYS = [ 'Source', 'Algorithm', 'Hash' ]
 SUPPORTED_HASH_ALGO = ['SHA-256', 'SHA-512']
@@ -36,7 +36,7 @@ class ManifestException(Exception):
 
 class Manifest(object):
     ' Manifest file in CSAR package'
-    def __init__(self, root_path, manifest_path):
+    def __init__(self, root_path, manifest_path, sol241=False):
         self.path = manifest_path
         self.root = root_path
         self.metadata = {}
@@ -49,6 +49,7 @@ class Manifest(object):
         # non_mano_artifact dict
         #   :key = set identifier
         #   :value = list of files
+        self.sol241=sol241
         self.non_mano_artifacts = {}
         self.blocks = [ ]
         self._split_blocks()
@@ -104,18 +105,21 @@ class Manifest(object):
             (key, value, remain) = self.__split_line(line)
             if key in METADATA_KEYS:
                 self.metadata[key] = value
+            elif key == 'vnf_release_data_time':
+                #sol004 v2.4.1 compatibility
+                self.metadata['vnf_release_date_time'] = value
             else:
                 raise ManifestException("Unrecognized metadata %s:" % line)
         #validate metadata keys
         missing_keys = set(METADATA_KEYS) - set(self.metadata.keys())
         if missing_keys:
             raise ManifestException("Missing metadata keys: %s" % ','.join(missing_keys))
-        # validate vnf_release_data_time
+        # validate vnf_release_date_time
         try:
-            udatetime.from_string(self.metadata['vnf_release_data_time'])
+            udatetime.from_string(self.metadata['vnf_release_date_time'])
         except ValueError:
-            raise ManifestException("Non IETF RFC 3339 vnf_release_data_time: %s"
-                            % self.metadata['vnf_release_data_time'])
+            raise ManifestException("Incorrect IETF RFC 3339 vnf_release_date_time: %s"
+                            % self.metadata['vnf_release_date_time'])
 
     def parse_cms(self, lines):
         if '--END CMS--' not in lines[-1]:
@@ -186,7 +190,11 @@ class Manifest(object):
         ret += "vnf_product_name: %s\n" % (self.metadata['vnf_product_name'])
         ret += "vnf_provider_id: %s\n" % (self.metadata['vnf_provider_id'])
         ret += "vnf_package_version: %s\n" % (self.metadata['vnf_package_version'])
-        ret += "vnf_release_data_time: %s\n" % (self.metadata['vnf_release_data_time'])
+        if self.sol241:
+            ret += "vnf_release_data_time: %s\n" % (self.metadata['vnf_release_date_time'])
+        else:
+            ret += "vnf_release_date_time: %s\n" % (self.metadata['vnf_release_date_time'])
+
         # non_mano_artifacts
         if self.non_mano_artifacts:
             ret += "\nnon_mano_artifact_sets:\n"