From 7c2cab6208a5fb51f2e735fcce43b6028fa5a33d Mon Sep 17 00:00:00 2001 From: Eli Qiao Date: Mon, 29 Feb 2016 15:23:33 +0800 Subject: [PATCH] API: Mapping ConsoleTypeInvalid exception to HTTPBadRequest We need to catch up ConsoleTypeInvalid in API layer to avoid 500 error in case we passed invalid console type (> v2.6). Closes-Bug: #1551104 Change-Id: I8be6dd1efd9057fb582713e0fe9fe0d626832fda --- nova/api/openstack/compute/remote_consoles.py | 3 ++- .../unit/api/openstack/compute/test_remote_consoles.py | 10 ++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/nova/api/openstack/compute/remote_consoles.py b/nova/api/openstack/compute/remote_consoles.py index bb0a850f8b..8a5cb3938e 100644 --- a/nova/api/openstack/compute/remote_consoles.py +++ b/nova/api/openstack/compute/remote_consoles.py @@ -178,7 +178,8 @@ class RemoteConsolesController(wsgi.Controller): raise webob.exc.HTTPNotFound(explanation=e.format_message()) except exception.InstanceNotReady as e: raise webob.exc.HTTPConflict(explanation=e.format_message()) - except (exception.ConsoleTypeUnavailable, + except (exception.ConsoleTypeInvalid, + exception.ConsoleTypeUnavailable, exception.ImageSerialPortNumberInvalid, exception.ImageSerialPortNumberExceedFlavorValue, exception.SocketPortRangeExhaustedException) as e: diff --git a/nova/tests/unit/api/openstack/compute/test_remote_consoles.py b/nova/tests/unit/api/openstack/compute/test_remote_consoles.py index 587f7c9aab..b41c65f5a8 100644 --- a/nova/tests/unit/api/openstack/compute/test_remote_consoles.py +++ b/nova/tests/unit/api/openstack/compute/test_remote_consoles.py @@ -572,6 +572,16 @@ class ConsolesExtensionTestV26(test.NoDBTestCase): self.assertRaises(webob.exc.HTTPBadRequest, self.controller.create, self.req, fakes.FAKE_UUID, body=body) + @mock.patch.object(compute_api.API, 'get', return_value='fake_instance') + def test_create_console_invalid_type(self, mock_get): + mock_handler = mock.MagicMock() + mock_handler.side_effect = ( + exception.ConsoleTypeInvalid(console_type='invalid_type')) + self.controller.handlers['serial'] = mock_handler + body = {'remote_console': {'protocol': 'serial', 'type': 'xvpvnc'}} + self.assertRaises(webob.exc.HTTPBadRequest, self.controller.create, + self.req, fakes.FAKE_UUID, body=body) + class ConsolesExtensionTestV28(ConsolesExtensionTestV26): def setUp(self):