From cc991aad61d1982f7d525656507934d795d7431c Mon Sep 17 00:00:00 2001 From: Tomasz Zawadzki Date: Mon, 9 Mar 2020 08:28:07 -0400 Subject: [PATCH] ut/blob: simplify blob closing and deletion Operation of closing and deleting a blob is common throughout the tests. This patch creates helper function ut_blob_close_and_delete(), to do exactly that with the right asserts. Throughout the UT this function replaces all instances where blob is closed and deleted, when it is not the subject of particular unit test (focus is on other functionality). It will allow to later use it in setup/cleanup functions for UT suite - similar to bs init. Signed-off-by: Tomasz Zawadzki Change-Id: Ic56594da8cd4c442b62890d62961b44771059679 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/1202 Tested-by: SPDK CI Jenkins Reviewed-by: Paul Luse Reviewed-by: Ben Walker Reviewed-by: Shuhei Matsumoto --- test/unit/lib/blob/blob.c/blob_ut.c | 147 +++++++--------------------- 1 file changed, 34 insertions(+), 113 deletions(-) diff --git a/test/unit/lib/blob/blob.c/blob_ut.c b/test/unit/lib/blob/blob.c/blob_ut.c index 91c80ca93..9098ef35d 100644 --- a/test/unit/lib/blob/blob.c/blob_ut.c +++ b/test/unit/lib/blob/blob.c/blob_ut.c @@ -81,6 +81,7 @@ SPDK_STATIC_ASSERT(sizeof(struct spdk_bs_super_block_ver1) == 0x1000, "Invalid s static struct spdk_blob *ut_blob_create_and_open(struct spdk_blob_store *bs, struct spdk_blob_opts *blob_opts); +static void ut_blob_close_and_delete(struct spdk_blob_store *bs, struct spdk_blob *blob); static void _get_xattr_value(void *arg, const char *name, @@ -666,37 +667,19 @@ blob_snapshot(void) CU_ASSERT_EQUAL(_get_snapshots_count(bs), 2); /* Delete blob and confirm that it is no longer on snapshot2 clone list */ - spdk_blob_close(blob, blob_op_complete, NULL); - poll_threads(); - CU_ASSERT(g_bserrno == 0); - - spdk_bs_delete_blob(bs, blobid, blob_op_complete, NULL); - poll_threads(); - CU_ASSERT(g_bserrno == 0); + ut_blob_close_and_delete(bs, blob); count = 2; CU_ASSERT(spdk_blob_get_clones(bs, snapshotid2, ids, &count) == 0); CU_ASSERT(count == 0); /* Delete snapshot2 and confirm that it is no longer on snapshot clone list */ - spdk_blob_close(snapshot2, blob_op_complete, NULL); - poll_threads(); - CU_ASSERT(g_bserrno == 0); - - spdk_bs_delete_blob(bs, snapshotid2, blob_op_complete, NULL); - poll_threads(); - CU_ASSERT(g_bserrno == 0); + ut_blob_close_and_delete(bs, snapshot2); CU_ASSERT_EQUAL(_get_snapshots_count(bs), 1); count = 2; CU_ASSERT(spdk_blob_get_clones(bs, snapshotid2, ids, &count) == 0); CU_ASSERT(count == 0); - spdk_blob_close(snapshot, blob_op_complete, NULL); - poll_threads(); - CU_ASSERT(g_bserrno == 0); - - spdk_bs_delete_blob(bs, snapshotid, blob_op_complete, NULL); - poll_threads(); - CU_ASSERT(g_bserrno == 0); + ut_blob_close_and_delete(bs, snapshot); CU_ASSERT_EQUAL(_get_snapshots_count(bs), 0); } @@ -1030,13 +1013,11 @@ blob_resize(void) { struct spdk_blob_store *bs = g_bs; struct spdk_blob *blob; - spdk_blob_id blobid; uint64_t free_clusters; free_clusters = spdk_bs_free_cluster_count(bs); blob = ut_blob_create_and_open(bs, NULL); - blobid = spdk_blob_get_id(blob); CU_ASSERT(free_clusters == spdk_bs_free_cluster_count(bs)); /* Confirm that resize fails if blob is marked read-only. */ @@ -1078,13 +1059,7 @@ blob_resize(void) poll_threads(); CU_ASSERT(g_bserrno == -ENOSPC); - spdk_blob_close(blob, blob_op_complete, NULL); - poll_threads(); - CU_ASSERT(g_bserrno == 0); - - spdk_bs_delete_blob(bs, blobid, blob_op_complete, NULL); - poll_threads(); - CU_ASSERT(g_bserrno == 0); + ut_blob_close_and_delete(bs, blob); } static void @@ -1284,12 +1259,10 @@ blob_read(void) poll_threads(); CU_ASSERT(g_bserrno == -EINVAL); - spdk_blob_close(blob, blob_op_complete, NULL); - poll_threads(); - CU_ASSERT(g_bserrno == 0); - spdk_bs_free_io_channel(channel); poll_threads(); + + ut_blob_close_and_delete(bs, blob); } static void @@ -3176,12 +3149,7 @@ blob_dirty_shutdown(void) CU_ASSERT(spdk_blob_get_num_clusters(blob) == 10); CU_ASSERT(free_clusters == spdk_bs_free_cluster_count(bs)); - spdk_blob_close(blob, blob_op_complete, NULL); - poll_threads(); - CU_ASSERT(g_bserrno == 0); - spdk_bs_delete_blob(bs, blobid2, blob_op_complete, NULL); - poll_threads(); - CU_ASSERT(g_bserrno == 0); + ut_blob_close_and_delete(bs, blob); free_clusters = spdk_bs_free_cluster_count(bs); @@ -3670,13 +3638,7 @@ blob_thin_prov_alloc(void) CU_ASSERT(free_clusters == spdk_bs_free_cluster_count(bs)); CU_ASSERT(blob->active.num_clusters == 3); - spdk_blob_close(blob, blob_op_complete, NULL); - poll_threads(); - CU_ASSERT(g_bserrno == 0); - - spdk_bs_delete_blob(bs, blobid, blob_op_complete, NULL); - poll_threads(); - CU_ASSERT(g_bserrno == 0); + ut_blob_close_and_delete(bs, blob); } static void @@ -3732,13 +3694,7 @@ blob_insert_cluster_msg(void) CU_ASSERT(blob->active.clusters[cluster_num] != 0); - spdk_blob_close(blob, blob_op_complete, NULL); - poll_threads(); - CU_ASSERT(g_bserrno == 0); - - spdk_bs_delete_blob(bs, blobid, blob_op_complete, NULL); - poll_threads(); - CU_ASSERT(g_bserrno == 0); + ut_blob_close_and_delete(bs, blob); } static void @@ -3749,7 +3705,6 @@ blob_thin_prov_rw(void) struct spdk_blob *blob; struct spdk_io_channel *channel, *channel_thread1; struct spdk_blob_opts opts; - spdk_blob_id blobid; uint64_t free_clusters; uint64_t page_size; uint8_t payload_read[10 * 4096]; @@ -3767,7 +3722,6 @@ blob_thin_prov_rw(void) opts.thin_provision = true; blob = ut_blob_create_and_open(bs, &opts); - blobid = spdk_blob_get_id(blob); CU_ASSERT(free_clusters == spdk_bs_free_cluster_count(bs)); CU_ASSERT(blob->active.num_clusters == 0); @@ -3827,13 +3781,7 @@ blob_thin_prov_rw(void) CU_ASSERT(g_bserrno == 0); CU_ASSERT(memcmp(payload_write, payload_read, 10 * 4096) == 0); - spdk_blob_close(blob, blob_op_complete, NULL); - poll_threads(); - CU_ASSERT(g_bserrno == 0); - - spdk_bs_delete_blob(bs, blobid, blob_op_complete, NULL); - poll_threads(); - CU_ASSERT(g_bserrno == 0); + ut_blob_close_and_delete(bs, blob); CU_ASSERT(free_clusters == spdk_bs_free_cluster_count(bs)); set_thread(1); @@ -3937,13 +3885,7 @@ blob_thin_prov_rle(void) spdk_bs_free_io_channel(channel); poll_threads(); - spdk_blob_close(blob, blob_op_complete, NULL); - poll_threads(); - CU_ASSERT(g_bserrno == 0); - - spdk_bs_delete_blob(bs, blobid, blob_op_complete, NULL); - poll_threads(); - CU_ASSERT(g_bserrno == 0); + ut_blob_close_and_delete(bs, blob); } static void @@ -4226,21 +4168,8 @@ blob_snapshot_rw(void) CU_ASSERT(g_bserrno == 0); CU_ASSERT(memcmp(payload_write, payload_read, 10 * 4096) == 0); - spdk_blob_close(blob, blob_op_complete, NULL); - poll_threads(); - CU_ASSERT(g_bserrno == 0); - - spdk_blob_close(snapshot, blob_op_complete, NULL); - poll_threads(); - CU_ASSERT(g_bserrno == 0); - - spdk_bs_delete_blob(bs, blobid, blob_op_complete, NULL); - poll_threads(); - CU_ASSERT(g_bserrno == 0); - - spdk_bs_delete_blob(bs, snapshotid, blob_op_complete, NULL); - poll_threads(); - CU_ASSERT(g_bserrno == 0); + ut_blob_close_and_delete(bs, blob); + ut_blob_close_and_delete(bs, snapshot); spdk_bs_free_io_channel(channel); poll_threads(); @@ -5177,13 +5106,7 @@ blob_relations2(void) /* 7. Remove snapshot 4 */ - spdk_blob_close(snapshot4, blob_op_complete, NULL); - poll_threads(); - CU_ASSERT(g_bserrno == 0); - - spdk_bs_delete_blob(bs, snapshotid4, blob_op_complete, NULL); - poll_threads(); - CU_ASSERT(g_bserrno == 0); + ut_blob_close_and_delete(bs, snapshot4); /* Check if relations are back to state from before creating snapshot 4 */ CU_ASSERT(clone->parent_id == snapshotid3); @@ -5229,13 +5152,7 @@ blob_relations2(void) /* 10. Remove snapshot 1 */ - spdk_blob_close(snapshot1, blob_op_complete, NULL); - poll_threads(); - CU_ASSERT(g_bserrno == 0); - - spdk_bs_delete_blob(bs, snapshotid1, blob_op_complete, NULL); - poll_threads(); - CU_ASSERT(g_bserrno == 0); + ut_blob_close_and_delete(bs, snapshot1); /* Check if relations are back to state from before creating snapshot 4 (before step 6) */ CU_ASSERT(snapshot2->parent_id == SPDK_BLOBID_INVALID); @@ -6440,17 +6357,11 @@ blob_simultaneous_operations(void) SPDK_CU_ASSERT_FATAL(g_bserrno == -1); } - spdk_blob_close(blob, blob_op_complete, NULL); - poll_threads(); - CU_ASSERT(g_bserrno == 0); - spdk_blob_close(snapshot, blob_op_complete, NULL); poll_threads(); CU_ASSERT(g_bserrno == 0); - spdk_bs_delete_blob(bs, blobid, blob_op_complete, NULL); - poll_threads(); - CU_ASSERT(g_bserrno == 0); + ut_blob_close_and_delete(bs, blob); spdk_bs_free_io_channel(channel); poll_threads(); @@ -6555,13 +6466,7 @@ blob_persist(void) free(xattr); - spdk_blob_close(blob, blob_op_complete, NULL); - poll_threads(); - CU_ASSERT(g_bserrno == 0); - - spdk_bs_delete_blob(bs, blobid, blob_op_complete, NULL); - poll_threads(); - CU_ASSERT(g_bserrno == 0); + ut_blob_close_and_delete(bs, blob); spdk_bs_free_io_channel(channel); poll_threads(); @@ -6621,6 +6526,22 @@ ut_blob_create_and_open(struct spdk_blob_store *bs, struct spdk_blob_opts *blob_ return blob; } +static void +ut_blob_close_and_delete(struct spdk_blob_store *bs, struct spdk_blob *blob) +{ + spdk_blob_id blobid = spdk_blob_get_id(blob); + + spdk_blob_close(blob, blob_op_complete, NULL); + poll_threads(); + CU_ASSERT(g_bserrno == 0); + g_blob = NULL; + + spdk_bs_delete_blob(bs, blobid, blob_op_complete, NULL); + poll_threads(); + CU_ASSERT(g_bserrno == 0); + g_bserrno = -1; +} + int main(int argc, char **argv) { CU_pSuite suite, suite_bs;