From b5e9e929344ce27b3988151cda49bab60151160e Mon Sep 17 00:00:00 2001 From: wenzhong wu Date: Sat, 20 May 2017 08:20:51 +0800 Subject: [PATCH] test/lib/nvmf/direct: test function direct_ctrlr_admin_identify_nslist Change-Id: I3fc2c2c76ec6046120b6aa784659e5faedc24b1d Signed-off-by: wenzhong wu Reviewed-on: https://review.gerrithub.io/361887 Tested-by: SPDK Automated Test System Reviewed-by: Daniel Verkamp --- test/unit/lib/nvmf/direct.c/direct_ut.c | 67 ++++++++++++++++++++++++- 1 file changed, 65 insertions(+), 2 deletions(-) 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)