summaryrefslogtreecommitdiffstats
path: root/nova/tests
diff options
context:
space:
mode:
authorAlex Meade <alex.meade@rackspace.com>2012-07-05 14:27:33 -0400
committerAlex Meade <alex.meade@rackspace.com>2012-07-05 14:30:54 -0400
commit4cdc30796c7c76068898cd9e9280e8d7a11a57cb (patch)
treeb5ef6bb8d1a0c35801de8a1bf2e97dd463207664 /nova/tests
parente883e9756c779793ca071ee3f052f5d13610a9ac (diff)
Add checks for retrieving deleted instance metadata for notification events.
This enables metadata for a deleted instance to be reported in usage notifications. However, deleted metadata for a nondeleted instance will not be shown. Fixes bug 1021430. Change-Id: I7ce5c720c7705be34724679bb4ff99fb8ba37a27
Diffstat (limited to 'nova/tests')
-rw-r--r--nova/tests/test_compute_utils.py35
1 files changed, 35 insertions, 0 deletions
diff --git a/nova/tests/test_compute_utils.py b/nova/tests/test_compute_utils.py
index 4e00025bc..5081536ac 100644
--- a/nova/tests/test_compute_utils.py
+++ b/nova/tests/test_compute_utils.py
@@ -114,6 +114,41 @@ class UsageInfoTestCase(test.TestCase):
self.assertEquals(payload['image_ref_url'], image_ref_url)
self.compute.terminate_instance(self.context, instance['uuid'])
+ def test_notify_usage_exists_deleted_instance(self):
+ """Ensure 'exists' notification generates appropriate usage data."""
+ 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'}
+ db.instance_system_metadata_update(self.context, instance['uuid'],
+ sys_metadata, False)
+ self.compute.terminate_instance(self.context, instance['uuid'])
+ instance = db.instance_get(self.context.elevated(read_deleted='yes'),
+ instance_id)
+ compute_utils.notify_usage_exists(self.context, instance)
+ msg = test_notifier.NOTIFICATIONS[-1]
+ self.assertEquals(msg['priority'], 'INFO')
+ self.assertEquals(msg['event_type'], 'compute.instance.exists')
+ 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',
+ 'bandwidth', 'audit_period_beginning',
+ 'audit_period_ending', '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'})
+ image_ref_url = "%s/images/1" % utils.generate_glance_url()
+ self.assertEquals(payload['image_ref_url'], image_ref_url)
+
def test_notify_usage_exists_instance_not_found(self):
"""Ensure 'exists' notification generates appropriate usage data."""
instance_id = self._create_instance()