diff options
21 files changed, 33 insertions, 396 deletions
diff --git a/ez_setup.py b/ez_setup.py deleted file mode 100644 index 60d6ffc..0000000 --- a/ez_setup.py +++ /dev/null @@ -1,367 +0,0 @@ -#!/usr/bin/env python -############################################################################## -# Copyright 2018 EuropeanSoftwareMarketingLtd. -# =================================================================== -# Licensed under the ApacheLicense, Version2.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 -# -# 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 -############################################################################## -# vnftest comment: this is a modified copy of -# yardstick/ez_setup.py -"""Bootstrap setuptools installation - -To use setuptools in your package's setup.py, include this -file in the same directory and add this to the top of your setup.py:: - - from ez_setup import use_setuptools - use_setuptools() - -To require a specific version of setuptools, set a download -mirror, or use an alternate download directory, simply supply -the appropriate options to ``use_setuptools()``. - -This file can also be run as a script to install or upgrade setuptools. -""" -from __future__ import absolute_import -import os -import shutil -import sys -import tempfile -import zipfile -import optparse -import subprocess -import platform -import contextlib - -from distutils import log - -try: - from urllib.request import urlopen -except ImportError: - from six.moves.urllib import urlopen - -try: - from site import USER_SITE -except ImportError: - USER_SITE = None - -DEFAULT_VERSION = "6.1" -DEFAULT_URL = "https://pypi.python.org/packages/source/s/setuptools/" - - -def _python_cmd(*args): - """ - Return True if the command succeeded. - """ - args = (sys.executable,) + args - return subprocess.call(args) == 0 - - -def _install(archive_filename, install_args=()): - with archive_context(archive_filename): - # installing - log.warn('Installing Setuptools') - if not _python_cmd('setup.py', 'install', *install_args): - log.warn('Something went wrong during the installation.') - log.warn('See the error message above.') - # exitcode will be 2 - return 2 - - -def _build_egg(egg, archive_filename, to_dir): - with archive_context(archive_filename): - # building an egg - log.warn('Building a Setuptools egg in %s', to_dir) - _python_cmd('setup.py', '-q', 'bdist_egg', '--dist-dir', to_dir) - # returning the result - log.warn(egg) - if not os.path.exists(egg): - raise IOError('Could not build the egg.') - - -class ContextualZipFile(zipfile.ZipFile): - """ - Supplement ZipFile class to support context manager for Python 2.6 - """ - - def __enter__(self): - return self - - def __exit__(self, type, value, traceback): - self.close() - - def __new__(cls, *args, **kwargs): - """ - Construct a ZipFile or ContextualZipFile as appropriate - """ - if hasattr(zipfile.ZipFile, '__exit__'): - return zipfile.ZipFile(*args, **kwargs) - return super(ContextualZipFile, cls).__new__(cls) - - -@contextlib.contextmanager -def archive_context(filename): - # extracting the archive - tmpdir = tempfile.mkdtemp() - log.warn('Extracting in %s', tmpdir) - old_wd = os.getcwd() - try: - os.chdir(tmpdir) - with ContextualZipFile(filename) as archive: - archive.extractall() - - # going in the directory - subdir = os.path.join(tmpdir, os.listdir(tmpdir)[0]) - os.chdir(subdir) - log.warn('Now working in %s', subdir) - yield - - finally: - os.chdir(old_wd) - shutil.rmtree(tmpdir) - - -def _do_download(version, download_base, to_dir, download_delay): - egg = os.path.join(to_dir, 'setuptools-%s-py%d.%d.egg' - % (version, sys.version_info[0], sys.version_info[1])) - if not os.path.exists(egg): - archive = download_setuptools(version, download_base, - to_dir, download_delay) - _build_egg(egg, archive, to_dir) - sys.path.insert(0, egg) - - # Remove previously-imported pkg_resources if present (see - # https://bitbucket.org/pypa/setuptools/pull-request/7/ for details). - if 'pkg_resources' in sys.modules: - del sys.modules['pkg_resources'] - - import setuptools - setuptools.bootstrap_install_from = egg - - -def use_setuptools(version=DEFAULT_VERSION, download_base=DEFAULT_URL, - to_dir=os.curdir, download_delay=15): - to_dir = os.path.abspath(to_dir) - rep_modules = 'pkg_resources', 'setuptools' - imported = set(sys.modules).intersection(rep_modules) - try: - import pkg_resources - except ImportError: - return _do_download(version, download_base, to_dir, download_delay) - try: - pkg_resources.require("setuptools>=" + version) - return - except pkg_resources.DistributionNotFound: - return _do_download(version, download_base, to_dir, download_delay) - except pkg_resources.VersionConflict as VC_err: - if imported: - msg = """\ -The required version of setuptools (>={version}) is not available, -and can't be installed while this script is running. Please -install a more recent version first, using -'easy_install -U setuptools'. - -(Currently using {VC_err.args[0]!r}) -""".format(VC_err=VC_err, version=version) - sys.stderr.write(msg) - sys.exit(2) - - # otherwise, reload ok - del pkg_resources, sys.modules['pkg_resources'] - return _do_download(version, download_base, to_dir, download_delay) - - -def _clean_check(cmd, target): - """ - Run the command to download target. If the command fails, clean up before - re-raising the error. - """ - try: - subprocess.check_call(cmd) - except subprocess.CalledProcessError: - if os.access(target, os.F_OK): - os.unlink(target) - raise - - -def download_file_powershell(url, target): - """ - Download the file at url to target using Powershell (which will validate - trust). Raise an exception if the command cannot complete. - """ - target = os.path.abspath(target) - ps_cmd = ( - "[System.Net.WebRequest]::DefaultWebProxy.Credentials = " - "[System.Net.CredentialCache]::DefaultCredentials; " - "(new-object System.Net.WebClient).DownloadFile(%(url)r, %(target)r)" - % vars() - ) - cmd = [ - 'powershell', - '-Command', - ps_cmd, - ] - _clean_check(cmd, target) - - -def has_powershell(): - if platform.system() != 'Windows': - return False - cmd = ['powershell', '-Command', 'echo test'] - with open(os.path.devnull, 'wb') as devnull: - try: - subprocess.check_call(cmd, stdout=devnull, stderr=devnull) - except Exception: - return False - return True - - -download_file_powershell.viable = has_powershell - - -def download_file_curl(url, target): - cmd = ['curl', url, '--silent', '--output', target] - _clean_check(cmd, target) - - -def has_curl(): - cmd = ['curl', '--version'] - with open(os.path.devnull, 'wb') as devnull: - try: - subprocess.check_call(cmd, stdout=devnull, stderr=devnull) - except Exception: - return False - return True - - -download_file_curl.viable = has_curl - - -def download_file_wget(url, target): - cmd = ['wget', url, '--quiet', '--output-document', target] - _clean_check(cmd, target) - - -def has_wget(): - cmd = ['wget', '--version'] - with open(os.path.devnull, 'wb') as devnull: - try: - subprocess.check_call(cmd, stdout=devnull, stderr=devnull) - except Exception: - return False - return True - - -download_file_wget.viable = has_wget - - -def download_file_insecure(url, target): - """ - Use Python to download the file, even though it cannot authenticate the - connection. - """ - src = urlopen(url) - try: - # Read all the data in one block. - data = src.read() - finally: - src.close() - - # Write all the data in one block to avoid creating a partial file. - with open(target, "wb") as dst: - dst.write(data) - - -download_file_insecure.viable = lambda: True - - -def get_best_downloader(): - downloaders = ( - download_file_powershell, - download_file_curl, - download_file_wget, - download_file_insecure, - ) - viable_downloaders = (dl for dl in downloaders if dl.viable()) - return next(viable_downloaders, None) - - -def download_setuptools(version=DEFAULT_VERSION, download_base=DEFAULT_URL, - to_dir=os.curdir, delay=15, - downloader_factory=get_best_downloader): - """ - Download setuptools from a specified location and return its filename - - `version` should be a valid setuptools version number that is available - as an sdist for download under the `download_base` URL (which should end - with a '/'). `to_dir` is the directory where the egg will be downloaded. - `delay` is the number of seconds to pause before an actual download - attempt. - - ``downloader_factory`` should be a function taking no arguments and - returning a function for downloading a URL to a target. - """ - # making sure we use the absolute path - to_dir = os.path.abspath(to_dir) - zip_name = "setuptools-%s.zip" % version - url = download_base + zip_name - saveto = os.path.join(to_dir, zip_name) - if not os.path.exists(saveto): # Avoid repeated downloads - log.warn("Downloading %s", url) - downloader = downloader_factory() - downloader(url, saveto) - return os.path.realpath(saveto) - - -def _build_install_args(options): - """ - Build the arguments to 'python setup.py install' on the setuptools package - """ - return ['--user'] if options.user_install else [] - - -def _parse_args(): - """ - Parse the command line for options - """ - parser = optparse.OptionParser() - parser.add_option( - '--user', dest='user_install', action='store_true', default=False, - help='install in user site package (requires Python 2.6 or later)') - parser.add_option( - '--download-base', dest='download_base', metavar="URL", - default=DEFAULT_URL, - help='alternative URL from where to download the setuptools package') - parser.add_option( - '--insecure', dest='downloader_factory', action='store_const', - const=lambda: download_file_insecure, default=get_best_downloader, - help='Use internal, non-validating downloader' - ) - parser.add_option( - '--version', help="Specify which version to download", - default=DEFAULT_VERSION, - ) - options, args = parser.parse_args() - # positional arguments are ignored - return options - - -def main(): - """Install or upgrade setuptools and EasyInstall""" - options = _parse_args() - archive = download_setuptools( - version=options.version, - download_base=options.download_base, - downloader_factory=options.downloader_factory, - ) - return _install(archive, _build_install_args(options)) - - -if __name__ == '__main__': - sys.exit(main()) @@ -97,8 +97,8 @@ apt-get -y autoremove && apt-get clean git config --global http.sslVerify false - +mkdir /etc/vnftest # install vnftest + dependencies easy_install -U pip pip install -r requirements.txt -pip install -e . +pip install . @@ -26,17 +26,17 @@ setup( 'vnftest': [ 'onap/onboard/*.yaml', 'onap/lifecycle/*.yaml', - 'onap/steps/validation/*.yaml' + 'onap/steps/validation/*.yaml', + 'test_config/onap/test_cases/*.yaml', + 'test_config/onap/test_suites/*.yaml' ], 'etc': [ 'vnftest/*.yaml', 'vnftest/*.conf', 'vnftest/vnf_descriptors/*.yaml' - ], - 'tests': [ - 'onap/*/*.yaml' ] }, + data_files=[('/etc/vnftest/', ['etc/vnftest/vnftest.yaml'])], url="https://www.onap.org", entry_points={ 'console_scripts': [ diff --git a/vnftest.egg-info/SOURCES.txt b/vnftest.egg-info/SOURCES.txt index 2807b33..bc588a3 100644 --- a/vnftest.egg-info/SOURCES.txt +++ b/vnftest.egg-info/SOURCES.txt @@ -1,6 +1,6 @@ setup.py etc/__init__.py -tests/__init__.py +etc/vnftest/vnftest.yaml tools/vnftest-img-dpdk-modify tools/vnftest-img-lxd-modify tools/vnftest-img-modify @@ -78,6 +78,10 @@ vnftest/steps/__init__.py vnftest/steps/base.py vnftest/steps/dummy/__init__.py vnftest/steps/dummy/dummy.py +vnftest/test_config/__init__.py +vnftest/test_config/onap/__init__.py +vnftest/test_config/onap/test_cases/__init__.py +vnftest/test_config/onap/test_suites/__init__.py vnftest/tests/__init__.py vnftest/tests/fixture.py vnftest/tests/unit/__init__.py diff --git a/vnftest.egg-info/top_level.txt b/vnftest.egg-info/top_level.txt index f2b8f14..32a8641 100644 --- a/vnftest.egg-info/top_level.txt +++ b/vnftest.egg-info/top_level.txt @@ -1,3 +1,2 @@ etc -tests vnftest diff --git a/vnftest/__init__.py b/vnftest/__init__.py index 9ce7a86..6456fc1 100644 --- a/vnftest/__init__.py +++ b/vnftest/__init__.py @@ -61,7 +61,6 @@ def _init_logging(): logging.root.addHandler(_LOG_FILE_HDLR) logging.debug("logging.root.handlers = %s", logging.root.handlers) - utils.import_modules_from_package("vnftest.contexts") utils.import_modules_from_package("vnftest.runners") utils.import_modules_from_package("vnftest.steps") diff --git a/vnftest/common/constants.py b/vnftest/common/constants.py index 8bbe070..46db92c 100644 --- a/vnftest/common/constants.py +++ b/vnftest/common/constants.py @@ -29,13 +29,10 @@ from vnftest.common.yaml_loader import yaml_load dirname = os.path.dirname abspath = os.path.abspath join = os.path.join -sep = os.path.sep CONF = {} CONF_FILE = None -VNFTEST_ROOT_PATH = dirname( - dirname(abspath(pkg_resources.resource_filename(__name__, "")))) + sep - +VNFTEST_ROOT_PATH = os.environ.get('VNFTEST_ROOT_PATH', dirname(dirname(abspath(pkg_resources.resource_filename(__name__, "")))) + os.path.sep) def get_param(key, default=''): # don't re-parse yaml for each lookup @@ -93,8 +90,8 @@ LOG_DIR = get_param('dir.log', join(VNFTEST_ROOT_PATH, 'tmp/vnftest/')) TASK_LOG_DIR = get_param('dir.tasklog', join(VNFTEST_ROOT_PATH, 'var/log/vnftest/')) CONF_SAMPLE_DIR = join(REPOS_DIR, 'etc/vnftest/') SAMPLE_CASE_DIR = join(REPOS_DIR, 'samples') -TESTCASE_DIR = join(VNFTEST_ROOT_PATH, 'tests/onap/test_cases/') -TESTSUITE_DIR = join(VNFTEST_ROOT_PATH, 'tests/onap/test_suites/') +TESTCASE_DIR = join(VNFTEST_ROOT_PATH, 'vnftest/test_config/onap/test_cases/') +TESTSUITE_DIR = join(VNFTEST_ROOT_PATH, 'vnftest/test_config/onap/test_suites/') # file DEFAULT_OUTPUT_FILE = get_param('file.output_file', join(VNFTEST_ROOT_PATH, 'tmp/vnftest.out')) diff --git a/vnftest/common/utils.py b/vnftest/common/utils.py index 406796d..10edc05 100644 --- a/vnftest/common/utils.py +++ b/vnftest/common/utils.py @@ -514,6 +514,7 @@ def load_resource(path): def format(st, params): if not isinstance(st, basestring): return st + dotdict(params) ret_str = "" ret_obj = None for literal_text, field_name, format_spec, conversion in \ @@ -522,7 +523,12 @@ def format(st, params): ret_str = ret_str + literal_text else: dict = ret_obj or params - value = dict[field_name] + try: + value = dict[field_name] + except KeyError: + dict = dotdict(dict) + field_name = '{' + field_name + '}' + value = field_name.format(**dict) if isinstance(value, basestring): ret_str = ret_str + value else: diff --git a/vnftest/core/testcase.py b/vnftest/core/testcase.py index ea07243..2cb22ec 100644 --- a/vnftest/core/testcase.py +++ b/vnftest/core/testcase.py @@ -18,6 +18,8 @@ from __future__ import absolute_import from __future__ import print_function +import fnmatch + import os import logging @@ -44,7 +46,7 @@ class Testcase(object): def _get_testcase_file_list(self): try: - testcase_files = sorted(os.listdir(consts.TESTCASE_DIR)) + testcase_files = sorted(fnmatch.filter(os.listdir(consts.TESTCASE_DIR), '*.yaml')) except OSError: LOG.exception('Failed to list dir:\n%s\n', consts.TESTCASE_DIR) raise diff --git a/tests/__init__.py b/vnftest/test_config/__init__.py index e69de29..e69de29 100644 --- a/tests/__init__.py +++ b/vnftest/test_config/__init__.py diff --git a/vnftest/test_config/onap/__init__.py b/vnftest/test_config/onap/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/vnftest/test_config/onap/__init__.py diff --git a/vnftest/test_config/onap/test_cases/__init__.py b/vnftest/test_config/onap/test_cases/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/vnftest/test_config/onap/test_cases/__init__.py diff --git a/tests/onap/test_cases/onap_vnftest_tc001.yaml b/vnftest/test_config/onap/test_cases/onap_vnftest_tc001.yaml index 882d172..882d172 100644 --- a/tests/onap/test_cases/onap_vnftest_tc001.yaml +++ b/vnftest/test_config/onap/test_cases/onap_vnftest_tc001.yaml diff --git a/tests/onap/test_cases/onap_vnftest_tc002.yaml b/vnftest/test_config/onap/test_cases/onap_vnftest_tc002.yaml index 5688f30..5688f30 100644 --- a/tests/onap/test_cases/onap_vnftest_tc002.yaml +++ b/vnftest/test_config/onap/test_cases/onap_vnftest_tc002.yaml diff --git a/tests/onap/test_cases/onap_vnftest_tc003.yaml b/vnftest/test_config/onap/test_cases/onap_vnftest_tc003.yaml index 278f8ef..278f8ef 100644 --- a/tests/onap/test_cases/onap_vnftest_tc003.yaml +++ b/vnftest/test_config/onap/test_cases/onap_vnftest_tc003.yaml diff --git a/vnftest/test_config/onap/test_suites/__init__.py b/vnftest/test_config/onap/test_suites/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/vnftest/test_config/onap/test_suites/__init__.py diff --git a/tests/onap/test_suites/onap_basic_lifecycle.yaml b/vnftest/test_config/onap/test_suites/onap_basic_lifecycle.yaml index eab3efe..773a8e0 100644 --- a/tests/onap/test_suites/onap_basic_lifecycle.yaml +++ b/vnftest/test_config/onap/test_suites/onap_basic_lifecycle.yaml @@ -19,8 +19,8 @@ schema: "vnftest:suite:0.1" name: "onap-basic-lifecycle" test_cases: - - file_name: tests/onap/test_cases/onap_vnftest_tc001.yaml + file_name: test_config/onap/test_cases/onap_vnftest_tc001.yaml - - file_name: tests/onap/test_cases/onap_vnftest_tc002.yaml + file_name: test_config/onap/test_cases/onap_vnftest_tc002.yaml #- -# file_name: tests/onap/test_cases/onap_vnftest_tc003.yaml +# file_name: test_config/onap/test_cases/onap_vnftest_tc003.yaml diff --git a/vnftest/tests/unit/core/no_constraint_no_args_step_sample.yaml b/vnftest/tests/unit/core/no_constraint_no_args_step_sample.yaml index 4272d70..792c8db 100644 --- a/vnftest/tests/unit/core/no_constraint_no_args_step_sample.yaml +++ b/vnftest/tests/unit/core/no_constraint_no_args_step_sample.yaml @@ -19,7 +19,6 @@ schema: "vnftest:suite:0.1" name: "suite_1" -test_cases_dir: "tests/onap/test_cases/" test_cases: - file_name: onap_vnftest_tc001.yaml diff --git a/vnftest/tests/unit/core/no_constraint_with_args_step_sample.yaml b/vnftest/tests/unit/core/no_constraint_with_args_step_sample.yaml index 9b8b09a..73372dc 100644 --- a/vnftest/tests/unit/core/no_constraint_with_args_step_sample.yaml +++ b/vnftest/tests/unit/core/no_constraint_with_args_step_sample.yaml @@ -21,9 +21,9 @@ schema: "vnftest:suite:0.1" name: "suite_1" test_cases: - - file_name: tests/onap/test_cases/onap_vnftest_tc001.yaml + file_name: test_config/onap/test_cases/onap_vnftest_tc001.yaml - - file_name: tests/onap/test_cases/onap_vnftest_tc002.yaml + file_name: test_config/onap/test_cases/onap_vnftest_tc002.yaml task_args: huawei-pod1: '{"host": "node1.LF","target": "node2.LF"}' diff --git a/vnftest/tests/unit/core/with_constraint_no_args_step_sample.yaml b/vnftest/tests/unit/core/with_constraint_no_args_step_sample.yaml index f9524fb..c3a6bb1 100644 --- a/vnftest/tests/unit/core/with_constraint_no_args_step_sample.yaml +++ b/vnftest/tests/unit/core/with_constraint_no_args_step_sample.yaml @@ -19,12 +19,11 @@ schema: "vnftest:suite:0.1" name: "suite_1" -test_cases_dir: "tests/onap/test_cases/" test_cases: - - file_name: onap_vnftest_tc001.yaml + file_name: test_config/onap/test_cases/onap_vnftest_tc001.yaml - - file_name: onap_vnftest_tc002.yaml + file_name: test_config/onap/test_cases/onap_vnftest_tc002.yaml constraint: installer: compass pod: huawei-pod1 diff --git a/vnftest/tests/unit/core/with_constraint_with_args_step_sample.yaml b/vnftest/tests/unit/core/with_constraint_with_args_step_sample.yaml index 53c8390..684b077 100644 --- a/vnftest/tests/unit/core/with_constraint_with_args_step_sample.yaml +++ b/vnftest/tests/unit/core/with_constraint_with_args_step_sample.yaml @@ -19,12 +19,11 @@ schema: "vnftest:suite:0.1" name: "suite_1" -test_cases_dir: "tests/onap/test_cases/" test_cases: - - file_name: onap_vnftest_tc001.yaml + file_name: test_config/onap/test_cases/onap_vnftest_tc001.yaml - - file_name: onap_vnftest_tc002.yaml + file_name: test_config/onap/test_cases/onap_vnftest_tc002.yaml constraint: installer: compass pod: huawei-pod1 |