certbot/letsencrypt/tests/error_handler_test.py

65 lines
2 KiB
Python
Raw Normal View History

2015-09-22 21:24:22 -04:00
"""Tests for letsencrypt.error_handler."""
2015-09-23 18:02:20 -04:00
import signal
2015-10-01 18:39:55 -04:00
import sys
2015-09-22 21:24:22 -04:00
import unittest
import mock
class ErrorHandlerTest(unittest.TestCase):
"""Tests for letsencrypt.error_handler."""
def setUp(self):
from letsencrypt import error_handler
2015-09-22 21:24:22 -04:00
self.init_func = mock.MagicMock()
2015-09-23 18:02:20 -04:00
self.handler = error_handler.ErrorHandler(self.init_func)
# pylint: disable=protected-access
self.signals = error_handler._SIGNALS
2015-09-22 21:24:22 -04:00
def test_context_manager(self):
try:
2015-09-23 18:02:20 -04:00
with self.handler:
2015-09-22 21:24:22 -04:00
raise ValueError
except ValueError:
pass
self.init_func.assert_called_once_with()
2015-09-23 18:02:20 -04:00
@mock.patch('letsencrypt.error_handler.os')
@mock.patch('letsencrypt.error_handler.signal')
def test_signal_handler(self, mock_signal, mock_os):
# pylint: disable=protected-access
mock_signal.getsignal.return_value = signal.SIG_DFL
self.handler.set_signal_handlers()
signal_handler = self.handler._signal_handler
for signum in self.signals:
2015-09-23 18:02:20 -04:00
mock_signal.signal.assert_any_call(signum, signal_handler)
signum = self.signals[0]
2015-09-23 18:02:20 -04:00
signal_handler(signum, None)
self.init_func.assert_called_once_with()
mock_os.kill.assert_called_once_with(mock_os.getpid(), signum)
self.handler.reset_signal_handlers()
for signum in self.signals:
2015-09-23 18:02:20 -04:00
mock_signal.signal.assert_any_call(signum, signal.SIG_DFL)
def test_bad_recovery(self):
bad_func = mock.MagicMock(side_effect=[ValueError])
self.handler.register(bad_func)
self.handler.call_registered()
self.init_func.assert_called_once_with()
bad_func.assert_called_once_with()
2015-10-01 18:39:55 -04:00
def test_sysexit_ignored(self):
try:
with self.handler:
sys.exit(0)
except SystemExit:
pass
self.assertFalse(self.init_func.called)
2015-09-22 21:24:22 -04:00
if __name__ == "__main__":
unittest.main() # pragma: no cover