diff options
| author | Brian Waldon <brian.waldon@rackspace.com> | 2011-12-20 17:24:13 -0500 |
|---|---|---|
| committer | Brian Waldon <brian.waldon@rackspace.com> | 2011-12-20 17:24:13 -0500 |
| commit | 47c4c49baaa08c83c29f695ed85e626b381b0a7e (patch) | |
| tree | a3462c09aa817706841747428af5037a0854b803 | |
| parent | 733433efbf0dee847096fb9e671c02ef07b21b94 (diff) | |
Fix os-console-output extension integration
Fixes bug 907083
Change-Id: Ia57d316db0c79d7e78ef3225e77cd95589ac68df
| -rw-r--r-- | nova/api/openstack/v2/contrib/console_output.py | 14 | ||||
| -rw-r--r-- | nova/tests/api/openstack/v2/contrib/test_console_output.py | 44 |
2 files changed, 46 insertions, 12 deletions
diff --git a/nova/api/openstack/v2/contrib/console_output.py b/nova/api/openstack/v2/contrib/console_output.py index 32bd3a5fb..3d75d5d6b 100644 --- a/nova/api/openstack/v2/contrib/console_output.py +++ b/nova/api/openstack/v2/contrib/console_output.py @@ -42,10 +42,20 @@ class Console_output(extensions.ExtensionDescriptor): def get_console_output(self, input_dict, req, server_id): """Get text console output.""" context = req.environ['nova.context'] - length = input_dict['os-getConsoleOutput'].get('length') + + try: + instance = self.compute_api.routing_get(context, server_id) + except exception.NotFound: + raise webob.exc.HTTPNotFound(_('Instance not found')) + + try: + length = input_dict['os-getConsoleOutput'].get('length') + except (TypeError, KeyError): + raise webob.exc.HTTPBadRequest(_('Malformed request body')) + try: return self.compute_api.get_console_output(context, - server_id, + instance, length) except exception.ApiError, e: raise webob.exc.HTTPBadRequest(explanation=e.message) diff --git a/nova/tests/api/openstack/v2/contrib/test_console_output.py b/nova/tests/api/openstack/v2/contrib/test_console_output.py index bfe48ecea..bfb734f80 100644 --- a/nova/tests/api/openstack/v2/contrib/test_console_output.py +++ b/nova/tests/api/openstack/v2/contrib/test_console_output.py @@ -18,12 +18,12 @@ import json import webob from nova import compute +from nova import exception from nova import test from nova.tests.api.openstack import fakes -def fake_text_console_tail(self, method, context, instance_id, params): - tail_length = params['tail_length'] +def fake_get_console_output(self, _context, _instance, tail_length): fixture = [str(i) for i in range(10)] if tail_length is None: @@ -36,15 +36,23 @@ def fake_text_console_tail(self, method, context, instance_id, params): return '\n'.join(fixture) +def fake_get(self, context, instance_uuid): + return {'uuid': instance_uuid} + + +def fake_get_not_found(self, context, instance_uuid): + raise exception.NotFound() + + class ConsoleOutputExtensionTest(test.TestCase): def setUp(self): super(ConsoleOutputExtensionTest, self).setUp() + self.stubs.Set(compute.API, 'get_console_output', + fake_get_console_output) + self.stubs.Set(compute.API, 'get', fake_get) def test_get_text_console_instance_action(self): - self.stubs.Set(compute.API, '_call_compute_message', - fake_text_console_tail) - body = {'os-getConsoleOutput': {}} req = webob.Request.blank('/v1.1/123/servers/1/action') req.method = "POST" @@ -55,15 +63,31 @@ class ConsoleOutputExtensionTest(test.TestCase): self.assertEqual(res.status_int, 200) def test_get_console_output_with_tail(self): - self.stubs.Set(compute.API, - '_call_compute_message', - fake_text_console_tail) - body = {'os-getConsoleOutput': {'length': 3}} req = webob.Request.blank('/v2/123/servers/1/action') req.method = "POST" req.body = json.dumps(body) req.headers["content-type"] = "application/json" res = req.get_response(fakes.wsgi_app()) - self.assertEqual(res.status_int, 200) + + def test_get_text_console_no_instance(self): + self.stubs.Set(compute.API, 'get', fake_get_not_found) + body = {'os-getConsoleOutput': {}} + req = webob.Request.blank('/v1.1/123/servers/1/action') + req.method = "POST" + req.body = json.dumps(body) + req.headers["content-type"] = "application/json" + + res = req.get_response(fakes.wsgi_app()) + self.assertEqual(res.status_int, 404) + + def test_get_text_console_bad_body(self): + body = {} + req = webob.Request.blank('/v1.1/123/servers/1/action') + req.method = "POST" + req.body = json.dumps(body) + req.headers["content-type"] = "application/json" + + res = req.get_response(fakes.wsgi_app()) + self.assertEqual(res.status_int, 400) |
