From dac226de4a055f6990e9e5d112f9297f5a984b31 Mon Sep 17 00:00:00 2001 From: Matt Clay Date: Thu, 22 Dec 2016 09:57:17 -0800 Subject: [PATCH] Improve ansible-test completion and messaging. (#19627) * Simplify type annotation of args.docker_util. * Improve error messaging for ansible-doc test. * Add completion for docker, remote and windows. --- test/runner/completion/docker.txt | 9 ++++++ test/runner/completion/remote.txt | 3 ++ test/runner/completion/windows.txt | 7 +++++ test/runner/lib/executor.py | 8 +++--- test/runner/test.py | 46 ++++++++++++++++++++++++++++-- 5 files changed, 66 insertions(+), 7 deletions(-) create mode 100644 test/runner/completion/docker.txt create mode 100644 test/runner/completion/remote.txt create mode 100644 test/runner/completion/windows.txt diff --git a/test/runner/completion/docker.txt b/test/runner/completion/docker.txt new file mode 100644 index 00000000000..92852955b89 --- /dev/null +++ b/test/runner/completion/docker.txt @@ -0,0 +1,9 @@ +centos6 +centos7 +fedora-rawhide +fedora23 +opensuseleap +ubuntu1204 +ubuntu1404 +ubuntu1604 +ubuntu1604py3 diff --git a/test/runner/completion/remote.txt b/test/runner/completion/remote.txt new file mode 100644 index 00000000000..9dca305db4e --- /dev/null +++ b/test/runner/completion/remote.txt @@ -0,0 +1,3 @@ +freebsd/10.3-STABLE +freebsd/11.0-STABLE +osx/10.11 diff --git a/test/runner/completion/windows.txt b/test/runner/completion/windows.txt new file mode 100644 index 00000000000..54c745553b9 --- /dev/null +++ b/test/runner/completion/windows.txt @@ -0,0 +1,7 @@ +2008-SP2 +2008-R2_SP1 +2012-RTM +2012-R2_RTM +2016-English-Full-Base +2016-English-Full-Containers +2016-English-Nano-Base diff --git a/test/runner/lib/executor.py b/test/runner/lib/executor.py index 4febf499e61..a22f199fa8c 100644 --- a/test/runner/lib/executor.py +++ b/test/runner/lib/executor.py @@ -723,7 +723,7 @@ def command_sanity_ansible_doc(args, targets, python_version): stdout, stderr = intercept_command(args, cmd, env=env, capture=True, python_version=python_version) if stderr: - # consider any output on stderr an error, even though the return code is zero + display.error('Output on stderr from ansible-doc is considered an error.') raise SubprocessError(cmd, stderr=stderr) if stdout: @@ -927,8 +927,8 @@ def detect_changes_local(args): def docker_qualify_image(name): """ - :type name: str | None - :rtype: str | None + :type name: str + :rtype: str """ if not name or any((c in name) for c in ('/', ':')): return name @@ -1105,7 +1105,7 @@ class EnvironmentConfig(CommonConfig): self.remote = args.remote # type: str self.docker_privileged = args.docker_privileged if 'docker_privileged' in args else False # type: bool - self.docker_util = docker_qualify_image(args.docker_util if 'docker_util' in args else None) # type: str | None + self.docker_util = docker_qualify_image(args.docker_util if 'docker_util' in args else '') # type: str self.docker_pull = args.docker_pull if 'docker_pull' in args else False # type: bool self.tox_sitepackages = args.tox_sitepackages # type: bool diff --git a/test/runner/test.py b/test/runner/test.py index 7f61d3a847e..9cce048c152 100755 --- a/test/runner/test.py +++ b/test/runner/test.py @@ -205,7 +205,7 @@ def parse_args(): windows_integration.add_argument('--windows', metavar='VERSION', action='append', - help='windows version') + help='windows version').completer = complete_windows units = subparsers.add_parser('units', parents=[test], @@ -413,12 +413,12 @@ def add_environments(parser, tox_version=False, tox_only=False): nargs='?', default=None, const='ubuntu1604', - help='run from a docker container') + help='run from a docker container').completer = complete_docker environments.add_argument('--remote', metavar='PLATFORM', default=None, - help='run from a remote instance') + help='run from a remote instance').completer = complete_remote remote = parser.add_argument_group(title='remote arguments') @@ -463,5 +463,45 @@ def complete_target(prefix, parsed_args, **_): return find_target_completion(parsed_args.targets, prefix) +def complete_remote(prefix, parsed_args, **_): + """ + :type prefix: unicode + :type parsed_args: any + :rtype: list[str] + """ + del parsed_args + + with open('test/runner/completion/remote.txt', 'r') as completion_fd: + images = completion_fd.read().splitlines() + + return [i for i in images if i.startswith(prefix)] + + +def complete_docker(prefix, parsed_args, **_): + """ + :type prefix: unicode + :type parsed_args: any + :rtype: list[str] + """ + del parsed_args + + with open('test/runner/completion/docker.txt', 'r') as completion_fd: + images = completion_fd.read().splitlines() + + return [i for i in images if i.startswith(prefix)] + + +def complete_windows(prefix, parsed_args, **_): + """ + :type prefix: unicode + :type parsed_args: any + :rtype: list[str] + """ + with open('test/runner/completion/windows.txt', 'r') as completion_fd: + images = completion_fd.read().splitlines() + + return [i for i in images if i.startswith(prefix) and (not parsed_args.windows or i not in parsed_args.windows)] + + if __name__ == '__main__': main()