spdk: Add ns cmd readv and writev unit test

Change-Id: I993daff2e5b729c72a96e030d380a5eb71bd41e3
Signed-off-by: Liang Yan <liangx.yan@intel.com>
This commit is contained in:
Liang Yan 2016-02-15 10:18:36 +08:00 committed by Daniel Verkamp
parent 3cbeaae6e9
commit ddc4e7d0d5

View File

@ -39,6 +39,16 @@ char outbuf[OUTBUF_SIZE];
struct nvme_request *g_request = NULL; struct nvme_request *g_request = NULL;
static void nvme_request_reset_sgl(void *cb_arg, uint32_t sgl_offset)
{
}
static int nvme_request_next_sge(void *cb_arg, uint64_t *address, uint32_t *length)
{
return 0;
}
uint64_t nvme_vtophys(void *buf) uint64_t nvme_vtophys(void *buf)
{ {
return (uintptr_t)buf; return (uintptr_t)buf;
@ -448,6 +458,65 @@ test_nvme_ns_cmd_deallocate(void)
CU_ASSERT(rc != 0); CU_ASSERT(rc != 0);
} }
static void
test_nvme_ns_cmd_readv(void)
{
struct spdk_nvme_ns ns;
struct spdk_nvme_ctrlr ctrlr;
int rc = 0;
void *cb_arg;
cb_arg = malloc(512);
prepare_for_test(&ns, &ctrlr, 512, 128 * 1024, 0);
rc = spdk_nvme_ns_cmd_readv(&ns, 0x1000, 256, NULL, cb_arg, 0, nvme_request_reset_sgl,
nvme_request_next_sge);
CU_ASSERT(rc == 0);
CU_ASSERT(g_request->cmd.opc == SPDK_NVME_OPC_READ);
CU_ASSERT(g_request->payload.type == NVME_PAYLOAD_TYPE_SGL);
CU_ASSERT(g_request->payload.u.sgl.reset_sgl_fn == nvme_request_reset_sgl);
CU_ASSERT(g_request->payload.u.sgl.next_sge_fn == nvme_request_next_sge);
CU_ASSERT(g_request->payload.u.sgl.cb_arg == cb_arg);
CU_ASSERT(g_request->cmd.nsid == ns.id);
rc = spdk_nvme_ns_cmd_readv(&ns, 0x1000, 256, NULL, cb_arg, 0, nvme_request_reset_sgl,
NULL);
CU_ASSERT(rc != 0);
free(cb_arg);
nvme_free_request(g_request);
}
static void
test_nvme_ns_cmd_writev(void)
{
struct spdk_nvme_ns ns;
struct spdk_nvme_ctrlr ctrlr;
int rc = 0;
void *cb_arg;
cb_arg = malloc(512);
prepare_for_test(&ns, &ctrlr, 512, 128 * 1024, 0);
rc = spdk_nvme_ns_cmd_writev(&ns, 0x1000, 256, NULL, cb_arg, 0,
nvme_request_reset_sgl,
nvme_request_next_sge);
CU_ASSERT(rc == 0);
CU_ASSERT(g_request->cmd.opc == SPDK_NVME_OPC_WRITE);
CU_ASSERT(g_request->payload.type == NVME_PAYLOAD_TYPE_SGL);
CU_ASSERT(g_request->payload.u.sgl.reset_sgl_fn == nvme_request_reset_sgl);
CU_ASSERT(g_request->payload.u.sgl.next_sge_fn == nvme_request_next_sge);
CU_ASSERT(g_request->payload.u.sgl.cb_arg == cb_arg);
CU_ASSERT(g_request->cmd.nsid == ns.id);
rc = spdk_nvme_ns_cmd_writev(&ns, 0x1000, 256, NULL, cb_arg, 0,
NULL, nvme_request_next_sge);
CU_ASSERT(rc != 0);
free(cb_arg);
nvme_free_request(g_request);
}
static void static void
test_io_flags(void) test_io_flags(void)
{ {
@ -643,6 +712,8 @@ int main(int argc, char **argv)
test_nvme_ns_cmd_reservation_acquire) == NULL test_nvme_ns_cmd_reservation_acquire) == NULL
|| CU_add_test(suite, "nvme_ns_cmd_reservation_report", test_nvme_ns_cmd_reservation_report) == NULL || CU_add_test(suite, "nvme_ns_cmd_reservation_report", test_nvme_ns_cmd_reservation_report) == NULL
|| CU_add_test(suite, "test_cmd_child_request", test_cmd_child_request) == NULL || CU_add_test(suite, "test_cmd_child_request", test_cmd_child_request) == NULL
|| CU_add_test(suite, "nvme_ns_cmd_readv", test_nvme_ns_cmd_readv) == NULL
|| CU_add_test(suite, "nvme_ns_cmd_writev", test_nvme_ns_cmd_writev) == NULL
) { ) {
CU_cleanup_registry(); CU_cleanup_registry();
return CU_get_error(); return CU_get_error();