[PR #9179/a3bd49c0 backport][stable-10] deps module utils: unit tests + minor improvement (#9182)
deps module utils: unit tests + minor improvement (#9179)
* deps module utils: unit tests + minor improvement
* deps.clear() calls dict.clear() instead of creating new dict
* add changelog frag
(cherry picked from commit a3bd49c010
)
Co-authored-by: Alexei Znamensky <103110+russoz@users.noreply.github.com>
pull/9195/head
parent
5fe39082d5
commit
0b64fc1ee4
|
@ -0,0 +1,2 @@
|
||||||
|
minor_changes:
|
||||||
|
- deps module utils - add ``deps.clear()`` to clear out previously declared dependencies (https://github.com/ansible-collections/community.general/pull/9179).
|
|
@ -96,3 +96,7 @@ def validate(module, spec=None):
|
||||||
|
|
||||||
def failed(spec=None):
|
def failed(spec=None):
|
||||||
return any(_deps[d].failed for d in _select_names(spec))
|
return any(_deps[d].failed for d in _select_names(spec))
|
||||||
|
|
||||||
|
|
||||||
|
def clear():
|
||||||
|
_deps.clear()
|
||||||
|
|
|
@ -0,0 +1,69 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# (c) 2024, Alexei Znamensky <russoz@gmail.com>
|
||||||
|
# Copyright (c) 2024 Ansible Project
|
||||||
|
# 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
|
||||||
|
|
||||||
|
from __future__ import (absolute_import, division, print_function)
|
||||||
|
__metaclass__ = type
|
||||||
|
|
||||||
|
from ansible_collections.community.general.tests.unit.compat.mock import MagicMock
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
from ansible_collections.community.general.plugins.module_utils import deps
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def module():
|
||||||
|
m = MagicMock()
|
||||||
|
m.fail_json.side_effect = RuntimeError
|
||||||
|
return m
|
||||||
|
|
||||||
|
|
||||||
|
def test_wrong_name(module):
|
||||||
|
with deps.declare("sys") as sys_dep:
|
||||||
|
import sys # noqa: F401, pylint: disable=unused-import
|
||||||
|
|
||||||
|
with pytest.raises(KeyError):
|
||||||
|
deps.validate(module, "wrong_name")
|
||||||
|
|
||||||
|
|
||||||
|
def test_fail_potatoes(module):
|
||||||
|
with deps.declare("potatoes", reason="Must have potatoes") as potatoes_dep:
|
||||||
|
import potatoes_that_will_never_be_there # noqa: F401, pylint: disable=unused-import
|
||||||
|
|
||||||
|
with pytest.raises(RuntimeError):
|
||||||
|
deps.validate(module)
|
||||||
|
|
||||||
|
assert potatoes_dep.failed is True
|
||||||
|
assert potatoes_dep.message.startswith("Failed to import the required Python library")
|
||||||
|
|
||||||
|
|
||||||
|
def test_sys(module):
|
||||||
|
with deps.declare("sys") as sys_dep:
|
||||||
|
import sys # noqa: F401, pylint: disable=unused-import
|
||||||
|
|
||||||
|
deps.validate(module)
|
||||||
|
|
||||||
|
assert sys_dep.failed is False
|
||||||
|
|
||||||
|
|
||||||
|
def test_multiple(module):
|
||||||
|
with deps.declare("mpotatoes", reason="Must have mpotatoes"):
|
||||||
|
import potatoes_that_will_never_be_there # noqa: F401, pylint: disable=unused-import
|
||||||
|
|
||||||
|
with deps.declare("msys", reason="Must have msys"):
|
||||||
|
import sys # noqa: F401, pylint: disable=unused-import
|
||||||
|
|
||||||
|
deps.validate(module, "msys")
|
||||||
|
deps.validate(module, "-mpotatoes")
|
||||||
|
|
||||||
|
with pytest.raises(RuntimeError):
|
||||||
|
deps.validate(module)
|
||||||
|
|
||||||
|
with pytest.raises(RuntimeError):
|
||||||
|
deps.validate(module, "-msys")
|
||||||
|
|
||||||
|
with pytest.raises(RuntimeError):
|
||||||
|
deps.validate(module, "mpotatoes")
|
|
@ -14,6 +14,7 @@ from ansible_collections.community.general.plugins.module_utils.module_helper im
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
# remove in 11.0.0
|
||||||
def test_dependency_ctxmgr():
|
def test_dependency_ctxmgr():
|
||||||
ctx = DependencyCtxMgr("POTATOES", "Potatoes must be installed")
|
ctx = DependencyCtxMgr("POTATOES", "Potatoes must be installed")
|
||||||
with ctx:
|
with ctx:
|
||||||
|
@ -36,6 +37,7 @@ def test_dependency_ctxmgr():
|
||||||
assert ctx.has_it
|
assert ctx.has_it
|
||||||
|
|
||||||
|
|
||||||
|
# remove in 11.0.0
|
||||||
def test_variable_meta():
|
def test_variable_meta():
|
||||||
meta = VarMeta()
|
meta = VarMeta()
|
||||||
assert meta.output is True
|
assert meta.output is True
|
||||||
|
@ -51,6 +53,7 @@ def test_variable_meta():
|
||||||
assert meta.diff_result is None
|
assert meta.diff_result is None
|
||||||
|
|
||||||
|
|
||||||
|
# remove in 11.0.0
|
||||||
def test_variable_meta_diff():
|
def test_variable_meta_diff():
|
||||||
meta = VarMeta(diff=True)
|
meta = VarMeta(diff=True)
|
||||||
assert meta.output is True
|
assert meta.output is True
|
||||||
|
@ -70,6 +73,7 @@ def test_variable_meta_diff():
|
||||||
assert meta.diff_result == {"before": "abc", "after": "ghi"}
|
assert meta.diff_result == {"before": "abc", "after": "ghi"}
|
||||||
|
|
||||||
|
|
||||||
|
# remove in 11.0.0
|
||||||
def test_vardict():
|
def test_vardict():
|
||||||
vd = VarDict()
|
vd = VarDict()
|
||||||
vd.set('a', 123)
|
vd.set('a', 123)
|
||||||
|
@ -99,6 +103,7 @@ def test_vardict():
|
||||||
assert vd.diff() == {'before': {'a': 123}, 'after': {'a': 'new_a'}}, "diff={0}".format(vd.diff())
|
assert vd.diff() == {'before': {'a': 123}, 'after': {'a': 'new_a'}}, "diff={0}".format(vd.diff())
|
||||||
|
|
||||||
|
|
||||||
|
# remove in 11.0.0
|
||||||
def test_variable_meta_change():
|
def test_variable_meta_change():
|
||||||
vd = VarDict()
|
vd = VarDict()
|
||||||
vd.set('a', 123, change=True)
|
vd.set('a', 123, change=True)
|
||||||
|
|
|
@ -48,4 +48,4 @@ def patch_ansible_module(request, mocker):
|
||||||
|
|
||||||
@pytest.fixture(autouse=True)
|
@pytest.fixture(autouse=True)
|
||||||
def deps_cleanup():
|
def deps_cleanup():
|
||||||
deps._deps.clear()
|
deps.clear()
|
||||||
|
|
Loading…
Reference in New Issue