diff options
author | Zuul <zuul@review.opendev.org> | 2021-05-26 04:38:09 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2021-05-26 04:38:09 +0000 |
commit | 23373767c0adcfc7a9c35f5c48128aa6b7cff625 (patch) | |
tree | f4f75f24935d05b6093f44163b2ff419cc5c278c | |
parent | c0bb5b2f3f9e0cf838ba1f6b3364ec7211eeee60 (diff) | |
parent | a8c2b46da624a2e133e5d6289529ba8ac63b2557 (diff) | |
download | swift-23373767c0adcfc7a9c35f5c48128aa6b7cff625.tar.gz |
Merge "tempurl: Fix PUT upload to temp url on py3" into stable/victoria
-rw-r--r-- | swift/common/middleware/tempurl.py | 2 | ||||
-rw-r--r-- | test/unit/common/middleware/test_tempurl.py | 36 |
2 files changed, 37 insertions, 1 deletions
diff --git a/swift/common/middleware/tempurl.py b/swift/common/middleware/tempurl.py index 524a03b05..1fcd5bcdd 100644 --- a/swift/common/middleware/tempurl.py +++ b/swift/common/middleware/tempurl.py @@ -839,7 +839,7 @@ class TempURL(object): if h.startswith(p): del headers[h] break - return headers.items() + return list(headers.items()) def filter_factory(global_conf, **local_conf): diff --git a/test/unit/common/middleware/test_tempurl.py b/test/unit/common/middleware/test_tempurl.py index 6a08130c5..fe468cec7 100644 --- a/test/unit/common/middleware/test_tempurl.py +++ b/test/unit/common/middleware/test_tempurl.py @@ -476,6 +476,42 @@ class TestTempURL(unittest.TestCase): self.assertEqual(req.environ['swift.authorize_override'], True) self.assertEqual(req.environ['REMOTE_USER'], '.wsgi.tempurl') + def test_put_response_headers_in_list(self): + class Validator(object): + def __init__(self, app): + self.app = app + self.status = None + self.headers = None + self.exc_info = None + + def start_response(self, status, headers, exc_info=None): + self.status = status + self.headers = headers + self.exc_info = exc_info + + def __call__(self, env, start_response): + resp_iter = self.app(env, self.start_response) + start_response(self.status, self.headers, self.exc_info) + return resp_iter + + method = 'PUT' + expires = int(time() + 86400) + path = '/v1/a/c/o' + key = b'abc' + hmac_body = ('%s\n%i\n%s' % (method, expires, path)).encode('utf-8') + sig = hmac.new(key, hmac_body, hashlib.sha1).hexdigest() + req = self._make_request( + path, keys=[key], + environ={'REQUEST_METHOD': 'PUT', + 'QUERY_STRING': 'temp_url_sig=%s&temp_url_expires=%s' % ( + sig, expires)}) + validator = Validator(self.tempurl) + resp = req.get_response(validator) + self.assertIsInstance(validator.headers, list) + self.assertEqual(resp.status_int, 404) + self.assertEqual(req.environ['swift.authorize_override'], True) + self.assertEqual(req.environ['REMOTE_USER'], '.wsgi.tempurl') + def test_get_not_allowed_by_put(self): method = 'PUT' expires = int(time() + 86400) |