# # Copyright (c) 2017 GigaSpaces Technologies Ltd. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. You may obtain # a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. # import collections import filecmp import os import tempfile import shutil import pytest from vnfsdk_pkgtools.packager import csar from vnfsdk_pkgtools import util ROOT_DIR = util.get_project_root() CSAR_RESOURCE_DIR = os.path.join(ROOT_DIR, 'tests', 'resources', 'csar') CSAR_ENTRY_FILE = 'test_entry.yaml' CSAR_OUTPUT_FILE = 'output.csar' Args = collections.namedtuple('Args', ['source', 'entry', 'manifest', 'history', 'tests', 'licenses', 'digest', 'certificate', 'privkey']) ARGS_MANIFEST = { 'source': CSAR_RESOURCE_DIR, 'entry': CSAR_ENTRY_FILE, 'manifest': 'test_entry.mf', 'history': 'ChangeLog.txt', 'tests': 'Tests', 'licenses': 'Licenses', 'digest': None, 'certificate': None, 'privkey': None, } ARGS_MANIFEST_DIGEST = { 'source': CSAR_RESOURCE_DIR, 'entry': CSAR_ENTRY_FILE, 'manifest': 'test_entry.mf', 'history': 'ChangeLog.txt', 'tests': 'Tests', 'licenses': 'Licenses', 'digest': 'sha256', 'certificate': None, 'privkey': None, } ARGS_MANIFEST_DIGEST_CERT = { 'source': CSAR_RESOURCE_DIR, 'entry': CSAR_ENTRY_FILE, 'manifest': 'test_entry.mf', 'history': 'ChangeLog.txt', 'tests': 'Tests', 'licenses': 'Licenses', 'digest': 'sha256', 'certificate': 'test.crt', 'privkey': os.path.join(ROOT_DIR, 'tests', 'resources', 'signature', 'test.key') } ARGS_NO_MANIFEST = { 'source': CSAR_RESOURCE_DIR, 'entry': CSAR_ENTRY_FILE, 'manifest': None, 'history': None, 'tests': None, 'licenses': None, 'digest': None, 'certificate': None, '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() csar_extract_dir = tempfile.mkdtemp() try: csar.write(args.source, args.entry, csar_target_dir + '/' + CSAR_OUTPUT_FILE, args) csar.read(csar_target_dir + '/' + CSAR_OUTPUT_FILE, csar_extract_dir, True) assert filecmp.cmp(args.source + '/' + args.entry, csar_extract_dir + '/' + args.entry) if(args.manifest and not args.digest): assert filecmp.cmp(args.source + '/' + args.manifest, csar_extract_dir + '/' + args.manifest) if(args.history): assert filecmp.cmp(args.source + '/' + args.history, csar_extract_dir + '/' + args.history) finally: shutil.rmtree(csar_target_dir, ignore_errors=True) shutil.rmtree(csar_extract_dir, ignore_errors=True) def test_CSARWrite(): csar_write_test(Args(**ARGS_NO_MANIFEST)) def test_CSARWrite_manifest(): # 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)) def test_CSARWrite_manifest_digest(): # 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)) 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")