summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Clay <matt@mystile.com>2023-02-20 17:54:34 -0800
committerMatt Clay <matt@mystile.com>2023-03-14 17:51:48 -0700
commitf630cfb50a086e9b1b2fe1b736475fc4e5dd0e7a (patch)
tree20cc611899bdd9c71e117d593fbb2637c5be520f
parente7bf6d4bf9c859800eabc18800b31bda2dca255b (diff)
downloadansible-f630cfb50a086e9b1b2fe1b736475fc4e5dd0e7a.tar.gz
[stable-2.12] 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 <matt@mystile.com>
-rw-r--r--changelogs/fragments/ansible-test-integration-target-prefixes.yml4
-rw-r--r--test/integration/targets/ansible-test-integration-targets/ansible_collections/ns/col/tests/integration/target-prefixes.something2
-rw-r--r--test/integration/targets/ansible-test-integration-targets/ansible_collections/ns/col/tests/integration/targets/one-part_test/aliases0
-rw-r--r--test/integration/targets/ansible-test-integration-targets/ansible_collections/ns/col/tests/integration/targets/two_part_test/aliases0
-rwxr-xr-xtest/integration/targets/ansible-test-integration-targets/test.py12
-rw-r--r--test/lib/ansible_test/_internal/target.py10
6 files changed, 21 insertions, 7 deletions
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
--- /dev/null
+++ b/test/integration/targets/ansible-test-integration-targets/ansible_collections/ns/col/tests/integration/targets/one-part_test/aliases
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
--- /dev/null
+++ b/test/integration/targets/ansible-test-integration-targets/ansible_collections/ns/col/tests/integration/targets/two_part_test/aliases
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)