From c651f4928c65407cff86a9f9efc046a0f76a9519 Mon Sep 17 00:00:00 2001 From: Xavier Queralt Date: Sun, 23 Jun 2013 21:39:32 +0200 Subject: [PATCH] Fix the filtered characters list from console-log In fffcaea1 ^M was added to the list of characters to filter from the console-log output but, because of a typo in the regexp, the character '-' was added to that list too and has been removed since then. Fixes bug #1194032 Change-Id: Ia02b0b4c7027cbd09a51042ca1b5d28890413626 --- .../compute/contrib/console_output.py | 2 +- .../compute/contrib/test_console_output.py | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/nova/api/openstack/compute/contrib/console_output.py b/nova/api/openstack/compute/contrib/console_output.py index eb20b3275457..85a72d4d9d25 100644 --- a/nova/api/openstack/compute/contrib/console_output.py +++ b/nova/api/openstack/compute/contrib/console_output.py @@ -67,7 +67,7 @@ class ConsoleOutputController(wsgi.Controller): raise webob.exc.HTTPConflict(explanation=e.format_message()) # XML output is not correctly escaped, so remove invalid characters - remove_re = re.compile('[\x00-\x08\x0B-\x0C\x0E-\x1F-\x0D]') + remove_re = re.compile('[\x00-\x08\x0B-\x1F]') output = remove_re.sub('', output) return {'output': output} diff --git a/nova/tests/api/openstack/compute/contrib/test_console_output.py b/nova/tests/api/openstack/compute/contrib/test_console_output.py index 14b61abb7878..c9c18e16a59d 100644 --- a/nova/tests/api/openstack/compute/contrib/test_console_output.py +++ b/nova/tests/api/openstack/compute/contrib/test_console_output.py @@ -13,6 +13,7 @@ # License for the specific language governing permissions and limitations # under the License. +import string import webob from nova.compute import api as compute_api @@ -39,6 +40,10 @@ def fake_get_console_output_not_ready(self, _context, _instance, tail_length): raise exception.InstanceNotReady(instance_id=_instance["uuid"]) +def fake_get_console_output_all_characters(self, _ctx, _instance, _tail_len): + return string.printable + + def fake_get(self, context, instance_uuid): return {'uuid': instance_uuid} @@ -94,6 +99,20 @@ class ConsoleOutputExtensionTest(test.TestCase): self.assertEqual(res.status_int, 200) self.assertEqual(output, {'output': '2\n3\n4'}) + def test_get_console_output_filtered_characters(self): + self.stubs.Set(compute_api.API, 'get_console_output', + fake_get_console_output_all_characters) + body = {'os-getConsoleOutput': {}} + req = webob.Request.blank('/v2/fake/servers/1/action') + req.method = "POST" + req.body = jsonutils.dumps(body) + req.headers["content-type"] = "application/json" + res = req.get_response(self.app) + output = jsonutils.loads(res.body) + self.assertEqual(res.status_int, 200) + expect = string.digits + string.letters + string.punctuation + ' \t\n' + self.assertEqual(output, {'output': expect}) + def test_get_console_output_with_non_integer_length(self): body = {'os-getConsoleOutput': {'length': 'NaN'}} req = webob.Request.blank('/v2/fake/servers/1/action')