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.
ansible/test/units/mock/module.py

46 lines
1.6 KiB
Python

"""Support fixtures for testing Ansible modules."""
from __future__ import annotations
from ansible.module_utils._internal import _traceback
from ansible.module_utils.common import warnings
import pytest
class ModuleEnvMocker:
"""
A Swiss Army Knife mock fixture for target-side environments (e.g., modules, module_utils).
Using this fixture automatically applies a number of default patches, and offers tests a one-stop
fixture to configure a number of others.
Default behaviors:
* Warnings and deprecations are cleared.
* Traceback collection is disabled.
"""
def __init__(self, mp: pytest.MonkeyPatch):
self._mp = mp
self.reset_warnings()
self.reset_deprecations()
self.set_traceback_config()
def set_traceback_config(self, value: list[_traceback.TracebackEvent] | None = None) -> None:
"""Accepts a list of TracebackEvent values to enable."""
self._mp.setattr(_traceback, '_module_tracebacks_enabled_events', value or [])
def reset_warnings(self) -> None:
"""Clears accumulated target-side warnings."""
self._mp.setattr(warnings, '_global_warnings', {})
def reset_deprecations(self) -> None:
"""Clears accumulated target-side deprecation warnings."""
self._mp.setattr(warnings, '_global_deprecations', {})
@pytest.fixture
def module_env_mocker(monkeypatch: pytest.MonkeyPatch) -> ModuleEnvMocker:
"""Provides a ModuleEnvMocker instance that allows configurable simulation of an Ansible Python module runtime environment."""
return ModuleEnvMocker(monkeypatch)