From 4bd26da22fd2dcedad813dfcfcd2cfc7663e413f Mon Sep 17 00:00:00 2001 From: Changpeng Liu Date: Mon, 25 Jul 2022 14:29:19 +0800 Subject: [PATCH] UT/nvmf/subsystem: add subsystem state change UT cases Change-Id: Icdbb95694d8eb8aa495aeab89dd36523ff5a1470 Signed-off-by: Changpeng Liu Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/13772 Tested-by: SPDK CI Jenkins Reviewed-by: GangCao Reviewed-by: Aleksey Marchuk Reviewed-by: Jim Harris Reviewed-by: Dong Yi Community-CI: Broadcom CI Community-CI: Mellanox Build Bot --- test/unit/lib/nvmf/subsystem.c/subsystem_ut.c | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/test/unit/lib/nvmf/subsystem.c/subsystem_ut.c b/test/unit/lib/nvmf/subsystem.c/subsystem_ut.c index 288e06686..2c34396b3 100644 --- a/test/unit/lib/nvmf/subsystem.c/subsystem_ut.c +++ b/test/unit/lib/nvmf/subsystem.c/subsystem_ut.c @@ -1690,6 +1690,66 @@ test_nvmf_ns_reservation_restore(void) CU_ASSERT(rc == -EINVAL); } +static void +test_nvmf_subsystem_state_change(void) +{ + struct spdk_nvmf_tgt tgt = {}; + struct spdk_nvmf_subsystem *subsystem, *discovery_subsystem; + int rc; + + tgt.max_subsystems = 1024; + tgt.subsystems = calloc(tgt.max_subsystems, sizeof(struct spdk_nvmf_subsystem *)); + SPDK_CU_ASSERT_FATAL(tgt.subsystems != NULL); + + discovery_subsystem = spdk_nvmf_subsystem_create(&tgt, SPDK_NVMF_DISCOVERY_NQN, + SPDK_NVMF_SUBTYPE_DISCOVERY, 0); + SPDK_CU_ASSERT_FATAL(discovery_subsystem != NULL); + subsystem = spdk_nvmf_subsystem_create(&tgt, "nqn.2016-06.io.spdk:subsystem1", + SPDK_NVMF_SUBTYPE_NVME, 0); + SPDK_CU_ASSERT_FATAL(subsystem != NULL); + + spdk_io_device_register(&tgt, + nvmf_tgt_create_poll_group, + nvmf_tgt_destroy_poll_group, + sizeof(struct spdk_nvmf_poll_group), + NULL); + + rc = spdk_nvmf_subsystem_start(discovery_subsystem, NULL, NULL); + CU_ASSERT(rc == 0); + poll_threads(); + CU_ASSERT(discovery_subsystem->state == SPDK_NVMF_SUBSYSTEM_ACTIVE); + rc = spdk_nvmf_subsystem_start(subsystem, NULL, NULL); + CU_ASSERT(rc == 0); + poll_threads(); + CU_ASSERT(subsystem->state == SPDK_NVMF_SUBSYSTEM_ACTIVE); + + rc = spdk_nvmf_subsystem_pause(subsystem, SPDK_NVME_GLOBAL_NS_TAG, NULL, NULL); + CU_ASSERT(rc == 0); + rc = spdk_nvmf_subsystem_stop(subsystem, NULL, NULL); + CU_ASSERT(rc == -EBUSY); + poll_threads(); + CU_ASSERT(subsystem->state == SPDK_NVMF_SUBSYSTEM_PAUSED); + + rc = spdk_nvmf_subsystem_stop(discovery_subsystem, NULL, NULL); + CU_ASSERT(rc == 0); + poll_threads(); + CU_ASSERT(discovery_subsystem->state == SPDK_NVMF_SUBSYSTEM_INACTIVE); + rc = spdk_nvmf_subsystem_stop(subsystem, NULL, NULL); + CU_ASSERT(rc == 0); + poll_threads(); + CU_ASSERT(subsystem->state == SPDK_NVMF_SUBSYSTEM_INACTIVE); + + rc = spdk_nvmf_subsystem_destroy(subsystem, NULL, NULL); + CU_ASSERT(rc == 0); + rc = spdk_nvmf_subsystem_destroy(discovery_subsystem, NULL, NULL); + CU_ASSERT(rc == 0); + + spdk_io_device_unregister(&tgt, NULL); + poll_threads(); + + free(tgt.subsystems); +} + int main(int argc, char **argv) { @@ -1721,6 +1781,7 @@ main(int argc, char **argv) CU_ADD_TEST(suite, test_nvmf_ns_reservation_report); CU_ADD_TEST(suite, test_nvmf_valid_nqn); CU_ADD_TEST(suite, test_nvmf_ns_reservation_restore); + CU_ADD_TEST(suite, test_nvmf_subsystem_state_change); allocate_threads(1); set_thread(0);