2fe3dc56ff
Add new mapping structure for openstack/puppet-projects For each project in openstack/puppet-* projects(limited by project described in github.com/openstack/fuel-library/deployment/puppet/openstack_tasks/Puppetfile) will be mapped fuel-qa system-test in gates_tests/helpers/openstack_puppet_modules_mapping.yaml mapping=['system_test']=[list of openstack/puppet-projects] Mapping takes project edited in review and register single test group - "review_in_openstack_puppet_modules" which mapped to system_test from mapping. Change-Id: I16d8015be6e02717893955b45f7c718413ee8c10 Closes-Bug: #1590066
226 lines
7.6 KiB
Python
Executable File
226 lines
7.6 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
import sys
|
|
import argparse
|
|
|
|
import pytest
|
|
|
|
from proboscis import TestProgram
|
|
from proboscis import register
|
|
|
|
from fuelweb_test.helpers.utils import pretty_log
|
|
|
|
from gates_tests.helpers.utils import map_test_review_in_fuel_library
|
|
from gates_tests.helpers.utils import \
|
|
map_test_review_in_openstack_puppet_projects
|
|
|
|
from system_test import register_system_test_cases
|
|
from system_test import get_groups
|
|
from system_test import define_custom_groups
|
|
from system_test import discover_import_tests
|
|
from system_test import tests_directory
|
|
from system_test import collect_yamls
|
|
from system_test import get_path_to_config
|
|
from system_test import get_list_confignames
|
|
from system_test import get_basepath
|
|
|
|
from system_test.core.repository import split_group_config
|
|
|
|
basedir = get_basepath()
|
|
|
|
|
|
def print_explain(names):
|
|
groups_nums = get_groups()
|
|
if not isinstance(names, list):
|
|
names = [names]
|
|
out = []
|
|
for name in [split_group_config(i)[0] if split_group_config(i) else i
|
|
for i in names]:
|
|
for i in groups_nums[name]:
|
|
if hasattr(i, 'home'):
|
|
out.append((i.home._proboscis_entry_.parent.home, i.home))
|
|
else:
|
|
out.append(i)
|
|
print(pretty_log(out))
|
|
|
|
|
|
def clean_argv_proboscis():
|
|
"""Removing argv params unused by Proboscis"""
|
|
argv = sys.argv
|
|
if '--with-config' in argv:
|
|
idx = argv.index('--with-config')
|
|
argv.pop(idx)
|
|
argv.pop(idx)
|
|
if '--explain' in argv:
|
|
idx = argv.index('--explain')
|
|
argv.pop(idx)
|
|
|
|
return argv
|
|
|
|
|
|
def group_in_pytest(group):
|
|
from _pytest.config import _prepareconfig
|
|
from _pytest.main import Session
|
|
from _pytest.python import FixtureManager
|
|
from _pytest.mark import MarkMapping
|
|
config = _prepareconfig(args="")
|
|
session = Session(config)
|
|
session._fixturemanager = FixtureManager(session)
|
|
l = [list(MarkMapping(i.keywords)._mymarks) for i
|
|
in session.perform_collect()]
|
|
groups = set([item for sublist in l for item in sublist])
|
|
|
|
return group in groups
|
|
|
|
|
|
def cli():
|
|
cli = argparse.ArgumentParser(prog="System test runner",
|
|
description="Command line tool for run Fuel "
|
|
"System Test")
|
|
|
|
commands = cli.add_subparsers(title="Operation commands",
|
|
dest="command")
|
|
|
|
cli_run = commands.add_parser('run',
|
|
help="Run test",
|
|
description="Run some test group")
|
|
|
|
cli_run.add_argument("run_groups", nargs='*', default=None, )
|
|
cli_run.add_argument("--with-config", default=False, type=str,
|
|
action="store", dest="config_name",
|
|
help="Select name of yaml config.")
|
|
cli_run.add_argument("--explain", default=False, action="store_true",
|
|
help="Show explain for running groups. "
|
|
"Will not start Proboscis.")
|
|
cli_run.add_argument("--show-plan", default=False, action="store_true",
|
|
help="Show Proboscis test plan.")
|
|
cli_run.add_argument("--with-xunit", default=False, action="store_true",
|
|
help="Use xuint report.")
|
|
cli_run.add_argument("--nologcapture", default=False, action="store_true",
|
|
help="Disable log capture for Proboscis.")
|
|
cli_run.add_argument("-q", default=False, action="store_true",
|
|
dest="quite",
|
|
help="Run Proboscis in quite mode.")
|
|
cli_run.add_argument("-a", default=False, action="store_true",
|
|
dest="nose_attr",
|
|
help="Provide Nose attr to Proboscis.")
|
|
cli_run.add_argument("-A", default=False, action="store_true",
|
|
dest="eval_nose",
|
|
help="Eval Nose attr to Proboscis.")
|
|
cli_run.add_argument("--groups", default=None, action="append", type=str,
|
|
help="Test group for testing. "
|
|
"(backward compatibility)")
|
|
|
|
cli_explain_group = commands.add_parser("explain-group",
|
|
help="Explain selected group.")
|
|
cli_explain_group.add_argument("name",
|
|
help="Group name.")
|
|
|
|
commands.add_parser("show-all-groups",
|
|
help="Show all Proboscis groups")
|
|
commands.add_parser("show-fuelweb-groups",
|
|
help="Show Proboscis groups defined in fuelweb suite")
|
|
commands.add_parser("show-systest-groups",
|
|
help="Show Proboscis groups defined in Systest suite")
|
|
commands.add_parser("show-systest-configs",
|
|
help="Show configurations for Systest suite")
|
|
|
|
if len(sys.argv) == 1:
|
|
cli.print_help()
|
|
sys.exit(1)
|
|
|
|
return cli.parse_args()
|
|
|
|
|
|
def run(**kwargs):
|
|
config_name = kwargs.get('config_name', None)
|
|
groups = kwargs.get('run_groups', [])
|
|
old_groups = kwargs.get('groups', None)
|
|
explain = kwargs.get('explain', None)
|
|
|
|
groups_to_run = []
|
|
groups.extend(old_groups or [])
|
|
for g in set(groups):
|
|
if group_in_pytest(g):
|
|
sys.exit(pytest.main('-m {}'.format(g)))
|
|
if config_name:
|
|
register_system_test_cases(
|
|
groups=[g],
|
|
configs=[config_name])
|
|
groups_to_run.append("{0}({1})".format(g, config_name))
|
|
else:
|
|
register_system_test_cases(groups=[g])
|
|
groups_to_run.append(g)
|
|
if not set([split_group_config(i)[0] if split_group_config(i) else i
|
|
for i in groups_to_run]) < set(get_groups()):
|
|
sys.exit('There are no cases mapped to current group, '
|
|
'please be sure that you put right test group name.')
|
|
if explain:
|
|
print_explain(groups)
|
|
else:
|
|
register(groups=["run_system_test"], depends_on_groups=groups_to_run)
|
|
TestProgram(groups=['run_system_test'],
|
|
argv=clean_argv_proboscis()).run_and_exit()
|
|
|
|
|
|
def explain_group(**kwargs):
|
|
"""Explain selected group."""
|
|
name = kwargs.get('name', None)
|
|
print_explain(name)
|
|
|
|
|
|
def show_all_groups(**kwargs):
|
|
"""Show all Proboscis groups"""
|
|
groups_nums = get_groups()
|
|
out = {k: len(v) for k, v in groups_nums.items()}
|
|
print(pretty_log(out))
|
|
|
|
|
|
def show_fuelweb_groups(**kwargs):
|
|
"""Show Proboscis groups defined in fuelweb suite"""
|
|
groups_nums = get_groups()
|
|
|
|
out = {k: len(v) for k, v in groups_nums.items()
|
|
if not k.startswith('system_test')}
|
|
print(pretty_log(out))
|
|
|
|
|
|
def show_systest_groups(**kwargs):
|
|
"""Show Proboscis groups defined in Systest suite"""
|
|
groups_nums = get_groups()
|
|
|
|
out = {k: len(v) for k, v in groups_nums.items()
|
|
if k.startswith('system_test')}
|
|
print(pretty_log(out))
|
|
|
|
|
|
def show_systest_configs(**kwargs):
|
|
"""Show configurations for Systest suite"""
|
|
tests_configs = collect_yamls(get_path_to_config())
|
|
|
|
for c in get_list_confignames(tests_configs):
|
|
print(c)
|
|
|
|
|
|
COMMAND_MAP = {
|
|
"run": run,
|
|
"explain-group": explain_group,
|
|
"show-all-groups": show_all_groups,
|
|
"show-fuelweb-groups": show_fuelweb_groups,
|
|
"show-systest-groups": show_systest_groups,
|
|
"show-systest-configs": show_systest_configs
|
|
}
|
|
|
|
|
|
def shell():
|
|
args = cli()
|
|
discover_import_tests(basedir, tests_directory)
|
|
define_custom_groups()
|
|
map_test_review_in_fuel_library(**vars(args))
|
|
map_test_review_in_openstack_puppet_projects(**vars(args))
|
|
COMMAND_MAP[args.command](**vars(args))
|
|
|
|
|
|
if __name__ == '__main__':
|
|
shell()
|