diff --git a/tests/unit/plugins/inventory/test_docker_containers.py b/tests/unit/plugins/inventory/test_docker_containers.py index 3497c878..86771577 100644 --- a/tests/unit/plugins/inventory/test_docker_containers.py +++ b/tests/unit/plugins/inventory/test_docker_containers.py @@ -13,6 +13,7 @@ from ansible.parsing.dataloader import DataLoader 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.utils.trust import make_trusted from ansible_collections.community.docker.plugins.inventory.docker_containers import InventoryModule @@ -258,7 +259,7 @@ def test_populate_filter(inventory, mocker): 'groups': {}, 'keyed_groups': {}, 'filters': [ - {'include': 'docker_state.Running is true'}, + {'include': make_trusted('docker_state.Running is true')}, {'exclude': True}, ], })) diff --git a/tests/unit/plugins/plugin_utils/test_unsafe.py b/tests/unit/plugins/plugin_utils/test_unsafe.py index 286c51cf..b2b5cdf7 100644 --- a/tests/unit/plugins/plugin_utils/test_unsafe.py +++ b/tests/unit/plugins/plugin_utils/test_unsafe.py @@ -11,7 +11,12 @@ __metaclass__ = type 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 ( make_unsafe, @@ -20,28 +25,14 @@ from ansible_collections.community.docker.plugins.plugin_utils.unsafe import ( TEST_MAKE_UNSAFE = [ ( - u'text', + _make_trusted(u'text'), [], [ (), ], ), ( - u'{{text}}', - [ - (), - ], - [], - ), - ( - b'text', - [], - [ - (), - ], - ), - ( - b'{{text}}', + _make_trusted(u'{{text}}'), [ (), ], @@ -49,14 +40,14 @@ TEST_MAKE_UNSAFE = [ ), ( { - 'skey': 'value', - 'ukey': '{{value}}', + _make_trusted('skey'): _make_trusted('value'), + _make_trusted('ukey'): _make_trusted('{{value}}'), 1: [ - 'value', - '{{value}}', + _make_trusted('value'), + _make_trusted('{{value}}'), { - 1.0: '{{value}}', - 2.0: 'value', + 1.0: _make_trusted('{{value}}'), + 2.0: _make_trusted('value'), }, ], }, @@ -72,7 +63,7 @@ TEST_MAKE_UNSAFE = [ ], ), ( - ['value', '{{value}}'], + [_make_trusted('value'), _make_trusted('{{value}}')], [ (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) 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 for elt in check_path: obj = obj[elt] - assert isinstance(obj, AnsibleUnsafe) + assert not _is_trusted(obj) for check_path in check_safe_paths: obj = unsafe_value for elt in check_path: 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(): value = { - b'test': 1, - u'test': 2, + _make_trusted(u'test'): 2, } + if not SUPPORTS_DATA_TAGGING: + value[_make_trusted(b"test")] = 1 unsafe_value = make_unsafe(value) assert unsafe_value == value for obj in unsafe_value: - assert not isinstance(obj, AnsibleUnsafe) + assert _is_trusted(obj) value = { - b'{{test}}': 1, - u'{{test}}': 2, + _make_trusted(u'{{test}}'): 2, } + if not SUPPORTS_DATA_TAGGING: + value[_make_trusted(b"{{test}}")] = 1 unsafe_value = make_unsafe(value) assert unsafe_value == value for obj in unsafe_value: - assert isinstance(obj, AnsibleUnsafe) + assert not _is_trusted(obj) 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) assert unsafe_value == 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) assert unsafe_value == value for obj in unsafe_value: - assert isinstance(obj, AnsibleUnsafe) + assert not _is_trusted(obj)