From ef8dfe1111292bca774a8907a0fee43e9c7bb299 Mon Sep 17 00:00:00 2001 From: Ben Walker Date: Thu, 28 Jun 2018 12:53:34 -0700 Subject: [PATCH] test: Mock spdk_ring operations in test_env.c Change-Id: I1ef5cc1c58d536ccd6774c31cb633af494103e24 Signed-off-by: Ben Walker Reviewed-on: https://review.gerrithub.io/417361 Reviewed-by: Daniel Verkamp Reviewed-by: Changpeng Liu Reviewed-by: Shuhei Matsumoto Tested-by: SPDK Automated Test System --- test/common/lib/test_env.c | 73 ++++++++++++++++++++++++++++++++ test/unit/lib/vhost/test_vhost.c | 3 -- 2 files changed, 73 insertions(+), 3 deletions(-) diff --git a/test/common/lib/test_env.c b/test/common/lib/test_env.c index bc21c7178..4f0178c3f 100644 --- a/test/common/lib/test_env.c +++ b/test/common/lib/test_env.c @@ -36,6 +36,7 @@ #include "spdk_internal/mock.h" #include "spdk/env.h" +#include "spdk/queue.h" /* * NOTE: @@ -224,6 +225,78 @@ spdk_mempool_count(const struct spdk_mempool *_mp) } } +struct spdk_ring_ele { + void *ele; + TAILQ_ENTRY(spdk_ring_ele) link; +}; + +struct spdk_ring { + TAILQ_HEAD(, spdk_ring_ele) elements; +}; + +struct spdk_ring * +spdk_ring_create(enum spdk_ring_type type, size_t count, int socket_id) +{ + struct spdk_ring *ring; + + ring = calloc(1, sizeof(*ring)); + if (ring) { + TAILQ_INIT(&ring->elements); + } + + return ring; +} + + +void +spdk_ring_free(struct spdk_ring *ring) +{ + free(ring); +} + +size_t +spdk_ring_enqueue(struct spdk_ring *ring, void **objs, size_t count) +{ + struct spdk_ring_ele *ele; + size_t i; + + for (i = 0; i < count; i++) { + ele = calloc(1, sizeof(*ele)); + if (!ele) { + break; + } + + ele->ele = objs[i]; + TAILQ_INSERT_TAIL(&ring->elements, ele, link); + } + + return i; +} + +size_t +spdk_ring_dequeue(struct spdk_ring *ring, void **objs, size_t count) +{ + struct spdk_ring_ele *ele, *tmp; + size_t i = 0; + + if (count == 0) { + return 0; + } + + TAILQ_FOREACH_SAFE(ele, &ring->elements, link, tmp) { + TAILQ_REMOVE(&ring->elements, ele, link); + objs[i] = ele->ele; + free(ele); + i++; + if (i >= count) { + break; + } + } + + return i; + +} + uint64_t ut_tsc = 0; uint64_t spdk_get_ticks(void) { diff --git a/test/unit/lib/vhost/test_vhost.c b/test/unit/lib/vhost/test_vhost.c index 7579bfbd7..437e12301 100644 --- a/test/unit/lib/vhost/test_vhost.c +++ b/test/unit/lib/vhost/test_vhost.c @@ -47,8 +47,6 @@ struct spdk_conf_section { struct spdk_conf_item *item; }; -DEFINE_STUB(spdk_ring_enqueue, size_t, (struct spdk_ring *ring, void **objs, size_t count), 0); -DEFINE_STUB(spdk_ring_dequeue, size_t, (struct spdk_ring *ring, void **objs, size_t count), 0); DEFINE_STUB(spdk_vhost_vq_get_desc, int, (struct spdk_vhost_dev *vdev, struct spdk_vhost_virtqueue *vq, uint16_t req_idx, struct vring_desc **desc, struct vring_desc **desc_table, uint32_t *desc_table_size), 0); @@ -66,7 +64,6 @@ DEFINE_STUB(spdk_vhost_vq_used_signal, int, (struct spdk_vhost_dev *vdev, DEFINE_STUB_V(spdk_vhost_dev_used_signal, (struct spdk_vhost_dev *vdev)); DEFINE_STUB_V(spdk_vhost_dev_mem_register, (struct spdk_vhost_dev *vdev)); DEFINE_STUB_P(spdk_vhost_dev_find, struct spdk_vhost_dev, (const char *ctrlr_name), {0}); -DEFINE_STUB_V(spdk_ring_free, (struct spdk_ring *ring)); DEFINE_STUB_P(spdk_conf_first_section, struct spdk_conf_section, (struct spdk_conf *cp), {0}); DEFINE_STUB(spdk_conf_section_match_prefix, bool, (const struct spdk_conf_section *sp, const char *name_prefix), false);