From 9f9ed67d30215c6c3ceed365d3df598bbd454b77 Mon Sep 17 00:00:00 2001 From: Martin Kopec Date: Wed, 15 Jan 2020 00:51:26 +0000 Subject: [PATCH] Decode bytes data to string json in python3.5 requires that json object must be a string, not byte object. In python2.7 or 3.6 it doesn't matter, it accepts both. Depends-On: https://review.opendev.org/#/c/702448/ Change-Id: I10a2805b599767cbd1f5553c1640f68c25e85522 --- config_tempest/services/base.py | 2 +- config_tempest/services/identity.py | 3 ++- config_tempest/tests/base.py | 4 +++- config_tempest/tests/services/test_base.py | 2 +- config_tempest/tests/services/test_identity.py | 2 +- 5 files changed, 8 insertions(+), 5 deletions(-) diff --git a/config_tempest/services/base.py b/config_tempest/services/base.py index 81d4dbfe..61e68dec 100644 --- a/config_tempest/services/base.py +++ b/config_tempest/services/base.py @@ -65,7 +65,7 @@ class Service(object): if r.status >= 400: raise ServiceError("Request on service '%s' with url '%s' failed" " with code %d" % (self.s_type, url, r.status)) - return r.data + return r.data.decode('utf-8') def set_extensions(self): self.extensions = [] diff --git a/config_tempest/services/identity.py b/config_tempest/services/identity.py index 9b5ee63d..63024306 100644 --- a/config_tempest/services/identity.py +++ b/config_tempest/services/identity.py @@ -88,7 +88,8 @@ class IdentityService(VersionedService): headers={'Accept': 'application/json-home'}) ext_h = 'https://docs.openstack.org/api/openstack-identity/3/ext/' - res = [x for x in json.loads(r.content)['resources'].keys()] + content = r.content.decode('utf-8') + res = [x for x in json.loads(content)['resources'].keys()] ext = [ex for ex in res if 'ext' in ex] ext = [str(e).replace(ext_h, '').split('/')[0] for e in ext] self.extensions_v3 = list(set(ext)) diff --git a/config_tempest/tests/base.py b/config_tempest/tests/base.py index 6110520b..427a91b1 100644 --- a/config_tempest/tests/base.py +++ b/config_tempest/tests/base.py @@ -270,8 +270,10 @@ class BaseServiceTest(base.BaseTestCase): } ) - def __init__(self): + def __init__(self, bytes_content=False): self.content = json.dumps(self.FAKE_V3_EXTENSIONS) + if bytes_content: + self.content = self.content.encode('utf-8') class FakeServiceClient(object): def __init__(self, services=None): diff --git a/config_tempest/tests/services/test_base.py b/config_tempest/tests/services/test_base.py index 9cf4339a..cbb532f3 100644 --- a/config_tempest/tests/services/test_base.py +++ b/config_tempest/tests/services/test_base.py @@ -34,7 +34,7 @@ class TestService(BaseServiceTest): expected_resp = mock_http.request('GET', self.FAKE_URL, self.FAKE_HEADERS) - return expected_resp.data + return expected_resp.data.decode('utf-8') @mock.patch('config_tempest.services.base.urllib3') def test_do_get(self, mock_urllib3): diff --git a/config_tempest/tests/services/test_identity.py b/config_tempest/tests/services/test_identity.py index ff830590..686c059e 100644 --- a/config_tempest/tests/services/test_identity.py +++ b/config_tempest/tests/services/test_identity.py @@ -50,7 +50,7 @@ class TestIdentityService(BaseServiceTest): def test_set_identity_v3_extensions(self): expected_resp = ['OS-INHERIT', 'OS-OAUTH1', 'OS-SIMPLE-CERT', 'OS-EP-FILTER'] - fake_resp = self.FakeRequestResponse() + fake_resp = self.FakeRequestResponse(bytes_content=True) mocked_requests = mock.Mock() mocked_requests.return_value = fake_resp self.useFixture(MonkeyPatch('requests.get', mocked_requests))