Commit a4176588 authored by Mao Jiang's avatar Mao Jiang Committed by Tomasz Zawadzki
Browse files

test/nvme_ns: cases for identifying id descriptor and find descriptor



Change-Id: I20d0a798423ee08f4a9e019aa62b93981586d134
Signed-off-by: default avatarMao Jiang <maox.jiang@intel.com>
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/7161


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarAleksey Marchuk <alexeymar@mellanox.com>
Reviewed-by: default avatarChangpeng Liu <changpeng.liu@intel.com>
parent 5f106e26
Loading
Loading
Loading
Loading
+70 −0
Original line number Diff line number Diff line
@@ -63,11 +63,15 @@ static struct spdk_nvme_zns_ns_data nsdata_zns = {
	.mor = 1024,
};

struct spdk_nvme_cmd g_ut_cmd = {};

int
nvme_ctrlr_cmd_identify(struct spdk_nvme_ctrlr *ctrlr, uint8_t cns, uint16_t cntid, uint32_t nsid,
			uint8_t csi, void *payload, size_t payload_size,
			spdk_nvme_cmd_cb cb_fn, void *cb_arg)
{
	memset(&g_ut_cmd, 0, sizeof(g_ut_cmd));

	if (cns == SPDK_NVME_IDENTIFY_NS) {
		assert(payload_size == sizeof(struct spdk_nvme_ns_data));
		if (fake_nsdata) {
@@ -81,6 +85,12 @@ nvme_ctrlr_cmd_identify(struct spdk_nvme_ctrlr *ctrlr, uint8_t cns, uint16_t cnt
		assert(payload_size == sizeof(struct spdk_nvme_zns_ns_data));
		memcpy(payload, &nsdata_zns, sizeof(struct spdk_nvme_zns_ns_data));
		return 0;
	} else if (cns == SPDK_NVME_IDENTIFY_NS_ID_DESCRIPTOR_LIST) {
		g_ut_cmd.cdw10_bits.identify.cns = cns;
		g_ut_cmd.cdw10_bits.identify.cntid = cntid;
		g_ut_cmd.cdw11_bits.identify.csi = csi;
		g_ut_cmd.nsid = nsid;
		return 0;
	}
	return -1;
}
@@ -453,6 +463,64 @@ test_nvme_ctrlr_identify_ns_iocs_specific(void)
	CU_ASSERT(ns.nsdata_zns == NULL);
}

static void
test_nvme_ctrlr_identify_id_desc(void)
{
	struct spdk_nvme_ns ns = {};
	struct spdk_nvme_ctrlr ctrlr = {};
	int rc;

	ns.ctrlr = &ctrlr;
	ns.ctrlr->vs.raw = SPDK_NVME_VERSION(1, 3, 0);
	ns.ctrlr->cap.bits.css |= SPDK_NVME_CAP_CSS_IOCS;
	ns.id = 1;

	rc = nvme_ctrlr_identify_id_desc(&ns);
	CU_ASSERT(rc == 0);
	CU_ASSERT(g_ut_cmd.cdw10_bits.identify.cns == SPDK_NVME_IDENTIFY_NS_ID_DESCRIPTOR_LIST);
	CU_ASSERT(g_ut_cmd.cdw10_bits.identify.cntid == 0);
	CU_ASSERT(g_ut_cmd.cdw11_bits.identify.csi == spdk_nvme_ns_get_csi(&ns));
	CU_ASSERT(g_ut_cmd.nsid == 1);

	/* NVME version and css unsupported */
	ns.ctrlr->vs.raw = SPDK_NVME_VERSION(1, 2, 0);
	ns.ctrlr->cap.bits.css &= ~SPDK_NVME_CAP_CSS_IOCS;

	rc = nvme_ctrlr_identify_id_desc(&ns);
	CU_ASSERT(rc == 0);
}

static void
test_nvme_ns_find_id_desc(void)
{
	struct spdk_nvme_ns ns = {};
	struct spdk_nvme_ns_id_desc *desc = NULL;
	const uint8_t *csi = NULL;
	size_t length = 0;

	desc = (void *)ns.id_desc_list;
	desc->nidl = 4;
	desc->nidt = SPDK_NVME_NIDT_CSI;

	/* Case 1: get id descriptor successfully */
	csi = nvme_ns_find_id_desc(&ns, SPDK_NVME_NIDT_CSI, &length);
	CU_ASSERT(csi == desc->nid);
	CU_ASSERT(length == 4);

	/* Case 2: ns_id length invalid, expect fail */
	desc->nidl = 0;

	csi = nvme_ns_find_id_desc(&ns, SPDK_NVME_NIDT_CSI, &length);
	CU_ASSERT(csi == NULL);

	/* Case 3: No correct id descriptor type entry, expect fail */
	desc->nidl = 4;
	desc->nidt = SPDK_NVME_NIDT_CSI;

	csi = nvme_ns_find_id_desc(&ns, SPDK_NVME_NIDT_UUID, &length);
	CU_ASSERT(csi == NULL);
}

int main(int argc, char **argv)
{
	CU_pSuite	suite = NULL;
@@ -473,6 +541,8 @@ int main(int argc, char **argv)
	CU_ADD_TEST(suite, spdk_nvme_ns_supports);
	CU_ADD_TEST(suite, test_nvme_ns_has_supported_iocs_specific_data);
	CU_ADD_TEST(suite, test_nvme_ctrlr_identify_ns_iocs_specific);
	CU_ADD_TEST(suite, test_nvme_ctrlr_identify_id_desc);
	CU_ADD_TEST(suite, test_nvme_ns_find_id_desc);

	CU_basic_set_mode(CU_BRM_VERBOSE);
	CU_basic_run_tests();