Added more logic about cmd param validation 77/63377/1
authorLianhao Lu <lianhao.lu@intel.com>
Wed, 29 Aug 2018 05:55:41 +0000 (13:55 +0800)
committerLianhao Lu <lianhao.lu@intel.com>
Wed, 29 Aug 2018 05:55:41 +0000 (13:55 +0800)
Shouldn't allow the user to set digest or certificate if manifest is
not set.

Change-Id: Iccb9f038106d52039f75ce80af1cce3858d1fba5
Issue-ID: VNFSDK-311
Signed-off-by: Lianhao Lu <lianhao.lu@intel.com>
tests/packager/test_csar.py
vnfsdk_pkgtools/packager/csar.py

index e9e441c..04efca7 100644 (file)
@@ -19,6 +19,8 @@ import os
 import tempfile
 import shutil
 
+import pytest
+
 from vnfsdk_pkgtools.packager import csar
 
 CSAR_RESOURCE_DIR = 'tests/resources/csar'
@@ -78,6 +80,30 @@ ARGS_NO_MANIFEST = {
             'privkey': None,
         }
 
+INVALID_ARGS_NO_MANIFEST = {
+            'source': CSAR_RESOURCE_DIR,
+            'entry': CSAR_ENTRY_FILE,
+            'manifest': None,
+            'history': None,
+            'tests': None,
+            'licenses': None,
+            'digest': 'sha256',
+            'certificate': None,
+            'privkey': None,
+        }
+
+INVALID_ARGS_NO_PRIVKEY = {
+            'source': CSAR_RESOURCE_DIR,
+            'entry': CSAR_ENTRY_FILE,
+            'manifest': 'test_entry.mf',
+            'history': None,
+            'tests': None,
+            'licenses': None,
+            'digest': None,
+            'certificate': 'test.crt',
+            'privkey': None,
+        }
+
 
 def csar_write_test(args):
     csar_target_dir = tempfile.mkdtemp()
@@ -116,9 +142,20 @@ def test_CSARWrite_manifest_digest():
         os.makedirs(license_path)
     csar_write_test(Args(**ARGS_MANIFEST_DIGEST))
 
+
 def test_CSARWrite_manifest_digest_cert():
     # Because git can not store emptry directory, we need to create manually here
     license_path = ARGS_MANIFEST['source'] + '/' + ARGS_MANIFEST['licenses']
     if not os.path.exists(license_path):
         os.makedirs(license_path)
     csar_write_test(Args(**ARGS_MANIFEST_DIGEST_CERT))
+
+
+def test_CSARWrite_invalid_arg():
+    with pytest.raises(ValueError) as excinfo:
+        csar_write_test(Args(**INVALID_ARGS_NO_MANIFEST))
+    excinfo.match(r"Must specify manifest file")
+
+    with pytest.raises(ValueError) as excinfo:
+        csar_write_test(Args(**INVALID_ARGS_NO_PRIVKEY))
+    excinfo.match(r"Need private key file")
index 8b1eb34..af84974 100644 (file)
@@ -98,6 +98,8 @@ def write(source, entry, destination, args):
         metadata[META_ENTRY_MANIFEST_FILE_KEY] = args.manifest
         manifest_file = manifest.Manifest(source, args.manifest) 
         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")
     else:
         manifest_file = None
         manifest_file_full_path = None
@@ -117,7 +119,7 @@ def write(source, entry, destination, args):
                        check_dir=False)
         metadata[META_ENTRY_CERT_FILE_KEY] = args.certificate
         if not args.privkey:
-            raise RuntimeError('Need private key file for signing')
+            raise ValueError('Need private key file for signing')
         check_file_dir(root='',
                        entry=args.privkey,
                        msg='Please specify a valid private key file.',
@@ -334,8 +336,6 @@ class _CSARReader(object):
                          no_verify_cert)
             os.unlink(tmp_manifest)
 
-
-
     def _download(self, url, target):
         response = requests.get(url, stream=True)
         if response.status_code != 200: