unittest/nvme_ctrlr: increase code coverage for nvme_ctrlr_identify_namespaces_iocs_specific_next
nvme_ctrlr_identify_namespaces_iocs_specific_next code comprehensive coverage. Signed-off-by: ChengqiangMeng <chengqiangx.meng@intel.com> Change-Id: Icf039e15a983b04fcd1b558559ba651e495a6cd1 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/8006 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Changpeng Liu <changpeng.liu@intel.com> Reviewed-by: Aleksey Marchuk <alexeymar@mellanox.com> Community-CI: Mellanox Build Bot
This commit is contained in:
parent
fcc389490a
commit
f90eaf1672
@ -67,9 +67,7 @@ DEFINE_STUB(nvme_ctrlr_cmd_set_host_id, int,
|
|||||||
spdk_nvme_cmd_cb cb_fn, void *cb_arg), 0);
|
spdk_nvme_cmd_cb cb_fn, void *cb_arg), 0);
|
||||||
DEFINE_STUB_V(nvme_ns_set_identify_data, (struct spdk_nvme_ns *ns));
|
DEFINE_STUB_V(nvme_ns_set_identify_data, (struct spdk_nvme_ns *ns));
|
||||||
DEFINE_STUB_V(nvme_ns_set_id_desc_list_data, (struct spdk_nvme_ns *ns));
|
DEFINE_STUB_V(nvme_ns_set_id_desc_list_data, (struct spdk_nvme_ns *ns));
|
||||||
DEFINE_STUB_V(nvme_ns_free_zns_specific_data, (struct spdk_nvme_ns *ns));
|
|
||||||
DEFINE_STUB_V(nvme_ns_free_iocs_specific_data, (struct spdk_nvme_ns *ns));
|
DEFINE_STUB_V(nvme_ns_free_iocs_specific_data, (struct spdk_nvme_ns *ns));
|
||||||
DEFINE_STUB(nvme_ns_has_supported_iocs_specific_data, bool, (struct spdk_nvme_ns *ns), false);
|
|
||||||
DEFINE_STUB_V(nvme_qpair_abort_reqs, (struct spdk_nvme_qpair *qpair, uint32_t dnr));
|
DEFINE_STUB_V(nvme_qpair_abort_reqs, (struct spdk_nvme_qpair *qpair, uint32_t dnr));
|
||||||
DEFINE_STUB(spdk_nvme_poll_group_remove, int, (struct spdk_nvme_poll_group *group,
|
DEFINE_STUB(spdk_nvme_poll_group_remove, int, (struct spdk_nvme_poll_group *group,
|
||||||
struct spdk_nvme_qpair *qpair), 0);
|
struct spdk_nvme_qpair *qpair), 0);
|
||||||
@ -438,6 +436,10 @@ nvme_ctrlr_cmd_identify(struct spdk_nvme_ctrlr *ctrlr, uint8_t cns, uint16_t cnt
|
|||||||
if (g_cdata) {
|
if (g_cdata) {
|
||||||
memcpy(payload, g_cdata, sizeof(*g_cdata));
|
memcpy(payload, g_cdata, sizeof(*g_cdata));
|
||||||
}
|
}
|
||||||
|
} else if (nsid == 99) {
|
||||||
|
return 1;
|
||||||
|
} else if (cns == SPDK_NVME_IDENTIFY_NS_IOCS) {
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
fake_cpl_sc(cb_fn, cb_arg);
|
fake_cpl_sc(cb_fn, cb_arg);
|
||||||
@ -541,6 +543,37 @@ nvme_ctrlr_cmd_fw_image_download(struct spdk_nvme_ctrlr *ctrlr,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
nvme_ns_has_supported_iocs_specific_data(struct spdk_nvme_ns *ns)
|
||||||
|
{
|
||||||
|
switch (ns->csi) {
|
||||||
|
case SPDK_NVME_CSI_NVM:
|
||||||
|
/*
|
||||||
|
* NVM Command Set Specific Identify Namespace data structure
|
||||||
|
* is currently all-zeroes, reserved for future use.
|
||||||
|
*/
|
||||||
|
return false;
|
||||||
|
case SPDK_NVME_CSI_ZNS:
|
||||||
|
return true;
|
||||||
|
default:
|
||||||
|
SPDK_WARNLOG("Unsupported CSI: %u for NSID: %u\n", ns->csi, ns->id);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
nvme_ns_free_zns_specific_data(struct spdk_nvme_ns *ns)
|
||||||
|
{
|
||||||
|
if (!ns->id) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ns->nsdata_zns) {
|
||||||
|
spdk_free(ns->nsdata_zns);
|
||||||
|
ns->nsdata_zns = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
nvme_ns_destruct(struct spdk_nvme_ns *ns)
|
nvme_ns_destruct(struct spdk_nvme_ns *ns)
|
||||||
{
|
{
|
||||||
@ -2835,6 +2868,80 @@ test_nvme_ctrlr_ns_attr_changed(void)
|
|||||||
nvme_ctrlr_destruct(&ctrlr);
|
nvme_ctrlr_destruct(&ctrlr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_nvme_ctrlr_identify_namespaces_iocs_specific_next(void)
|
||||||
|
{
|
||||||
|
struct spdk_nvme_ctrlr ctrlr = {};
|
||||||
|
uint32_t prev_nsid;
|
||||||
|
uint32_t active_ns_list[5] = {1, 2, 3, 4, 5};
|
||||||
|
struct spdk_nvme_ns ns[5] = {};
|
||||||
|
struct spdk_nvme_ctrlr ns_ctrlr[5] = {};
|
||||||
|
int rc = 0;
|
||||||
|
|
||||||
|
ctrlr.ns = ns;
|
||||||
|
ctrlr.cdata.nn = 5;
|
||||||
|
ctrlr.max_active_ns_idx = 5;
|
||||||
|
ctrlr.num_ns = 5;
|
||||||
|
/* case 1: No first/next active NS, move on to the next state, expect: pass */
|
||||||
|
prev_nsid = 0;
|
||||||
|
ctrlr.active_ns_list = NULL;
|
||||||
|
ctrlr.opts.admin_timeout_ms = NVME_TIMEOUT_INFINITE;
|
||||||
|
rc = nvme_ctrlr_identify_namespaces_iocs_specific_next(&ctrlr, prev_nsid);
|
||||||
|
CU_ASSERT(rc == 0);
|
||||||
|
CU_ASSERT(ctrlr.state == NVME_CTRLR_STATE_CONFIGURE_AER);
|
||||||
|
CU_ASSERT(ctrlr.state_timeout_tsc == NVME_TIMEOUT_INFINITE);
|
||||||
|
|
||||||
|
/* case 2: move on to the next active NS, and no namespace with (supported) iocs specific data found , expect: pass */
|
||||||
|
memset(&ctrlr.state, 0x00, sizeof(ctrlr.state));
|
||||||
|
memset(&ctrlr.state_timeout_tsc, 0x00, sizeof(ctrlr.state_timeout_tsc));
|
||||||
|
prev_nsid = 1;
|
||||||
|
ctrlr.active_ns_list = active_ns_list;
|
||||||
|
ns[1].csi = SPDK_NVME_CSI_NVM;
|
||||||
|
ns[1].id = 2;
|
||||||
|
rc = nvme_ctrlr_identify_namespaces_iocs_specific_next(&ctrlr, prev_nsid);
|
||||||
|
CU_ASSERT(rc == 0);
|
||||||
|
CU_ASSERT(ctrlr.state == NVME_CTRLR_STATE_CONFIGURE_AER);
|
||||||
|
CU_ASSERT(ctrlr.state_timeout_tsc == NVME_TIMEOUT_INFINITE);
|
||||||
|
|
||||||
|
/* case 3: ns.csi is SPDK_NVME_CSI_ZNS, do not loop, expect: pass */
|
||||||
|
memset(&ctrlr.state, 0x00, sizeof(ctrlr.state));
|
||||||
|
memset(&ctrlr.state_timeout_tsc, 0x00, sizeof(ctrlr.state_timeout_tsc));
|
||||||
|
ctrlr.opts.admin_timeout_ms = NVME_TIMEOUT_INFINITE;
|
||||||
|
prev_nsid = 0;
|
||||||
|
ctrlr.active_ns_list = active_ns_list;
|
||||||
|
|
||||||
|
for (int i = 0; i < 5; i++) {
|
||||||
|
ns[i].csi = SPDK_NVME_CSI_NVM;
|
||||||
|
ns[i].id = i + 1;
|
||||||
|
ns[i].ctrlr = &ns_ctrlr[i];
|
||||||
|
}
|
||||||
|
ns[4].csi = SPDK_NVME_CSI_ZNS;
|
||||||
|
ns_ctrlr[4].opts.admin_timeout_ms = NVME_TIMEOUT_INFINITE;
|
||||||
|
|
||||||
|
rc = nvme_ctrlr_identify_namespaces_iocs_specific_next(&ctrlr, prev_nsid);
|
||||||
|
CU_ASSERT(rc == 0);
|
||||||
|
CU_ASSERT(ctrlr.state == 0);
|
||||||
|
CU_ASSERT(ctrlr.state_timeout_tsc == NVME_TIMEOUT_INFINITE);
|
||||||
|
CU_ASSERT(ns_ctrlr[4].state == NVME_CTRLR_STATE_WAIT_FOR_IDENTIFY_NS_IOCS_SPECIFIC);
|
||||||
|
CU_ASSERT(ns_ctrlr[4].state_timeout_tsc == NVME_TIMEOUT_INFINITE);
|
||||||
|
|
||||||
|
for (int i = 0; i < 5; i++) {
|
||||||
|
nvme_ns_free_zns_specific_data(&ns[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* case 4: nvme_ctrlr_identify_ns_iocs_specific_async return 1, expect: false */
|
||||||
|
memset(&ctrlr.state, 0x00, sizeof(ctrlr.state));
|
||||||
|
memset(&ctrlr.state_timeout_tsc, 0x00, sizeof(ctrlr.state_timeout_tsc));
|
||||||
|
prev_nsid = 1;
|
||||||
|
ctrlr.active_ns_list = active_ns_list;
|
||||||
|
ns[1].csi = SPDK_NVME_CSI_ZNS;
|
||||||
|
ns[1].id = 99;
|
||||||
|
rc = nvme_ctrlr_identify_namespaces_iocs_specific_next(&ctrlr, prev_nsid);
|
||||||
|
CU_ASSERT(rc == 1);
|
||||||
|
CU_ASSERT(ctrlr.state == NVME_CTRLR_STATE_ERROR);
|
||||||
|
CU_ASSERT(ctrlr.state_timeout_tsc == NVME_TIMEOUT_INFINITE);
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
CU_pSuite suite = NULL;
|
CU_pSuite suite = NULL;
|
||||||
@ -2885,6 +2992,7 @@ int main(int argc, char **argv)
|
|||||||
CU_ADD_TEST(suite, test_nvme_ctrlr_reset);
|
CU_ADD_TEST(suite, test_nvme_ctrlr_reset);
|
||||||
CU_ADD_TEST(suite, test_nvme_ctrlr_aer_callback);
|
CU_ADD_TEST(suite, test_nvme_ctrlr_aer_callback);
|
||||||
CU_ADD_TEST(suite, test_nvme_ctrlr_ns_attr_changed);
|
CU_ADD_TEST(suite, test_nvme_ctrlr_ns_attr_changed);
|
||||||
|
CU_ADD_TEST(suite, test_nvme_ctrlr_identify_namespaces_iocs_specific_next);
|
||||||
|
|
||||||
CU_basic_set_mode(CU_BRM_VERBOSE);
|
CU_basic_set_mode(CU_BRM_VERBOSE);
|
||||||
CU_basic_run_tests();
|
CU_basic_run_tests();
|
||||||
|
Loading…
Reference in New Issue
Block a user