blob: e21e5141517e9a40e5817d1222132e2282527fb6 [file] [log] [blame]
# Copyright 2017 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import collections
from signal import SIGHUP
from signal import SIGTERM
import unittest
import mock
from mock import sentinel
from lucifer import sigtrap
class SigtrapTestCase(unittest.TestCase):
"""run_event_command() unit tests."""
def setUp(self):
super(SigtrapTestCase, self).setUp()
self.signal = _FakeSignal(sentinel.default_handler)
patch = mock.patch('signal.signal', self.signal)
patch.start()
self.addCleanup(patch.stop)
def test_handle_signal(self):
"""Test handle_signal."""
handlers = self.signal.handlers
with sigtrap.handle_signal(SIGTERM, sentinel.new):
self.assertEqual(handlers[SIGTERM], sentinel.new)
self.assertEqual(handlers[SIGTERM], sentinel.default_handler)
def test_handle_signals(self):
"""Test handle_signals."""
handlers = self.signal.handlers
with sigtrap.handle_signals([SIGTERM, SIGHUP],
sentinel.new):
self.assertEqual(handlers[SIGTERM], sentinel.new)
self.assertEqual(handlers[SIGHUP], sentinel.new)
self.assertEqual(handlers[SIGTERM], sentinel.default_handler)
self.assertEqual(handlers[SIGHUP], sentinel.default_handler)
class _FakeSignal(object):
"""Fake for signal.signal()"""
def __init__(self, handler):
self.handlers = collections.defaultdict(lambda: handler)
def __call__(self, signum, handler):
old = self.handlers[signum]
self.handlers[signum] = handler
return old