Merge "Allow plugins to specify signal event reason"

This commit is contained in:
Jenkins 2014-08-04 01:26:28 +00:00 committed by Gerrit Code Review
commit 377da55d51
2 changed files with 30 additions and 2 deletions

View File

@ -901,8 +901,12 @@ class Resource(object):
str(self))
raise Exception(msg)
self._add_event('signal', self.status, get_string_details())
self.handle_signal(details)
signal_result = self.handle_signal(details)
if signal_result:
reason_string = "Signal: %s" % signal_result
else:
reason_string = get_string_details()
self._add_event('signal', self.status, reason_string)
except Exception as ex:
LOG.exception(_('signal %(name)s : %(msg)s') % {'name': str(self),
'msg': ex})

View File

@ -297,6 +297,30 @@ class SignalTest(HeatTestCase):
self.m.VerifyAll()
def test_signal_plugin_reason(self):
# Ensure if handle_signal returns data, we use it as the reason
self.stack = self.create_stack()
self.stack.create()
rsrc = self.stack['signal_handler']
self.assertEqual((rsrc.CREATE, rsrc.COMPLETE), rsrc.state)
self.m.StubOutWithMock(generic_resource.SignalResource,
'handle_signal')
signal_details = {'status': 'COMPLETE'}
ret_expected = "Received COMPLETE signal"
generic_resource.SignalResource.handle_signal(
signal_details).AndReturn(ret_expected)
self.m.StubOutWithMock(generic_resource.SignalResource,
'_add_event')
generic_resource.SignalResource._add_event(
'signal', 'COMPLETE', 'Signal: %s' % ret_expected).AndReturn(None)
self.m.ReplayAll()
rsrc.signal(details=signal_details)
self.m.VerifyAll()
def test_signal_wrong_resource(self):
# assert that we get the correct exception when calling a
# resource.signal() that does not have a handle_signal()