diff options
-rw-r--r-- | nova/tests/db/test_db_api.py | 576 |
1 files changed, 289 insertions, 287 deletions
diff --git a/nova/tests/db/test_db_api.py b/nova/tests/db/test_db_api.py index 4d01e8e0a..75df3400a 100644 --- a/nova/tests/db/test_db_api.py +++ b/nova/tests/db/test_db_api.py @@ -589,293 +589,6 @@ class DbApiTestCase(DbTestCase): # Ensure that metadata is updated during instance_update self._test_instance_update_updates_metadata('metadata') - def test_instance_action_start(self): - """Create an instance action.""" - ctxt = context.get_admin_context() - uuid = str(stdlib_uuid.uuid4()) - - start_time = timeutils.utcnow() - action_values = {'action': 'run_instance', - 'instance_uuid': uuid, - 'request_id': ctxt.request_id, - 'user_id': ctxt.user_id, - 'project_id': ctxt.project_id, - 'start_time': start_time} - db.action_start(ctxt, action_values) - - # Retrieve the action to ensure it was successfully added - actions = db.actions_get(ctxt, uuid) - self.assertEqual(1, len(actions)) - self.assertEqual('run_instance', actions[0]['action']) - self.assertEqual(start_time, actions[0]['start_time']) - self.assertEqual(ctxt.request_id, actions[0]['request_id']) - self.assertEqual(ctxt.user_id, actions[0]['user_id']) - self.assertEqual(ctxt.project_id, actions[0]['project_id']) - - def test_instance_action_finish(self): - """Create an instance action.""" - ctxt = context.get_admin_context() - uuid = str(stdlib_uuid.uuid4()) - - start_time = timeutils.utcnow() - action_start_values = {'action': 'run_instance', - 'instance_uuid': uuid, - 'request_id': ctxt.request_id, - 'user_id': ctxt.user_id, - 'project_id': ctxt.project_id, - 'start_time': start_time} - db.action_start(ctxt, action_start_values) - - finish_time = timeutils.utcnow() + datetime.timedelta(seconds=5) - action_finish_values = {'instance_uuid': uuid, - 'request_id': ctxt.request_id, - 'finish_time': finish_time} - db.action_finish(ctxt, action_finish_values) - - # Retrieve the action to ensure it was successfully added - actions = db.actions_get(ctxt, uuid) - self.assertEqual(1, len(actions)) - self.assertEqual('run_instance', actions[0]['action']) - self.assertEqual(start_time, actions[0]['start_time']) - self.assertEqual(finish_time, actions[0]['finish_time']) - self.assertEqual(ctxt.request_id, actions[0]['request_id']) - self.assertEqual(ctxt.user_id, actions[0]['user_id']) - self.assertEqual(ctxt.project_id, actions[0]['project_id']) - - def test_instance_actions_get_by_instance(self): - """Ensure we can get actions by UUID.""" - ctxt1 = context.get_admin_context() - ctxt2 = context.get_admin_context() - uuid1 = str(stdlib_uuid.uuid4()) - uuid2 = str(stdlib_uuid.uuid4()) - - action_values = {'action': 'run_instance', - 'instance_uuid': uuid1, - 'request_id': ctxt1.request_id, - 'user_id': ctxt1.user_id, - 'project_id': ctxt1.project_id, - 'start_time': timeutils.utcnow()} - db.action_start(ctxt1, action_values) - action_values['action'] = 'resize' - db.action_start(ctxt1, action_values) - - action_values = {'action': 'reboot', - 'instance_uuid': uuid2, - 'request_id': ctxt2.request_id, - 'user_id': ctxt2.user_id, - 'project_id': ctxt2.project_id, - 'start_time': timeutils.utcnow()} - db.action_start(ctxt2, action_values) - db.action_start(ctxt2, action_values) - - # Retrieve the action to ensure it was successfully added - actions = db.actions_get(ctxt1, uuid1) - self.assertEqual(2, len(actions)) - self.assertEqual('resize', actions[0]['action']) - self.assertEqual('run_instance', actions[1]['action']) - - def test_instance_action_get_by_instance_and_action(self): - """Ensure we can get an action by instance UUID and action id.""" - ctxt1 = context.get_admin_context() - ctxt2 = context.get_admin_context() - uuid1 = str(stdlib_uuid.uuid4()) - uuid2 = str(stdlib_uuid.uuid4()) - - action_values = {'action': 'run_instance', - 'instance_uuid': uuid1, - 'request_id': ctxt1.request_id, - 'user_id': ctxt1.user_id, - 'project_id': ctxt1.project_id, - 'start_time': timeutils.utcnow()} - db.action_start(ctxt1, action_values) - action_values['action'] = 'resize' - db.action_start(ctxt1, action_values) - - action_values = {'action': 'reboot', - 'instance_uuid': uuid2, - 'request_id': ctxt2.request_id, - 'user_id': ctxt2.user_id, - 'project_id': ctxt2.project_id, - 'start_time': timeutils.utcnow()} - db.action_start(ctxt2, action_values) - db.action_start(ctxt2, action_values) - - actions = db.actions_get(ctxt1, uuid1) - request_id = actions[0]['request_id'] - action = db.action_get_by_request_id(ctxt1, uuid1, request_id) - self.assertEqual('run_instance', action['action']) - self.assertEqual(ctxt1.request_id, action['request_id']) - - def test_instance_action_event_start(self): - """Create an instance action event.""" - ctxt = context.get_admin_context() - uuid = str(stdlib_uuid.uuid4()) - - start_time = timeutils.utcnow() - action_values = {'action': 'run_instance', - 'instance_uuid': uuid, - 'request_id': ctxt.request_id, - 'user_id': ctxt.user_id, - 'project_id': ctxt.project_id, - 'start_time': start_time} - action = db.action_start(ctxt, action_values) - - event_values = {'event': 'schedule', - 'instance_uuid': uuid, - 'request_id': ctxt.request_id, - 'start_time': start_time} - db.action_event_start(ctxt, event_values) - - # Retrieve the event to ensure it was successfully added - events = db.action_events_get(ctxt, action['id']) - self.assertEqual(1, len(events)) - self.assertEqual('schedule', events[0]['event']) - self.assertEqual(start_time, events[0]['start_time']) - - def test_instance_action_event_finish_success(self): - """Finish an instance action event.""" - ctxt = context.get_admin_context() - uuid = str(stdlib_uuid.uuid4()) - - start_time = timeutils.utcnow() - action_values = {'action': 'run_instance', - 'instance_uuid': uuid, - 'request_id': ctxt.request_id, - 'user_id': ctxt.user_id, - 'project_id': ctxt.project_id, - 'start_time': start_time} - action = db.action_start(ctxt, action_values) - - event_values = {'event': 'schedule', - 'request_id': ctxt.request_id, - 'instance_uuid': uuid, - 'start_time': start_time} - db.action_event_start(ctxt, event_values) - - finish_time = timeutils.utcnow() + datetime.timedelta(seconds=5) - event_finish_values = {'event': 'schedule', - 'request_id': ctxt.request_id, - 'instance_uuid': uuid, - 'finish_time': finish_time, - 'result': 'Success'} - db.action_event_finish(ctxt, event_finish_values) - - # Retrieve the event to ensure it was successfully added - events = db.action_events_get(ctxt, action['id']) - action = db.action_get_by_request_id(ctxt, uuid, ctxt.request_id) - self.assertEqual(1, len(events)) - self.assertEqual('schedule', events[0]['event']) - self.assertEqual(start_time, events[0]['start_time']) - self.assertEqual(finish_time, events[0]['finish_time']) - self.assertNotEqual(action['message'], 'Error') - - def test_instance_action_event_finish_error(self): - """Finish an instance action event with an error.""" - ctxt = context.get_admin_context() - uuid = str(stdlib_uuid.uuid4()) - - start_time = timeutils.utcnow() - action_values = {'action': 'run_instance', - 'instance_uuid': uuid, - 'request_id': ctxt.request_id, - 'user_id': ctxt.user_id, - 'project_id': ctxt.project_id, - 'start_time': start_time} - action = db.action_start(ctxt, action_values) - - event_values = {'event': 'schedule', - 'request_id': ctxt.request_id, - 'instance_uuid': uuid, - 'start_time': start_time} - db.action_event_start(ctxt, event_values) - - finish_time = timeutils.utcnow() + datetime.timedelta(seconds=5) - event_finish_values = {'event': 'schedule', - 'request_id': ctxt.request_id, - 'instance_uuid': uuid, - 'finish_time': finish_time, - 'result': 'Error'} - db.action_event_finish(ctxt, event_finish_values) - - # Retrieve the event to ensure it was successfully added - events = db.action_events_get(ctxt, action['id']) - action = db.action_get_by_request_id(ctxt, uuid, ctxt.request_id) - self.assertEqual(1, len(events)) - self.assertEqual('schedule', events[0]['event']) - self.assertEqual(start_time, events[0]['start_time']) - self.assertEqual(finish_time, events[0]['finish_time']) - self.assertEqual(action['message'], 'Error') - - def test_instance_action_and_event_start_string_time(self): - """Create an instance action and event with a string start_time.""" - ctxt = context.get_admin_context() - uuid = str(stdlib_uuid.uuid4()) - - start_time = timeutils.utcnow() - start_time_str = timeutils.strtime(start_time) - action_values = {'action': 'run_instance', - 'instance_uuid': uuid, - 'request_id': ctxt.request_id, - 'user_id': ctxt.user_id, - 'project_id': ctxt.project_id, - 'start_time': start_time_str} - action = db.action_start(ctxt, action_values) - - event_values = {'event': 'schedule', - 'instance_uuid': uuid, - 'request_id': ctxt.request_id, - 'start_time': start_time_str} - db.action_event_start(ctxt, event_values) - - # Retrieve the event to ensure it was successfully added - events = db.action_events_get(ctxt, action['id']) - self.assertEqual(1, len(events)) - self.assertEqual('schedule', events[0]['event']) - # db api still returns models with datetime, not str, values - self.assertEqual(start_time, events[0]['start_time']) - - def test_instance_action_event_get_by_id(self): - """Get a specific instance action event.""" - ctxt1 = context.get_admin_context() - ctxt2 = context.get_admin_context() - uuid1 = str(stdlib_uuid.uuid4()) - uuid2 = str(stdlib_uuid.uuid4()) - - action_values = {'action': 'run_instance', - 'instance_uuid': uuid1, - 'request_id': ctxt1.request_id, - 'user_id': ctxt1.user_id, - 'project_id': ctxt1.project_id, - 'start_time': timeutils.utcnow()} - added_action = db.action_start(ctxt1, action_values) - - action_values = {'action': 'reboot', - 'instance_uuid': uuid2, - 'request_id': ctxt2.request_id, - 'user_id': ctxt2.user_id, - 'project_id': ctxt2.project_id, - 'start_time': timeutils.utcnow()} - db.action_start(ctxt2, action_values) - - start_time = timeutils.utcnow() - event_values = {'event': 'schedule', - 'instance_uuid': uuid1, - 'request_id': ctxt1.request_id, - 'start_time': start_time} - added_event = db.action_event_start(ctxt1, event_values) - - event_values = {'event': 'reboot', - 'instance_uuid': uuid2, - 'request_id': ctxt2.request_id, - 'start_time': timeutils.utcnow()} - db.action_event_start(ctxt2, event_values) - - # Retrieve the event to ensure it was successfully added - event = db.action_event_get_by_id(ctxt1, added_action['id'], - added_event['id']) - self.assertEqual('schedule', event['event']) - self.assertEqual(start_time, event['start_time']) - def test_add_key_pair(self, name=None): """Check if keypair creation work as expected.""" keypair = { @@ -2102,6 +1815,295 @@ class BaseInstanceTypeTestCase(test.TestCase, ModelsObjectComparatorMixin): return db.instance_type_create(self.ctxt, v) +class InstanceActionTestCase(test.TestCase, ModelsObjectComparatorMixin): + def test_instance_action_start(self): + """Create an instance action.""" + ctxt = context.get_admin_context() + uuid = str(stdlib_uuid.uuid4()) + + start_time = timeutils.utcnow() + action_values = {'action': 'run_instance', + 'instance_uuid': uuid, + 'request_id': ctxt.request_id, + 'user_id': ctxt.user_id, + 'project_id': ctxt.project_id, + 'start_time': start_time} + db.action_start(ctxt, action_values) + + # Retrieve the action to ensure it was successfully added + actions = db.actions_get(ctxt, uuid) + self.assertEqual(1, len(actions)) + self.assertEqual('run_instance', actions[0]['action']) + self.assertEqual(start_time, actions[0]['start_time']) + self.assertEqual(ctxt.request_id, actions[0]['request_id']) + self.assertEqual(ctxt.user_id, actions[0]['user_id']) + self.assertEqual(ctxt.project_id, actions[0]['project_id']) + + def test_instance_action_finish(self): + """Create an instance action.""" + ctxt = context.get_admin_context() + uuid = str(stdlib_uuid.uuid4()) + + start_time = timeutils.utcnow() + action_start_values = {'action': 'run_instance', + 'instance_uuid': uuid, + 'request_id': ctxt.request_id, + 'user_id': ctxt.user_id, + 'project_id': ctxt.project_id, + 'start_time': start_time} + db.action_start(ctxt, action_start_values) + + finish_time = timeutils.utcnow() + datetime.timedelta(seconds=5) + action_finish_values = {'instance_uuid': uuid, + 'request_id': ctxt.request_id, + 'finish_time': finish_time} + db.action_finish(ctxt, action_finish_values) + + # Retrieve the action to ensure it was successfully added + actions = db.actions_get(ctxt, uuid) + self.assertEqual(1, len(actions)) + self.assertEqual('run_instance', actions[0]['action']) + self.assertEqual(start_time, actions[0]['start_time']) + self.assertEqual(finish_time, actions[0]['finish_time']) + self.assertEqual(ctxt.request_id, actions[0]['request_id']) + self.assertEqual(ctxt.user_id, actions[0]['user_id']) + self.assertEqual(ctxt.project_id, actions[0]['project_id']) + + def test_instance_actions_get_by_instance(self): + """Ensure we can get actions by UUID.""" + ctxt1 = context.get_admin_context() + ctxt2 = context.get_admin_context() + uuid1 = str(stdlib_uuid.uuid4()) + uuid2 = str(stdlib_uuid.uuid4()) + + action_values = {'action': 'run_instance', + 'instance_uuid': uuid1, + 'request_id': ctxt1.request_id, + 'user_id': ctxt1.user_id, + 'project_id': ctxt1.project_id, + 'start_time': timeutils.utcnow()} + db.action_start(ctxt1, action_values) + action_values['action'] = 'resize' + db.action_start(ctxt1, action_values) + + action_values = {'action': 'reboot', + 'instance_uuid': uuid2, + 'request_id': ctxt2.request_id, + 'user_id': ctxt2.user_id, + 'project_id': ctxt2.project_id, + 'start_time': timeutils.utcnow()} + db.action_start(ctxt2, action_values) + db.action_start(ctxt2, action_values) + + # Retrieve the action to ensure it was successfully added + actions = db.actions_get(ctxt1, uuid1) + self.assertEqual(2, len(actions)) + self.assertEqual('resize', actions[0]['action']) + self.assertEqual('run_instance', actions[1]['action']) + + def test_instance_action_get_by_instance_and_action(self): + """Ensure we can get an action by instance UUID and action id.""" + ctxt1 = context.get_admin_context() + ctxt2 = context.get_admin_context() + uuid1 = str(stdlib_uuid.uuid4()) + uuid2 = str(stdlib_uuid.uuid4()) + + action_values = {'action': 'run_instance', + 'instance_uuid': uuid1, + 'request_id': ctxt1.request_id, + 'user_id': ctxt1.user_id, + 'project_id': ctxt1.project_id, + 'start_time': timeutils.utcnow()} + db.action_start(ctxt1, action_values) + action_values['action'] = 'resize' + db.action_start(ctxt1, action_values) + + action_values = {'action': 'reboot', + 'instance_uuid': uuid2, + 'request_id': ctxt2.request_id, + 'user_id': ctxt2.user_id, + 'project_id': ctxt2.project_id, + 'start_time': timeutils.utcnow()} + db.action_start(ctxt2, action_values) + db.action_start(ctxt2, action_values) + + actions = db.actions_get(ctxt1, uuid1) + request_id = actions[0]['request_id'] + action = db.action_get_by_request_id(ctxt1, uuid1, request_id) + self.assertEqual('run_instance', action['action']) + self.assertEqual(ctxt1.request_id, action['request_id']) + + def test_instance_action_event_start(self): + """Create an instance action event.""" + ctxt = context.get_admin_context() + uuid = str(stdlib_uuid.uuid4()) + + start_time = timeutils.utcnow() + action_values = {'action': 'run_instance', + 'instance_uuid': uuid, + 'request_id': ctxt.request_id, + 'user_id': ctxt.user_id, + 'project_id': ctxt.project_id, + 'start_time': start_time} + action = db.action_start(ctxt, action_values) + + event_values = {'event': 'schedule', + 'instance_uuid': uuid, + 'request_id': ctxt.request_id, + 'start_time': start_time} + db.action_event_start(ctxt, event_values) + + # Retrieve the event to ensure it was successfully added + events = db.action_events_get(ctxt, action['id']) + self.assertEqual(1, len(events)) + self.assertEqual('schedule', events[0]['event']) + self.assertEqual(start_time, events[0]['start_time']) + + def test_instance_action_event_finish_success(self): + """Finish an instance action event.""" + ctxt = context.get_admin_context() + uuid = str(stdlib_uuid.uuid4()) + + start_time = timeutils.utcnow() + action_values = {'action': 'run_instance', + 'instance_uuid': uuid, + 'request_id': ctxt.request_id, + 'user_id': ctxt.user_id, + 'project_id': ctxt.project_id, + 'start_time': start_time} + action = db.action_start(ctxt, action_values) + + event_values = {'event': 'schedule', + 'request_id': ctxt.request_id, + 'instance_uuid': uuid, + 'start_time': start_time} + db.action_event_start(ctxt, event_values) + + finish_time = timeutils.utcnow() + datetime.timedelta(seconds=5) + event_finish_values = {'event': 'schedule', + 'request_id': ctxt.request_id, + 'instance_uuid': uuid, + 'finish_time': finish_time, + 'result': 'Success'} + db.action_event_finish(ctxt, event_finish_values) + + # Retrieve the event to ensure it was successfully added + events = db.action_events_get(ctxt, action['id']) + action = db.action_get_by_request_id(ctxt, uuid, ctxt.request_id) + self.assertEqual(1, len(events)) + self.assertEqual('schedule', events[0]['event']) + self.assertEqual(start_time, events[0]['start_time']) + self.assertEqual(finish_time, events[0]['finish_time']) + self.assertNotEqual(action['message'], 'Error') + + def test_instance_action_event_finish_error(self): + """Finish an instance action event with an error.""" + ctxt = context.get_admin_context() + uuid = str(stdlib_uuid.uuid4()) + + start_time = timeutils.utcnow() + action_values = {'action': 'run_instance', + 'instance_uuid': uuid, + 'request_id': ctxt.request_id, + 'user_id': ctxt.user_id, + 'project_id': ctxt.project_id, + 'start_time': start_time} + action = db.action_start(ctxt, action_values) + + event_values = {'event': 'schedule', + 'request_id': ctxt.request_id, + 'instance_uuid': uuid, + 'start_time': start_time} + db.action_event_start(ctxt, event_values) + + finish_time = timeutils.utcnow() + datetime.timedelta(seconds=5) + event_finish_values = {'event': 'schedule', + 'request_id': ctxt.request_id, + 'instance_uuid': uuid, + 'finish_time': finish_time, + 'result': 'Error'} + db.action_event_finish(ctxt, event_finish_values) + + # Retrieve the event to ensure it was successfully added + events = db.action_events_get(ctxt, action['id']) + action = db.action_get_by_request_id(ctxt, uuid, ctxt.request_id) + self.assertEqual(1, len(events)) + self.assertEqual('schedule', events[0]['event']) + self.assertEqual(start_time, events[0]['start_time']) + self.assertEqual(finish_time, events[0]['finish_time']) + self.assertEqual(action['message'], 'Error') + + def test_instance_action_and_event_start_string_time(self): + """Create an instance action and event with a string start_time.""" + ctxt = context.get_admin_context() + uuid = str(stdlib_uuid.uuid4()) + + start_time = timeutils.utcnow() + start_time_str = timeutils.strtime(start_time) + action_values = {'action': 'run_instance', + 'instance_uuid': uuid, + 'request_id': ctxt.request_id, + 'user_id': ctxt.user_id, + 'project_id': ctxt.project_id, + 'start_time': start_time_str} + action = db.action_start(ctxt, action_values) + + event_values = {'event': 'schedule', + 'instance_uuid': uuid, + 'request_id': ctxt.request_id, + 'start_time': start_time_str} + db.action_event_start(ctxt, event_values) + + # Retrieve the event to ensure it was successfully added + events = db.action_events_get(ctxt, action['id']) + self.assertEqual(1, len(events)) + self.assertEqual('schedule', events[0]['event']) + # db api still returns models with datetime, not str, values + self.assertEqual(start_time, events[0]['start_time']) + + def test_instance_action_event_get_by_id(self): + """Get a specific instance action event.""" + ctxt1 = context.get_admin_context() + ctxt2 = context.get_admin_context() + uuid1 = str(stdlib_uuid.uuid4()) + uuid2 = str(stdlib_uuid.uuid4()) + + action_values = {'action': 'run_instance', + 'instance_uuid': uuid1, + 'request_id': ctxt1.request_id, + 'user_id': ctxt1.user_id, + 'project_id': ctxt1.project_id, + 'start_time': timeutils.utcnow()} + added_action = db.action_start(ctxt1, action_values) + + action_values = {'action': 'reboot', + 'instance_uuid': uuid2, + 'request_id': ctxt2.request_id, + 'user_id': ctxt2.user_id, + 'project_id': ctxt2.project_id, + 'start_time': timeutils.utcnow()} + db.action_start(ctxt2, action_values) + + start_time = timeutils.utcnow() + event_values = {'event': 'schedule', + 'instance_uuid': uuid1, + 'request_id': ctxt1.request_id, + 'start_time': start_time} + added_event = db.action_event_start(ctxt1, event_values) + + event_values = {'event': 'reboot', + 'instance_uuid': uuid2, + 'request_id': ctxt2.request_id, + 'start_time': timeutils.utcnow()} + db.action_event_start(ctxt2, event_values) + + # Retrieve the event to ensure it was successfully added + event = db.action_event_get_by_id(ctxt1, added_action['id'], + added_event['id']) + self.assertEqual('schedule', event['event']) + self.assertEqual(start_time, event['start_time']) + + class InstanceFaultTestCase(test.TestCase, ModelsObjectComparatorMixin): def setUp(self): super(InstanceFaultTestCase, self).setUp() |