From ba1f2fa02739a49f6b51ed221044be82e06c8ffb Mon Sep 17 00:00:00 2001 From: isethi Date: Thu, 19 Jul 2012 20:51:30 +0000 Subject: [PATCH] Add image_name to create and rebuild notifications Fixes bug 1027197 Without image_name in notifications, one has to use the image_ref and hit glance again. The create and rebuild functions already contain image_metadata, hence adding the image_name in their notification can prevent additional call to glance. Change-Id: I3813eafa24b125575bcdceac8d30ab6bd909cfe4 --- nova/tests/test_compute_utils.py | 34 ++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/nova/tests/test_compute_utils.py b/nova/tests/test_compute_utils.py index c3f06d11..ee415da6 100644 --- a/nova/tests/test_compute_utils.py +++ b/nova/tests/test_compute_utils.py @@ -174,3 +174,37 @@ class UsageInfoTestCase(test.TestCase): self.assertEquals(payload['image_meta'], {}) image_ref_url = "%s/images/1" % utils.generate_glance_url() self.assertEquals(payload['image_ref_url'], image_ref_url) + + def test_notify_about_instance_usage(self): + instance_id = self._create_instance() + instance = db.instance_get(self.context, instance_id) + # Set some system metadata + sys_metadata = {'image_md_key1': 'val1', + 'image_md_key2': 'val2', + 'other_data': 'meow'} + extra_usage_info = {'image_name': 'fake_name'} + db.instance_system_metadata_update(self.context, instance['uuid'], + sys_metadata, False) + compute_utils.notify_about_instance_usage(self.context, instance, + 'create.start', extra_usage_info=extra_usage_info) + self.assertEquals(len(test_notifier.NOTIFICATIONS), 1) + msg = test_notifier.NOTIFICATIONS[0] + self.assertEquals(msg['priority'], 'INFO') + self.assertEquals(msg['event_type'], 'compute.instance.create.start') + payload = msg['payload'] + self.assertEquals(payload['tenant_id'], self.project_id) + self.assertEquals(payload['user_id'], self.user_id) + self.assertEquals(payload['instance_id'], instance.uuid) + self.assertEquals(payload['instance_type'], 'm1.tiny') + type_id = instance_types.get_instance_type_by_name('m1.tiny')['id'] + self.assertEquals(str(payload['instance_type_id']), str(type_id)) + for attr in ('display_name', 'created_at', 'launched_at', + 'state', 'state_description', 'image_meta'): + self.assertTrue(attr in payload, + msg="Key %s not in payload" % attr) + self.assertEquals(payload['image_meta'], + {'md_key1': 'val1', 'md_key2': 'val2'}) + self.assertEquals(payload['image_name'], 'fake_name') + image_ref_url = "%s/images/1" % utils.generate_glance_url() + self.assertEquals(payload['image_ref_url'], image_ref_url) + self.compute.terminate_instance(self.context, instance['uuid'])