anchor.diff:      %% List bucket contents and verify empty
       ObjList3 = erlcloud_s3:list_objects(Bucket, Config),
       ?assertEqual([], proplists:get_value(contents, ObjList3)).
  +
  +initiate_uploads(Bucket, Count, Config) ->
  +    initiate_uploads(Bucket, Count, [], Config).
  +
  +initiate_uploads(Bucket, Count, KeyPrefix, Config) ->
  +    [erlcloud_s3_multipart:initiate_upload(Bucket,
  +                                           KeyPrefix ++ integer_to_list(X),
  +                                           "text/plain",
  +                                           [],
  +                                           Config) || X <- lists:seq(1, Count)].
  +
  +verify_upload_list(UploadList, ExpectedCount) ->
  +    verify_upload_list(UploadList, ExpectedCount, ExpectedCount, 1).
  +
  +verify_upload_list(UploadList, ExpectedCount, TotalCount) ->
  +    verify_upload_list(UploadList, ExpectedCount, TotalCount, 1).
  +
  +verify_upload_list(UploadList, ExpectedCount, TotalCount, 1)
  +  when ExpectedCount =:= TotalCount ->
  +    ?assertEqual(lists:sort([integer_to_list(X) || X <- lists:seq(1, ExpectedCount)]),
  +                 [proplists:get_value(key, O) ||
  +                     O <- proplists:get_value(uploads, UploadList)]);
  +verify_upload_list(UploadList, ExpectedCount, TotalCount, Offset) ->
  +    ?assertEqual(lists:sublist(
  +                   lists:sort([integer_to_list(X) || X <- lists:seq(1, TotalCount)]),
  +                   Offset,
  +                   ExpectedCount),
  +                 [proplists:get_value(key, O) ||
  +                     O <- proplists:get_value(uploads, UploadList)]).
  +
  +abort_and_verify_uploads(Bucket, 0, Config) ->
  +    verify_upload_list(erlcloud_s3_multipart:list_uploads(Bucket, [], Config), 0),
  +    ok;
  +abort_and_verify_uploads(Bucket, Count, Config) ->
  +    UploadList = erlcloud_s3_multipart:list_uploads(Bucket, [], Config),
  +    verify_upload_list(UploadList, Count),
  +    Key = integer_to_list(Count),
  +    UploadId = upload_id_for_key(Key, UploadList),
  +    erlcloud_s3_multipart:abort_upload(Bucket, Key, UploadId, Config),
  +    abort_and_verify_uploads(Bucket, Count-1, Config).
  +
  +upload_id_present(UploadId, UploadList) ->
  +    [] /= [UploadData || UploadData <- UploadList,
  +                         proplists:get_value(upload_id, UploadData) =:= UploadId].
  +
  +upload_id_for_key(Key, UploadList) ->
  +    Uploads = proplists:get_value(uploads, UploadList),
  +    [KeyUpload] = [UploadData || UploadData <- Uploads,
  +                                 proplists:get_value(key, UploadData) =:= Key],
  +    proplists:get_value(upload_id, KeyUpload).
  +
  +abort_uploads(Bucket, Config) ->
  +    UploadList = erlcloud_s3_multipart:list_uploads(Bucket, [], Config),
  +    [begin
  +         Key = proplists:get_value(key, Upload),
  +         UploadId = proplists:get_value(upload_id, Upload),
  +         erlcloud_s3_multipart:abort_upload(Bucket, Key, UploadId, Config)
  +     end || Upload <- UploadList].
  
positive.code:     %% Test cases
      basic_upload_test_case(?TEST_BUCKET, ?TEST_KEY1, UserConfig),
      aborted_upload_test_case(?TEST_BUCKET, ?TEST_KEY2, UserConfig),
  
      lager:info("deleting bucket ~p", [?TEST_BUCKET]),
      ?assertEqual(ok, erlcloud_s3:delete_bucket(?TEST_BUCKET, UserConfig)),
  
negative.code: 
      %% Verify the upload id is in list_uploads results and
      %% that the bucket information is correct
      UploadsList1 = erlcloud_s3_multipart:list_uploads(Bucket, [], Config),
      Uploads1 = proplists:get_value(uploads, UploadsList1, []),
      ?assertEqual(Bucket, proplists:get_value(bucket, UploadsList1)),
      ?assert(upload_id_present(UploadId, Uploads1)),
  
      lager:info("Uploading parts"),
      EtagList = upload_and_assert_parts(Bucket,
  