Merge "Adds a default reload callback to ProcessManager"
This commit is contained in:
commit
c68f132b45
|
@ -61,7 +61,8 @@ class ProcessManager(MonitoredProcess):
|
|||
"""
|
||||
def __init__(self, conf, uuid, namespace=None, service=None,
|
||||
pids_path=None, default_cmd_callback=None,
|
||||
cmd_addl_env=None, pid_file=None, run_as_root=False):
|
||||
cmd_addl_env=None, pid_file=None, run_as_root=False,
|
||||
custom_reload_callback=None):
|
||||
|
||||
self.conf = conf
|
||||
self.uuid = uuid
|
||||
|
@ -71,6 +72,7 @@ class ProcessManager(MonitoredProcess):
|
|||
self.pids_path = pids_path or self.conf.external_pids
|
||||
self.pid_file = pid_file
|
||||
self.run_as_root = run_as_root
|
||||
self.custom_reload_callback = custom_reload_callback
|
||||
|
||||
if service:
|
||||
self.service_pid_fname = 'pid.' + service
|
||||
|
@ -94,6 +96,9 @@ class ProcessManager(MonitoredProcess):
|
|||
self.reload_cfg()
|
||||
|
||||
def reload_cfg(self):
|
||||
if self.custom_reload_callback:
|
||||
self.disable(get_stop_command=self.custom_reload_callback)
|
||||
else:
|
||||
self.disable('HUP')
|
||||
|
||||
def disable(self, sig='9', get_stop_command=None):
|
||||
|
|
|
@ -164,6 +164,35 @@ class TestProcessManager(base.BaseTestCase):
|
|||
manager.enable(callback)
|
||||
self.assertFalse(callback.called)
|
||||
|
||||
def test_reload_cfg_without_custom_reload_callback(self):
|
||||
with mock.patch.object(ep.ProcessManager, 'disable') as disable:
|
||||
manager = ep.ProcessManager(self.conf, 'uuid', namespace='ns')
|
||||
manager.reload_cfg()
|
||||
disable.assert_called_once_with('HUP')
|
||||
|
||||
def test_reload_cfg_with_custom_reload_callback(self):
|
||||
reload_callback = mock.sentinel.callback
|
||||
with mock.patch.object(ep.ProcessManager, 'disable') as disable:
|
||||
manager = ep.ProcessManager(
|
||||
self.conf, 'uuid', namespace='ns',
|
||||
custom_reload_callback=reload_callback)
|
||||
manager.reload_cfg()
|
||||
disable.assert_called_once_with(get_stop_command=reload_callback)
|
||||
|
||||
def test_disable_get_stop_command(self):
|
||||
cmd = ['the', 'cmd']
|
||||
reload_callback = mock.Mock(return_value=cmd)
|
||||
with mock.patch.object(ep.ProcessManager, 'pid',
|
||||
mock.PropertyMock(return_value=4)):
|
||||
with mock.patch.object(ep.ProcessManager, 'active',
|
||||
mock.PropertyMock(return_value=True)):
|
||||
manager = ep.ProcessManager(
|
||||
self.conf, 'uuid',
|
||||
custom_reload_callback=reload_callback)
|
||||
manager.disable(
|
||||
get_stop_command=manager.custom_reload_callback)
|
||||
self.assertIn(cmd, self.execute.call_args[0])
|
||||
|
||||
def test_disable_no_namespace(self):
|
||||
with mock.patch.object(ep.ProcessManager, 'pid') as pid:
|
||||
pid.__get__ = mock.Mock(return_value=4)
|
||||
|
|
Loading…
Reference in New Issue