From 33b2d7f314bfc54a704564a6adc110a981cfd381 Mon Sep 17 00:00:00 2001 From: ghanshyam Date: Fri, 7 Nov 2014 08:54:30 +0900 Subject: [PATCH] Raise HTTPNotFound in V2 console extension In case requested instance is not found, console extension does not catch InstanceNotFound, which results to internal server error (500). This patch handle InstanceNotFound exception and raise HTTPNotFound like V3 console plugin. Change-Id: Ia982049451f2c529f123da714e994476d4610491 --- nova/api/openstack/compute/consoles.py | 5 ++++- nova/tests/unit/api/openstack/compute/test_consoles.py | 9 +++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/nova/api/openstack/compute/consoles.py b/nova/api/openstack/compute/consoles.py index 40b4aceabe24..db6342118a66 100644 --- a/nova/api/openstack/compute/consoles.py +++ b/nova/api/openstack/compute/consoles.py @@ -95,9 +95,12 @@ class Controller(object): def create(self, req, server_id, body): """Creates a new console.""" - self.console_api.create_console( + try: + self.console_api.create_console( req.environ['nova.context'], server_id) + except exception.InstanceNotFound as e: + raise exc.HTTPNotFound(explanation=e.format_message()) @wsgi.serializers(xml=ConsoleTemplate) def show(self, req, server_id, id): diff --git a/nova/tests/unit/api/openstack/compute/test_consoles.py b/nova/tests/unit/api/openstack/compute/test_consoles.py index 3ba99899c015..c951046ae0cd 100644 --- a/nova/tests/unit/api/openstack/compute/test_consoles.py +++ b/nova/tests/unit/api/openstack/compute/test_consoles.py @@ -144,6 +144,15 @@ class ConsolesControllerTest(test.NoDBTestCase): req = fakes.HTTPRequest.blank(self.url) self.controller.create(req, self.uuid, None) + def test_create_console_unknown_instance(self): + def fake_create_console(cons_self, context, instance_id): + raise exception.InstanceNotFound(instance_id=instance_id) + self.stubs.Set(console.api.API, 'create_console', fake_create_console) + + req = fakes.HTTPRequest.blank(self.url) + self.assertRaises(webob.exc.HTTPNotFound, self.controller.create, + req, self.uuid, None) + def test_show_console(self): def fake_get_console(cons_self, context, instance_id, console_id): self.assertEqual(instance_id, self.uuid)