[stable-2.14] ansible-test - Fix traceback when mixing sources (#80801) (#80828)

* ansible-test - Fix traceback when mixing sources

* ansible-test - Refactor layout error handling

(cherry picked from commit b16041f1a9)
pull/80870/head
Matt Clay 3 years ago committed by GitHub
parent 2a1cf1ae91
commit 45df7a9534
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -0,0 +1,3 @@
bugfixes:
- ansible-test - Fix a traceback that occurs when attempting to test Ansible source using a different ansible-test.
A clear error message is now given when this scenario occurs.

@ -10,7 +10,6 @@ from .util import (
ApplicationError, ApplicationError,
import_plugins, import_plugins,
is_subdir, is_subdir,
is_valid_identifier,
ANSIBLE_LIB_ROOT, ANSIBLE_LIB_ROOT,
ANSIBLE_TEST_ROOT, ANSIBLE_TEST_ROOT,
ANSIBLE_SOURCE_ROOT, ANSIBLE_SOURCE_ROOT,
@ -219,12 +218,8 @@ class DataContext:
elif 'ansible_collections' not in cwd.split(os.path.sep): elif 'ansible_collections' not in cwd.split(os.path.sep):
blocks.append('No "ansible_collections" parent directory was found.') blocks.append('No "ansible_collections" parent directory was found.')
if self.content.collection: if isinstance(self.content.unsupported, list):
if not is_valid_identifier(self.content.collection.namespace): blocks.extend(self.content.unsupported)
blocks.append(f'The namespace "{self.content.collection.namespace}" is an invalid identifier or a reserved keyword.')
if not is_valid_identifier(self.content.collection.name):
blocks.append(f'The name "{self.content.collection.name}" is an invalid identifier or a reserved keyword.')
message = '\n'.join(blocks) message = '\n'.join(blocks)

@ -95,7 +95,7 @@ class ContentLayout(Layout):
unit_module_path: str, unit_module_path: str,
unit_module_utils_path: str, unit_module_utils_path: str,
unit_messages: t.Optional[LayoutMessages], unit_messages: t.Optional[LayoutMessages],
unsupported: bool = False, unsupported: bool | list[str] = False,
) -> None: ) -> None:
super().__init__(root, paths) super().__init__(root, paths)

@ -8,6 +8,11 @@ from . import (
LayoutProvider, LayoutProvider,
) )
from ...util import (
ANSIBLE_SOURCE_ROOT,
ANSIBLE_TEST_ROOT,
)
class AnsibleLayout(LayoutProvider): class AnsibleLayout(LayoutProvider):
"""Layout provider for Ansible source.""" """Layout provider for Ansible source."""
@ -26,6 +31,15 @@ class AnsibleLayout(LayoutProvider):
module_utils='lib/ansible/module_utils', module_utils='lib/ansible/module_utils',
) )
errors: list[str] = []
if root != ANSIBLE_SOURCE_ROOT:
errors.extend((
f'Cannot test "{root}" with ansible-test from "{ANSIBLE_TEST_ROOT}".',
'',
f'Did you intend to run "{root}/bin/ansible-test" instead?',
))
return ContentLayout( return ContentLayout(
root, root,
paths, paths,
@ -43,4 +57,5 @@ class AnsibleLayout(LayoutProvider):
unit_module_path='test/units/modules', unit_module_path='test/units/modules',
unit_module_utils_path='test/units/module_utils', unit_module_utils_path='test/units/module_utils',
unit_messages=None, unit_messages=None,
unsupported=errors,
) )

@ -53,6 +53,14 @@ class CollectionLayout(LayoutProvider):
integration_targets_path = self.__check_integration_path(paths, integration_messages) integration_targets_path = self.__check_integration_path(paths, integration_messages)
self.__check_unit_path(paths, unit_messages) self.__check_unit_path(paths, unit_messages)
errors: list[str] = []
if not is_valid_identifier(collection_namespace):
errors.append(f'The namespace "{collection_namespace}" is an invalid identifier or a reserved keyword.')
if not is_valid_identifier(collection_name):
errors.append(f'The name "{collection_name}" is an invalid identifier or a reserved keyword.')
return ContentLayout( return ContentLayout(
root, root,
paths, paths,
@ -74,7 +82,7 @@ class CollectionLayout(LayoutProvider):
unit_module_path='tests/unit/plugins/modules', unit_module_path='tests/unit/plugins/modules',
unit_module_utils_path='tests/unit/plugins/module_utils', unit_module_utils_path='tests/unit/plugins/module_utils',
unit_messages=unit_messages, unit_messages=unit_messages,
unsupported=not (is_valid_identifier(collection_namespace) and is_valid_identifier(collection_name)), unsupported=errors,
) )
@staticmethod @staticmethod

Loading…
Cancel
Save