From 5d98f40a12391c9a0adb2d68f7c4b703c98e79ca Mon Sep 17 00:00:00 2001 From: Alex Meade Date: Thu, 9 Feb 2012 00:15:10 +0000 Subject: [PATCH] Adding traceback to async faults Fixes bug 930278 Change-Id: If70922e07c68275459d0d3ca8d7cfc6fee20f425 --- nova/tests/test_compute.py | 88 +++++++++++++++++++++++++++----------- 1 file changed, 63 insertions(+), 25 deletions(-) diff --git a/nova/tests/test_compute.py b/nova/tests/test_compute.py index 07abd62c..48f16d7b 100644 --- a/nova/tests/test_compute.py +++ b/nova/tests/test_compute.py @@ -21,6 +21,7 @@ Tests For Compute """ from copy import copy import datetime +import sys import time from webob import exc @@ -205,7 +206,7 @@ class ComputeTestCase(BaseTestCase): called = {'fault_added': False} - def did_it_add_fault(_ctxt, _inst_uuid, _e): + def did_it_add_fault(*args): called['fault_added'] = True self.stubs.Set(self.compute, 'add_instance_fault_from_exc', @@ -225,7 +226,7 @@ class ComputeTestCase(BaseTestCase): called = {'fault_added': False} - def did_it_add_fault(_ctxt, _inst_uuid, _e): + def did_it_add_fault(*args): called['fault_added'] = True self.stubs.Set(self.compute, 'add_instance_fault_from_exc', @@ -563,7 +564,7 @@ class ComputeTestCase(BaseTestCase): self.stubs.Set(nova.virt.fake.FakeConnection, 'get_info', fake_driver_get_info) - self.assertRaises(exception.Error, + self.assertRaises(exception.Invalid, self.compute.set_admin_password, self.context, instance['uuid']) @@ -595,7 +596,7 @@ class ComputeTestCase(BaseTestCase): #error raised from the driver should not reveal internal information #so a new error is raised - self.assertRaises(exception.Error, + self.assertRaises(exception.NovaException, self.compute.set_admin_password, self.context, instance_uuid) @@ -884,7 +885,7 @@ class ComputeTestCase(BaseTestCase): """Ensure failure when running an instance that already exists""" instance = self._create_fake_instance() self.compute.run_instance(self.context, instance['uuid']) - self.assertRaises(exception.Error, + self.assertRaises(exception.Invalid, self.compute.run_instance, self.context, instance['uuid']) @@ -1472,13 +1473,68 @@ class ComputeTestCase(BaseTestCase): self.assertEqual(power_state.NOSTATE, instances[0]['power_state']) def test_add_instance_fault(self): + exc_info = None + instance_uuid = str(utils.gen_uuid()) + + def fake_db_fault_create(ctxt, values): + self.assertTrue(values['details'].startswith('test')) + self.assertTrue('raise NotImplementedError' in values['details']) + del values['details'] + + expected = { + 'code': 500, + 'message': 'NotImplementedError', + 'instance_uuid': instance_uuid, + } + self.assertEquals(expected, values) + + try: + raise NotImplementedError('test') + except: + exc_info = sys.exc_info() + + self.stubs.Set(nova.db, 'instance_fault_create', fake_db_fault_create) + + ctxt = context.get_admin_context() + self.compute.add_instance_fault_from_exc(ctxt, instance_uuid, + NotImplementedError('test'), + exc_info) + + def test_add_instance_fault_user_error(self): + exc_info = None + instance_uuid = str(utils.gen_uuid()) + + def fake_db_fault_create(ctxt, values): + + expected = { + 'code': 400, + 'message': 'Invalid', + 'details': 'fake details', + 'instance_uuid': instance_uuid, + } + self.assertEquals(expected, values) + + user_exc = exception.Invalid('fake details', code=400) + + try: + raise user_exc + except: + exc_info = sys.exc_info() + + self.stubs.Set(nova.db, 'instance_fault_create', fake_db_fault_create) + + ctxt = context.get_admin_context() + self.compute.add_instance_fault_from_exc(ctxt, instance_uuid, + user_exc, exc_info) + + def test_add_instance_fault_no_exc_info(self): instance_uuid = str(utils.gen_uuid()) def fake_db_fault_create(ctxt, values): expected = { 'code': 500, 'message': 'NotImplementedError', - 'details': '', + 'details': 'test', 'instance_uuid': instance_uuid, } self.assertEquals(expected, values) @@ -1487,25 +1543,7 @@ class ComputeTestCase(BaseTestCase): ctxt = context.get_admin_context() self.compute.add_instance_fault_from_exc(ctxt, instance_uuid, - NotImplementedError()) - - def test_add_instance_fault_http_exception(self): - instance_uuid = str(utils.gen_uuid()) - - def fake_db_fault_create(ctxt, values): - expected = { - 'code': 404, - 'message': 'HTTPNotFound', - 'details': 'Error Details', - 'instance_uuid': instance_uuid, - } - self.assertEquals(expected, values) - - self.stubs.Set(nova.db, 'instance_fault_create', fake_db_fault_create) - - ctxt = context.get_admin_context() - self.compute.add_instance_fault_from_exc(ctxt, instance_uuid, - exc.HTTPNotFound("Error Details")) + NotImplementedError('test')) class ComputeAPITestCase(BaseTestCase):