summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrian Waldon <brian.waldon@rackspace.com>2011-12-20 17:24:13 -0500
committerBrian Waldon <brian.waldon@rackspace.com>2011-12-20 17:24:13 -0500
commit47c4c49baaa08c83c29f695ed85e626b381b0a7e (patch)
treea3462c09aa817706841747428af5037a0854b803
parent733433efbf0dee847096fb9e671c02ef07b21b94 (diff)
Fix os-console-output extension integration
Fixes bug 907083 Change-Id: Ia57d316db0c79d7e78ef3225e77cd95589ac68df
-rw-r--r--nova/api/openstack/v2/contrib/console_output.py14
-rw-r--r--nova/tests/api/openstack/v2/contrib/test_console_output.py44
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)