Skip to content

Commit 99de066

Browse files
author
Rakshil Modi
committed
Added testcases
1 parent 46e2fb3 commit 99de066

File tree

2 files changed

+111
-0
lines changed

2 files changed

+111
-0
lines changed

tests/functional/s3/__init__.py

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,74 @@ def mp_copy_responses(self):
257257
self.complete_mpu_response(),
258258
]
259259

260+
def list_object_versions_request(
261+
self, bucket, prefix=None, **override_kwargs
262+
):
263+
params = {
264+
'Bucket': bucket,
265+
}
266+
if prefix is not None:
267+
params['Prefix'] = prefix
268+
params.update(override_kwargs)
269+
return 'ListObjectVersions', params
270+
271+
def list_object_versions_response(self, keys, **override_kwargs):
272+
versions = []
273+
delete_markers = []
274+
for key in keys:
275+
version = {
276+
'Key': key,
277+
'VersionId': 'version1',
278+
'LastModified': '00:00:00Z',
279+
'Size': 100,
280+
'ETag': '"foo-1"',
281+
'IsLatest': False,
282+
}
283+
delete_marker = {
284+
'Key': key,
285+
'VersionId': 'deletemarker1',
286+
'LastModified': '00:00:00Z',
287+
'IsLatest': True,
288+
}
289+
if override_kwargs:
290+
version.update(override_kwargs)
291+
delete_marker.update(override_kwargs)
292+
293+
versions.append(version)
294+
delete_markers.append(delete_marker)
295+
return {'Versions': versions, 'DeleteMarkers': delete_markers}
296+
297+
def delete_objects_request(
298+
self, bucket, objects_to_delete, **override_kwargs
299+
):
300+
params = {
301+
'Bucket': bucket,
302+
'Delete': {
303+
'Objects': objects_to_delete,
304+
'Quiet': False,
305+
},
306+
}
307+
params.update(override_kwargs)
308+
return 'DeleteObjects', params
309+
310+
def delete_objects_response(self, keys, **override_kwargs):
311+
deleted = []
312+
313+
for key in keys:
314+
# Create deleted entries for each version that was deleted
315+
deleted_objects = [
316+
{'Key': key, 'VersionId': 'version1'},
317+
{'Key': key, 'VersionId': 'deletemarker1'},
318+
]
319+
320+
if override_kwargs:
321+
for obj in deleted_objects:
322+
obj.update(override_kwargs)
323+
324+
deleted.extend(deleted_objects)
325+
326+
return {'Deleted': deleted}
327+
260328

261329
class BaseS3CLIRunnerTest(unittest.TestCase):
262330
def setUp(self):

tests/functional/s3/test_rm_command.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,49 @@ def test_recursive_delete_with_requests(self):
7171
]
7272
)
7373

74+
def test_delete_all_versions_of_single_object(self):
75+
self.parsed_responses = [
76+
self.list_object_versions_response(['mykey']),
77+
self.delete_objects_response(['mykey']),
78+
]
79+
cmdline = f'{self.prefix} s3://mybucket/mykey --all-versions'
80+
self.run_cmd(cmdline, expected_rc=0)
81+
82+
self.assert_operations_called(
83+
[
84+
self.list_object_versions_request('mybucket', prefix='mykey'),
85+
self.delete_objects_request(
86+
'mybucket',
87+
[
88+
{'Key': 'mykey', 'VersionId': 'version1'},
89+
{'Key': 'mykey', 'VersionId': 'deletemarker1'},
90+
],
91+
),
92+
]
93+
)
94+
95+
def test_recursive_delete_all_versions_of_all_objects(self):
96+
self.parsed_responses = [
97+
self.list_object_versions_response(['mykey1', 'mykey2']),
98+
self.delete_objects_response(['mykey1', 'mykey2']),
99+
]
100+
cmdline = f'{self.prefix} s3://mybucket/ --all-versions --recursive'
101+
self.run_cmd(cmdline, expected_rc=0)
102+
self.assert_operations_called(
103+
[
104+
self.list_object_versions_request('mybucket', prefix=''),
105+
self.delete_objects_request(
106+
'mybucket',
107+
[
108+
{'Key': 'mykey1', 'VersionId': 'version1'},
109+
{'Key': 'mykey2', 'VersionId': 'version1'},
110+
{'Key': 'mykey1', 'VersionId': 'deletemarker1'},
111+
{'Key': 'mykey2', 'VersionId': 'deletemarker1'},
112+
],
113+
),
114+
]
115+
)
116+
74117

75118
class TestRmWithCRTClient(BaseCRTTransferClientTest):
76119
def test_delete_using_crt_client(self):

0 commit comments

Comments
 (0)