Commit 02935561 authored by Ed Reed's avatar Ed Reed Committed by Konrad Sztyber
Browse files

bdev_ut: add manual examine bdev unit test case



This commit adds a unit test case for the manual Bdev examination
workflow and validates that a Bdev can be re-registered under the
same name when the autoexamine Bdev option is disabled.

Change-Id: Ideefe1c60fe7efb4191caca88c3551674781f987
Signed-off-by: default avatarEd Reed <edreed@microsoft.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/25425


Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com>
Community-CI: Mellanox Build Bot
Reviewed-by: default avatarJim Harris <jim.harris@nvidia.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Community-CI: Community CI Samsung <spdk.community.ci.samsung@gmail.com>
Reviewed-by: default avatarShuhei Matsumoto <smatsumoto@nvidia.com>
parent fc96810c
Loading
Loading
Loading
Loading
+66 −1
Original line number Diff line number Diff line
@@ -7480,12 +7480,26 @@ ut_examine_claimed_disk1(struct spdk_bdev *bdev)
	examine_claimed_disk(bdev, 1);
}

static bool g_examine_done = false;

static void
examine_claimed(void)
ut_examine_done_cb(void *ctx)
{
	g_examine_done = true;
}

static void
examine_claimed_common(bool autoexamine)
{
	struct spdk_bdev *bdev;
	struct spdk_bdev_module *mod = examine_claimed_mods;
	struct ut_examine_claimed_ctx *ctx = examine_claimed_ctx;
	struct spdk_bdev_opts bdev_opts = {};
	int rc;

	spdk_bdev_get_opts(&bdev_opts, sizeof(bdev_opts));
	bdev_opts.bdev_auto_examine = autoexamine;
	ut_init_bdev(&bdev_opts);

	ut_testing_examine_claimed = true;
	reset_examine_claimed_ctx();
@@ -7495,7 +7509,19 @@ examine_claimed(void)
	 * claiming module's examine_disk should be called.
	 */
	ctx[0].claim_type = SPDK_BDEV_CLAIM_READ_MANY_WRITE_NONE;
	g_examine_done = false;
	bdev = allocate_bdev("bdev0");

	if (!autoexamine) {
		rc = spdk_bdev_examine("bdev0");
		CU_ASSERT(rc == 0);
		rc = spdk_bdev_wait_for_examine(ut_examine_done_cb, NULL);
		CU_ASSERT(rc == 0);
		CU_ASSERT(!g_examine_done);
		poll_threads();
		CU_ASSERT(g_examine_done);
	}

	CU_ASSERT(ctx[0].examine_config_count == 1);
	CU_ASSERT(ctx[0].examine_disk_count == 1);
	SPDK_CU_ASSERT_FATAL(ctx[0].desc != NULL);
@@ -7512,7 +7538,19 @@ examine_claimed(void)
	 */
	ctx[0].claim_type = SPDK_BDEV_CLAIM_READ_MANY_WRITE_NONE;
	ctx[1].claim_type = SPDK_BDEV_CLAIM_READ_MANY_WRITE_NONE;
	g_examine_done = false;
	bdev = allocate_bdev("bdev0");

	if (!autoexamine) {
		rc = spdk_bdev_examine("bdev0");
		CU_ASSERT(rc == 0);
		rc = spdk_bdev_wait_for_examine(ut_examine_done_cb, NULL);
		CU_ASSERT(rc == 0);
		CU_ASSERT(!g_examine_done);
		poll_threads();
		CU_ASSERT(g_examine_done);
	}

	CU_ASSERT(ctx[0].examine_config_count == 1);
	CU_ASSERT(ctx[0].examine_disk_count == 1);
	SPDK_CU_ASSERT_FATAL(ctx[0].desc != NULL);
@@ -7532,7 +7570,19 @@ examine_claimed(void)
	ctx[0].claim_type = SPDK_BDEV_CLAIM_READ_MANY_WRITE_NONE;
	ctx[0].expect_claim_err = -EPERM;
	ctx[1].claim_type = SPDK_BDEV_CLAIM_READ_MANY_WRITE_ONE;
	g_examine_done = false;
	bdev = allocate_bdev("bdev0");

	if (!autoexamine) {
		rc = spdk_bdev_examine("bdev0");
		CU_ASSERT(rc == 0);
		rc = spdk_bdev_wait_for_examine(ut_examine_done_cb, NULL);
		CU_ASSERT(rc == 0);
		CU_ASSERT(!g_examine_done);
		poll_threads();
		CU_ASSERT(g_examine_done);
	}

	CU_ASSERT(ctx[0].examine_config_count == 1);
	CU_ASSERT(ctx[0].examine_disk_count == 0);
	CU_ASSERT(ctx[1].examine_config_count == 1);
@@ -7544,6 +7594,20 @@ examine_claimed(void)
	free_bdev(bdev);

	ut_testing_examine_claimed = false;

	ut_fini_bdev();
}

static void
examine_claimed(void)
{
	examine_claimed_common(true);
}

static void
examine_claimed_manual(void)
{
	examine_claimed_common(false);
}

static void
@@ -7711,6 +7775,7 @@ main(int argc, char **argv)
	CU_ADD_TEST(suite, claim_v2_existing_v1);
	CU_ADD_TEST(suite, claim_v1_existing_v2);
	CU_ADD_TEST(suite, examine_claimed);
	CU_ADD_TEST(suite, examine_claimed_manual);
	CU_ADD_TEST(suite, get_numa_id);
	CU_ADD_TEST(suite, get_device_stat_with_reset);