-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add test for unsafe plugin util (#8345)
Add test for unsafe plugin util.
- Loading branch information
1 parent
b774435
commit 7aa118b
Showing
1 changed file
with
133 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,133 @@ | ||
# -*- coding: utf-8 -*- | ||
# Copyright (c) 2024, Felix Fontein <[email protected]> | ||
# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt) | ||
# SPDX-License-Identifier: GPL-3.0-or-later | ||
|
||
# Make coding more python3-ish | ||
from __future__ import absolute_import, division, print_function | ||
|
||
__metaclass__ = type | ||
|
||
|
||
import pytest | ||
|
||
from ansible.utils.unsafe_proxy import AnsibleUnsafe | ||
|
||
from ansible_collections.community.general.plugins.plugin_utils.unsafe import ( | ||
make_unsafe, | ||
) | ||
|
||
|
||
TEST_MAKE_UNSAFE = [ | ||
( | ||
u'text', | ||
[], | ||
[ | ||
(), | ||
], | ||
), | ||
( | ||
u'{{text}}', | ||
[ | ||
(), | ||
], | ||
[], | ||
), | ||
( | ||
b'text', | ||
[], | ||
[ | ||
(), | ||
], | ||
), | ||
( | ||
b'{{text}}', | ||
[ | ||
(), | ||
], | ||
[], | ||
), | ||
( | ||
{ | ||
'skey': 'value', | ||
'ukey': '{{value}}', | ||
1: [ | ||
'value', | ||
'{{value}}', | ||
{ | ||
1.0: '{{value}}', | ||
2.0: 'value', | ||
}, | ||
], | ||
}, | ||
[ | ||
('ukey', ), | ||
(1, 1), | ||
(1, 2, 1.0), | ||
], | ||
[ | ||
('skey', ), | ||
(1, 0), | ||
(1, 2, 2.0), | ||
], | ||
), | ||
( | ||
['value', '{{value}}'], | ||
[ | ||
(1, ), | ||
], | ||
[ | ||
(0, ), | ||
], | ||
), | ||
] | ||
|
||
|
||
@pytest.mark.parametrize("value, check_unsafe_paths, check_safe_paths", TEST_MAKE_UNSAFE) | ||
def test_make_unsafe(value, check_unsafe_paths, check_safe_paths): | ||
unsafe_value = make_unsafe(value) | ||
assert unsafe_value == value | ||
for check_path in check_unsafe_paths: | ||
obj = unsafe_value | ||
for elt in check_path: | ||
obj = obj[elt] | ||
assert isinstance(obj, AnsibleUnsafe) | ||
for check_path in check_safe_paths: | ||
obj = unsafe_value | ||
for elt in check_path: | ||
obj = obj[elt] | ||
assert not isinstance(obj, AnsibleUnsafe) | ||
|
||
|
||
def test_make_unsafe_dict_key(): | ||
value = { | ||
b'test': 1, | ||
u'test': 2, | ||
} | ||
unsafe_value = make_unsafe(value) | ||
assert unsafe_value == value | ||
for obj in unsafe_value: | ||
assert not isinstance(obj, AnsibleUnsafe) | ||
|
||
value = { | ||
b'{{test}}': 1, | ||
u'{{test}}': 2, | ||
} | ||
unsafe_value = make_unsafe(value) | ||
assert unsafe_value == value | ||
for obj in unsafe_value: | ||
assert isinstance(obj, AnsibleUnsafe) | ||
|
||
|
||
def test_make_unsafe_set(): | ||
value = set([b'test', u'test']) | ||
unsafe_value = make_unsafe(value) | ||
assert unsafe_value == value | ||
for obj in unsafe_value: | ||
assert not isinstance(obj, AnsibleUnsafe) | ||
|
||
value = set([b'{{test}}', u'{{test}}']) | ||
unsafe_value = make_unsafe(value) | ||
assert unsafe_value == value | ||
for obj in unsafe_value: | ||
assert isinstance(obj, AnsibleUnsafe) |