diff --git a/test/unit/lib/nvme/nvme_ns.c/nvme_ns_ut.c b/test/unit/lib/nvme/nvme_ns.c/nvme_ns_ut.c index 7e646cc95..e39157709 100644 --- a/test/unit/lib/nvme/nvme_ns.c/nvme_ns_ut.c +++ b/test/unit/lib/nvme/nvme_ns.c/nvme_ns_ut.c @@ -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();