From 866d91bb7dbf6e089d34710d81326878a8ce3126 Mon Sep 17 00:00:00 2001 From: Matt Clay Date: Mon, 20 Feb 2023 17:54:34 -0800 Subject: [stable-2.13] ansible-test - Allow target prefixes to use `_` (#80021) Integration test target prefixes defined in a `tests/integration/target-prefixes.{group}` file can now contain an underscore (`_`) character. (cherry picked from commit e6cffce0eb58ba54c097f4ce7111bb97e6805051) Co-authored-by: Matt Clay --- .../fragments/ansible-test-integration-target-prefixes.yml | 4 ++++ .../ns/col/tests/integration/target-prefixes.something | 2 ++ .../ns/col/tests/integration/targets/one-part_test/aliases | 0 .../ns/col/tests/integration/targets/two_part_test/aliases | 0 .../targets/ansible-test-integration-targets/test.py | 12 ++++++++++++ test/lib/ansible_test/_internal/target.py | 10 +++------- 6 files changed, 21 insertions(+), 7 deletions(-) create mode 100644 changelogs/fragments/ansible-test-integration-target-prefixes.yml create mode 100644 test/integration/targets/ansible-test-integration-targets/ansible_collections/ns/col/tests/integration/target-prefixes.something create mode 100644 test/integration/targets/ansible-test-integration-targets/ansible_collections/ns/col/tests/integration/targets/one-part_test/aliases create mode 100644 test/integration/targets/ansible-test-integration-targets/ansible_collections/ns/col/tests/integration/targets/two_part_test/aliases diff --git a/changelogs/fragments/ansible-test-integration-target-prefixes.yml b/changelogs/fragments/ansible-test-integration-target-prefixes.yml new file mode 100644 index 0000000000..9a31a0ac9c --- /dev/null +++ b/changelogs/fragments/ansible-test-integration-target-prefixes.yml @@ -0,0 +1,4 @@ +bugfixes: + - ansible-test - Integration test target prefixes defined in a ``tests/integration/target-prefixes.{group}`` file + can now contain an underscore (``_``) character. + Resolves issue https://github.com/ansible/ansible/issues/79225 diff --git a/test/integration/targets/ansible-test-integration-targets/ansible_collections/ns/col/tests/integration/target-prefixes.something b/test/integration/targets/ansible-test-integration-targets/ansible_collections/ns/col/tests/integration/target-prefixes.something new file mode 100644 index 0000000000..b306549277 --- /dev/null +++ b/test/integration/targets/ansible-test-integration-targets/ansible_collections/ns/col/tests/integration/target-prefixes.something @@ -0,0 +1,2 @@ +one-part +two_part diff --git a/test/integration/targets/ansible-test-integration-targets/ansible_collections/ns/col/tests/integration/targets/one-part_test/aliases b/test/integration/targets/ansible-test-integration-targets/ansible_collections/ns/col/tests/integration/targets/one-part_test/aliases new file mode 100644 index 0000000000..e69de29bb2 diff --git a/test/integration/targets/ansible-test-integration-targets/ansible_collections/ns/col/tests/integration/targets/two_part_test/aliases b/test/integration/targets/ansible-test-integration-targets/ansible_collections/ns/col/tests/integration/targets/two_part_test/aliases new file mode 100644 index 0000000000..e69de29bb2 diff --git a/test/integration/targets/ansible-test-integration-targets/test.py b/test/integration/targets/ansible-test-integration-targets/test.py index 443ed59d62..8effb647fc 100755 --- a/test/integration/targets/ansible-test-integration-targets/test.py +++ b/test/integration/targets/ansible-test-integration-targets/test.py @@ -31,5 +31,17 @@ class OptionsTest(unittest.TestCase): raise Exception(f'{ex}:\n>>> Standard Output:\n{ex.stdout}\n>>> Standard Error:\n{ex.stderr}') from ex +class PrefixesTest(unittest.TestCase): + def test_prefixes(self): + try: + command = ['ansible-test', 'integration', '--list-targets'] + + something = subprocess.run([*command, 'something/'], text=True, capture_output=True, check=True) + + self.assertEqual(something.stdout.splitlines(), ['one-part_test', 'two_part_test']) + except subprocess.CalledProcessError as ex: + raise Exception(f'{ex}:\n>>> Standard Output:\n{ex.stdout}\n>>> Standard Error:\n{ex.stderr}') from ex + + if __name__ == '__main__': unittest.main() diff --git a/test/lib/ansible_test/_internal/target.py b/test/lib/ansible_test/_internal/target.py index 6b29605d92..53531d7992 100644 --- a/test/lib/ansible_test/_internal/target.py +++ b/test/lib/ansible_test/_internal/target.py @@ -623,13 +623,9 @@ class IntegrationTarget(CompletionTarget): if 'needs/httptester' in groups: groups.append('cloud/httptester') # backwards compatibility for when it was not a cloud plugin - if '_' in self.name: - prefix = self.name[:self.name.find('_')] - else: - prefix = None - - if prefix in prefixes: - group = prefixes[prefix] + for prefix, group in prefixes.items(): + if not self.name.startswith(f'{prefix}_'): + continue if group != prefix: group = '%s/%s' % (group, prefix) -- cgit v1.2.1