From cc910afb260ab78bfc2568c686f723bff53aa37f Mon Sep 17 00:00:00 2001 From: Eli Qiao Date: Tue, 29 Jul 2014 13:50:51 +0800 Subject: [PATCH] Handle NotImplementedError in server_diagnostics v3 api In libvirt driver, it doesn't implement the function of get_instance_diagnostics().it returns http 500 error No. we expect http 501 if the function is not implemented. Change-Id: I59bfaa27b96284bd56917096e0c3fab0d277ba96 Closes-Bug: 1349680 --- .../openstack/compute/plugins/v3/server_diagnostics.py | 6 +++++- .../compute/plugins/v3/test_server_diagnostics.py | 10 ++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/nova/api/openstack/compute/plugins/v3/server_diagnostics.py b/nova/api/openstack/compute/plugins/v3/server_diagnostics.py index 42f16dce612a..4ca26fa3a77b 100644 --- a/nova/api/openstack/compute/plugins/v3/server_diagnostics.py +++ b/nova/api/openstack/compute/plugins/v3/server_diagnostics.py @@ -19,6 +19,7 @@ from nova.api.openstack import common from nova.api.openstack import extensions from nova import compute from nova import exception +from nova.i18n import _ ALIAS = "os-server-diagnostics" @@ -26,7 +27,7 @@ authorize = extensions.extension_authorizer('compute', 'v3:' + ALIAS) class ServerDiagnosticsController(object): - @extensions.expected_errors((404, 409)) + @extensions.expected_errors((404, 409, 501)) def index(self, req, server_id): context = req.environ["nova.context"] authorize(context) @@ -41,6 +42,9 @@ class ServerDiagnosticsController(object): except exception.InstanceInvalidState as state_error: common.raise_http_conflict_for_instance_invalid_state(state_error, 'get_diagnostics') + except NotImplementedError: + msg = _("Unable to get diagnostics, functionality not implemented") + raise webob.exc.HTTPNotImplemented(explanation=msg) class ServerDiagnostics(extensions.V3APIExtensionBase): diff --git a/nova/tests/api/openstack/compute/plugins/v3/test_server_diagnostics.py b/nova/tests/api/openstack/compute/plugins/v3/test_server_diagnostics.py index e4da0c6790c2..4e840419e4fb 100644 --- a/nova/tests/api/openstack/compute/plugins/v3/test_server_diagnostics.py +++ b/nova/tests/api/openstack/compute/plugins/v3/test_server_diagnostics.py @@ -109,3 +109,13 @@ class ServerDiagnosticsTest(test.NoDBTestCase): '/servers/%s/os-server-diagnostics' % UUID) res = req.get_response(self.router) self.assertEqual(409, res.status_int) + + @mock.patch.object(compute_api.API, 'get_instance_diagnostics', + side_effect=NotImplementedError) + @mock.patch.object(compute_api.API, 'get', fake_instance_get) + def test_get_diagnostics_raise_no_notimplementederror(self, + mock_get_diagnostics): + req = fakes.HTTPRequestV3.blank( + '/servers/%s/os-server-diagnostics' % UUID) + res = req.get_response(self.router) + self.assertEqual(501, res.status_int)