From 4825fce4bfb5e845bef138b6556cee0a41cedc1a Mon Sep 17 00:00:00 2001 From: Mao Jiang Date: Thu, 11 Mar 2021 16:22:06 +0800 Subject: [PATCH] test/nvme_pcie: cases for building qpair metadata Change-Id: Ibab880df6f182439236c91e600d5bc6fc37f34d3 Signed-off-by: Mao Jiang Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/6836 Tested-by: SPDK CI Jenkins Reviewed-by: Aleksey Marchuk Reviewed-by: Changpeng Liu Community-CI: Mellanox Build Bot --- test/unit/lib/nvme/nvme_pcie.c/nvme_pcie_ut.c | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/test/unit/lib/nvme/nvme_pcie.c/nvme_pcie_ut.c b/test/unit/lib/nvme/nvme_pcie.c/nvme_pcie_ut.c index 3ab986fb7..e8f0454c2 100644 --- a/test/unit/lib/nvme/nvme_pcie.c/nvme_pcie_ut.c +++ b/test/unit/lib/nvme/nvme_pcie.c/nvme_pcie_ut.c @@ -477,6 +477,44 @@ test_build_contig_hw_sgl_request(void) memset(&tr, 0, sizeof(tr)); } +static void +test_nvme_pcie_qpair_build_metadata(void) +{ + struct spdk_nvme_qpair qpair = {}; + struct nvme_tracker tr = {}; + struct nvme_request req = {}; + struct spdk_nvme_ctrlr ctrlr = {}; + int rc; + + tr.req = &req; + qpair.ctrlr = &ctrlr; + + req.payload.md = (void *)0xDEADBEE0; + req.md_offset = 0; + req.md_size = 4096; + req.cmd.psdt = SPDK_NVME_PSDT_SGL_MPTR_CONTIG; + tr.prp_sgl_bus_addr = 0xDBADBEEF; + MOCK_SET(spdk_vtophys, 0xDCADBEE0); + + rc = nvme_pcie_qpair_build_metadata(&qpair, &tr, true, true); + CU_ASSERT(rc == 0); + CU_ASSERT(req.cmd.psdt = SPDK_NVME_PSDT_SGL_MPTR_SGL); + CU_ASSERT(tr.meta_sgl.address == 0xDCADBEE0); + CU_ASSERT(tr.meta_sgl.unkeyed.type == SPDK_NVME_SGL_TYPE_DATA_BLOCK); + CU_ASSERT(tr.meta_sgl.unkeyed.length == 4096); + CU_ASSERT(tr.meta_sgl.unkeyed.subtype == 0); + CU_ASSERT(req.cmd.mptr == (0xDBADBEEF - sizeof(struct spdk_nvme_sgl_descriptor))); + MOCK_CLEAR(spdk_vtophys); + + /* Build non sgl metadata */ + MOCK_SET(spdk_vtophys, 0xDDADBEE0); + + rc = nvme_pcie_qpair_build_metadata(&qpair, &tr, false, true); + CU_ASSERT(rc == 0); + CU_ASSERT(req.cmd.mptr == 0xDDADBEE0); + MOCK_CLEAR(spdk_vtophys); +} + int main(int argc, char **argv) { CU_pSuite suite = NULL; @@ -490,6 +528,7 @@ int main(int argc, char **argv) CU_ADD_TEST(suite, test_nvme_pcie_hotplug_monitor); CU_ADD_TEST(suite, test_shadow_doorbell_update); CU_ADD_TEST(suite, test_build_contig_hw_sgl_request); + CU_ADD_TEST(suite, test_nvme_pcie_qpair_build_metadata); CU_basic_set_mode(CU_BRM_VERBOSE); CU_basic_run_tests();