From 819a308e2b1a17123904a7c4f49c924e61252a26 Mon Sep 17 00:00:00 2001 From: georgepsarakis Date: Sat, 29 Apr 2017 21:56:48 +0300 Subject: [PATCH 1/3] Add failing test for S3 list_object_versions --- tests/test_s3/test_s3.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/tests/test_s3/test_s3.py b/tests/test_s3/test_s3.py index 406494eb..19339991 100644 --- a/tests/test_s3/test_s3.py +++ b/tests/test_s3/test_s3.py @@ -1293,6 +1293,30 @@ def test_boto3_multipart_etag(): resp['ETag'].should.equal(EXPECTED_ETAG) +@mock_s3 +def test_boto3_list_object_versions(): + s3 = boto3.client('s3', region_name='us-east-1') + bucket_name = 'mybucket' + key = 'key-with-versions' + s3.create_bucket(Bucket=bucket_name) + for body in ('v1', 'v2'): + s3.put_object( + Bucket=bucket_name, + Key=key, + Body=body + ) + response = s3.list_object_versions( + Bucket=bucket_name + ) + # Two object versions should be returned + len(response['Versions']).should.equal(2) + keys = set([item['Key'] for item in response['Versions']]) + keys.should.equal({key}) + # Test latest object version is returned + response = s3.get_object(Bucket=bucket_name, Key=key) + response['Body'].read().should.equal('v2') + + TEST_XML = """\ From 617e994ac65860351f83834c37397155eddf8d16 Mon Sep 17 00:00:00 2001 From: georgepsarakis Date: Sat, 29 Apr 2017 22:35:25 +0300 Subject: [PATCH 2/3] Specify integer value for MaxKeys in S3 response --- moto/s3/responses.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/moto/s3/responses.py b/moto/s3/responses.py index 4f8e6e99..1642a569 100644 --- a/moto/s3/responses.py +++ b/moto/s3/responses.py @@ -224,7 +224,7 @@ class ResponseObject(_TemplateEnvironmentMixin): key_list=versions, bucket=bucket, prefix='', - max_keys='', + max_keys=1000, delimiter='', is_truncated='false', ) From 2714fb76f1cbea381a1078996a3fcc900523c895 Mon Sep 17 00:00:00 2001 From: georgepsarakis Date: Sun, 30 Apr 2017 08:03:46 +0300 Subject: [PATCH 3/3] Python 2/3 compatibility fixes --- tests/test_s3/test_s3.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/tests/test_s3/test_s3.py b/tests/test_s3/test_s3.py index 19339991..09ef235a 100644 --- a/tests/test_s3/test_s3.py +++ b/tests/test_s3/test_s3.py @@ -14,6 +14,7 @@ from boto.exception import S3CreateError, S3ResponseError from boto.s3.connection import S3Connection from boto.s3.key import Key from freezegun import freeze_time +import six import requests import tests.backport_assert_raises # noqa from nose.tools import assert_raises @@ -1299,7 +1300,8 @@ def test_boto3_list_object_versions(): bucket_name = 'mybucket' key = 'key-with-versions' s3.create_bucket(Bucket=bucket_name) - for body in ('v1', 'v2'): + items = (six.b('v1'), six.b('v2')) + for body in items: s3.put_object( Bucket=bucket_name, Key=key, @@ -1314,7 +1316,7 @@ def test_boto3_list_object_versions(): keys.should.equal({key}) # Test latest object version is returned response = s3.get_object(Bucket=bucket_name, Key=key) - response['Body'].read().should.equal('v2') + response['Body'].read().should.equal(items[-1]) TEST_XML = """\