def test_wrap_exception_with_notifier(self): wrapped = exception_wrapper.wrap_exception(rpc.get_notifier('fake'), binary='fake-binary') ctxt = context.get_admin_context() self.assertRaises(test.TestingException, wrapped(bad_function_exception), 1, ctxt, 3, zoo=3) self.assertEqual(1, len(fake_notifier.NOTIFICATIONS)) notification = fake_notifier.NOTIFICATIONS[0] self.assertEqual('bad_function_exception', notification.event_type) self.assertEqual(ctxt, notification.context) self.assertEqual(3, notification.payload['args']['extra']) for key in ['exception', 'args']: self.assertIn(key, notification.payload.keys()) self.assertEqual(1, len(fake_notifier.VERSIONED_NOTIFICATIONS)) notification = fake_notifier.VERSIONED_NOTIFICATIONS[0] self.assertEqual('compute.exception', notification['event_type']) self.assertEqual('fake-binary:fake-mini', notification['publisher_id']) self.assertEqual('ERROR', notification['priority']) payload = notification['payload'] self.assertEqual('ExceptionPayload', payload['nova_object.name']) self.assertEqual('1.0', payload['nova_object.version']) payload = payload['nova_object.data'] self.assertEqual('TestingException', payload['exception']) self.assertEqual('bad things happened', payload['exception_message']) self.assertEqual('bad_function_exception', payload['function_name']) self.assertEqual('nova.tests.unit.test_exception', payload['module_name'])
def test_wrap_exception_unknown_module(self): ctxt = context.get_admin_context() wrapped = exception_wrapper.wrap_exception(rpc.get_notifier('fake'), binary='nova-compute') self.assertRaises(TypeError, wrapped(bad_function_unknown_module), None, ctxt) self.assertEqual(1, len(fake_notifier.VERSIONED_NOTIFICATIONS)) notification = fake_notifier.VERSIONED_NOTIFICATIONS[0] payload = notification['payload']['nova_object.data'] self.assertEqual('unknown', payload['module_name'])
def test_wrap_exception_unknown_module(self): ctxt = context.get_admin_context() wrapped = exception_wrapper.wrap_exception( rpc.get_notifier('fake'), binary='fake-binary') self.assertRaises( TypeError, wrapped(bad_function_unknown_module), None, ctxt) self.assertEqual(1, len(fake_notifier.VERSIONED_NOTIFICATIONS)) notification = fake_notifier.VERSIONED_NOTIFICATIONS[0] payload = notification['payload']['nova_object.data'] self.assertEqual('unknown', payload['module_name'])
def test_wrap_exception_notification_not_emitted_if_unversioned( self, mock_notifier): self.flags(notification_format='unversioned', group='notifications') wrapped = exception_wrapper.wrap_exception(rpc.get_notifier('fake'), binary='nova-compute') ctxt = context.get_admin_context() self.assertRaises(test.TestingException, wrapped(bad_function_exception), 1, ctxt, 3, zoo=3) self.assertFalse(mock_notifier.called)
def test_wrap_exception_notification_not_emitted_if_disabled( self, mock_notification, mock_notifier): mock_notifier.is_enabled.return_value = False wrapped = exception_wrapper.wrap_exception(rpc.get_notifier('fake'), binary='nova-compute') ctxt = context.get_admin_context() self.assertRaises(test.TestingException, wrapped(bad_function_exception), 1, ctxt, 3, zoo=3) self.assertFalse(mock_notification.called)
def test_wrap_exception_unknown_module(self): ctxt = nova_context.get_admin_context() wrapped = exception_wrapper.wrap_exception(service='compute', binary='nova-compute') self.assertRaises(TypeError, wrapped(bad_function_unknown_module), None, ctxt) self.assertEqual(1, len(self.notifier.versioned_notifications)) notification = self.notifier.versioned_notifications[0] payload = notification['payload']['nova_object.data'] self.assertEqual('unknown', payload['module_name'])
def test_wrap_exception_with_notifier(self): wrapped = exception_wrapper.wrap_exception(service='compute', binary='nova-compute') ctxt = nova_context.get_admin_context() self.assertRaises(test.TestingException, wrapped(bad_function_exception), 1, ctxt, 3, zoo=3) self.assertEqual(1, len(self.notifier.notifications)) notification = self.notifier.notifications[0] self.assertEqual('bad_function_exception', notification.event_type) self.assertEqual(ctxt, notification.context) self.assertEqual(3, notification.payload['args']['extra']) for key in ['exception', 'args']: self.assertIn(key, notification.payload.keys()) self.assertNotIn('context', notification.payload['args'].keys()) self.assertEqual(1, len(self.notifier.versioned_notifications)) notification = self.notifier.versioned_notifications[0] self.assertEqual('compute.exception', notification['event_type']) self.assertEqual('nova-compute:fake-mini', notification['publisher_id']) self.assertEqual('ERROR', notification['priority']) payload = notification['payload'] self.assertEqual('ExceptionPayload', payload['nova_object.name']) self.assertEqual('1.1', payload['nova_object.version']) payload = payload['nova_object.data'] self.assertEqual('TestingException', payload['exception']) self.assertEqual('bad things happened', payload['exception_message']) self.assertEqual('bad_function_exception', payload['function_name']) self.assertEqual('nova.tests.unit.test_exception_wrapper', payload['module_name']) self.assertIn('bad_function_exception', payload['traceback'])
def test_wrap_exception_good_return(self): wrapped = exception_wrapper.wrap_exception(rpc.get_notifier('fake')) self.assertEqual(99, wrapped(good_function)(1, 2)) self.assertEqual(0, len(fake_notifier.NOTIFICATIONS)) self.assertEqual(0, len(fake_notifier.VERSIONED_NOTIFICATIONS))
def test_wrap_exception_good_return(self): wrapped = exception_wrapper.wrap_exception(service='compute', binary='nova-compute') self.assertEqual(99, wrapped(good_function)(1, 2)) self.assertEqual(0, len(self.notifier.notifications)) self.assertEqual(0, len(self.notifier.versioned_notifications))