From 662cc871c8aaa96fea26c0eab75fed09e2995ee6 Mon Sep 17 00:00:00 2001 From: Stanislaw Pitucha Date: Sat, 4 Aug 2012 14:12:49 +0100 Subject: Fix notification logic Notifications were always treated as if they're about state changes due to a typo. Additionally exception handler did not work correctly. Regression tests included. Change-Id: I0b92a1baa17768d9cf4e709b3331480548dd041e --- nova/notifications.py | 4 ++-- nova/tests/test_notifications.py | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/nova/notifications.py b/nova/notifications.py index d0374ac16..913d01cdd 100644 --- a/nova/notifications.py +++ b/nova/notifications.py @@ -63,7 +63,7 @@ def send_update(context, old_instance, new_instance, service=None, host=None): old_vm_state = old_instance["vm_state"] new_vm_state = new_instance["vm_state"] - old_task_state = old_instance["task_state"], + old_task_state = old_instance["task_state"] new_task_state = new_instance["task_state"] # we should check if we need to send a state change or a regular @@ -90,7 +90,7 @@ def send_update(context, old_instance, new_instance, service=None, host=None): service=service, host=host) except Exception: LOG.exception(_("Failed to send state update notification"), - instance=instance) + instance=new_instance) def send_update_with_states(context, instance, old_vm_state, new_vm_state, diff --git a/nova/tests/test_notifications.py b/nova/tests/test_notifications.py index 0626f16e8..5fd5d63f9 100644 --- a/nova/tests/test_notifications.py +++ b/nova/tests/test_notifications.py @@ -268,3 +268,22 @@ class NotificationsTestCase(test.TestCase): display_name = self.instance["display_name"] self.assertEquals(payload["display_name"], display_name) + + def test_send_no_state_change(self): + called = [False] + + def sending_no_state_change(context, instance, **kwargs): + called[0] = True + self.stubs.Set(notifications, '_send_instance_update_notification', + sending_no_state_change) + notifications.send_update(self.context, self.instance, self.instance) + self.assertTrue(called[0]) + + def test_fail_sending_update(self): + def fail_sending(context, instance, **kwargs): + raise Exception('failed to notify') + self.stubs.Set(notifications, '_send_instance_update_notification', + fail_sending) + + notifications.send_update(self.context, self.instance, self.instance) + self.assertEquals(0, len(test_notifier.NOTIFICATIONS)) -- cgit