Use new tools from community.internal_test_tools. (#1061) (#1062)

(cherry picked from commit a1e9412bed)

Co-authored-by: Felix Fontein <felix@fontein.de>
This commit is contained in:
patchback[bot] 2025-03-22 12:17:26 +01:00 committed by GitHub
parent f2f0492678
commit 64997ca907
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 63 additions and 37 deletions

View File

@ -13,6 +13,7 @@ from ansible.parsing.dataloader import DataLoader
from ansible.template import Templar from ansible.template import Templar
from ansible_collections.community.internal_test_tools.tests.unit.compat.mock import create_autospec from ansible_collections.community.internal_test_tools.tests.unit.compat.mock import create_autospec
from ansible_collections.community.internal_test_tools.tests.unit.utils.trust import make_trusted
from ansible_collections.community.docker.plugins.inventory.docker_containers import InventoryModule from ansible_collections.community.docker.plugins.inventory.docker_containers import InventoryModule
@ -258,7 +259,7 @@ def test_populate_filter(inventory, mocker):
'groups': {}, 'groups': {},
'keyed_groups': {}, 'keyed_groups': {},
'filters': [ 'filters': [
{'include': 'docker_state.Running is true'}, {'include': make_trusted('docker_state.Running is true')},
{'exclude': True}, {'exclude': True},
], ],
})) }))

View File

@ -11,7 +11,12 @@ __metaclass__ = type
import pytest import pytest
from ansible.utils.unsafe_proxy import AnsibleUnsafe from ansible_collections.community.internal_test_tools.tests.unit.utils.trust import (
make_untrusted as _make_untrusted,
make_trusted as _make_trusted,
is_trusted as _is_trusted,
SUPPORTS_DATA_TAGGING,
)
from ansible_collections.community.docker.plugins.plugin_utils.unsafe import ( from ansible_collections.community.docker.plugins.plugin_utils.unsafe import (
make_unsafe, make_unsafe,
@ -20,28 +25,14 @@ from ansible_collections.community.docker.plugins.plugin_utils.unsafe import (
TEST_MAKE_UNSAFE = [ TEST_MAKE_UNSAFE = [
( (
u'text', _make_trusted(u'text'),
[], [],
[ [
(), (),
], ],
), ),
( (
u'{{text}}', _make_trusted(u'{{text}}'),
[
(),
],
[],
),
(
b'text',
[],
[
(),
],
),
(
b'{{text}}',
[ [
(), (),
], ],
@ -49,14 +40,14 @@ TEST_MAKE_UNSAFE = [
), ),
( (
{ {
'skey': 'value', _make_trusted('skey'): _make_trusted('value'),
'ukey': '{{value}}', _make_trusted('ukey'): _make_trusted('{{value}}'),
1: [ 1: [
'value', _make_trusted('value'),
'{{value}}', _make_trusted('{{value}}'),
{ {
1.0: '{{value}}', 1.0: _make_trusted('{{value}}'),
2.0: 'value', 2.0: _make_trusted('value'),
}, },
], ],
}, },
@ -72,7 +63,7 @@ TEST_MAKE_UNSAFE = [
], ],
), ),
( (
['value', '{{value}}'], [_make_trusted('value'), _make_trusted('{{value}}')],
[ [
(1, ), (1, ),
], ],
@ -82,6 +73,24 @@ TEST_MAKE_UNSAFE = [
), ),
] ]
if not SUPPORTS_DATA_TAGGING:
TEST_MAKE_UNSAFE.extend([
(
_make_trusted(b"text"),
[],
[
(),
],
),
(
_make_trusted(b"{{text}}"),
[
(),
],
[],
),
])
@pytest.mark.parametrize("value, check_unsafe_paths, check_safe_paths", TEST_MAKE_UNSAFE) @pytest.mark.parametrize("value, check_unsafe_paths, check_safe_paths", TEST_MAKE_UNSAFE)
def test_make_unsafe(value, check_unsafe_paths, check_safe_paths): def test_make_unsafe(value, check_unsafe_paths, check_safe_paths):
@ -91,43 +100,59 @@ def test_make_unsafe(value, check_unsafe_paths, check_safe_paths):
obj = unsafe_value obj = unsafe_value
for elt in check_path: for elt in check_path:
obj = obj[elt] obj = obj[elt]
assert isinstance(obj, AnsibleUnsafe) assert not _is_trusted(obj)
for check_path in check_safe_paths: for check_path in check_safe_paths:
obj = unsafe_value obj = unsafe_value
for elt in check_path: for elt in check_path:
obj = obj[elt] obj = obj[elt]
assert not isinstance(obj, AnsibleUnsafe) assert _is_trusted(obj)
def test_make_unsafe_idempotence():
assert make_unsafe(None) is None
unsafe_str = _make_untrusted('{{test}}')
assert id(make_unsafe(unsafe_str)) == id(unsafe_str)
safe_str = _make_trusted('{{test}}')
assert id(make_unsafe(safe_str)) != id(safe_str)
def test_make_unsafe_dict_key(): def test_make_unsafe_dict_key():
value = { value = {
b'test': 1, _make_trusted(u'test'): 2,
u'test': 2,
} }
if not SUPPORTS_DATA_TAGGING:
value[_make_trusted(b"test")] = 1
unsafe_value = make_unsafe(value) unsafe_value = make_unsafe(value)
assert unsafe_value == value assert unsafe_value == value
for obj in unsafe_value: for obj in unsafe_value:
assert not isinstance(obj, AnsibleUnsafe) assert _is_trusted(obj)
value = { value = {
b'{{test}}': 1, _make_trusted(u'{{test}}'): 2,
u'{{test}}': 2,
} }
if not SUPPORTS_DATA_TAGGING:
value[_make_trusted(b"{{test}}")] = 1
unsafe_value = make_unsafe(value) unsafe_value = make_unsafe(value)
assert unsafe_value == value assert unsafe_value == value
for obj in unsafe_value: for obj in unsafe_value:
assert isinstance(obj, AnsibleUnsafe) assert not _is_trusted(obj)
def test_make_unsafe_set(): def test_make_unsafe_set():
value = set([b'test', u'test']) value = set([_make_trusted(u'test')])
if not SUPPORTS_DATA_TAGGING:
value.add(_make_trusted(b"test"))
unsafe_value = make_unsafe(value) unsafe_value = make_unsafe(value)
assert unsafe_value == value assert unsafe_value == value
for obj in unsafe_value: for obj in unsafe_value:
assert not isinstance(obj, AnsibleUnsafe) assert _is_trusted(obj)
value = set([b'{{test}}', u'{{test}}']) value = set([_make_trusted(u'{{test}}')])
if not SUPPORTS_DATA_TAGGING:
value.add(_make_trusted(b"{{test}}"))
unsafe_value = make_unsafe(value) unsafe_value = make_unsafe(value)
assert unsafe_value == value assert unsafe_value == value
for obj in unsafe_value: for obj in unsafe_value:
assert isinstance(obj, AnsibleUnsafe) assert not _is_trusted(obj)