summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Clay <matt@mystile.com>2023-05-17 09:07:04 -0700
committerGitHub <noreply@github.com>2023-05-17 09:07:04 -0700
commitb16041f1a91bb74b7adbf2ad1f1af25603151cb3 (patch)
treef580eaa484288d8b095f3fd1e87d68f61b62fa14
parent2fd64161c1ae4a8930e9b6094804ac9976a9f2ad (diff)
downloadansible-b16041f1a91bb74b7adbf2ad1f1af25603151cb3.tar.gz
ansible-test - Fix traceback when mixing sources (#80801)
* ansible-test - Fix traceback when mixing sources * ansible-test - Refactor layout error handling
-rw-r--r--changelogs/fragments/ansible-test-source-detection.yml3
-rw-r--r--test/lib/ansible_test/_internal/data.py9
-rw-r--r--test/lib/ansible_test/_internal/provider/layout/__init__.py2
-rw-r--r--test/lib/ansible_test/_internal/provider/layout/ansible.py15
-rw-r--r--test/lib/ansible_test/_internal/provider/layout/collection.py10
5 files changed, 30 insertions, 9 deletions
diff --git a/changelogs/fragments/ansible-test-source-detection.yml b/changelogs/fragments/ansible-test-source-detection.yml
new file mode 100644
index 0000000000..0fd97380d1
--- /dev/null
+++ b/changelogs/fragments/ansible-test-source-detection.yml
@@ -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.
diff --git a/test/lib/ansible_test/_internal/data.py b/test/lib/ansible_test/_internal/data.py
index 379ee7b011..67f7a06ce3 100644
--- a/test/lib/ansible_test/_internal/data.py
+++ b/test/lib/ansible_test/_internal/data.py
@@ -10,7 +10,6 @@ from .util import (
ApplicationError,
import_plugins,
is_subdir,
- is_valid_identifier,
ANSIBLE_LIB_ROOT,
ANSIBLE_TEST_ROOT,
ANSIBLE_SOURCE_ROOT,
@@ -219,12 +218,8 @@ class DataContext:
elif 'ansible_collections' not in cwd.split(os.path.sep):
blocks.append('No "ansible_collections" parent directory was found.')
- if self.content.collection:
- if not is_valid_identifier(self.content.collection.namespace):
- 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.')
+ if isinstance(self.content.unsupported, list):
+ blocks.extend(self.content.unsupported)
message = '\n'.join(blocks)
diff --git a/test/lib/ansible_test/_internal/provider/layout/__init__.py b/test/lib/ansible_test/_internal/provider/layout/__init__.py
index 4eca05cedb..a0a0609be5 100644
--- a/test/lib/ansible_test/_internal/provider/layout/__init__.py
+++ b/test/lib/ansible_test/_internal/provider/layout/__init__.py
@@ -95,7 +95,7 @@ class ContentLayout(Layout):
unit_module_path: str,
unit_module_utils_path: str,
unit_messages: t.Optional[LayoutMessages],
- unsupported: bool = False,
+ unsupported: bool | list[str] = False,
) -> None:
super().__init__(root, paths)
diff --git a/test/lib/ansible_test/_internal/provider/layout/ansible.py b/test/lib/ansible_test/_internal/provider/layout/ansible.py
index d2f8cc818a..3ee818a5b5 100644
--- a/test/lib/ansible_test/_internal/provider/layout/ansible.py
+++ b/test/lib/ansible_test/_internal/provider/layout/ansible.py
@@ -8,6 +8,11 @@ from . import (
LayoutProvider,
)
+from ...util import (
+ ANSIBLE_SOURCE_ROOT,
+ ANSIBLE_TEST_ROOT,
+)
+
class AnsibleLayout(LayoutProvider):
"""Layout provider for Ansible source."""
@@ -26,6 +31,15 @@ class AnsibleLayout(LayoutProvider):
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(
root,
paths,
@@ -43,4 +57,5 @@ class AnsibleLayout(LayoutProvider):
unit_module_path='test/units/modules',
unit_module_utils_path='test/units/module_utils',
unit_messages=None,
+ unsupported=errors,
)
diff --git a/test/lib/ansible_test/_internal/provider/layout/collection.py b/test/lib/ansible_test/_internal/provider/layout/collection.py
index d747f31f31..a9221be6f3 100644
--- a/test/lib/ansible_test/_internal/provider/layout/collection.py
+++ b/test/lib/ansible_test/_internal/provider/layout/collection.py
@@ -53,6 +53,14 @@ class CollectionLayout(LayoutProvider):
integration_targets_path = self.__check_integration_path(paths, integration_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(
root,
paths,
@@ -74,7 +82,7 @@ class CollectionLayout(LayoutProvider):
unit_module_path='tests/unit/plugins/modules',
unit_module_utils_path='tests/unit/plugins/module_utils',
unit_messages=unit_messages,
- unsupported=not (is_valid_identifier(collection_namespace) and is_valid_identifier(collection_name)),
+ unsupported=errors,
)
@staticmethod