diff --git a/test/unit/lib/nvmf/direct.c/direct_ut.c b/test/unit/lib/nvmf/direct.c/direct_ut.c index b43b85a4f..adc2d9a29 100644 --- a/test/unit/lib/nvmf/direct.c/direct_ut.c +++ b/test/unit/lib/nvmf/direct.c/direct_ut.c @@ -45,6 +45,11 @@ spdk_env_get_current_core(void) return 0; } +struct spdk_nvme_ctrlr { + + uint32_t num_ns; +}; + void spdk_poller_register(struct spdk_poller **ppoller, spdk_poller_fn fn, void *arg, uint32_t lcore, uint64_t period_microseconds) @@ -73,7 +78,7 @@ spdk_trace_record(uint16_t tpoint_id, uint16_t poller_id, uint32_t size, uint64_ uint32_t spdk_nvme_ctrlr_get_num_ns(struct spdk_nvme_ctrlr *ctrlr) { - return 0; + return ctrlr->num_ns; } const struct spdk_nvme_ctrlr_data * @@ -107,7 +112,7 @@ struct spdk_nvme_ns *spdk_nvme_ctrlr_get_ns(struct spdk_nvme_ctrlr *ctrlr, uint3 bool spdk_nvme_ns_is_active(struct spdk_nvme_ns *ns) { - return false; + return true; } int @@ -206,6 +211,64 @@ spdk_nvmf_session_async_event_request(struct spdk_nvmf_request *req) static void nvmf_test_nvmf_direct_ctrlr_admin_identify_nslist(void) { + int ret; + union nvmf_h2c_msg cmd; + struct spdk_nvme_ns_list ns_list = {}; + struct spdk_nvme_ctrlr ctrlr = {}; + struct spdk_nvmf_request req = {}; + + req.length = 1; + req.data = &ns_list; + req.cmd = &cmd; + + /* set req_ns_id greater or equal to 0xfffffffeUL */ + req.cmd->nvme_cmd.nsid = 0xfffffffeUL; + ret = nvmf_direct_ctrlr_admin_identify_nslist(&ctrlr, &req); + CU_ASSERT(ret == -1); + + /* set req_ns_id is smaller than 0xfffffffeUL */ + ctrlr.num_ns = 0; + req.cmd->nvme_cmd.nsid = 0xfffffffdUL; + ret = nvmf_direct_ctrlr_admin_identify_nslist(&ctrlr, &req); + CU_ASSERT(ret == 0); + + /* set req_ns_id is 0 and num_ns is larger than ns_list Array size */ + req.cmd->nvme_cmd.nsid = 0; + ctrlr.num_ns = 0xffffffffUL; + ret = nvmf_direct_ctrlr_admin_identify_nslist(&ctrlr, &req); + CU_ASSERT(ret == 0); + CU_ASSERT(ns_list.ns_list[0] == 1); + CU_ASSERT(ns_list.ns_list[1023] == 1024); + + /* set req_ns_id is 0 and num_ns is smaller than ns_list Array size */ + memset(ns_list.ns_list, 0, sizeof(ns_list)); + req.cmd->nvme_cmd.nsid = 0; + ctrlr.num_ns = 100; + ret = nvmf_direct_ctrlr_admin_identify_nslist(&ctrlr, &req); + CU_ASSERT(ret == 0); + CU_ASSERT(ns_list.ns_list[0] == 1); + CU_ASSERT(ns_list.ns_list[99] == 100); + + /* set req_ns_id is non zero value and num_ns is larger than ns_list Array size */ + memset(ns_list.ns_list, 0, sizeof(ns_list)); + req.cmd->nvme_cmd.nsid = 8; + ctrlr.num_ns = 0xffffffffUL; + ret = nvmf_direct_ctrlr_admin_identify_nslist(&ctrlr, &req); + CU_ASSERT(ret == 0); + CU_ASSERT(ns_list.ns_list[0] == 9); + CU_ASSERT(ns_list.ns_list[1023] == 1032); + + /* set req_ns_id is non zero value and num_ns is smaller than ns_list Array size */ + memset(ns_list.ns_list, 0, sizeof(ns_list)); + req.cmd->nvme_cmd.nsid = 8; + ctrlr.num_ns = 100; + ret = nvmf_direct_ctrlr_admin_identify_nslist(&ctrlr, &req); + CU_ASSERT(ret == 0); + CU_ASSERT(ns_list.ns_list[0] == 9); + CU_ASSERT(ns_list.ns_list[91] == 100); + CU_ASSERT(ns_list.ns_list[92] == 0); + CU_ASSERT(ns_list.ns_list[1023] == 0); + } int main(int argc, char **argv)