mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-04-25 03:41:25 -07:00
add _load_params debug overrides for module args/file passed on cmdline
Updated python module wrapper explode method to drop 'args' file next to module. Both execute() and excommunicate() debug methods now pass the module args via file to enable debuggers that are picky about stdin. Updated unit tests to use a context manager for masking/restoring default streams and argv.
This commit is contained in:
parent
6322ed833e
commit
5b336832af
10 changed files with 358 additions and 448 deletions
|
@ -23,16 +23,14 @@ __metaclass__ = type
|
|||
import sys
|
||||
import json
|
||||
import syslog
|
||||
from io import BytesIO, StringIO
|
||||
|
||||
from ansible.compat.six import PY3
|
||||
from ansible.utils.unicode import to_bytes
|
||||
|
||||
from ansible.compat.tests import unittest
|
||||
from ansible.compat.tests.mock import patch, MagicMock
|
||||
from units.mock.procenv import swap_stdin_and_argv
|
||||
|
||||
from ansible.module_utils import basic
|
||||
|
||||
|
||||
try:
|
||||
# Python 3.4+
|
||||
from importlib import reload
|
||||
|
@ -44,15 +42,12 @@ except ImportError:
|
|||
|
||||
|
||||
class TestAnsibleModuleSysLogSmokeTest(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
args = json.dumps(dict(ANSIBLE_MODULE_ARGS={}, ANSIBLE_MODULE_CONSTANTS={}))
|
||||
self.real_stdin = sys.stdin
|
||||
if PY3:
|
||||
sys.stdin = StringIO(args)
|
||||
sys.stdin.buffer = BytesIO(to_bytes(args))
|
||||
else:
|
||||
sys.stdin = BytesIO(to_bytes(args))
|
||||
|
||||
# unittest doesn't have a clean place to use a context manager, so we have to enter/exit manually
|
||||
self.stdin_swap = swap_stdin_and_argv(stdin_data=args)
|
||||
self.stdin_swap.__enter__()
|
||||
|
||||
self.am = basic.AnsibleModule(
|
||||
argument_spec = dict(),
|
||||
|
@ -64,7 +59,8 @@ class TestAnsibleModuleSysLogSmokeTest(unittest.TestCase):
|
|||
basic.has_journal = False
|
||||
|
||||
def tearDown(self):
|
||||
sys.stdin = self.real_stdin
|
||||
# unittest doesn't have a clean place to use a context manager, so we have to enter/exit manually
|
||||
self.stdin_swap.__exit__(None, None, None)
|
||||
basic.has_journal = self.has_journal
|
||||
|
||||
def test_smoketest_syslog(self):
|
||||
|
@ -84,20 +80,18 @@ class TestAnsibleModuleJournaldSmokeTest(unittest.TestCase):
|
|||
|
||||
def setUp(self):
|
||||
args = json.dumps(dict(ANSIBLE_MODULE_ARGS={}, ANSIBLE_MODULE_CONSTANTS={}))
|
||||
self.real_stdin = sys.stdin
|
||||
if PY3:
|
||||
sys.stdin = StringIO(args)
|
||||
sys.stdin.buffer = BytesIO(to_bytes(args))
|
||||
else:
|
||||
sys.stdin = BytesIO(to_bytes(args))
|
||||
|
||||
# unittest doesn't have a clean place to use a context manager, so we have to enter/exit manually
|
||||
self.stdin_swap = swap_stdin_and_argv(stdin_data=args)
|
||||
self.stdin_swap.__enter__()
|
||||
|
||||
self.am = basic.AnsibleModule(
|
||||
argument_spec = dict(),
|
||||
)
|
||||
|
||||
def tearDown(self):
|
||||
sys.stdin = self.real_stdin
|
||||
# unittest doesn't have a clean place to use a context manager, so we have to enter/exit manually
|
||||
self.stdin_swap.__exit__(None, None, None)
|
||||
|
||||
@unittest.skipUnless(basic.has_journal, 'python systemd bindings not installed')
|
||||
def test_smoketest_journal(self):
|
||||
|
@ -134,26 +128,26 @@ class TestAnsibleModuleLogSyslog(unittest.TestCase):
|
|||
|
||||
def setUp(self):
|
||||
args = json.dumps(dict(ANSIBLE_MODULE_ARGS={}, ANSIBLE_MODULE_CONSTANTS={}))
|
||||
self.real_stdin = sys.stdin
|
||||
if PY3:
|
||||
sys.stdin = StringIO(args)
|
||||
sys.stdin.buffer = BytesIO(to_bytes(args))
|
||||
else:
|
||||
sys.stdin = BytesIO(to_bytes(args))
|
||||
|
||||
# unittest doesn't have a clean place to use a context manager, so we have to enter/exit manually
|
||||
self.stdin_swap = swap_stdin_and_argv(stdin_data=args)
|
||||
self.stdin_swap.__enter__()
|
||||
|
||||
self.am = basic.AnsibleModule(
|
||||
argument_spec = dict(),
|
||||
)
|
||||
|
||||
self.has_journal = basic.has_journal
|
||||
if self.has_journal:
|
||||
# Systems with journal can still test syslog
|
||||
basic.has_journal = False
|
||||
|
||||
def tearDown(self):
|
||||
sys.stdin = self.real_stdin
|
||||
# teardown/reset
|
||||
basic.has_journal = self.has_journal
|
||||
|
||||
# unittest doesn't have a clean place to use a context manager, so we have to enter/exit manually
|
||||
self.stdin_swap.__exit__(None, None, None)
|
||||
|
||||
@patch('syslog.syslog', autospec=True)
|
||||
def test_no_log(self, mock_func):
|
||||
no_log = self.am.no_log
|
||||
|
@ -191,21 +185,22 @@ class TestAnsibleModuleLogJournal(unittest.TestCase):
|
|||
b'non-utf8 :\xff: test': b'non-utf8 :\xff: test'.decode('utf-8', 'replace')
|
||||
}
|
||||
|
||||
# overriding run lets us use context managers for setup/teardown-esque behavior
|
||||
def setUp(self):
|
||||
args = json.dumps(dict(ANSIBLE_MODULE_ARGS={}, ANSIBLE_MODULE_CONSTANTS={}))
|
||||
self.real_stdin = sys.stdin
|
||||
if PY3:
|
||||
sys.stdin = StringIO(args)
|
||||
sys.stdin.buffer = BytesIO(to_bytes(args))
|
||||
else:
|
||||
sys.stdin = BytesIO(to_bytes(args))
|
||||
# unittest doesn't have a clean place to use a context manager, so we have to enter/exit manually
|
||||
self.stdin_swap = swap_stdin_and_argv(stdin_data=args)
|
||||
self.stdin_swap.__enter__()
|
||||
|
||||
self.am = basic.AnsibleModule(
|
||||
argument_spec = dict(),
|
||||
)
|
||||
|
||||
self.has_journal = basic.has_journal
|
||||
basic.has_journal = True
|
||||
if self.has_journal:
|
||||
# Systems with journal can still test syslog
|
||||
basic.has_journal = False
|
||||
|
||||
self.module_patcher = None
|
||||
|
||||
# In case systemd-python is not installed
|
||||
|
@ -218,9 +213,12 @@ class TestAnsibleModuleLogJournal(unittest.TestCase):
|
|||
self._fake_out_reload(basic)
|
||||
|
||||
def tearDown(self):
|
||||
sys.stdin = self.real_stdin
|
||||
# unittest doesn't have a clean place to use a context manager, so we have to enter/exit manually
|
||||
self.stdin_swap.__exit__(None, None, None)
|
||||
|
||||
# teardown/reset
|
||||
basic.has_journal = self.has_journal
|
||||
|
||||
if self.module_patcher:
|
||||
self.module_patcher.stop()
|
||||
reload(basic)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue