UT/nvmf_ctrlr:test for get/set features_host_behavior_support
Signed-off-by: xiaoxiangxzhang <xiaoxiangx.zhang@intel.com> Change-Id: I3b23d11d8dd2be6f260b5be6d92afe8116cbc0c8 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/12287 Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com> Community-CI: Mellanox Build Bot Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Aleksey Marchuk <alexeymar@nvidia.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: GangCao <gang.cao@intel.com>
This commit is contained in:
parent
1a14eb4e25
commit
acfd87ca96
@ -2765,6 +2765,133 @@ test_nvmf_property_set(void)
|
||||
CU_ASSERT(req.rsp->prop_get_rsp.value.u64 == 0xDDADBEEF);
|
||||
}
|
||||
|
||||
static void
|
||||
test_nvmf_ctrlr_get_features_host_behavior_support(void)
|
||||
{
|
||||
int rc;
|
||||
struct spdk_nvmf_request req = {};
|
||||
struct spdk_nvmf_qpair qpair = {};
|
||||
struct spdk_nvmf_ctrlr ctrlr = {};
|
||||
struct spdk_nvme_host_behavior *host_behavior;
|
||||
struct spdk_nvme_host_behavior behavior = {};
|
||||
union nvmf_h2c_msg cmd = {};
|
||||
union nvmf_c2h_msg rsp = {};
|
||||
|
||||
qpair.ctrlr = &ctrlr;
|
||||
req.qpair = &qpair;
|
||||
req.cmd = &cmd;
|
||||
req.rsp = &rsp;
|
||||
|
||||
/* Invalid data */
|
||||
req.data = NULL;
|
||||
req.length = sizeof(struct spdk_nvme_host_behavior);
|
||||
|
||||
rc = nvmf_ctrlr_get_features_host_behavior_support(&req);
|
||||
CU_ASSERT(rc == SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE);
|
||||
CU_ASSERT(req.rsp->nvme_cpl.status.sct == SPDK_NVME_SCT_GENERIC);
|
||||
CU_ASSERT(req.rsp->nvme_cpl.status.sc == SPDK_NVME_SC_INVALID_FIELD);
|
||||
CU_ASSERT(req.data == NULL);
|
||||
|
||||
/* Wrong structure length */
|
||||
req.data = &behavior;
|
||||
req.length = sizeof(struct spdk_nvme_host_behavior) - 1;
|
||||
|
||||
rc = nvmf_ctrlr_get_features_host_behavior_support(&req);
|
||||
CU_ASSERT(rc == SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE);
|
||||
CU_ASSERT(req.rsp->nvme_cpl.status.sct == SPDK_NVME_SCT_GENERIC);
|
||||
CU_ASSERT(req.rsp->nvme_cpl.status.sc == SPDK_NVME_SC_INVALID_FIELD);
|
||||
|
||||
/* Get Features Host Behavior Support Success */
|
||||
req.data = &behavior;
|
||||
req.length = sizeof(struct spdk_nvme_host_behavior);
|
||||
ctrlr.acre_enabled = true;
|
||||
host_behavior = (struct spdk_nvme_host_behavior *)req.data;
|
||||
host_behavior->acre = false;
|
||||
|
||||
rc = nvmf_ctrlr_get_features_host_behavior_support(&req);
|
||||
CU_ASSERT(rc == SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE);
|
||||
CU_ASSERT(host_behavior->acre == true);
|
||||
}
|
||||
|
||||
static void
|
||||
test_nvmf_ctrlr_set_features_host_behavior_support(void)
|
||||
{
|
||||
int rc;
|
||||
struct spdk_nvmf_request req = {};
|
||||
struct spdk_nvmf_qpair qpair = {};
|
||||
struct spdk_nvmf_ctrlr ctrlr = {};
|
||||
struct spdk_nvme_host_behavior host_behavior = {};
|
||||
union nvmf_h2c_msg cmd = {};
|
||||
union nvmf_c2h_msg rsp = {};
|
||||
|
||||
qpair.ctrlr = &ctrlr;
|
||||
req.qpair = &qpair;
|
||||
req.cmd = &cmd;
|
||||
req.rsp = &rsp;
|
||||
req.iov[0].iov_base = &host_behavior;
|
||||
req.iov[0].iov_len = sizeof(host_behavior);
|
||||
|
||||
/* Invalid iovcnt */
|
||||
req.iovcnt = 0;
|
||||
rc = SPDK_NVMF_REQUEST_EXEC_STATUS_ASYNCHRONOUS;
|
||||
req.rsp->nvme_cpl.status.sct = SPDK_NVME_SCT_GENERIC;
|
||||
req.rsp->nvme_cpl.status.sc = SPDK_NVME_SC_SUCCESS;
|
||||
|
||||
rc = nvmf_ctrlr_set_features_host_behavior_support(&req);
|
||||
CU_ASSERT(rc == SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE);
|
||||
CU_ASSERT(req.rsp->nvme_cpl.status.sct == SPDK_NVME_SCT_GENERIC);
|
||||
CU_ASSERT(req.rsp->nvme_cpl.status.sc == SPDK_NVME_SC_INVALID_FIELD);
|
||||
|
||||
/* Invalid iov_len */
|
||||
req.iovcnt = 1;
|
||||
req.iov[0].iov_len = 0;
|
||||
rc = SPDK_NVMF_REQUEST_EXEC_STATUS_ASYNCHRONOUS;
|
||||
req.rsp->nvme_cpl.status.sct = SPDK_NVME_SCT_GENERIC;
|
||||
req.rsp->nvme_cpl.status.sc = SPDK_NVME_SC_SUCCESS;
|
||||
|
||||
rc = nvmf_ctrlr_set_features_host_behavior_support(&req);
|
||||
CU_ASSERT(rc == SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE);
|
||||
CU_ASSERT(req.rsp->nvme_cpl.status.sct == SPDK_NVME_SCT_GENERIC);
|
||||
CU_ASSERT(req.rsp->nvme_cpl.status.sc == SPDK_NVME_SC_INVALID_FIELD);
|
||||
|
||||
/* acre is false */
|
||||
host_behavior.acre = 0;
|
||||
req.iov[0].iov_len = sizeof(struct spdk_nvme_host_behavior);
|
||||
rc = SPDK_NVMF_REQUEST_EXEC_STATUS_ASYNCHRONOUS;
|
||||
req.rsp->nvme_cpl.status.sct = SPDK_NVME_SCT_GENERIC;
|
||||
req.rsp->nvme_cpl.status.sc = SPDK_NVME_SC_SUCCESS;
|
||||
|
||||
rc = nvmf_ctrlr_set_features_host_behavior_support(&req);
|
||||
CU_ASSERT(rc == SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE);
|
||||
CU_ASSERT(req.rsp->nvme_cpl.status.sct == SPDK_NVME_SCT_GENERIC);
|
||||
CU_ASSERT(req.rsp->nvme_cpl.status.sc == SPDK_NVME_SC_SUCCESS);
|
||||
CU_ASSERT(ctrlr.acre_enabled == false);
|
||||
|
||||
/* acre is true */
|
||||
host_behavior.acre = 1;
|
||||
req.iov[0].iov_len = sizeof(struct spdk_nvme_host_behavior);
|
||||
rc = SPDK_NVMF_REQUEST_EXEC_STATUS_ASYNCHRONOUS;
|
||||
req.rsp->nvme_cpl.status.sct = SPDK_NVME_SCT_GENERIC;
|
||||
req.rsp->nvme_cpl.status.sc = SPDK_NVME_SC_SUCCESS;
|
||||
|
||||
rc = nvmf_ctrlr_set_features_host_behavior_support(&req);
|
||||
CU_ASSERT(rc == SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE);
|
||||
CU_ASSERT(req.rsp->nvme_cpl.status.sct == SPDK_NVME_SCT_GENERIC);
|
||||
CU_ASSERT(req.rsp->nvme_cpl.status.sc == SPDK_NVME_SC_SUCCESS);
|
||||
CU_ASSERT(ctrlr.acre_enabled == true);
|
||||
|
||||
/* Invalid acre */
|
||||
host_behavior.acre = 2;
|
||||
rc = SPDK_NVMF_REQUEST_EXEC_STATUS_ASYNCHRONOUS;
|
||||
req.rsp->nvme_cpl.status.sct = SPDK_NVME_SCT_GENERIC;
|
||||
req.rsp->nvme_cpl.status.sc = SPDK_NVME_SC_SUCCESS;
|
||||
|
||||
rc = nvmf_ctrlr_set_features_host_behavior_support(&req);
|
||||
CU_ASSERT(rc == SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE);
|
||||
CU_ASSERT(req.rsp->nvme_cpl.status.sct == SPDK_NVME_SCT_GENERIC);
|
||||
CU_ASSERT(req.rsp->nvme_cpl.status.sc == SPDK_NVME_SC_INVALID_FIELD);
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
CU_pSuite suite = NULL;
|
||||
@ -2800,6 +2927,8 @@ int main(int argc, char **argv)
|
||||
CU_ADD_TEST(suite, test_zcopy_read);
|
||||
CU_ADD_TEST(suite, test_zcopy_write);
|
||||
CU_ADD_TEST(suite, test_nvmf_property_set);
|
||||
CU_ADD_TEST(suite, test_nvmf_ctrlr_get_features_host_behavior_support);
|
||||
CU_ADD_TEST(suite, test_nvmf_ctrlr_set_features_host_behavior_support);
|
||||
|
||||
allocate_threads(1);
|
||||
set_thread(0);
|
||||
|
Loading…
Reference in New Issue
Block a user