diff options
Diffstat (limited to 'test/unit/test_swiftclient.py')
-rw-r--r-- | test/unit/test_swiftclient.py | 274 |
1 files changed, 119 insertions, 155 deletions
diff --git a/test/unit/test_swiftclient.py b/test/unit/test_swiftclient.py index ea5f502..ae3e76f 100644 --- a/test/unit/test_swiftclient.py +++ b/test/unit/test_swiftclient.py @@ -16,16 +16,15 @@ import gzip import json import logging -import mock -import six +import io import socket import string import unittest +from unittest import mock import warnings import tempfile from hashlib import md5 -from six import binary_type -from six.moves.urllib.parse import urlparse +from urllib.parse import urlparse from requests.exceptions import RequestException from .utils import (MockHttpTest, fake_get_auth_keystone, StubResponse, @@ -102,7 +101,7 @@ class TestClientException(unittest.TestCase): self.assertIn('(txn: some-other-id)', str(exc)) -class MockHttpResponse(object): +class MockHttpResponse: def __init__(self, status=0, headers=None, verify=False): self.status = status self.status_code = status @@ -116,7 +115,7 @@ class MockHttpResponse(object): self.headers.update(headers) self.closed = False - class Raw(object): + class Raw: def __init__(self, headers): self.headers = headers @@ -164,34 +163,34 @@ class TestHttpHelpers(MockHttpTest): self.assertEqual('bytes%FF', c.quote(value)) value = 'native string' self.assertEqual('native%20string', c.quote(value)) - value = u'unicode string' + value = 'unicode string' self.assertEqual('unicode%20string', c.quote(value)) - value = u'unicode:\xe9\u20ac' + value = 'unicode:\xe9\u20ac' self.assertEqual('unicode%3A%C3%A9%E2%82%AC', c.quote(value)) def test_parse_header_string(self): value = b'bytes' - self.assertEqual(u'bytes', c.parse_header_string(value)) - value = u'unicode:\xe9\u20ac' - self.assertEqual(u'unicode:\xe9\u20ac', c.parse_header_string(value)) + self.assertEqual('bytes', c.parse_header_string(value)) + value = 'unicode:\xe9\u20ac' + self.assertEqual('unicode:\xe9\u20ac', c.parse_header_string(value)) value = 'native%20string' - self.assertEqual(u'native string', c.parse_header_string(value)) + self.assertEqual('native string', c.parse_header_string(value)) value = b'encoded%20bytes%E2%82%AC' - self.assertEqual(u'encoded bytes\u20ac', c.parse_header_string(value)) + self.assertEqual('encoded bytes\u20ac', c.parse_header_string(value)) value = 'encoded%20unicode%E2%82%AC' - self.assertEqual(u'encoded unicode\u20ac', + self.assertEqual('encoded unicode\u20ac', c.parse_header_string(value)) value = b'bad%20bytes%ff%E2%82%AC' - self.assertEqual(u'bad%20bytes%ff%E2%82%AC', + self.assertEqual('bad%20bytes%ff%E2%82%AC', c.parse_header_string(value)) - value = u'bad%20unicode%ff\u20ac' - self.assertEqual(u'bad%20unicode%ff\u20ac', + value = 'bad%20unicode%ff\u20ac' + self.assertEqual('bad%20unicode%ff\u20ac', c.parse_header_string(value)) value = b'really%20bad\xffbytes' - self.assertEqual(u'really%2520bad%FFbytes', + self.assertEqual('really%2520bad%FFbytes', c.parse_header_string(value)) def test_http_connection(self): @@ -206,20 +205,20 @@ class TestHttpHelpers(MockHttpTest): def test_encode_meta_headers(self): headers = {'abc': '123', - u'x-container-meta-\u0394': 123, - u'x-account-meta-\u0394': 12.3, - u'x-object-meta-\u0394': True} + 'x-container-meta-\u0394': 123, + 'x-account-meta-\u0394': 12.3, + 'x-object-meta-\u0394': True} r = swiftclient.encode_meta_headers(headers) self.assertEqual(len(headers), len(r)) # ensure non meta headers are not encoded - self.assertIs(type(r.get('abc')), binary_type) + self.assertIs(type(r.get('abc')), bytes) del r['abc'] for k, v in r.items(): - self.assertIs(type(k), binary_type) - self.assertIs(type(v), binary_type) + self.assertIs(type(k), bytes) + self.assertIs(type(v), bytes) self.assertIn(v, (b'123', b'12.3', b'True')) def test_set_user_agent_default(self): @@ -587,10 +586,10 @@ class TestGetAuth(MockHttpTest): "application_credential_id": "proejct_id", "application_credential_secret": "secret"} - class FakeEndpointData(object): + class FakeEndpointData: catalog_url = 'http://swift.cluster/v1/KEY_project_id' - class FakeKeystoneuth1v3Session(object): + class FakeKeystoneuth1v3Session: def __init__(self, auth): self.auth = auth @@ -1112,9 +1111,9 @@ class TestGetObject(MockHttpTest): conn = c.http_connection('http://www.test.com') headers, data = c.get_object('url_is_irrelevant', 'TOKEN', 'container', 'object', http_conn=conn) - self.assertEqual(u't\xe9st', headers.get('x-utf-8-header', '')) - self.assertEqual(u'%ff', headers.get('x-non-utf-8-header', '')) - self.assertEqual(u'%FF', headers.get('x-binary-header', '')) + self.assertEqual('t\xe9st', headers.get('x-utf-8-header', '')) + self.assertEqual('%ff', headers.get('x-non-utf-8-header', '')) + self.assertEqual('%FF', headers.get('x-binary-header', '')) def test_chunk_size_read_method(self): conn = c.Connection('http://auth.url/', 'some_user', 'some_key') @@ -1325,30 +1324,28 @@ class TestHeadObject(MockHttpTest): class TestPutObject(MockHttpTest): - @mock.patch('swiftclient.requests.__version__', '2.2.0') def test_ok(self): c.http_connection = self.fake_http_connection(200) args = ('http://www.test.com', 'TOKEN', 'container', 'obj', 'body', 4) value = c.put_object(*args) - self.assertIsInstance(value, six.string_types) + self.assertIsInstance(value, str) self.assertEqual(value, EMPTY_ETAG) self.assertRequests([ ('PUT', '/container/obj', 'body', { 'x-auth-token': 'TOKEN', 'content-length': '4', - 'content-type': '' }), ]) def test_unicode_ok(self): - conn = c.http_connection(u'http://www.test.com/') - mock_file = six.StringIO(u'\u5929\u7a7a\u4e2d\u7684\u4e4c\u4e91') - args = (u'\u5929\u7a7a\u4e2d\u7684\u4e4c\u4e91', - u'\u5929\u7a7a\u4e2d\u7684\u4e4c\u4e91', - u'\u5929\u7a7a\u4e2d\u7684\u4e4c\u4e91', - u'\u5929\u7a7a\u4e2d\u7684\u4e4c\u4e91', + conn = c.http_connection('http://www.test.com/') + mock_file = io.StringIO('\u5929\u7a7a\u4e2d\u7684\u4e4c\u4e91') + args = ('\u5929\u7a7a\u4e2d\u7684\u4e4c\u4e91', + '\u5929\u7a7a\u4e2d\u7684\u4e4c\u4e91', + '\u5929\u7a7a\u4e2d\u7684\u4e4c\u4e91', + '\u5929\u7a7a\u4e2d\u7684\u4e4c\u4e91', mock_file) - text = u'\u5929\u7a7a\u4e2d\u7684\u4e4c\u4e91' + text = '\u5929\u7a7a\u4e2d\u7684\u4e4c\u4e91' headers = {'X-Header1': text, 'X-2': '1', 'X-3': "{'a': 'b'}", 'a-b': '.x:yz mn:fg:lp'} @@ -1356,7 +1353,7 @@ class TestPutObject(MockHttpTest): conn[1].getresponse = resp.fake_response conn[1]._request = resp._fake_request value = c.put_object(*args, headers=headers, http_conn=conn) - self.assertIsInstance(value, six.string_types) + self.assertIsInstance(value, str) # Test for RFC-2616 encoded symbols self.assertIn(("a-b", b".x:yz mn:fg:lp"), resp.buffer) @@ -1366,7 +1363,7 @@ class TestPutObject(MockHttpTest): def test_chunk_warning(self): conn = c.http_connection('http://www.test.com/') - mock_file = six.StringIO('asdf') + mock_file = io.StringIO('asdf') args = ('asdf', 'asdf', 'asdf', 'asdf', mock_file) resp = MockHttpResponse() conn[1].getresponse = resp.fake_response @@ -1383,7 +1380,6 @@ class TestPutObject(MockHttpTest): self.assertEqual(len(w), 1) self.assertTrue(issubclass(w[-1].category, UserWarning)) - @mock.patch('swiftclient.requests.__version__', '2.2.0') def test_server_error(self): body = 'c' * 60 headers = {'foo': 'bar'} @@ -1398,8 +1394,7 @@ class TestPutObject(MockHttpTest): self.assertEqual(e.http_status, 500) self.assertRequests([ ('PUT', '/asdf/asdf', 'asdf', { - 'x-auth-token': 'asdf', - 'content-type': ''}), + 'x-auth-token': 'asdf'}), ]) def test_query_string(self): @@ -1415,7 +1410,7 @@ class TestPutObject(MockHttpTest): def test_raw_upload(self): # Raw upload happens when content_length is passed to put_object - conn = c.http_connection(u'http://www.test.com/') + conn = c.http_connection('http://www.test.com/') resp = MockHttpResponse(status=200) conn[1].getresponse = resp.fake_response conn[1]._request = resp._fake_request @@ -1437,7 +1432,7 @@ class TestPutObject(MockHttpTest): def test_chunk_upload(self): # Chunked upload happens when no content_length is passed to put_object - conn = c.http_connection(u'http://www.test.com/') + conn = c.http_connection('http://www.test.com/') resp = MockHttpResponse(status=200) conn[1].getresponse = resp.fake_response conn[1]._request = resp._fake_request @@ -1462,7 +1457,7 @@ class TestPutObject(MockHttpTest): def data(): for chunk in ('foo', '', 'bar'): yield chunk - conn = c.http_connection(u'http://www.test.com/') + conn = c.http_connection('http://www.test.com/') resp = MockHttpResponse(status=200) conn[1].getresponse = resp.fake_response conn[1]._request = resp._fake_request @@ -1529,7 +1524,7 @@ class TestPutObject(MockHttpTest): self.assertEqual(etag, contents.get_md5sum()) def test_params(self): - conn = c.http_connection(u'http://www.test.com/') + conn = c.http_connection('http://www.test.com/') resp = MockHttpResponse(status=200) conn[1].getresponse = resp.fake_response conn[1]._request = resp._fake_request @@ -1540,20 +1535,8 @@ class TestPutObject(MockHttpTest): self.assertEqual(request_header['etag'], b'1234-5678') self.assertEqual(request_header['content-type'], b'text/plain') - @mock.patch('swiftclient.requests.__version__', '2.2.0') - def test_no_content_type_old_requests(self): - conn = c.http_connection(u'http://www.test.com/') - resp = MockHttpResponse(status=200) - conn[1].getresponse = resp.fake_response - conn[1]._request = resp._fake_request - - c.put_object(url='http://www.test.com', http_conn=conn) - request_header = resp.requests_params['headers'] - self.assertEqual(request_header['content-type'], b'') - - @mock.patch('swiftclient.requests.__version__', '2.4.0') - def test_no_content_type_new_requests(self): - conn = c.http_connection(u'http://www.test.com/') + def test_no_content_type(self): + conn = c.http_connection('http://www.test.com/') resp = MockHttpResponse(status=200) conn[1].getresponse = resp.fake_response conn[1]._request = resp._fake_request @@ -1563,7 +1546,7 @@ class TestPutObject(MockHttpTest): self.assertNotIn('content-type', request_header) def test_content_type_in_headers(self): - conn = c.http_connection(u'http://www.test.com/') + conn = c.http_connection('http://www.test.com/') resp = MockHttpResponse(status=200) conn[1].getresponse = resp.fake_response conn[1]._request = resp._fake_request @@ -1603,12 +1586,12 @@ class TestPostObject(MockHttpTest): }) def test_unicode_ok(self): - conn = c.http_connection(u'http://www.test.com/') - args = (u'\u5929\u7a7a\u4e2d\u7684\u4e4c\u4e91', - u'\u5929\u7a7a\u4e2d\u7684\u4e4c\u4e91', - u'\u5929\u7a7a\u4e2d\u7684\u4e4c\u4e91', - u'\u5929\u7a7a\u4e2d\u7684\u4e4c\u4e91') - text = u'\u5929\u7a7a\u4e2d\u7684\u4e4c\u4e91' + conn = c.http_connection('http://www.test.com/') + args = ('\u5929\u7a7a\u4e2d\u7684\u4e4c\u4e91', + '\u5929\u7a7a\u4e2d\u7684\u4e4c\u4e91', + '\u5929\u7a7a\u4e2d\u7684\u4e4c\u4e91', + '\u5929\u7a7a\u4e2d\u7684\u4e4c\u4e91') + text = '\u5929\u7a7a\u4e2d\u7684\u4e4c\u4e91' headers = {'X-Header1': text, b'X-Header2': 'value', 'X-2': '1', 'X-3': "{'a': 'b'}", 'a-b': '.x:yz mn:kl:qr', @@ -1907,66 +1890,66 @@ class TestGetCapabilities(MockHttpTest): class TestHTTPConnection(MockHttpTest): def test_bad_url_scheme(self): - url = u'www.test.com' + url = 'www.test.com' with self.assertRaises(c.ClientException) as exc_context: c.http_connection(url) exc = exc_context.exception - expected = u'Unsupported scheme "" in url "www.test.com"' + expected = 'Unsupported scheme "" in url "www.test.com"' self.assertEqual(expected, str(exc)) - url = u'://www.test.com' + url = '://www.test.com' with self.assertRaises(c.ClientException) as exc_context: c.http_connection(url) exc = exc_context.exception - expected = u'Unsupported scheme "" in url "://www.test.com"' + expected = 'Unsupported scheme "" in url "://www.test.com"' self.assertEqual(expected, str(exc)) - url = u'blah://www.test.com' + url = 'blah://www.test.com' with self.assertRaises(c.ClientException) as exc_context: c.http_connection(url) exc = exc_context.exception - expected = u'Unsupported scheme "blah" in url "blah://www.test.com"' + expected = 'Unsupported scheme "blah" in url "blah://www.test.com"' self.assertEqual(expected, str(exc)) def test_ok_url_scheme(self): for scheme in ('http', 'https', 'HTTP', 'HTTPS'): - url = u'%s://www.test.com' % scheme + url = '%s://www.test.com' % scheme parsed_url, conn = c.http_connection(url) self.assertEqual(scheme.lower(), parsed_url.scheme) - self.assertEqual(u'%s://www.test.com' % scheme, conn.url) + self.assertEqual('%s://www.test.com' % scheme, conn.url) def test_ok_proxy(self): - conn = c.http_connection(u'http://www.test.com/', + conn = c.http_connection('http://www.test.com/', proxy='http://localhost:8080') self.assertEqual(conn[1].requests_args['proxies']['http'], 'http://localhost:8080') def test_bad_proxy(self): try: - c.http_connection(u'http://www.test.com/', proxy='localhost:8080') + c.http_connection('http://www.test.com/', proxy='localhost:8080') except c.ClientException as e: self.assertEqual(e.msg, "Proxy's missing scheme") def test_cacert(self): - conn = c.http_connection(u'http://www.test.com/', + conn = c.http_connection('http://www.test.com/', cacert='/dev/urandom') self.assertEqual(conn[1].requests_args['verify'], '/dev/urandom') def test_insecure(self): - conn = c.http_connection(u'http://www.test.com/', insecure=True) + conn = c.http_connection('http://www.test.com/', insecure=True) self.assertEqual(conn[1].requests_args['verify'], False) def test_cert(self): - conn = c.http_connection(u'http://www.test.com/', cert='minnie') + conn = c.http_connection('http://www.test.com/', cert='minnie') self.assertEqual(conn[1].requests_args['cert'], 'minnie') def test_cert_key(self): conn = c.http_connection( - u'http://www.test.com/', cert='minnie', cert_key='mickey') + 'http://www.test.com/', cert='minnie', cert_key='mickey') self.assertEqual(conn[1].requests_args['cert'], ('minnie', 'mickey')) def test_response_connection_released(self): - _parsed_url, conn = c.http_connection(u'http://www.test.com/') + _parsed_url, conn = c.http_connection('http://www.test.com/') conn.resp = MockHttpResponse() conn.resp.raw = mock.Mock() conn.resp.raw.read.side_effect = ["Chunk", ""] @@ -1976,36 +1959,10 @@ class TestHTTPConnection(MockHttpTest): self.assertFalse(resp.read()) self.assertTrue(resp.closed) - @unittest.skipIf(six.PY3, 'python2 specific test') - def test_response_python2_headers(self): - '''Test utf-8 headers in Python 2. - ''' - _, conn = c.http_connection(u'http://www.test.com/') - conn.resp = MockHttpResponse( - status=200, - headers={ - '\xd8\xaa-unicode': '\xd8\xaa-value', - 'empty-header': '' - } - ) - - resp = conn.getresponse() - self.assertEqual( - '\xd8\xaa-value', resp.getheader('\xd8\xaa-unicode')) - self.assertEqual( - '\xd8\xaa-value', resp.getheader('\xd8\xaa-UNICODE')) - self.assertEqual('', resp.getheader('empty-header')) - self.assertEqual( - dict([('\xd8\xaa-unicode', '\xd8\xaa-value'), - ('empty-header', ''), - ('etag', '"%s"' % EMPTY_ETAG)]), - dict(resp.getheaders())) - - @unittest.skipIf(six.PY2, 'python3 specific test') - def test_response_python3_headers(self): - '''Test latin1-encoded headers in Python 3. + def test_response_headers(self): + '''Test latin1-encoded headers. ''' - _, conn = c.http_connection(u'http://www.test.com/') + _, conn = c.http_connection('http://www.test.com/') conn.resp = MockHttpResponse( status=200, headers={ @@ -2173,30 +2130,37 @@ class TestConnection(MockHttpTest): pass c.sleep = quick_sleep - # test retries - conn = c.Connection('http://www.test.com/auth/v1.0', 'asdf', 'asdf', - retry_on_ratelimit=True) - code_iter = [200] + [498] * (conn.retries + 1) - auth_resp_headers = { - 'x-auth-token': 'asdf', - 'x-storage-url': 'http://storage/v1/test', - } - c.http_connection = self.fake_http_connection( - *code_iter, headers=auth_resp_headers) - with self.assertRaises(c.ClientException) as exc_context: - conn.head_account() - self.assertIn('Account HEAD failed', str(exc_context.exception)) - self.assertEqual(conn.attempts, conn.retries + 1) + def test_status_code(code): + # test retries + conn = c.Connection('http://www.test.com/auth/v1.0', + 'asdf', 'asdf', retry_on_ratelimit=True) + code_iter = [200] + [code] * (conn.retries + 1) + auth_resp_headers = { + 'x-auth-token': 'asdf', + 'x-storage-url': 'http://storage/v1/test', + } + c.http_connection = self.fake_http_connection( + *code_iter, headers=auth_resp_headers) + with self.assertRaises(c.ClientException) as exc_context: + conn.head_account() + self.assertIn('Account HEAD failed', str(exc_context.exception)) + self.assertEqual(code, exc_context.exception.http_status) + self.assertEqual(conn.attempts, conn.retries + 1) - # test default no-retry - c.http_connection = self.fake_http_connection( - 200, 498, - headers=auth_resp_headers) - conn = c.Connection('http://www.test.com/auth/v1.0', 'asdf', 'asdf') - with self.assertRaises(c.ClientException) as exc_context: - conn.head_account() - self.assertIn('Account HEAD failed', str(exc_context.exception)) - self.assertEqual(conn.attempts, 1) + # test default no-retry + c.http_connection = self.fake_http_connection( + 200, code, + headers=auth_resp_headers) + conn = c.Connection('http://www.test.com/auth/v1.0', + 'asdf', 'asdf', retry_on_ratelimit=False) + with self.assertRaises(c.ClientException) as exc_context: + conn.head_account() + self.assertIn('Account HEAD failed', str(exc_context.exception)) + self.assertEqual(code, exc_context.exception.http_status) + self.assertEqual(conn.attempts, 1) + + test_status_code(498) + test_status_code(429) def test_retry_with_socket_error(self): def quick_sleep(*args): @@ -2586,10 +2550,10 @@ class TestConnection(MockHttpTest): def test_reset_stream(self): - class LocalContents(object): + class LocalContents: def __init__(self, tell_value=0): - self.data = six.BytesIO(string.ascii_letters.encode() * 10) + self.data = io.BytesIO(string.ascii_letters.encode() * 10) self.data.seek(tell_value) self.reads = [] self.seeks = [] @@ -2608,7 +2572,7 @@ class TestConnection(MockHttpTest): self.reads.append((size, read_data)) return read_data - class LocalConnection(object): + class LocalConnection: def __init__(self, parsed_url=None): self.reason = "" @@ -2887,7 +2851,7 @@ class TestLogging(MockHttpTest): c.http_connection = self.fake_http_connection(200) args = ('http://www.test.com', 'asdf', 'asdf', 'asdf', 'asdf') value = c.put_object(*args) - self.assertIsInstance(value, six.string_types) + self.assertIsInstance(value, str) def test_head_error(self): c.http_connection = self.fake_http_connection(500) @@ -2901,9 +2865,9 @@ class TestLogging(MockHttpTest): self.assertEqual(exc_context.exception.http_status, 404) def test_content_encoding_gzip_body_is_logged_decoded(self): - buf = six.BytesIO() + buf = io.BytesIO() gz = gzip.GzipFile(fileobj=buf, mode='w') - data = {"test": u"\u2603"} + data = {"test": "\u2603"} decoded_body = json.dumps(data).encode('utf-8') gz.write(decoded_body) gz.close() @@ -2920,7 +2884,7 @@ class TestLogging(MockHttpTest): self.assertEqual(exc_context.exception.http_status, 500) # it will log the decoded body self.assertEqual([ - mock.call('REQ: %s', u'curl -i http://www.test.com/asdf/asdf ' + mock.call('REQ: %s', 'curl -i http://www.test.com/asdf/asdf ' '-X GET -H "X-Auth-Token: ..."'), mock.call('RESP STATUS: %s %s', 500, 'Fake'), mock.call('RESP HEADERS: %s', {'content-encoding': 'gzip'}), @@ -2931,9 +2895,9 @@ class TestLogging(MockHttpTest): with mock.patch('swiftclient.client.logger.debug') as mock_log: token_value = 'tkee96b40a8ca44fc5ad72ec5a7c90d9b' token_encoded = token_value.encode('utf8') - unicode_token_value = (u'\u5929\u7a7a\u4e2d\u7684\u4e4c\u4e91' - u'\u5929\u7a7a\u4e2d\u7684\u4e4c\u4e91' - u'\u5929\u7a7a\u4e2d\u7684\u4e4c') + unicode_token_value = ('\u5929\u7a7a\u4e2d\u7684\u4e4c\u4e91' + '\u5929\u7a7a\u4e2d\u7684\u4e4c\u4e91' + '\u5929\u7a7a\u4e2d\u7684\u4e4c') unicode_token_encoded = unicode_token_value.encode('utf8') set_cookie_value = 'X-Auth-Token=%s' % token_value set_cookie_encoded = set_cookie_value.encode('utf8') @@ -2957,8 +2921,8 @@ class TestLogging(MockHttpTest): out = [] for _, args, kwargs in mock_log.mock_calls: for arg in args: - out.append(u'%s' % arg) - output = u''.join(out) + out.append('%s' % arg) + output = ''.join(out) self.assertIn('X-Auth-Token', output) self.assertIn(token_value[:16] + '...', output) self.assertIn('X-Storage-Token', output) @@ -2973,9 +2937,9 @@ class TestLogging(MockHttpTest): with mock.patch('swiftclient.client.logger.debug') as mock_log: token_value = 'tkee96b40a8ca44fc5ad72ec5a7c90d9b' token_encoded = token_value.encode('utf8') - unicode_token_value = (u'\u5929\u7a7a\u4e2d\u7684\u4e4c\u4e91' - u'\u5929\u7a7a\u4e2d\u7684\u4e4c\u4e91' - u'\u5929\u7a7a\u4e2d\u7684\u4e4c') + unicode_token_value = ('\u5929\u7a7a\u4e2d\u7684\u4e4c\u4e91' + '\u5929\u7a7a\u4e2d\u7684\u4e4c\u4e91' + '\u5929\u7a7a\u4e2d\u7684\u4e4c') c.logger_settings['redact_sensitive_headers'] = False unicode_token_encoded = unicode_token_value.encode('utf8') c.http_log( @@ -2997,8 +2961,8 @@ class TestLogging(MockHttpTest): out = [] for _, args, kwargs in mock_log.mock_calls: for arg in args: - out.append(u'%s' % arg) - output = u''.join(out) + out.append('%s' % arg) + output = ''.join(out) self.assertIn('X-Auth-Token', output) self.assertIn(token_value, output) self.assertIn('X-Storage-Token', output) @@ -3006,12 +2970,12 @@ class TestLogging(MockHttpTest): @mock.patch('swiftclient.client.logger.debug') def test_unicode_path(self, mock_log): - path = u'http://swift/v1/AUTH_account-\u062a'.encode('utf-8') + path = 'http://swift/v1/AUTH_account-\u062a'.encode('utf-8') c.http_log(['GET', path], {}, MockHttpResponse(status=200, headers=[]), '') request_log_line = mock_log.mock_calls[0] self.assertEqual('REQ: %s', request_log_line[1][0]) - self.assertEqual(u'curl -i -X GET %s' % path.decode('utf-8'), + self.assertEqual('curl -i -X GET %s' % path.decode('utf-8'), request_log_line[1][1]) |