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:
xiaoxiangxzhang 2022-04-15 18:50:54 +08:00 committed by Tomasz Zawadzki
parent 1a14eb4e25
commit acfd87ca96

View File

@ -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);