def test_it_deletes_old_versions(paginate_mock): s3_mock = MagicMock() paginate_mock.return_value = iter([ ( { "VersionId": "v1", "LastModified": datetime.datetime.now() - datetime.timedelta(minutes=4), }, { "VersionId": "d2", "LastModified": datetime.datetime.now() - datetime.timedelta(minutes=3), }, ), ( { "VersionId": "v3", "LastModified": datetime.datetime.now() - datetime.timedelta(minutes=2), }, None, ), ]) delete_old_versions(s3_mock, "bucket", "key", "v4") paginate_mock.assert_called_with( s3_mock, s3_mock.list_object_versions, ["Versions", "DeleteMarkers"], Bucket="bucket", Prefix="key", VersionIdMarker="v4", KeyMarker="key", ) s3_mock.delete_objects.assert_called_with( Bucket="bucket", Delete={ "Objects": [ { "Key": "key", "VersionId": "v1" }, { "Key": "key", "VersionId": "d2" }, { "Key": "key", "VersionId": "v3" }, ], "Quiet": True, }, )
def test_it_handles_high_old_version_count(paginate_mock): s3_mock = MagicMock() paginate_mock.return_value = iter([( { "VersionId": "v{}".format(i), "LastModified": datetime.datetime.now() + datetime.timedelta(minutes=i), }, None, ) for i in range(1, 1501)]) delete_old_versions(s3_mock, "bucket", "key", "v0") paginate_mock.assert_called_with( s3_mock, s3_mock.list_object_versions, ["Versions", "DeleteMarkers"], Bucket="bucket", Prefix="key", VersionIdMarker="v0", KeyMarker="key", ) assert 2 == s3_mock.delete_objects.call_count assert { "Bucket": "bucket", "Delete": { "Objects": [{ "Key": "key", "VersionId": "v{}".format(i) } for i in range(1, 1001)], "Quiet": True, }, } == s3_mock.delete_objects.call_args_list[0][1] assert { "Bucket": "bucket", "Delete": { "Objects": [{ "Key": "key", "VersionId": "v{}".format(i) } for i in range(1001, 1501)], "Quiet": True, }, } == s3_mock.delete_objects.call_args_list[1][1]
def test_it_raises_for_deletion_errors(paginate_mock): s3_mock = MagicMock() paginate_mock.return_value = iter([ ( { "VersionId": "v1", "LastModified": datetime.datetime.now() - datetime.timedelta(minutes=4), }, { "VersionId": "v2", "LastModified": datetime.datetime.now() - datetime.timedelta(minutes=3), }, ), ( { "VersionId": "v3", "LastModified": datetime.datetime.now() - datetime.timedelta(minutes=2), }, None, ), ]) s3_mock.delete_objects.return_value = { "Errors": [{ "VersionId": "v1", "Key": "key", "Message": "Version not found" }] } with pytest.raises(DeleteOldVersionsError): delete_old_versions(s3_mock, "bucket", "key", "v4")
def test_it_handles_client_errors_as_deletion_errors(paginate_mock): s3_mock = MagicMock() paginate_mock.side_effect = get_list_object_versions_error() with pytest.raises(DeleteOldVersionsError): delete_old_versions(s3_mock, "bucket", "key", "v3")