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 <tomasz.zawadzki@intel.com>
Change-Id: Ic56594da8cd4c442b62890d62961b44771059679
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/1202
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Paul Luse <paul.e.luse@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
This commit is contained in:
Tomasz Zawadzki 2020-03-09 08:28:07 -04:00
parent 5df4f50f76
commit cc991aad61

View File

@ -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;