From a61f812009c37d4f48ccf0779e3d27c2e19b6add Mon Sep 17 00:00:00 2001 From: Andrey Kurilin Date: Tue, 6 Oct 2015 16:12:22 +0300 Subject: [PATCH] [Py34] api.openstack.compute.legacy_v2.test_servers.Base64ValidationTest Enable api.openstack.compute.legacy_v2.test_servers.Base64ValidationTest Method `base64.b64encode` accepts byte strings in Python 3[1], so we should transmit correct type of data to it. [1] - https://docs.python.org/3.4/library/base64.html#base64.b64encode Change-Id: I7abbb52d307e237249cefb9971a9231842545bb1 --- nova/api/openstack/compute/legacy_v2/servers.py | 5 +++++ .../api/openstack/compute/legacy_v2/test_servers.py | 12 ++++++------ tests-py3.txt | 1 - 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/nova/api/openstack/compute/legacy_v2/servers.py b/nova/api/openstack/compute/legacy_v2/servers.py index 4431def647..59c718732b 100644 --- a/nova/api/openstack/compute/legacy_v2/servers.py +++ b/nova/api/openstack/compute/legacy_v2/servers.py @@ -365,6 +365,11 @@ class Controller(wsgi.Controller): '|[A-Za-z0-9+\/]{3}=)?$') def _decode_base64(self, data): + if isinstance(data, six.binary_type) and hasattr(data, "decode"): + try: + data = data.decode("utf-8") + except UnicodeDecodeError: + return None data = re.sub(r'\s', '', data) if not self.B64_REGEX.match(data): return None diff --git a/nova/tests/unit/api/openstack/compute/legacy_v2/test_servers.py b/nova/tests/unit/api/openstack/compute/legacy_v2/test_servers.py index 39e70d1bba..4c706cbac4 100644 --- a/nova/tests/unit/api/openstack/compute/legacy_v2/test_servers.py +++ b/nova/tests/unit/api/openstack/compute/legacy_v2/test_servers.py @@ -126,18 +126,18 @@ class Base64ValidationTest(test.TestCase): self.controller = servers.Controller(self.ext_mgr) def test_decode_base64(self): - value = "A random string" + value = b"A random string" result = self.controller._decode_base64(base64.b64encode(value)) self.assertEqual(value, result) def test_decode_base64_binary(self): - value = "\x00\x12\x75\x99" + value = b"\x00\x12\x75\x99" result = self.controller._decode_base64(base64.b64encode(value)) self.assertEqual(value, result) def test_decode_base64_whitespace(self): - value = "A random string" - encoded = base64.b64encode(value) + value = b"A random string" + encoded = base64.b64encode(value).decode("ascii") white = "\n \n%s\t%s\n" % (encoded[:2], encoded[2:]) result = self.controller._decode_base64(white) self.assertEqual(value, result) @@ -148,8 +148,8 @@ class Base64ValidationTest(test.TestCase): self.assertIsNone(result) def test_decode_base64_illegal_bytes(self): - value = "A random string" - encoded = base64.b64encode(value) + value = b"A random string" + encoded = base64.b64encode(value).decode("ascii") white = ">\x01%s*%s()" % (encoded[:2], encoded[2:]) result = self.controller._decode_base64(white) self.assertIsNone(result) diff --git a/tests-py3.txt b/tests-py3.txt index a09231ba6d..2151b5fe67 100644 --- a/tests-py3.txt +++ b/tests-py3.txt @@ -14,7 +14,6 @@ nova.tests.unit.api.openstack.compute.legacy_v2.test_extensions.ExtensionControl nova.tests.unit.api.openstack.compute.legacy_v2.test_extensions.ExtensionManagerTest nova.tests.unit.api.openstack.compute.legacy_v2.test_extensions.RequestExtensionTest nova.tests.unit.api.openstack.compute.legacy_v2.test_extensions.ResourceExtensionTest -nova.tests.unit.api.openstack.compute.legacy_v2.test_servers.Base64ValidationTest nova.tests.unit.api.openstack.compute.legacy_v2.test_servers.ServersControllerCreateTest nova.tests.unit.api.openstack.compute.legacy_v2.test_servers.ServersControllerCreateTestWithMock nova.tests.unit.api.openstack.compute.legacy_v2.test_servers.ServersControllerRebuildInstanceTest