Commit 001afcbd authored by ChengqiangMeng's avatar ChengqiangMeng Committed by Tomasz Zawadzki
Browse files

unittest/nvme_ns: increase code coverage for nvme_ns's several func



include test_nvme_ns_set_identify_data,
test_spdk_nvme_ns_get_values(Most functions that simply get values),
test_spdk_nvme_ns_is_active,
and spdk_nvme_ns_supports(Judge whether extended_lba and compare are supported).
The above func is completed.

Signed-off-by: default avatarChengqiangMeng <chengqiangx.meng@intel.com>
Change-Id: I916173a195692045ee0ee3fa408a1696e0eb5b1e
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/6511


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarChangpeng Liu <changpeng.liu@intel.com>
Reviewed-by: default avatarAleksey Marchuk <alexeymar@mellanox.com>
Reviewed-by: default avatarShuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Community-CI: Mellanox Build Bot
parent 22412af1
Loading
Loading
Loading
Loading
+162 −0
Original line number Diff line number Diff line
@@ -243,6 +243,164 @@ test_nvme_ns_data(void)
	CU_ASSERT(nsdata == spdk_nvme_ns_get_data(&ns));
}

static void
test_nvme_ns_set_identify_data(void)
{
	struct spdk_nvme_ns ns = {};
	struct spdk_nvme_ctrlr ctrlr = {};

	ns.id = 1;
	ns.ctrlr = &ctrlr;

	ns.ctrlr->cdata.oncs.dsm = 1;
	ns.ctrlr->cdata.oncs.compare = 1;
	ns.ctrlr->cdata.vwc.present = 1;
	ns.ctrlr->cdata.oncs.write_zeroes = 1;
	ns.ctrlr->cdata.oncs.write_unc = 1;
	ns.ctrlr->min_page_size = 1024;
	ns.ctrlr->max_xfer_size = 65536;

	ns.nsdata.flbas.extended = 1;
	ns.nsdata.nsrescap.raw = 1;
	ns.nsdata.dps.pit = SPDK_NVME_FMT_NVM_PROTECTION_TYPE1;
	ns.nsdata.flbas.format = 0;
	ns.nsdata.lbaf[0].lbads = 9;
	ns.nsdata.lbaf[0].ms = 512;

	/* case1:  nsdata->noiob > 0 */
	ns.nsdata.noiob = 1;
	nvme_ns_set_identify_data(&ns);
	CU_ASSERT(spdk_nvme_ns_get_optimal_io_boundary(&ns) == 1)

	CU_ASSERT(spdk_nvme_ns_get_sector_size(&ns) == 512);
	CU_ASSERT(spdk_nvme_ns_get_extended_sector_size(&ns) == 1024);
	CU_ASSERT(spdk_nvme_ns_get_md_size(&ns) == 512);
	CU_ASSERT(spdk_nvme_ns_get_max_io_xfer_size(&ns) == 65536);
	CU_ASSERT(ns.sectors_per_max_io == 64);
	CU_ASSERT(ns.sectors_per_max_io_no_md == 128);
	CU_ASSERT(spdk_nvme_ns_get_pi_type(&ns) == SPDK_NVME_FMT_NVM_PROTECTION_TYPE1);

	CU_ASSERT(spdk_nvme_ns_get_flags(&ns) & SPDK_NVME_NS_EXTENDED_LBA_SUPPORTED);
	CU_ASSERT(spdk_nvme_ns_get_flags(&ns) & SPDK_NVME_NS_RESERVATION_SUPPORTED);
	CU_ASSERT(spdk_nvme_ns_get_flags(&ns) & SPDK_NVME_NS_COMPARE_SUPPORTED);
	CU_ASSERT(spdk_nvme_ns_get_flags(&ns) & SPDK_NVME_NS_FLUSH_SUPPORTED);
	CU_ASSERT(spdk_nvme_ns_get_flags(&ns) & SPDK_NVME_NS_WRITE_ZEROES_SUPPORTED);
	CU_ASSERT(spdk_nvme_ns_get_flags(&ns) & SPDK_NVME_NS_WRITE_UNCORRECTABLE_SUPPORTED);
	CU_ASSERT(spdk_nvme_ns_get_flags(&ns) & SPDK_NVME_NS_RESERVATION_SUPPORTED);
	CU_ASSERT(spdk_nvme_ns_get_flags(&ns) & SPDK_NVME_NS_DPS_PI_SUPPORTED);
}

static void
test_spdk_nvme_ns_get_values(void)
{
	struct spdk_nvme_ns ns = {};
	struct spdk_nvme_ctrlr nsctrlr = {};

	ns.ctrlr = &nsctrlr;

	/* case1: spdk_nvme_ns_get_id */
	ns.id = 1;
	CU_ASSERT(spdk_nvme_ns_get_id(&ns) == 1);

	/* case2: spdk_nvme_ns_get_ctrlr */
	CU_ASSERT(spdk_nvme_ns_get_ctrlr(&ns) == &nsctrlr);

	/* case3: spdk_nvme_ns_get_max_io_xfer_size */
	ns.ctrlr->max_xfer_size = 65536;
	CU_ASSERT(spdk_nvme_ns_get_max_io_xfer_size(&ns) == 65536);

	/* case4: spdk_nvme_ns_get_sector_size */
	ns.sector_size = 512;
	CU_ASSERT(spdk_nvme_ns_get_sector_size(&ns) == 512);

	/* case5: spdk_nvme_ns_get_extended_sector_size */
	ns.extended_lba_size = 512;
	CU_ASSERT(spdk_nvme_ns_get_extended_sector_size(&ns) == 512);

	/* case6: spdk_nvme_ns_get_num_sectors */
	ns.nsdata.nsze = 1024;
	CU_ASSERT(spdk_nvme_ns_get_num_sectors(&ns) == 1024);

	/* case7: spdk_nvme_ns_get_size */
	CU_ASSERT(spdk_nvme_ns_get_size(&ns) == 524288);

	/* case8: spdk_nvme_ns_get_flags */
	ns.flags = 255;
	CU_ASSERT(spdk_nvme_ns_get_flags(&ns) == 255);

	/* case9: spdk_nvme_ns_get_pi_type */
	ns.pi_type = SPDK_NVME_FMT_NVM_PROTECTION_DISABLE;
	CU_ASSERT(spdk_nvme_ns_get_pi_type(&ns) == SPDK_NVME_FMT_NVM_PROTECTION_DISABLE);

	/* case10: spdk_nvme_ns_get_md_size */
	ns.md_size = 512;
	CU_ASSERT(spdk_nvme_ns_get_md_size(&ns) == 512);

	/* case11: spdk_nvme_ns_get_data */
	CU_ASSERT(spdk_nvme_ns_get_data(&ns) != NULL);

	/* case12: spdk_nvme_ns_get_optimal_io_boundary */
	ns.sectors_per_stripe = 1;
	CU_ASSERT(spdk_nvme_ns_get_optimal_io_boundary(&ns) == 1);

	/* case13: spdk_nvme_ns_get_dealloc_logical_block_read_value */
	ns.ctrlr->quirks = NVME_QUIRK_READ_ZERO_AFTER_DEALLOCATE | NVME_INTEL_QUIRK_WRITE_LATENCY;
	ns.nsdata.dlfeat.bits.read_value = SPDK_NVME_DEALLOC_NOT_REPORTED;
	CU_ASSERT(spdk_nvme_ns_get_dealloc_logical_block_read_value(&ns) == SPDK_NVME_DEALLOC_READ_00);

	ns.ctrlr->quirks = NVME_INTEL_QUIRK_READ_LATENCY;
	CU_ASSERT(spdk_nvme_ns_get_dealloc_logical_block_read_value(&ns) == SPDK_NVME_DEALLOC_NOT_REPORTED);

	/* case14: spdk_nvme_ns_get_csi */
	ns.csi = SPDK_NVME_CSI_NVM;
	CU_ASSERT(spdk_nvme_ns_get_csi(&ns) == SPDK_NVME_CSI_NVM);

	/* case15: spdk_nvme_ns_get_ana_group_id */
	ns.ana_group_id = 15;
	CU_ASSERT(spdk_nvme_ns_get_ana_group_id(&ns) == 15);

	/* case16: spdk_nvme_ns_get_ana_state */
	ns.ana_state = SPDK_NVME_ANA_OPTIMIZED_STATE;
	CU_ASSERT(spdk_nvme_ns_get_ana_state(&ns) == SPDK_NVME_ANA_OPTIMIZED_STATE);
}

static void
test_spdk_nvme_ns_is_active(void)
{
	struct spdk_nvme_ns ns = {};

	/* case1: nsdata->id == 0 return false */
	ns.id = 0;
	CU_ASSERT(spdk_nvme_ns_is_active(&ns) == false);

	/* case2: nsdata->ncap == 0 return false */
	ns.id = 1;
	ns.nsdata.ncap = 0;
	CU_ASSERT(spdk_nvme_ns_is_active(&ns) == false);

	/* case3: ns->ncap != 0 return true */
	ns.nsdata.ncap = 1;
	CU_ASSERT(spdk_nvme_ns_is_active(&ns) == true);
}

static void
spdk_nvme_ns_supports(void)
{
	struct spdk_nvme_ns ns = {};

	/* case1: spdk_nvme_ns_supports_extended_lba */
	ns.flags = SPDK_NVME_NS_DEALLOCATE_SUPPORTED;
	CU_ASSERT(spdk_nvme_ns_supports_extended_lba(&ns) == false);
	ns.flags = SPDK_NVME_NS_EXTENDED_LBA_SUPPORTED | SPDK_NVME_NS_DEALLOCATE_SUPPORTED;
	CU_ASSERT(spdk_nvme_ns_supports_extended_lba(&ns) == true);

	/* case2: spdk_nvme_ns_supports_compare */
	ns.flags = SPDK_NVME_NS_DEALLOCATE_SUPPORTED;
	CU_ASSERT(spdk_nvme_ns_supports_compare(&ns) == false);
	ns.flags = SPDK_NVME_NS_COMPARE_SUPPORTED | SPDK_NVME_NS_DEALLOCATE_SUPPORTED;
	CU_ASSERT(spdk_nvme_ns_supports_compare(&ns) == true);
}

int main(int argc, char **argv)
{
	CU_pSuite	suite = NULL;
@@ -257,6 +415,10 @@ int main(int argc, char **argv)
	CU_ADD_TEST(suite, test_nvme_ns_uuid);
	CU_ADD_TEST(suite, test_nvme_ns_csi);
	CU_ADD_TEST(suite, test_nvme_ns_data);
	CU_ADD_TEST(suite, test_nvme_ns_set_identify_data);
	CU_ADD_TEST(suite, test_spdk_nvme_ns_get_values);
	CU_ADD_TEST(suite, test_spdk_nvme_ns_is_active);
	CU_ADD_TEST(suite, spdk_nvme_ns_supports);

	CU_basic_set_mode(CU_BRM_VERBOSE);
	CU_basic_run_tests();