Merge "Adds a default reload callback to ProcessManager"

This commit is contained in:
Jenkins 2016-08-14 12:19:41 +00:00 committed by Gerrit Code Review
commit c68f132b45
2 changed files with 36 additions and 2 deletions

View File

@ -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,7 +96,10 @@ class ProcessManager(MonitoredProcess):
self.reload_cfg()
def reload_cfg(self):
self.disable('HUP')
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):
pid = self.pid

View File

@ -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)