mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
Multiple ansible-test fixes. (#38247)
* Add ansible-test integration --allow-root option. * Fix destructive target override. * Fix bad type hint SanityResult -> TestResult. * Fix skip/python3 filtering with --docker option.
This commit is contained in:
parent
f37a44430f
commit
a5cbc0a2c8
15 changed files with 32 additions and 25 deletions
|
@ -160,7 +160,8 @@ class IntegrationConfig(TestConfig):
|
||||||
|
|
||||||
self.start_at = args.start_at # type: str
|
self.start_at = args.start_at # type: str
|
||||||
self.start_at_task = args.start_at_task # type: str
|
self.start_at_task = args.start_at_task # type: str
|
||||||
self.allow_destructive = args.allow_destructive if 'allow_destructive' in args else False # type: bool
|
self.allow_destructive = args.allow_destructive # type: bool
|
||||||
|
self.allow_root = args.allow_root # type: bool
|
||||||
self.retry_on_error = args.retry_on_error # type: bool
|
self.retry_on_error = args.retry_on_error # type: bool
|
||||||
self.continue_on_error = args.continue_on_error # type: bool
|
self.continue_on_error = args.continue_on_error # type: bool
|
||||||
self.debug_strategy = args.debug_strategy # type: bool
|
self.debug_strategy = args.debug_strategy # type: bool
|
||||||
|
|
|
@ -1183,23 +1183,23 @@ def get_integration_local_filter(args, targets):
|
||||||
"""
|
"""
|
||||||
exclude = []
|
exclude = []
|
||||||
|
|
||||||
if os.getuid() != 0:
|
if not args.allow_root and os.getuid() != 0:
|
||||||
skip = 'needs/root/'
|
skip = 'needs/root/'
|
||||||
skipped = [target.name for target in targets if skip in target.aliases]
|
skipped = [target.name for target in targets if skip in target.aliases]
|
||||||
if skipped:
|
if skipped:
|
||||||
exclude.append(skip)
|
exclude.append(skip)
|
||||||
display.warning('Excluding tests marked "%s" which require running as root: %s'
|
display.warning('Excluding tests marked "%s" which require --allow-root or running as root: %s'
|
||||||
% (skip.rstrip('/'), ', '.join(skipped)))
|
% (skip.rstrip('/'), ', '.join(skipped)))
|
||||||
|
|
||||||
# consider explicit testing of destructive as though --allow-destructive was given
|
override_destructive = set(target for target in args.include if target.startswith('destructive/'))
|
||||||
include_destructive = any(target.startswith('destructive/') for target in args.include)
|
|
||||||
|
|
||||||
if not args.allow_destructive and not include_destructive:
|
if not args.allow_destructive:
|
||||||
skip = 'destructive/'
|
skip = 'destructive/'
|
||||||
skipped = [target.name for target in targets if skip in target.aliases]
|
override = [target.name for target in targets if override_destructive & set(target.aliases)]
|
||||||
|
skipped = [target.name for target in targets if skip in target.aliases and target.name not in override]
|
||||||
if skipped:
|
if skipped:
|
||||||
exclude.append(skip)
|
exclude.extend(skipped)
|
||||||
display.warning('Excluding tests marked "%s" which require --allow-destructive to run locally: %s'
|
display.warning('Excluding tests marked "%s" which require --allow-destructive or prefixing with "destructive/" to run locally: %s'
|
||||||
% (skip.rstrip('/'), ', '.join(skipped)))
|
% (skip.rstrip('/'), ', '.join(skipped)))
|
||||||
|
|
||||||
if args.python_version.startswith('3'):
|
if args.python_version.startswith('3'):
|
||||||
|
@ -1233,12 +1233,14 @@ def get_integration_docker_filter(args, targets):
|
||||||
display.warning('Excluding tests marked "%s" which require --docker-privileged to run under docker: %s'
|
display.warning('Excluding tests marked "%s" which require --docker-privileged to run under docker: %s'
|
||||||
% (skip.rstrip('/'), ', '.join(skipped)))
|
% (skip.rstrip('/'), ', '.join(skipped)))
|
||||||
|
|
||||||
|
docker_image = args.docker.split('@')[0] # strip SHA for proper tag comparison
|
||||||
|
|
||||||
python_version = 2 # images are expected to default to python 2 unless otherwise specified
|
python_version = 2 # images are expected to default to python 2 unless otherwise specified
|
||||||
|
|
||||||
if args.docker.endswith('py3'):
|
if docker_image.endswith('py3'):
|
||||||
python_version = 3 # docker images ending in 'py3' are expected to default to python 3
|
python_version = 3 # docker images ending in 'py3' are expected to default to python 3
|
||||||
|
|
||||||
if args.docker.endswith(':default'):
|
if docker_image.endswith(':default'):
|
||||||
python_version = 3 # docker images tagged 'default' are expected to default to python 3
|
python_version = 3 # docker images tagged 'default' are expected to default to python 3
|
||||||
|
|
||||||
if args.python: # specifying a numeric --python option overrides the default python
|
if args.python: # specifying a numeric --python option overrides the default python
|
||||||
|
|
|
@ -220,7 +220,7 @@ class SanityCodeSmellTest(SanityTest):
|
||||||
"""
|
"""
|
||||||
:type args: SanityConfig
|
:type args: SanityConfig
|
||||||
:type targets: SanityTargets
|
:type targets: SanityTargets
|
||||||
:rtype: SanityResult
|
:rtype: TestResult
|
||||||
"""
|
"""
|
||||||
if self.path.endswith('.py'):
|
if self.path.endswith('.py'):
|
||||||
cmd = [args.python_executable, self.path]
|
cmd = [args.python_executable, self.path]
|
||||||
|
@ -327,7 +327,7 @@ class SanitySingleVersion(SanityFunc):
|
||||||
"""
|
"""
|
||||||
:type args: SanityConfig
|
:type args: SanityConfig
|
||||||
:type targets: SanityTargets
|
:type targets: SanityTargets
|
||||||
:rtype: SanityResult
|
:rtype: TestResult
|
||||||
"""
|
"""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@ -340,7 +340,7 @@ class SanityMultipleVersion(SanityFunc):
|
||||||
:type args: SanityConfig
|
:type args: SanityConfig
|
||||||
:type targets: SanityTargets
|
:type targets: SanityTargets
|
||||||
:type python_version: str
|
:type python_version: str
|
||||||
:rtype: SanityResult
|
:rtype: TestResult
|
||||||
"""
|
"""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
|
@ -33,7 +33,7 @@ class AnsibleDocTest(SanityMultipleVersion):
|
||||||
:type args: SanityConfig
|
:type args: SanityConfig
|
||||||
:type targets: SanityTargets
|
:type targets: SanityTargets
|
||||||
:type python_version: str
|
:type python_version: str
|
||||||
:rtype: SanityResult
|
:rtype: TestResult
|
||||||
"""
|
"""
|
||||||
with open('test/sanity/ansible-doc/skip.txt', 'r') as skip_fd:
|
with open('test/sanity/ansible-doc/skip.txt', 'r') as skip_fd:
|
||||||
skip_modules = set(skip_fd.read().splitlines())
|
skip_modules = set(skip_fd.read().splitlines())
|
||||||
|
|
|
@ -35,7 +35,7 @@ class CompileTest(SanityMultipleVersion):
|
||||||
:type args: SanityConfig
|
:type args: SanityConfig
|
||||||
:type targets: SanityTargets
|
:type targets: SanityTargets
|
||||||
:type python_version: str
|
:type python_version: str
|
||||||
:rtype: SanityResult
|
:rtype: TestResult
|
||||||
"""
|
"""
|
||||||
# optional list of regex patterns to exclude from tests
|
# optional list of regex patterns to exclude from tests
|
||||||
skip_file = 'test/sanity/compile/python%s-skip.txt' % python_version
|
skip_file = 'test/sanity/compile/python%s-skip.txt' % python_version
|
||||||
|
|
|
@ -41,7 +41,7 @@ class ImportTest(SanityMultipleVersion):
|
||||||
:type args: SanityConfig
|
:type args: SanityConfig
|
||||||
:type targets: SanityTargets
|
:type targets: SanityTargets
|
||||||
:type python_version: str
|
:type python_version: str
|
||||||
:rtype: SanityResult
|
:rtype: TestResult
|
||||||
"""
|
"""
|
||||||
with open('test/sanity/import/skip.txt', 'r') as skip_fd:
|
with open('test/sanity/import/skip.txt', 'r') as skip_fd:
|
||||||
skip_paths = skip_fd.read().splitlines()
|
skip_paths = skip_fd.read().splitlines()
|
||||||
|
|
|
@ -35,7 +35,7 @@ class Pep8Test(SanitySingleVersion):
|
||||||
"""
|
"""
|
||||||
:type args: SanityConfig
|
:type args: SanityConfig
|
||||||
:type targets: SanityTargets
|
:type targets: SanityTargets
|
||||||
:rtype: SanityResult
|
:rtype: TestResult
|
||||||
"""
|
"""
|
||||||
with open(PEP8_SKIP_PATH, 'r') as skip_fd:
|
with open(PEP8_SKIP_PATH, 'r') as skip_fd:
|
||||||
skip_paths = skip_fd.read().splitlines()
|
skip_paths = skip_fd.read().splitlines()
|
||||||
|
|
|
@ -39,7 +39,7 @@ class PslintTest(SanitySingleVersion):
|
||||||
"""
|
"""
|
||||||
:type args: SanityConfig
|
:type args: SanityConfig
|
||||||
:type targets: SanityTargets
|
:type targets: SanityTargets
|
||||||
:rtype: SanityResult
|
:rtype: TestResult
|
||||||
"""
|
"""
|
||||||
with open(PSLINT_SKIP_PATH, 'r') as skip_fd:
|
with open(PSLINT_SKIP_PATH, 'r') as skip_fd:
|
||||||
skip_paths = skip_fd.read().splitlines()
|
skip_paths = skip_fd.read().splitlines()
|
||||||
|
|
|
@ -63,7 +63,7 @@ class PylintTest(SanitySingleVersion):
|
||||||
"""
|
"""
|
||||||
:type args: SanityConfig
|
:type args: SanityConfig
|
||||||
:type targets: SanityTargets
|
:type targets: SanityTargets
|
||||||
:rtype: SanityResult
|
:rtype: TestResult
|
||||||
"""
|
"""
|
||||||
if args.python_version in UNSUPPORTED_PYTHON_VERSIONS:
|
if args.python_version in UNSUPPORTED_PYTHON_VERSIONS:
|
||||||
display.warning('Skipping pylint on unsupported Python version %s.' % args.python_version)
|
display.warning('Skipping pylint on unsupported Python version %s.' % args.python_version)
|
||||||
|
|
|
@ -34,7 +34,7 @@ class RstcheckTest(SanitySingleVersion):
|
||||||
"""
|
"""
|
||||||
:type args: SanityConfig
|
:type args: SanityConfig
|
||||||
:type targets: SanityTargets
|
:type targets: SanityTargets
|
||||||
:rtype: SanityResult
|
:rtype: TestResult
|
||||||
"""
|
"""
|
||||||
if args.python_version in UNSUPPORTED_PYTHON_VERSIONS:
|
if args.python_version in UNSUPPORTED_PYTHON_VERSIONS:
|
||||||
display.warning('Skipping rstcheck on unsupported Python version %s.' % args.python_version)
|
display.warning('Skipping rstcheck on unsupported Python version %s.' % args.python_version)
|
||||||
|
|
|
@ -23,7 +23,7 @@ class SanityDocsTest(SanitySingleVersion):
|
||||||
"""
|
"""
|
||||||
:type args: SanityConfig
|
:type args: SanityConfig
|
||||||
:type targets: SanityTargets
|
:type targets: SanityTargets
|
||||||
:rtype: SanityResult
|
:rtype: TestResult
|
||||||
"""
|
"""
|
||||||
sanity_dir = 'docs/docsite/rst/dev_guide/testing/sanity'
|
sanity_dir = 'docs/docsite/rst/dev_guide/testing/sanity'
|
||||||
sanity_docs = set(part[0] for part in (os.path.splitext(name) for name in os.listdir(sanity_dir)) if part[1] == '.rst')
|
sanity_docs = set(part[0] for part in (os.path.splitext(name) for name in os.listdir(sanity_dir)) if part[1] == '.rst')
|
||||||
|
|
|
@ -32,7 +32,7 @@ class ShellcheckTest(SanitySingleVersion):
|
||||||
"""
|
"""
|
||||||
:type args: SanityConfig
|
:type args: SanityConfig
|
||||||
:type targets: SanityTargets
|
:type targets: SanityTargets
|
||||||
:rtype: SanityResult
|
:rtype: TestResult
|
||||||
"""
|
"""
|
||||||
with open('test/sanity/shellcheck/skip.txt', 'r') as skip_fd:
|
with open('test/sanity/shellcheck/skip.txt', 'r') as skip_fd:
|
||||||
skip_paths = set(skip_fd.read().splitlines())
|
skip_paths = set(skip_fd.read().splitlines())
|
||||||
|
|
|
@ -42,7 +42,7 @@ class ValidateModulesTest(SanitySingleVersion):
|
||||||
"""
|
"""
|
||||||
:type args: SanityConfig
|
:type args: SanityConfig
|
||||||
:type targets: SanityTargets
|
:type targets: SanityTargets
|
||||||
:rtype: SanityResult
|
:rtype: TestResult
|
||||||
"""
|
"""
|
||||||
with open(VALIDATE_SKIP_PATH, 'r') as skip_fd:
|
with open(VALIDATE_SKIP_PATH, 'r') as skip_fd:
|
||||||
skip_paths = skip_fd.read().splitlines()
|
skip_paths = skip_fd.read().splitlines()
|
||||||
|
|
|
@ -29,7 +29,7 @@ class YamllintTest(SanitySingleVersion):
|
||||||
"""
|
"""
|
||||||
:type args: SanityConfig
|
:type args: SanityConfig
|
||||||
:type targets: SanityTargets
|
:type targets: SanityTargets
|
||||||
:rtype: SanityResult
|
:rtype: TestResult
|
||||||
"""
|
"""
|
||||||
paths = [
|
paths = [
|
||||||
[i.path for i in targets.include if os.path.splitext(i.path)[1] in ('.yml', '.yaml')],
|
[i.path for i in targets.include if os.path.splitext(i.path)[1] in ('.yml', '.yaml')],
|
||||||
|
|
|
@ -225,6 +225,10 @@ def parse_args():
|
||||||
action='store_true',
|
action='store_true',
|
||||||
help='allow destructive tests (--local and --tox only)')
|
help='allow destructive tests (--local and --tox only)')
|
||||||
|
|
||||||
|
integration.add_argument('--allow-root',
|
||||||
|
action='store_true',
|
||||||
|
help='allow tests requiring root when not root')
|
||||||
|
|
||||||
integration.add_argument('--retry-on-error',
|
integration.add_argument('--retry-on-error',
|
||||||
action='store_true',
|
action='store_true',
|
||||||
help='retry failed test with increased verbosity')
|
help='retry failed test with increased verbosity')
|
||||||
|
|
Loading…
Reference in a new issue