From 354206074093bb4842fb12d372471bda64b77670 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Fri, 27 May 2016 11:16:33 +0200 Subject: [PATCH] Port test_pipelib and test_policy to Python 3 * policy_fixture: replace jsonutils.load() with jsonutils.loads() to support bytes and Unicode. Use also a context manager to open the file to fix a ResourceWarning on Python 3. * pipelib: replace str.encode("base64") with base64.b64encode(str) * cmd/manager.py: replace urllib.unquote() with urlparse.unquote(), urlparse comes from "import six.moves.urllib.parse as urlparse" * enable tests on Python 3 - test_pipelib - test_policy * enable also tests which already passed on Python 3: - test_quota - test_test_utils This change is partially based on the work of dims, change Ibb4fa47cd71d697a4996425b1797ac2f8cc363cd. Co-Authored-By: Davanum Srinivas Partially-Implements: blueprint nova-python3-newton Change-Id: I726d867fafa2d21312e3f2542af9d9ee5e08d897 --- nova/cloudpipe/pipelib.py | 6 ++++-- nova/tests/unit/policy_fixture.py | 4 +++- tests-py3.txt | 4 ---- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/nova/cloudpipe/pipelib.py b/nova/cloudpipe/pipelib.py index 59df355fcf25..97a8a777ef8f 100644 --- a/nova/cloudpipe/pipelib.py +++ b/nova/cloudpipe/pipelib.py @@ -20,6 +20,7 @@ an instance with it. """ +import base64 import os import string import zipfile @@ -78,12 +79,13 @@ class CloudPipe(object): 'server.crt') z.write(server_crt, 'server.crt') z.close() - with open(zippath, "r") as zippy: + with open(zippath, "rb") as zippy: # NOTE(vish): run instances expects encoded userdata, # it is decoded in the get_metadata_call. # autorun.sh also decodes the zip file, # hence the double encoding. - encoded = zippy.read().encode("base64").encode("base64") + encoded = base64.b64encode(zippy.read()) + encoded = base64.b64encode(encoded) return encoded diff --git a/nova/tests/unit/policy_fixture.py b/nova/tests/unit/policy_fixture.py index 49d3d65e87c8..df2c9c5800a7 100644 --- a/nova/tests/unit/policy_fixture.py +++ b/nova/tests/unit/policy_fixture.py @@ -100,7 +100,9 @@ class RoleBasedPolicyFixture(RealPolicyFixture): self.role = role def _prepare_policy(self): - policy = jsonutils.load(open(CONF.oslo_policy.policy_file)) + with open(CONF.oslo_policy.policy_file) as fp: + policy = fp.read() + policy = jsonutils.loads(policy) # Convert all actions to require specified role for action, rule in six.iteritems(policy): diff --git a/tests-py3.txt b/tests-py3.txt index 7625428b11e3..5dc9242de2f9 100644 --- a/tests-py3.txt +++ b/tests-py3.txt @@ -68,10 +68,6 @@ nova.tests.unit.test_metadata.MetadataHandlerTestCase nova.tests.unit.test_metadata.MetadataPasswordTestCase nova.tests.unit.test_metadata.MetadataTestCase nova.tests.unit.test_metadata.OpenStackMetadataTestCase -nova.tests.unit.test_pipelib.PipelibTest -nova.tests.unit.test_policy.AdminRolePolicyTestCase -nova.tests.unit.test_quota.QuotaIntegrationTestCase -nova.tests.unit.test_test_utils.TestUtilsTestCase nova.tests.unit.test_wsgi.TestWSGIServerWithSSL nova.tests.unit.virt.disk.mount.test_nbd.NbdTestCase nova.tests.unit.virt.ironic.test_driver.IronicDriverTestCase