diff --git a/doc/api_samples/os-instance-actions/instance-action-get-resp.xml b/doc/api_samples/os-instance-actions/instance-action-get-resp.xml index 720cdd39a082..2ebc14061d36 100644 --- a/doc/api_samples/os-instance-actions/instance-action-get-resp.xml +++ b/doc/api_samples/os-instance-actions/instance-action-get-resp.xml @@ -1,5 +1,5 @@ - + - \ No newline at end of file + diff --git a/nova/tests/api/openstack/compute/contrib/test_instance_actions.py b/nova/tests/api/openstack/compute/contrib/test_instance_actions.py index 12c3fab0ea6b..4f49b2853720 100644 --- a/nova/tests/api/openstack/compute/contrib/test_instance_actions.py +++ b/nova/tests/api/openstack/compute/contrib/test_instance_actions.py @@ -40,6 +40,11 @@ def format_action(action): del(action['id']) if 'finish_time' in action: del(action['finish_time']) + if 'start_time' in action: + # NOTE(danms): Without WSGI above us, these will be just stringified + action['start_time'] = str(action['start_time']) + for event in action.get('events', []): + format_event(event) return action @@ -47,6 +52,12 @@ def format_event(event): '''Remove keys that aren't serialized.''' if 'id' in event: del(event['id']) + if 'start_time' in event: + # NOTE(danms): Without WSGI above us, these will be just stringified + event['start_time'] = str(event['start_time']) + if 'finish_time' in event: + # NOTE(danms): Without WSGI above us, these will be just stringified + event['finish_time'] = str(event['finish_time']) return event @@ -121,8 +132,7 @@ class InstanceActionsTest(test.TestCase): res_dict = self.controller.index(req, FAKE_UUID) for res in res_dict['instanceActions']: fake_action = self.fake_actions[FAKE_UUID][res['request_id']] - fake_action = format_action(fake_action) - self.assertEqual(fake_action, res) + self.assertEqual(format_action(fake_action), format_action(res)) def test_get_action_with_events_allowed(self): def fake_get_action(context, uuid, request_id): @@ -149,7 +159,8 @@ class InstanceActionsTest(test.TestCase): fake_events = [format_event(event) for event in fake_events] fake_action = format_action(fake_action) fake_action['events'] = fake_events - self.assertEqual(fake_action, res_dict['instanceAction']) + self.assertEqual(format_action(fake_action), + format_action(res_dict['instanceAction'])) def test_get_action_with_events_not_allowed(self): def fake_get_action(context, uuid, request_id): @@ -170,8 +181,8 @@ class InstanceActionsTest(test.TestCase): '/v2/123/servers/12/os-instance-actions/1') res_dict = self.controller.show(req, FAKE_UUID, FAKE_REQUEST_ID) fake_action = self.fake_actions[FAKE_UUID][FAKE_REQUEST_ID] - fake_action = format_action(fake_action) - self.assertEqual(fake_action, res_dict['instanceAction']) + self.assertEqual(format_action(fake_action), + format_action(res_dict['instanceAction'])) def test_action_not_found(self): def fake_no_action(context, uuid, action_id): diff --git a/nova/tests/api/openstack/compute/plugins/v3/test_instance_actions.py b/nova/tests/api/openstack/compute/plugins/v3/test_instance_actions.py index af1472fbd4cb..55b826e4469b 100644 --- a/nova/tests/api/openstack/compute/plugins/v3/test_instance_actions.py +++ b/nova/tests/api/openstack/compute/plugins/v3/test_instance_actions.py @@ -40,6 +40,11 @@ def format_action(action): del(action['id']) if 'finish_time' in action: del(action['finish_time']) + if 'start_time' in action: + # NOTE(danms): Without WSGI above us, these will be just stringified + action['start_time'] = str(action['start_time']) + for event in action.get('events', []): + format_event(event) return action @@ -47,6 +52,12 @@ def format_event(event): '''Remove keys that aren't serialized.''' if 'id' in event: del(event['id']) + if 'start_time' in event: + # NOTE(danms): Without WSGI above us, these will be just stringified + event['start_time'] = str(event['start_time']) + if 'finish_time' in event: + # NOTE(danms): Without WSGI above us, these will be just stringified + event['finish_time'] = str(event['finish_time']) return event @@ -124,8 +135,8 @@ class InstanceActionsTest(test.TestCase): res_dict = self.controller.index(req, FAKE_UUID) for res in res_dict['instance_actions']: fake_action = self.fake_actions[FAKE_UUID][res['request_id']] - fake_action = format_action(fake_action) - self.assertEqual(fake_action, res) + self.assertEqual(format_action(fake_action), + format_action(res)) def test_get_action_with_events_allowed(self): def fake_get_action(context, uuid, request_id): @@ -150,9 +161,9 @@ class InstanceActionsTest(test.TestCase): fake_action = self.fake_actions[FAKE_UUID][FAKE_REQUEST_ID] fake_events = self.fake_events[fake_action['id']] fake_events = [format_event(event) for event in fake_events] - fake_action = format_action(fake_action) fake_action['events'] = fake_events - self.assertEqual(fake_action, res_dict['instance_action']) + self.assertEqual(format_action(fake_action), + format_action(res_dict['instance_action'])) def test_get_action_with_events_not_allowed(self): def fake_get_action(context, uuid, request_id): @@ -174,8 +185,8 @@ class InstanceActionsTest(test.TestCase): '/servers/12/os-instance-actions/1') res_dict = self.controller.show(req, FAKE_UUID, FAKE_REQUEST_ID) fake_action = self.fake_actions[FAKE_UUID][FAKE_REQUEST_ID] - fake_action = format_action(fake_action) - self.assertEqual(fake_action, res_dict['instance_action']) + self.assertEqual(format_action(fake_action), + format_action(res_dict['instance_action'])) def test_action_not_found(self): def fake_no_action(context, uuid, action_id): diff --git a/nova/tests/cells/test_cells_messaging.py b/nova/tests/cells/test_cells_messaging.py index 6df935c90a00..9553779e7a91 100644 --- a/nova/tests/cells/test_cells_messaging.py +++ b/nova/tests/cells/test_cells_messaging.py @@ -25,6 +25,7 @@ from nova import db from nova import exception from nova.objects import base as objects_base from nova.objects import instance as instance_obj +from nova.openstack.common import jsonutils from nova.openstack.common import rpc from nova.openstack.common import timeutils from nova.openstack.common import uuidutils @@ -992,7 +993,7 @@ class CellsTargetedMethodsTestCase(test.TestCase): self.tgt_cell_name, 'fake-uuid') result = response.value_or_raise() - self.assertEqual([fake_act], result) + self.assertEqual([jsonutils.to_primitive(fake_act)], result) def test_action_get_by_request_id(self): fake_uuid = fake_instance_actions.FAKE_UUID @@ -1007,7 +1008,7 @@ class CellsTargetedMethodsTestCase(test.TestCase): response = self.src_msg_runner.action_get_by_request_id(self.ctxt, self.tgt_cell_name, 'fake-uuid', 'req-fake') result = response.value_or_raise() - self.assertEqual(fake_act, result) + self.assertEqual(jsonutils.to_primitive(fake_act), result) def test_action_events_get(self): fake_action_id = fake_instance_actions.FAKE_ACTION_ID1 @@ -1022,7 +1023,7 @@ class CellsTargetedMethodsTestCase(test.TestCase): self.tgt_cell_name, 'fake-action') result = response.value_or_raise() - self.assertEqual(fake_events, result) + self.assertEqual(jsonutils.to_primitive(fake_events), result) def test_validate_console_port(self): instance_uuid = 'fake_instance_uuid' diff --git a/nova/tests/fake_instance_actions.py b/nova/tests/fake_instance_actions.py index e12ae827f34b..959e9ba55989 100644 --- a/nova/tests/fake_instance_actions.py +++ b/nova/tests/fake_instance_actions.py @@ -14,14 +14,16 @@ # License for the specific language governing permissions and limitations # under the License. +import datetime + from nova import db FAKE_UUID = 'b48316c5-71e8-45e4-9884-6c78055b9b13' FAKE_REQUEST_ID1 = 'req-3293a3f1-b44c-4609-b8d2-d81b105636b8' FAKE_REQUEST_ID2 = 'req-25517360-b757-47d3-be45-0e8d2a01b36a' -FAKE_ACTION_ID1 = 'f811a359-0c98-4daa-87a4-2948d4c21b78' -FAKE_ACTION_ID2 = '4e9594b5-4ac5-421c-ac60-2d802b11c798' +FAKE_ACTION_ID1 = 123 +FAKE_ACTION_ID2 = 456 FAKE_ACTIONS = { FAKE_UUID: { @@ -31,8 +33,9 @@ FAKE_ACTIONS = { 'request_id': FAKE_REQUEST_ID1, 'project_id': '147', 'user_id': '789', - 'start_time': '2012-12-05 00:00:00.000000', - 'finish_time': '', + 'start_time': datetime.datetime( + 2012, 12, 5, 0, 0, 0, 0), + 'finish_time': None, 'message': '', }, FAKE_REQUEST_ID2: {'id': FAKE_ACTION_ID2, @@ -41,33 +44,40 @@ FAKE_ACTIONS = { 'request_id': FAKE_REQUEST_ID2, 'user_id': '789', 'project_id': '842', - 'start_time': '2012-12-05 01:00:00.000000', - 'finish_time': '', + 'start_time': datetime.datetime( + 2012, 12, 5, 1, 0, 0, 0), + 'finish_time': None, 'message': '', } } } FAKE_EVENTS = { - FAKE_ACTION_ID1: [{'id': '1', + FAKE_ACTION_ID1: [{'id': 1, 'event': 'schedule', - 'start_time': '2012-12-05 01:00:02.000000', - 'finish_time': '2012-12-05 01:02:00.000000', + 'start_time': datetime.datetime( + 2012, 12, 5, 1, 0, 2, 0), + 'finish_time': datetime.datetime( + 2012, 12, 5, 1, 2, 0, 0), 'result': 'Success', 'traceback': '', }, - {'id': '2', + {'id': 2, 'event': 'compute_create', - 'start_time': '2012-12-05 01:03:00.000000', - 'finish_time': '2012-12-05 01:04:00.000000', + 'start_time': datetime.datetime( + 2012, 12, 5, 1, 3, 0, 0), + 'finish_time': datetime.datetime( + 2012, 12, 5, 1, 4, 0, 0), 'result': 'Success', 'traceback': '', } ], - FAKE_ACTION_ID2: [{'id': '3', + FAKE_ACTION_ID2: [{'id': 3, 'event': 'schedule', - 'start_time': '2012-12-05 03:00:00.000000', - 'finish_time': '2012-12-05 03:02:00.000000', + 'start_time': datetime.datetime( + 2012, 12, 5, 3, 0, 0, 0), + 'finish_time': datetime.datetime( + 2012, 12, 5, 3, 2, 0, 0), 'result': 'Error', 'traceback': '' } diff --git a/nova/tests/integrated/api_samples/os-instance-actions/instance-action-get-resp.json.tpl b/nova/tests/integrated/api_samples/os-instance-actions/instance-action-get-resp.json.tpl index 6ba99d264da6..2e83b7344f27 100644 --- a/nova/tests/integrated/api_samples/os-instance-actions/instance-action-get-resp.json.tpl +++ b/nova/tests/integrated/api_samples/os-instance-actions/instance-action-get-resp.json.tpl @@ -5,7 +5,7 @@ "request_id": "%(request_id)s", "user_id": "%(integer_id)s", "project_id": "%(integer_id)s", - "start_time": "%(start_time)s", + "start_time": "%(timestamp)s", "message": "", "events": [ { diff --git a/nova/tests/integrated/api_samples/os-instance-actions/instance-action-get-resp.xml.tpl b/nova/tests/integrated/api_samples/os-instance-actions/instance-action-get-resp.xml.tpl index ef4b7b0032ce..6cd44bfc45bf 100644 --- a/nova/tests/integrated/api_samples/os-instance-actions/instance-action-get-resp.xml.tpl +++ b/nova/tests/integrated/api_samples/os-instance-actions/instance-action-get-resp.xml.tpl @@ -1,5 +1,5 @@ - +