From b3ea4c27077b7aa19ef64820e5163172a185bcf9 Mon Sep 17 00:00:00 2001 From: LS Date: Mon, 21 Oct 2019 09:40:47 +0800 Subject: [PATCH] add unit test for s3 list_object with truncation --- tests/test_s3/test_s3.py | 48 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/tests/test_s3/test_s3.py b/tests/test_s3/test_s3.py index 292093893..7549094f8 100644 --- a/tests/test_s3/test_s3.py +++ b/tests/test_s3/test_s3.py @@ -1247,6 +1247,54 @@ def test_website_redirect_location(): resp['WebsiteRedirectLocation'].should.equal(url) +@mock_s3 +def test_boto3_list_objects_truncated_response(): + s3 = boto3.client('s3', region_name='us-east-1') + s3.create_bucket(Bucket='mybucket') + s3.put_object(Bucket='mybucket', Key='one', Body=b'1') + s3.put_object(Bucket='mybucket', Key='two', Body=b'22') + s3.put_object(Bucket='mybucket', Key='three', Body=b'333') + + # First list + resp = s3.list_objects(Bucket='mybucket', MaxKeys=1) + listed_object = resp['Contents'][0] + + assert listed_object['Key'] == 'one' + assert resp['MaxKeys'] == 1 + assert resp['IsTruncated'] == True + assert resp['Prefix'] == 'None' + assert resp['Delimiter'] == 'None' + assert 'NextMarker' in resp + + next_marker = resp["NextMarker"] + + # Second list + resp = s3.list_objects( + Bucket='mybucket', MaxKeys=1, Marker=next_marker) + listed_object = resp['Contents'][0] + + assert listed_object['Key'] == 'three' + assert resp['MaxKeys'] == 1 + assert resp['IsTruncated'] == True + assert resp['Prefix'] == 'None' + assert resp['Delimiter'] == 'None' + assert 'NextMarker' in resp + + next_marker = resp["NextMarker"] + + # Third list + resp = s3.list_objects( + Bucket='mybucket', MaxKeys=1, Marker=next_marker) + listed_object = resp['Contents'][0] + + assert listed_object['Key'] == 'two' + assert resp['MaxKeys'] == 1 + assert resp['IsTruncated'] == False + assert resp['Prefix'] == 'None' + assert resp['Delimiter'] == 'None' + assert 'NextMarker' not in resp + + @mock_s3 def test_boto3_list_keys_xml_escaped(): s3 = boto3.client('s3', region_name='us-east-1')