diff options
author | Jenkins <jenkins@review.openstack.org> | 2013-09-29 03:15:10 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2013-09-29 03:15:10 +0000 |
commit | 5eea524d3ea6d29c2b6f34927c0130090e7ed44d (patch) | |
tree | c8e98b016a84c2db9b95bd8766ec3d85211d0f10 | |
parent | 9befc70b219302a91f8ad007e9126b6f44451efc (diff) | |
parent | df39602c41605c4c68a47c6532a466ccc1a6633d (diff) | |
download | swift-5eea524d3ea6d29c2b6f34927c0130090e7ed44d.tar.gz |
Merge "bulk delete bug with trailing whitespace"
-rw-r--r-- | swift/common/middleware/bulk.py | 8 | ||||
-rw-r--r-- | test/unit/common/middleware/test_bulk.py | 8 |
2 files changed, 9 insertions, 7 deletions
diff --git a/swift/common/middleware/bulk.py b/swift/common/middleware/bulk.py index 27934800b..a6effaf99 100644 --- a/swift/common/middleware/bulk.py +++ b/swift/common/middleware/bulk.py @@ -241,6 +241,7 @@ class Bulk(object): while data_remaining: if '\n' in line: obj_to_delete, line = line.split('\n', 1) + obj_to_delete = obj_to_delete.strip() objs_to_delete.append( {'name': unquote(obj_to_delete)}) else: @@ -249,9 +250,10 @@ class Bulk(object): line += data else: data_remaining = False - if line.strip(): + obj_to_delete = line.strip() + if obj_to_delete: objs_to_delete.append( - {'name': unquote(line)}) + {'name': unquote(obj_to_delete)}) if len(objs_to_delete) > self.max_deletes_per_request: raise HTTPRequestEntityTooLarge( 'Maximum Bulk Deletes: %d per request' % @@ -308,7 +310,7 @@ class Bulk(object): separator = '\r\n\r\n' last_yield = time() yield ' ' - obj_name = obj_to_delete['name'].strip() + obj_name = obj_to_delete['name'] if not obj_name: continue if len(failed_files) >= self.max_failed_deletes: diff --git a/test/unit/common/middleware/test_bulk.py b/test/unit/common/middleware/test_bulk.py index f5ae07a15..e51c4ee6a 100644 --- a/test/unit/common/middleware/test_bulk.py +++ b/test/unit/common/middleware/test_bulk.py @@ -553,18 +553,18 @@ class TestDelete(unittest.TestCase): req.method = 'DELETE' req.headers['Transfer-Encoding'] = 'chunked' req.headers['Accept'] = 'application/json' - req.environ['wsgi.input'] = StringIO('/c/f') + req.environ['wsgi.input'] = StringIO('/c/f%20') list(self.bulk(req.environ, fake_start_response)) # iterate over resp self.assertEquals( - self.app.delete_paths, ['/delete_works/AUTH_Acc/c/f']) + self.app.delete_paths, ['/delete_works/AUTH_Acc/c/f ']) self.assertEquals(self.app.calls, 1) def test_bulk_delete_get_objs(self): - req = Request.blank('/delete_works/AUTH_Acc', body='1\r\n2\r\n') + req = Request.blank('/delete_works/AUTH_Acc', body='1%20\r\n2\r\n') req.method = 'DELETE' with patch.object(self.bulk, 'max_deletes_per_request', 2): results = self.bulk.get_objs_to_delete(req) - self.assertEquals(results, [{'name': '1\r'}, {'name': '2\r'}]) + self.assertEquals(results, [{'name': '1 '}, {'name': '2'}]) with patch.object(bulk, 'MAX_PATH_LENGTH', 2): results = [] |