s3/test: use seastar::deferred() to perform cleanup

let's use RAII to remove the object use as a fixture, so we don't
leave some object in the bucket for testing. this might interfere
with other tests which share the same minio server with the test
which fails to do its clean up if an exception is thrown.

Signed-off-by: Kefu Chai <kefu.chai@scylladb.com>
This commit is contained in:
Kefu Chai
2023-07-04 11:49:30 +08:00
parent 7a9c802fc3
commit 77faec4f38

View File

@@ -98,6 +98,13 @@ SEASTAR_THREAD_TEST_CASE(test_client_put_get_object) {
});
}
static auto deferred_delete_object(shared_ptr<s3::client> client, sstring name) {
return seastar::defer([client, name] {
testlog.info("Delete object: {}\n", name);
client->delete_object(name).get();
});
}
void do_test_client_multipart_upload(bool with_copy_upload) {
const sstring name(fmt::format("/{}/test{}object-{}", tests::getenv_safe("S3_PUBLIC_BUCKET_FOR_TEST"), with_copy_upload ? "jumbo" : "large", ::getpid()));
@@ -123,6 +130,7 @@ void do_test_client_multipart_upload(bool with_copy_upload) {
testlog.info("Flush multipart upload\n");
out.flush().get();
auto delete_object = deferred_delete_object(cln, name);
testlog.info("Closing\n");
close.close_now();
@@ -146,9 +154,6 @@ void do_test_client_multipart_upload(bool with_copy_upload) {
BOOST_REQUIRE_EQUAL(memcmp(rnd.begin(), s_buf.get() + (chunk_size - align), len - (chunk_size - align)), 0);
}
}
testlog.info("Delete object\n");
cln->delete_object(name).get();
}
SEASTAR_THREAD_TEST_CASE(test_client_multipart_upload) {
@@ -169,6 +174,7 @@ SEASTAR_THREAD_TEST_CASE(test_client_readable_file) {
testlog.info("Put object {}\n", name);
temporary_buffer<char> data = sstring("1234567890ABCDEF").release();
cln->put_object(name, std::move(data)).get();
auto delete_object = deferred_delete_object(cln, name);
auto f = cln->make_readable_file(name);
auto close_readable_file = deferred_close(f);
@@ -197,9 +203,6 @@ SEASTAR_THREAD_TEST_CASE(test_client_readable_file) {
testlog.info("Check bulk read\n");
auto buf = f.dma_read_bulk<char>(5, 8).get0();
BOOST_REQUIRE_EQUAL(to_sstring(std::move(buf)), sstring("67890ABC"));
testlog.info("Delete object\n");
cln->delete_object(name).get();
}
SEASTAR_THREAD_TEST_CASE(test_client_put_get_tagging) {
@@ -209,6 +212,8 @@ SEASTAR_THREAD_TEST_CASE(test_client_put_get_tagging) {
auto close_client = deferred_close(*client);
auto data = sstring("1234567890ABCDEF").release();
client->put_object(name, std::move(data)).get();
auto delete_object = deferred_delete_object(client, name);
{
auto tagset = client->get_object_tagging(name).get0();
BOOST_CHECK(tagset.empty());
@@ -226,5 +231,4 @@ SEASTAR_THREAD_TEST_CASE(test_client_put_get_tagging) {
auto tagset = client->get_object_tagging(name).get0();
BOOST_CHECK(tagset.empty());
}
client->delete_object(name).get();
}