ut/bdev_nvme: Add test cases for bdev_nvme_remove_trid()
The following patches will refactor bdev_nvme_remove_trid() and merge it into bdev_nvme_delete(). Add test cases for bdev_nvme_remove_trid() to avoid degradation by the following patches. Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Change-Id: I42da17c62843ead9a30ab9a06463df4b679e561d Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/6686 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Community-CI: Mellanox Build Bot Reviewed-by: Aleksey Marchuk <alexeymar@mellanox.com> Reviewed-by: Changpeng Liu <changpeng.liu@intel.com> Reviewed-by: <dongx.yi@intel.com>
This commit is contained in:
parent
13f868977e
commit
620e0ea043
@ -234,6 +234,15 @@ ut_init_trid2(struct spdk_nvme_transport_id *trid)
|
|||||||
snprintf(trid->trsvcid, SPDK_NVMF_TRSVCID_MAX_LEN, "%s", "4420");
|
snprintf(trid->trsvcid, SPDK_NVMF_TRSVCID_MAX_LEN, "%s", "4420");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
ut_init_trid3(struct spdk_nvme_transport_id *trid)
|
||||||
|
{
|
||||||
|
trid->trtype = SPDK_NVME_TRANSPORT_TCP;
|
||||||
|
snprintf(trid->subnqn, SPDK_NVMF_NQN_MAX_LEN, "%s", "nqn.2016-06.io.spdk:cnode1");
|
||||||
|
snprintf(trid->traddr, SPDK_NVMF_TRADDR_MAX_LEN, "%s", "192.168.100.10");
|
||||||
|
snprintf(trid->trsvcid, SPDK_NVMF_TRSVCID_MAX_LEN, "%s", "4420");
|
||||||
|
}
|
||||||
|
|
||||||
static struct spdk_nvme_ctrlr *
|
static struct spdk_nvme_ctrlr *
|
||||||
ut_attach_ctrlr(const struct spdk_nvme_transport_id *trid, uint32_t num_ns)
|
ut_attach_ctrlr(const struct spdk_nvme_transport_id *trid, uint32_t num_ns)
|
||||||
{
|
{
|
||||||
@ -1645,6 +1654,71 @@ test_submit_nvme_cmd(void)
|
|||||||
ut_detach_ctrlr(ctrlr);
|
ut_detach_ctrlr(ctrlr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_remove_trid(void)
|
||||||
|
{
|
||||||
|
struct spdk_nvme_transport_id trid1 = {}, trid2 = {}, trid3 = {};
|
||||||
|
struct spdk_nvme_ctrlr ctrlr = {};
|
||||||
|
struct nvme_bdev_ctrlr *nvme_bdev_ctrlr = NULL;
|
||||||
|
struct nvme_bdev_ctrlr_trid *ctrid;
|
||||||
|
int rc;
|
||||||
|
|
||||||
|
ut_init_trid(&trid1);
|
||||||
|
ut_init_trid2(&trid2);
|
||||||
|
ut_init_trid3(&trid3);
|
||||||
|
|
||||||
|
set_thread(0);
|
||||||
|
|
||||||
|
rc = nvme_bdev_ctrlr_create(&ctrlr, "nvme0", &trid1, 0, &nvme_bdev_ctrlr);
|
||||||
|
CU_ASSERT(rc == 0);
|
||||||
|
SPDK_CU_ASSERT_FATAL(nvme_bdev_ctrlr != NULL);
|
||||||
|
|
||||||
|
rc = bdev_nvme_add_trid(nvme_bdev_ctrlr, &ctrlr, &trid2);
|
||||||
|
CU_ASSERT(rc == 0);
|
||||||
|
|
||||||
|
/* trid3 is not in the registered list. */
|
||||||
|
rc = bdev_nvme_remove_trid("nvme0", &trid3);
|
||||||
|
CU_ASSERT(rc == -ENXIO);
|
||||||
|
|
||||||
|
/* trid2 is not used, and simply removed. */
|
||||||
|
rc = bdev_nvme_remove_trid("nvme0", &trid2);
|
||||||
|
CU_ASSERT(rc == 0);
|
||||||
|
CU_ASSERT(nvme_bdev_ctrlr_get_by_name("nvme0") == nvme_bdev_ctrlr);
|
||||||
|
TAILQ_FOREACH(ctrid, &nvme_bdev_ctrlr->trids, link) {
|
||||||
|
CU_ASSERT(spdk_nvme_transport_id_compare(&ctrid->trid, &trid2) != 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
rc = bdev_nvme_add_trid(nvme_bdev_ctrlr, &ctrlr, &trid3);
|
||||||
|
CU_ASSERT(rc == 0);
|
||||||
|
|
||||||
|
/* trid1 is currently used and trid3 is an alternative path.
|
||||||
|
* If we remove trid1, path is changed to trid3.
|
||||||
|
*/
|
||||||
|
rc = bdev_nvme_remove_trid("nvme0", &trid1);
|
||||||
|
CU_ASSERT(rc == 0);
|
||||||
|
CU_ASSERT(nvme_bdev_ctrlr_get_by_name("nvme0") == nvme_bdev_ctrlr);
|
||||||
|
CU_ASSERT(nvme_bdev_ctrlr->resetting == true);
|
||||||
|
TAILQ_FOREACH(ctrid, &nvme_bdev_ctrlr->trids, link) {
|
||||||
|
CU_ASSERT(spdk_nvme_transport_id_compare(&ctrid->trid, &trid1) != 0);
|
||||||
|
}
|
||||||
|
CU_ASSERT(spdk_nvme_transport_id_compare(nvme_bdev_ctrlr->connected_trid, &trid3) == 0);
|
||||||
|
|
||||||
|
poll_threads();
|
||||||
|
|
||||||
|
CU_ASSERT(nvme_bdev_ctrlr->resetting == false);
|
||||||
|
|
||||||
|
/* trid3 is the current and only path. If we remove trid3, the corresponding
|
||||||
|
* nvme_bdev_ctrlr is removed.
|
||||||
|
*/
|
||||||
|
rc = bdev_nvme_remove_trid("nvme0", &trid3);
|
||||||
|
CU_ASSERT(rc == 0);
|
||||||
|
CU_ASSERT(nvme_bdev_ctrlr_get_by_name("nvme0") == nvme_bdev_ctrlr);
|
||||||
|
|
||||||
|
poll_threads();
|
||||||
|
|
||||||
|
CU_ASSERT(nvme_bdev_ctrlr_get_by_name("nvme0") == NULL);
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
main(int argc, const char **argv)
|
main(int argc, const char **argv)
|
||||||
{
|
{
|
||||||
@ -1665,6 +1739,7 @@ main(int argc, const char **argv)
|
|||||||
CU_ADD_TEST(suite, test_reconnect_qpair);
|
CU_ADD_TEST(suite, test_reconnect_qpair);
|
||||||
CU_ADD_TEST(suite, test_aer_cb);
|
CU_ADD_TEST(suite, test_aer_cb);
|
||||||
CU_ADD_TEST(suite, test_submit_nvme_cmd);
|
CU_ADD_TEST(suite, test_submit_nvme_cmd);
|
||||||
|
CU_ADD_TEST(suite, test_remove_trid);
|
||||||
|
|
||||||
CU_basic_set_mode(CU_BRM_VERBOSE);
|
CU_basic_set_mode(CU_BRM_VERBOSE);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user