From df1732c737066da42467d125d40b1f5bd7896912 Mon Sep 17 00:00:00 2001 From: Bert Blommers Date: Thu, 14 Oct 2021 09:49:50 +0000 Subject: [PATCH] S3 - list_objects(MaxKeys=0) (#4411) --- moto/s3/responses.py | 6 +++++- tests/test_s3/test_s3.py | 11 +++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/moto/s3/responses.py b/moto/s3/responses.py index 4b9e4d348..2039c0cb9 100644 --- a/moto/s3/responses.py +++ b/moto/s3/responses.py @@ -628,7 +628,11 @@ class ResponseObject(_TemplateEnvironmentMixin, ActionAuthenticatorMixin): return result_keys[continuation_index:] def _truncate_result(self, result_keys, max_keys): - if len(result_keys) > max_keys: + if max_keys == 0: + result_keys = [] + is_truncated = True + next_continuation_token = None + elif len(result_keys) > max_keys: is_truncated = "true" result_keys = result_keys[:max_keys] item = result_keys[-1] diff --git a/tests/test_s3/test_s3.py b/tests/test_s3/test_s3.py index f637dd1ef..32301b103 100644 --- a/tests/test_s3/test_s3.py +++ b/tests/test_s3/test_s3.py @@ -2851,6 +2851,17 @@ def test_delimiter_optional_in_response(): assert resp.get("Delimiter") == "/" +@mock_s3 +def test_list_objects_with_pagesize_0(): + s3 = boto3.client("s3", region_name=DEFAULT_REGION_NAME) + s3.create_bucket(Bucket="mybucket") + resp = s3.list_objects(Bucket="mybucket", MaxKeys=0) + resp["Name"].should.equal("mybucket") + resp["MaxKeys"].should.equal(0) + resp["IsTruncated"].should.equal(False) + resp.shouldnt.have.key("Contents") + + @mock_s3 def test_boto3_list_objects_truncated_response(): s3 = boto3.client("s3", region_name=DEFAULT_REGION_NAME)