2022-06-15 09:54:12 +00:00
|
|
|
/* SPDX-License-Identifier: BSD-3-Clause
|
2022-11-01 20:26:26 +00:00
|
|
|
* Copyright (C) 2022 Intel Corporation.
|
2022-06-15 09:54:12 +00:00
|
|
|
* All rights reserved.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "spdk/stdinc.h"
|
|
|
|
|
|
|
|
#include "spdk_cunit.h"
|
|
|
|
#include "common/lib/test_env.c"
|
|
|
|
|
|
|
|
#include "ftl/utils/ftl_mempool.c"
|
|
|
|
|
|
|
|
#define COUNT 16
|
|
|
|
#define ALIGNMENT 64
|
|
|
|
#define SIZE (ALIGNMENT * 2)
|
|
|
|
#define SOCKET_ID_ANY -1
|
|
|
|
|
2022-06-09 14:05:50 +00:00
|
|
|
DEFINE_STUB(ftl_bitmap_create, struct ftl_bitmap *, (void *buf, size_t size), NULL);
|
|
|
|
DEFINE_STUB_V(ftl_bitmap_destroy, (struct ftl_bitmap *bitmap));
|
|
|
|
DEFINE_STUB(ftl_bitmap_get, bool, (const struct ftl_bitmap *bitmap, uint64_t bit), true);
|
|
|
|
DEFINE_STUB_V(ftl_bitmap_set, (struct ftl_bitmap *bitmap, uint64_t bit));
|
|
|
|
DEFINE_STUB_V(ftl_bitmap_clear, (struct ftl_bitmap *bitmap, uint64_t bit));
|
|
|
|
|
2022-06-15 09:54:12 +00:00
|
|
|
static struct ftl_mempool *g_mpool;
|
|
|
|
|
|
|
|
static void
|
|
|
|
test_ftl_mempool_create(void)
|
|
|
|
{
|
|
|
|
struct ftl_mempool *mpool;
|
|
|
|
|
|
|
|
/* improper value of alignment */
|
|
|
|
mpool = ftl_mempool_create(COUNT, SIZE, ALIGNMENT + 1, SOCKET_ID_ANY);
|
|
|
|
CU_ASSERT_EQUAL(mpool, NULL);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
test_ftl_mempool_get_put(void)
|
|
|
|
{
|
|
|
|
void *elem[COUNT];
|
|
|
|
void *elem_empty;
|
|
|
|
void *elem_first = SLIST_FIRST(&g_mpool->list);
|
|
|
|
struct ftl_mempool_element *ftl_elem;
|
|
|
|
int i;
|
|
|
|
for (i = 0; i < COUNT; i++) {
|
|
|
|
elem[i] = ftl_mempool_get(g_mpool);
|
|
|
|
ftl_elem = elem[i];
|
|
|
|
CU_ASSERT_EQUAL(ftl_elem->entry.sle_next, SLIST_FIRST(&g_mpool->list));
|
|
|
|
}
|
|
|
|
|
|
|
|
CU_ASSERT(SLIST_EMPTY(&g_mpool->list));
|
|
|
|
|
|
|
|
elem_empty = ftl_mempool_get(g_mpool);
|
|
|
|
CU_ASSERT_EQUAL(elem_empty, NULL);
|
|
|
|
|
|
|
|
for (i = COUNT - 1; i >= 0; i--) {
|
|
|
|
ftl_mempool_put(g_mpool, elem[i]);
|
|
|
|
CU_ASSERT_EQUAL(SLIST_FIRST(&g_mpool->list), elem[i]);
|
|
|
|
}
|
|
|
|
|
|
|
|
CU_ASSERT_EQUAL(SLIST_FIRST(&g_mpool->list), elem_first);
|
|
|
|
}
|
|
|
|
|
|
|
|
static int
|
|
|
|
test_setup(void)
|
|
|
|
{
|
|
|
|
g_mpool = ftl_mempool_create(COUNT, SIZE, ALIGNMENT, SOCKET_ID_ANY);
|
|
|
|
if (!g_mpool) {
|
|
|
|
return -ENOMEM;
|
|
|
|
}
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
static int
|
|
|
|
test_cleanup(void)
|
|
|
|
{
|
|
|
|
ftl_mempool_destroy(g_mpool);
|
|
|
|
g_mpool = NULL;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int
|
|
|
|
main(int argc, char **argv)
|
|
|
|
{
|
|
|
|
CU_pSuite suite = NULL;
|
|
|
|
unsigned int num_failures;
|
|
|
|
|
|
|
|
CU_set_error_action(CUEA_ABORT);
|
|
|
|
CU_initialize_registry();
|
|
|
|
|
|
|
|
suite = CU_add_suite("ftl_mempool", test_setup, test_cleanup);
|
|
|
|
CU_ADD_TEST(suite, test_ftl_mempool_create);
|
|
|
|
CU_ADD_TEST(suite, test_ftl_mempool_get_put);
|
|
|
|
|
|
|
|
CU_basic_set_mode(CU_BRM_VERBOSE);
|
|
|
|
CU_basic_run_tests();
|
|
|
|
num_failures = CU_get_number_of_failures();
|
|
|
|
CU_cleanup_registry();
|
|
|
|
|
|
|
|
return num_failures;
|
|
|
|
}
|