test/lib/nvmf/direct: test function direct_ctrlr_admin_identify_nslist

Change-Id: I3fc2c2c76ec6046120b6aa784659e5faedc24b1d
Signed-off-by: wenzhong wu <wenzhongx.wu@intel.com>
Reviewed-on: https://review.gerrithub.io/361887
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
This commit is contained in:
wenzhong wu 2017-05-20 08:20:51 +08:00 committed by Daniel Verkamp
parent ad50cc52fb
commit b5e9e92934

View File

@ -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)