From db9c90584943a02da448531460053492af6886bf Mon Sep 17 00:00:00 2001 From: Pete Zaitcev Date: Tue, 29 Jan 2019 17:15:44 -0600 Subject: [PATCH] py3: port copy middleware Change-Id: I2701358f9f01f368c892a010a543ecc1f17684a3 --- swift/common/constraints.py | 7 ++++--- test/unit/common/middleware/test_copy.py | 23 ++++++++++++----------- tox.ini | 1 + 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/swift/common/constraints.py b/swift/common/constraints.py index 8639279a71..b0eb327895 100644 --- a/swift/common/constraints.py +++ b/swift/common/constraints.py @@ -408,9 +408,10 @@ def check_name_format(req, name, target_type): raise HTTPPreconditionFailed( request=req, body='%s name cannot be empty' % target_type) - if isinstance(name, six.text_type): - name = name.encode('utf-8') - if b'/' in name: + if six.PY2: + if isinstance(name, six.text_type): + name = name.encode('utf-8') + if '/' in name: raise HTTPPreconditionFailed( request=req, body='%s name cannot contain slashes' % target_type) diff --git a/test/unit/common/middleware/test_copy.py b/test/unit/common/middleware/test_copy.py index f705de9ae4..a73999bf35 100644 --- a/test/unit/common/middleware/test_copy.py +++ b/test/unit/common/middleware/test_copy.py @@ -117,7 +117,7 @@ class TestServerSideCopyMiddleware(unittest.TestCase): headers[0] = h body_iter = app(req.environ, start_response) - body = '' + body = b'' caught_exc = None try: # appease the close-checker @@ -336,7 +336,7 @@ class TestServerSideCopyMiddleware(unittest.TestCase): self.assertEqual('/v1/a/c/o', self.authorized[1].path) def test_copy_with_spaces_in_x_copy_from_and_account(self): - self.app.register('GET', '/v1/a/c/o o2', swob.HTTPOk, {}, 'passed') + self.app.register('GET', '/v1/a/c/o o2', swob.HTTPOk, {}, b'passed') self.app.register('PUT', '/v1/a1/c1/o', swob.HTTPCreated, {}) # space in soure path req = Request.blank('/v1/a1/c1/o', environ={'REQUEST_METHOD': 'PUT'}, @@ -643,7 +643,7 @@ class TestServerSideCopyMiddleware(unittest.TestCase): get_resp_headers['etag'] = 'source etag' self.app.register( 'GET', '/v1/a/c/o', swob.HTTPOk, - headers=get_resp_headers, body='passed') + headers=get_resp_headers, body=b'passed') def verify_headers(expected_headers, unexpected_headers, actual_headers): @@ -1275,7 +1275,7 @@ class TestServerSideCopyMiddleware(unittest.TestCase): self.assertEqual('6', req_headers['content-length']) req = swob.Request.blank('/v1/a/c1/o', method='GET') status, headers, body = self.call_ssc(req) - self.assertEqual('fghijk', body) + self.assertEqual(b'fghijk', body) @patch_policies(with_ec_default=True) @@ -1307,7 +1307,7 @@ class TestServerSideCopyMiddlewareWithEC(unittest.TestCase): 'Range': 'bytes=5-10'}) # turn a real body into fragments segment_size = self.policy.ec_segment_size - real_body = ('asdf' * segment_size)[:-10] + real_body = (b'asdf' * segment_size)[:-10] # split it up into chunks chunks = [real_body[x:x + segment_size] @@ -1318,13 +1318,13 @@ class TestServerSideCopyMiddlewareWithEC(unittest.TestCase): fragment_payloads = [] fragment_payloads.append(fragments) - node_fragments = zip(*fragment_payloads) + node_fragments = list(zip(*fragment_payloads)) self.assertEqual(len(node_fragments), self.policy.object_ring.replicas) # sanity headers = {'X-Object-Sysmeta-Ec-Content-Length': str(len(real_body))} - responses = [(200, ''.join(node_fragments[i]), headers) + responses = [(200, b''.join(node_fragments[i]), headers) for i in range(POLICIES.default.ec_ndata)] - responses += [(201, '', {})] * self.policy.object_ring.replicas + responses += [(201, b'', {})] * self.policy.object_ring.replicas status_codes, body_iter, headers = zip(*responses) expect_headers = { 'X-Obj-Metadata-Footer': 'yes', @@ -1352,7 +1352,7 @@ class TestServerSideCopyMiddlewareWithEC(unittest.TestCase): def test_COPY_with_invalid_ranges(self): # real body size is segment_size - 10 (just 1 segment) segment_size = self.policy.ec_segment_size - real_body = ('a' * segment_size)[:-10] + real_body = (b'a' * segment_size)[:-10] # range is out of real body but in segment size self._test_invalid_ranges('COPY', real_body, @@ -1372,7 +1372,7 @@ class TestServerSideCopyMiddlewareWithEC(unittest.TestCase): fragments = self.policy.pyeclib_driver.encode(real_body) fragment_payloads = [fragments] - node_fragments = zip(*fragment_payloads) + node_fragments = list(zip(*fragment_payloads)) self.assertEqual(len(node_fragments), self.policy.object_ring.replicas) # sanity headers = {'X-Object-Sysmeta-Ec-Content-Length': str(len(real_body)), @@ -1382,11 +1382,12 @@ class TestServerSideCopyMiddlewareWithEC(unittest.TestCase): title, exp = swob.RESPONSE_REASONS[416] range_not_satisfiable_body = \ '

%s

%s

' % (title, exp) + range_not_satisfiable_body = range_not_satisfiable_body.encode('ascii') if start >= segment_size: responses = [(416, range_not_satisfiable_body, headers) for i in range(POLICIES.default.ec_ndata)] else: - responses = [(200, ''.join(node_fragments[i]), headers) + responses = [(200, b''.join(node_fragments[i]), headers) for i in range(POLICIES.default.ec_ndata)] status_codes, body_iter, headers = zip(*responses) expect_headers = { diff --git a/tox.ini b/tox.ini index 91755fc758..13f7baf965 100644 --- a/tox.ini +++ b/tox.ini @@ -49,6 +49,7 @@ commands = test/unit/common/middleware/test_catch_errors.py \ test/unit/common/middleware/test_cname_lookup.py \ test/unit/common/middleware/test_container_sync.py \ + test/unit/common/middleware/test_copy.py \ test/unit/common/middleware/test_crossdomain.py \ test/unit/common/middleware/test_domain_remap.py \ test/unit/common/middleware/test_gatekeeper.py \