unit/nvmf: fused compare and write
Change-Id: Iad60e3d53a9f6b0a6f71b95d66b57d6852d90cb2 Signed-off-by: Tomasz Kulasek <tomaszx.kulasek@intel.com> Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/481406 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Community-CI: Broadcom SPDK FC-NVMe CI <spdk-ci.pdl@broadcom.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
This commit is contained in:
parent
34bac0bad6
commit
98bbb72dc2
@ -1420,6 +1420,100 @@ test_custom_admin_cmd(void)
|
||||
CU_ASSERT(rsp.nvme_cpl.status.sc == SPDK_NVME_SC_SUCCESS);
|
||||
}
|
||||
|
||||
static void
|
||||
test_fused_compare_and_write(void)
|
||||
{
|
||||
struct spdk_nvmf_request req;
|
||||
struct spdk_nvmf_qpair qpair;
|
||||
struct spdk_nvme_cmd cmd;
|
||||
union nvmf_c2h_msg rsp;
|
||||
struct spdk_nvmf_ctrlr ctrlr;
|
||||
struct spdk_nvmf_subsystem subsystem;
|
||||
struct spdk_nvmf_ns ns;
|
||||
struct spdk_nvmf_ns *subsys_ns[1];
|
||||
struct spdk_bdev bdev;
|
||||
|
||||
struct spdk_nvmf_poll_group group;
|
||||
struct spdk_nvmf_subsystem_poll_group sgroups;
|
||||
struct spdk_nvmf_subsystem_pg_ns_info ns_info;
|
||||
|
||||
ns.bdev = &bdev;
|
||||
|
||||
subsystem.id = 0;
|
||||
subsystem.max_nsid = 1;
|
||||
subsys_ns[0] = &ns;
|
||||
subsystem.ns = (struct spdk_nvmf_ns **)&subsys_ns;
|
||||
|
||||
/* Enable controller */
|
||||
ctrlr.vcprop.cc.bits.en = 1;
|
||||
ctrlr.subsys = (struct spdk_nvmf_subsystem *)&subsystem;
|
||||
|
||||
group.num_sgroups = 1;
|
||||
sgroups.state = SPDK_NVMF_SUBSYSTEM_ACTIVE;
|
||||
sgroups.num_ns = 1;
|
||||
sgroups.ns_info = &ns_info;
|
||||
TAILQ_INIT(&sgroups.queued);
|
||||
group.sgroups = &sgroups;
|
||||
TAILQ_INIT(&qpair.outstanding);
|
||||
|
||||
qpair.ctrlr = &ctrlr;
|
||||
qpair.group = &group;
|
||||
qpair.qid = 1;
|
||||
qpair.state = SPDK_NVMF_QPAIR_ACTIVE;
|
||||
|
||||
cmd.nsid = 1;
|
||||
|
||||
req.qpair = &qpair;
|
||||
req.cmd = (union nvmf_h2c_msg *)&cmd;
|
||||
req.rsp = &rsp;
|
||||
|
||||
/* SUCCESS/SUCCESS */
|
||||
cmd.fuse = SPDK_NVME_CMD_FUSE_FIRST;
|
||||
cmd.opc = SPDK_NVME_OPC_COMPARE;
|
||||
|
||||
spdk_nvmf_request_exec(&req);
|
||||
CU_ASSERT(qpair.first_fused_req != NULL);
|
||||
CU_ASSERT(nvme_status_success(&rsp.nvme_cpl.status));
|
||||
|
||||
cmd.fuse = SPDK_NVME_CMD_FUSE_SECOND;
|
||||
cmd.opc = SPDK_NVME_OPC_WRITE;
|
||||
|
||||
spdk_nvmf_request_exec(&req);
|
||||
CU_ASSERT(qpair.first_fused_req == NULL);
|
||||
CU_ASSERT(nvme_status_success(&rsp.nvme_cpl.status));
|
||||
|
||||
/* Wrong sequence */
|
||||
cmd.fuse = SPDK_NVME_CMD_FUSE_SECOND;
|
||||
cmd.opc = SPDK_NVME_OPC_WRITE;
|
||||
|
||||
spdk_nvmf_request_exec(&req);
|
||||
CU_ASSERT(!nvme_status_success(&rsp.nvme_cpl.status));
|
||||
CU_ASSERT(qpair.first_fused_req == NULL);
|
||||
|
||||
/* Write as FUSE_FIRST (Wrong op code) */
|
||||
cmd.fuse = SPDK_NVME_CMD_FUSE_FIRST;
|
||||
cmd.opc = SPDK_NVME_OPC_WRITE;
|
||||
|
||||
spdk_nvmf_request_exec(&req);
|
||||
CU_ASSERT(rsp.nvme_cpl.status.sc == SPDK_NVME_SC_INVALID_OPCODE);
|
||||
CU_ASSERT(qpair.first_fused_req == NULL);
|
||||
|
||||
/* Compare as FUSE_SECOND (Wrong op code) */
|
||||
cmd.fuse = SPDK_NVME_CMD_FUSE_FIRST;
|
||||
cmd.opc = SPDK_NVME_OPC_COMPARE;
|
||||
|
||||
spdk_nvmf_request_exec(&req);
|
||||
CU_ASSERT(qpair.first_fused_req != NULL);
|
||||
CU_ASSERT(nvme_status_success(&rsp.nvme_cpl.status));
|
||||
|
||||
cmd.fuse = SPDK_NVME_CMD_FUSE_SECOND;
|
||||
cmd.opc = SPDK_NVME_OPC_COMPARE;
|
||||
|
||||
spdk_nvmf_request_exec(&req);
|
||||
CU_ASSERT(rsp.nvme_cpl.status.sc == SPDK_NVME_SC_INVALID_OPCODE);
|
||||
CU_ASSERT(qpair.first_fused_req == NULL);
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
CU_pSuite suite = NULL;
|
||||
@ -1451,7 +1545,8 @@ int main(int argc, char **argv)
|
||||
CU_add_test(suite, "get_dif_ctx", test_get_dif_ctx) == NULL ||
|
||||
CU_add_test(suite, "set_get_features", test_set_get_features) == NULL ||
|
||||
CU_add_test(suite, "identify_ctrlr", test_identify_ctrlr) == NULL ||
|
||||
CU_add_test(suite, "custom_admin_cmd", test_custom_admin_cmd) == NULL) {
|
||||
CU_add_test(suite, "custom_admin_cmd", test_custom_admin_cmd) == NULL ||
|
||||
CU_add_test(suite, "fused_compare_and_write", test_fused_compare_and_write) == NULL) {
|
||||
CU_cleanup_registry();
|
||||
return CU_get_error();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user