diff --git a/nova/tests/test_compute.py b/nova/tests/test_compute.py index e4c60e06..e6167dc5 100644 --- a/nova/tests/test_compute.py +++ b/nova/tests/test_compute.py @@ -21,6 +21,7 @@ Tests For Compute """ from copy import copy +from webob import exc import mox @@ -1063,6 +1064,60 @@ class ComputeTestCase(BaseTestCase): self.assertEqual(len(instances), 1) self.assertEqual(power_state.NOSTATE, instances[0]['power_state']) + def test_add_instance_fault(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(ctxt, instance_uuid, 404, + 'HTTPNotFound', 'Error Details') + + def test_add_instance_fault_error(self): + instance_uuid = str(utils.gen_uuid()) + + def fake_db_fault_create(ctxt, values): + expected = { + 'code': 500, + 'message': 'NotImplementedError', + '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, + 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")) + class ComputeAPITestCase(BaseTestCase): diff --git a/nova/tests/test_db_api.py b/nova/tests/test_db_api.py index 10c75841..36b5eced 100644 --- a/nova/tests/test_db_api.py +++ b/nova/tests/test_db_api.py @@ -24,6 +24,7 @@ from nova import test from nova import context from nova import db from nova import flags +from nova import utils FLAGS = flags.FLAGS @@ -192,3 +193,74 @@ class DbApiTestCase(test.TestCase): # Retrieve the metadata to ensure it was successfully updated instance_meta = db.instance_metadata_get(ctxt, instance.id) self.assertEqual('bar', instance_meta['host']) + + def test_instance_fault_create(self): + """Ensure we can create an instance fault""" + ctxt = context.get_admin_context() + uuid = str(utils.gen_uuid()) + + # Create a fault + fault_values = { + 'message': 'message', + 'details': 'detail', + 'instance_uuid': uuid, + 'code': 404, + } + db.instance_fault_create(ctxt, fault_values) + + # Retrieve the fault to ensure it was successfully added + instance_fault = db.instance_fault_get_by_instance(ctxt, uuid) + self.assertEqual(404, instance_fault['code']) + + def test_instance_fault_get_by_instance(self): + """ ensure we can retrieve an instance fault by instance UUID """ + ctxt = context.get_admin_context() + + # Create faults + uuid = str(utils.gen_uuid()) + fault_values = { + 'message': 'message', + 'details': 'detail', + 'instance_uuid': uuid, + 'code': 404, + } + db.instance_fault_create(ctxt, fault_values) + + uuid2 = str(utils.gen_uuid()) + fault_values = { + 'message': 'message', + 'details': 'detail', + 'instance_uuid': uuid2, + 'code': 500, + } + db.instance_fault_create(ctxt, fault_values) + + # Retrieve the fault to ensure it was successfully added + instance_fault = db.instance_fault_get_by_instance(ctxt, uuid2) + self.assertEqual(500, instance_fault['code']) + + def test_instance_fault_get_by_instance_first_fault(self): + """Instance_fault_get_by_instance should return the latest fault """ + ctxt = context.get_admin_context() + + # Create faults + uuid = str(utils.gen_uuid()) + fault_values = { + 'message': 'message', + 'details': 'detail', + 'instance_uuid': uuid, + 'code': 404, + } + db.instance_fault_create(ctxt, fault_values) + + fault_values = { + 'message': 'message', + 'details': 'detail', + 'instance_uuid': uuid, + 'code': 500, + } + db.instance_fault_create(ctxt, fault_values) + + # Retrieve the fault to ensure it was successfully added + instance_fault = db.instance_fault_get_by_instance(ctxt, uuid) + self.assertEqual(500, instance_fault['code'])