mirror of https://github.com/ansible/ansible.git
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
92 lines
3.8 KiB
Python
92 lines
3.8 KiB
Python
# -*- coding: utf-8 -*-
|
|
#
|
|
# Copyright (c) 2017 Ansible Project
|
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
|
|
from __future__ import annotations
|
|
|
|
import json
|
|
import typing as t
|
|
|
|
import pytest
|
|
|
|
from ansible.module_utils._internal._ansiballz import _ModulePluginWrapper
|
|
from ansible.module_utils._internal._plugin_exec_context import PluginExecContext
|
|
from ansible.module_utils.basic import AnsibleModule
|
|
from ansible.module_utils.common.json import Direction, get_module_decoder
|
|
from ansible.module_utils.common import warnings
|
|
from ansible.module_utils.common.messages import Detail, DeprecationSummary, WarningSummary, PluginInfo
|
|
|
|
from units.mock.messages import make_summary
|
|
|
|
pytestmark = pytest.mark.usefixtures("module_env_mocker")
|
|
|
|
|
|
@pytest.mark.parametrize('stdin', [{}], indirect=['stdin'])
|
|
def test_warn(am, capfd):
|
|
|
|
am.warn('warning1')
|
|
|
|
with pytest.raises(SystemExit):
|
|
am.exit_json(warnings=['warning2'])
|
|
out, err = capfd.readouterr()
|
|
actual = json.loads(out, cls=get_module_decoder('legacy', Direction.MODULE_TO_CONTROLLER))['warnings']
|
|
expected = [make_summary(WarningSummary, Detail(msg=msg)) for msg in ['warning1', 'warning2']]
|
|
assert actual == expected
|
|
|
|
|
|
@pytest.mark.parametrize('kwargs,plugin_name,stdin', (
|
|
(dict(msg='deprecation1'), None, {}),
|
|
(dict(msg='deprecation3', version='2.4'), None, {}),
|
|
(dict(msg='deprecation4', date='2020-03-10'), None, {}),
|
|
(dict(msg='deprecation5'), 'ansible.builtin.ping', {}),
|
|
(dict(msg='deprecation7', version='2.4'), 'ansible.builtin.ping', {}),
|
|
(dict(msg='deprecation8', date='2020-03-10'), 'ansible.builtin.ping', {}),
|
|
), indirect=['stdin'])
|
|
def test_deprecate(am: AnsibleModule, capfd, kwargs: dict[str, t.Any], plugin_name: str | None) -> None:
|
|
plugin_info = PluginInfo(requested_name=plugin_name, resolved_name=plugin_name, type='module') if plugin_name else None
|
|
executing_plugin = _ModulePluginWrapper(plugin_info) if plugin_info else None
|
|
collection_name = plugin_name.rpartition('.')[0] if plugin_name else None
|
|
|
|
with PluginExecContext.when(bool(executing_plugin), executing_plugin=executing_plugin):
|
|
am.deprecate(**kwargs)
|
|
|
|
assert warnings.get_deprecation_messages() == (dict(collection_name=collection_name, **kwargs),)
|
|
|
|
with pytest.raises(SystemExit):
|
|
am.exit_json(deprecations=['deprecation9', ('deprecation10', '2.4')])
|
|
|
|
out, err = capfd.readouterr()
|
|
|
|
output = json.loads(out, cls=get_module_decoder('legacy', Direction.MODULE_TO_CONTROLLER))
|
|
|
|
assert ('warnings' not in output or output['warnings'] == [])
|
|
|
|
msg = kwargs.pop('msg')
|
|
|
|
assert output['deprecations'] == [
|
|
make_summary(DeprecationSummary, Detail(msg=msg), **kwargs, plugin=plugin_info),
|
|
make_summary(DeprecationSummary, Detail(msg='deprecation9'), plugin=plugin_info),
|
|
make_summary(DeprecationSummary, Detail(msg='deprecation10'), version='2.4', plugin=plugin_info),
|
|
]
|
|
|
|
|
|
@pytest.mark.parametrize('stdin', [{}], indirect=['stdin'])
|
|
def test_deprecate_without_list(am, capfd):
|
|
with pytest.raises(SystemExit):
|
|
am.exit_json(deprecations='Simple deprecation warning')
|
|
|
|
out, err = capfd.readouterr()
|
|
output = json.loads(out, cls=get_module_decoder('legacy', Direction.MODULE_TO_CONTROLLER))
|
|
assert ('warnings' not in output or output['warnings'] == [])
|
|
assert output['deprecations'] == [
|
|
make_summary(DeprecationSummary, Detail(msg='Simple deprecation warning')),
|
|
]
|
|
|
|
|
|
@pytest.mark.parametrize('stdin', [{}], indirect=['stdin'])
|
|
def test_deprecate_without_list_version_date_not_set(am, capfd):
|
|
with pytest.raises(AssertionError) as ctx:
|
|
am.deprecate('Simple deprecation warning', date='', version='') # pylint: disable=ansible-deprecated-no-version
|
|
assert ctx.value.args[0] == "implementation error -- version and date must not both be set"
|