vhost_ut: Add tests for spdk_vhost_vq_avail_ring_get
Change-Id: Iae7d5feef98eee59560042b64921acefafeb8da7 Signed-off-by: Seth Howell <seth.howell@intel.com> Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/453439 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com>
This commit is contained in:
parent
ca0cdbf269
commit
5904abae79
@ -349,6 +349,65 @@ remove_controller_test(void)
|
|||||||
cleanup_vdev(vdev);
|
cleanup_vdev(vdev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
vq_avail_ring_get_test(void)
|
||||||
|
{
|
||||||
|
struct spdk_vhost_virtqueue vq;
|
||||||
|
uint16_t avail_mem[34];
|
||||||
|
uint16_t reqs[32];
|
||||||
|
uint16_t reqs_len, ret, i;
|
||||||
|
|
||||||
|
/* Basic example reap all requests */
|
||||||
|
vq.vring.avail = (struct vring_avail *)avail_mem;
|
||||||
|
vq.vring.size = 32;
|
||||||
|
vq.last_avail_idx = 24;
|
||||||
|
vq.vring.avail->idx = 29;
|
||||||
|
reqs_len = 6;
|
||||||
|
|
||||||
|
for (i = 0; i < 32; i++) {
|
||||||
|
vq.vring.avail->ring[i] = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = spdk_vhost_vq_avail_ring_get(&vq, reqs, reqs_len);
|
||||||
|
CU_ASSERT(ret == 5);
|
||||||
|
CU_ASSERT(vq.last_avail_idx == 29);
|
||||||
|
for (i = 0; i < ret; i++) {
|
||||||
|
CU_ASSERT(reqs[i] == vq.vring.avail->ring[i + 24]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Basic example reap only some requests */
|
||||||
|
vq.last_avail_idx = 20;
|
||||||
|
vq.vring.avail->idx = 29;
|
||||||
|
reqs_len = 6;
|
||||||
|
|
||||||
|
ret = spdk_vhost_vq_avail_ring_get(&vq, reqs, reqs_len);
|
||||||
|
CU_ASSERT(ret == reqs_len);
|
||||||
|
CU_ASSERT(vq.last_avail_idx == 26);
|
||||||
|
for (i = 0; i < ret; i++) {
|
||||||
|
CU_ASSERT(reqs[i] == vq.vring.avail->ring[i + 20]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Test invalid example */
|
||||||
|
vq.last_avail_idx = 20;
|
||||||
|
vq.vring.avail->idx = 156;
|
||||||
|
reqs_len = 6;
|
||||||
|
|
||||||
|
ret = spdk_vhost_vq_avail_ring_get(&vq, reqs, reqs_len);
|
||||||
|
CU_ASSERT(ret == 0);
|
||||||
|
|
||||||
|
/* Test overflow in the avail->idx variable. */
|
||||||
|
vq.last_avail_idx = 65535;
|
||||||
|
vq.vring.avail->idx = 4;
|
||||||
|
reqs_len = 6;
|
||||||
|
ret = spdk_vhost_vq_avail_ring_get(&vq, reqs, reqs_len);
|
||||||
|
CU_ASSERT(ret == 5);
|
||||||
|
CU_ASSERT(vq.last_avail_idx == 4);
|
||||||
|
CU_ASSERT(reqs[0] == vq.vring.avail->ring[31])
|
||||||
|
for (i = 1; i < ret; i++) {
|
||||||
|
CU_ASSERT(reqs[i] == vq.vring.avail->ring[i - 1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
main(int argc, char **argv)
|
main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
@ -369,7 +428,8 @@ main(int argc, char **argv)
|
|||||||
CU_add_test(suite, "desc_to_iov", desc_to_iov_test) == NULL ||
|
CU_add_test(suite, "desc_to_iov", desc_to_iov_test) == NULL ||
|
||||||
CU_add_test(suite, "create_controller", create_controller_test) == NULL ||
|
CU_add_test(suite, "create_controller", create_controller_test) == NULL ||
|
||||||
CU_add_test(suite, "session_find_by_vid", session_find_by_vid_test) == NULL ||
|
CU_add_test(suite, "session_find_by_vid", session_find_by_vid_test) == NULL ||
|
||||||
CU_add_test(suite, "remove_controller", remove_controller_test) == NULL
|
CU_add_test(suite, "remove_controller", remove_controller_test) == NULL ||
|
||||||
|
CU_add_test(suite, "vq_avail_ring_get", vq_avail_ring_get_test) == NULL
|
||||||
) {
|
) {
|
||||||
CU_cleanup_registry();
|
CU_cleanup_registry();
|
||||||
return CU_get_error();
|
return CU_get_error();
|
||||||
|
Loading…
Reference in New Issue
Block a user