xref: /spdk/test/unit/lib/ftl/ftl_mempool.c/ftl_mempool_ut.c (revision ea941caeaf896fdf2aef7685f86f37023060faed)
10da057a4SKozlowski Mateusz /*   SPDX-License-Identifier: BSD-3-Clause
2a6dbe372Spaul luse  *   Copyright (C) 2022 Intel Corporation.
30da057a4SKozlowski Mateusz  *   All rights reserved.
40da057a4SKozlowski Mateusz  */
50da057a4SKozlowski Mateusz 
60da057a4SKozlowski Mateusz #include "spdk/stdinc.h"
70da057a4SKozlowski Mateusz 
8ae431e31SKonrad Sztyber #include "spdk_internal/cunit.h"
90da057a4SKozlowski Mateusz #include "common/lib/test_env.c"
100da057a4SKozlowski Mateusz 
110da057a4SKozlowski Mateusz #include "ftl/utils/ftl_mempool.c"
120da057a4SKozlowski Mateusz 
130da057a4SKozlowski Mateusz #define COUNT 16
140da057a4SKozlowski Mateusz #define ALIGNMENT 64
150da057a4SKozlowski Mateusz #define SIZE (ALIGNMENT * 2)
160da057a4SKozlowski Mateusz #define SOCKET_ID_ANY -1
170da057a4SKozlowski Mateusz 
1871a17628SArtur Paszkiewicz DEFINE_STUB(ftl_bitmap_create, struct ftl_bitmap *, (void *buf, size_t size), NULL);
1971a17628SArtur Paszkiewicz DEFINE_STUB_V(ftl_bitmap_destroy, (struct ftl_bitmap *bitmap));
2071a17628SArtur Paszkiewicz DEFINE_STUB(ftl_bitmap_get, bool, (const struct ftl_bitmap *bitmap, uint64_t bit), true);
2171a17628SArtur Paszkiewicz DEFINE_STUB_V(ftl_bitmap_set, (struct ftl_bitmap *bitmap, uint64_t bit));
2271a17628SArtur Paszkiewicz DEFINE_STUB_V(ftl_bitmap_clear, (struct ftl_bitmap *bitmap, uint64_t bit));
2371a17628SArtur Paszkiewicz 
240da057a4SKozlowski Mateusz static struct ftl_mempool *g_mpool;
250da057a4SKozlowski Mateusz 
260da057a4SKozlowski Mateusz static void
test_ftl_mempool_create(void)270da057a4SKozlowski Mateusz test_ftl_mempool_create(void)
280da057a4SKozlowski Mateusz {
290da057a4SKozlowski Mateusz 	struct ftl_mempool *mpool;
300da057a4SKozlowski Mateusz 
310da057a4SKozlowski Mateusz 	/* improper value of alignment */
320da057a4SKozlowski Mateusz 	mpool = ftl_mempool_create(COUNT, SIZE, ALIGNMENT + 1, SOCKET_ID_ANY);
330da057a4SKozlowski Mateusz 	CU_ASSERT_EQUAL(mpool, NULL);
340da057a4SKozlowski Mateusz }
350da057a4SKozlowski Mateusz 
360da057a4SKozlowski Mateusz static void
test_ftl_mempool_get_put(void)370da057a4SKozlowski Mateusz test_ftl_mempool_get_put(void)
380da057a4SKozlowski Mateusz {
390da057a4SKozlowski Mateusz 	void *elem[COUNT];
400da057a4SKozlowski Mateusz 	void *elem_empty;
410da057a4SKozlowski Mateusz 	void *elem_first = SLIST_FIRST(&g_mpool->list);
420da057a4SKozlowski Mateusz 	struct ftl_mempool_element *ftl_elem;
430da057a4SKozlowski Mateusz 	int i;
440da057a4SKozlowski Mateusz 	for (i = 0; i < COUNT; i++) {
450da057a4SKozlowski Mateusz 		elem[i] = ftl_mempool_get(g_mpool);
460da057a4SKozlowski Mateusz 		ftl_elem = elem[i];
470da057a4SKozlowski Mateusz 		CU_ASSERT_EQUAL(ftl_elem->entry.sle_next, SLIST_FIRST(&g_mpool->list));
480da057a4SKozlowski Mateusz 	}
490da057a4SKozlowski Mateusz 
500da057a4SKozlowski Mateusz 	CU_ASSERT(SLIST_EMPTY(&g_mpool->list));
510da057a4SKozlowski Mateusz 
520da057a4SKozlowski Mateusz 	elem_empty = ftl_mempool_get(g_mpool);
530da057a4SKozlowski Mateusz 	CU_ASSERT_EQUAL(elem_empty, NULL);
540da057a4SKozlowski Mateusz 
550da057a4SKozlowski Mateusz 	for (i = COUNT - 1; i >= 0; i--) {
560da057a4SKozlowski Mateusz 		ftl_mempool_put(g_mpool, elem[i]);
570da057a4SKozlowski Mateusz 		CU_ASSERT_EQUAL(SLIST_FIRST(&g_mpool->list), elem[i]);
580da057a4SKozlowski Mateusz 	}
590da057a4SKozlowski Mateusz 
600da057a4SKozlowski Mateusz 	CU_ASSERT_EQUAL(SLIST_FIRST(&g_mpool->list), elem_first);
610da057a4SKozlowski Mateusz }
620da057a4SKozlowski Mateusz 
630da057a4SKozlowski Mateusz static int
test_setup(void)640da057a4SKozlowski Mateusz test_setup(void)
650da057a4SKozlowski Mateusz {
660da057a4SKozlowski Mateusz 	g_mpool = ftl_mempool_create(COUNT, SIZE, ALIGNMENT, SOCKET_ID_ANY);
670da057a4SKozlowski Mateusz 	if (!g_mpool) {
680da057a4SKozlowski Mateusz 		return -ENOMEM;
690da057a4SKozlowski Mateusz 	}
700da057a4SKozlowski Mateusz 
710da057a4SKozlowski Mateusz 	return 0;
720da057a4SKozlowski Mateusz }
730da057a4SKozlowski Mateusz 
740da057a4SKozlowski Mateusz static int
test_cleanup(void)750da057a4SKozlowski Mateusz test_cleanup(void)
760da057a4SKozlowski Mateusz {
770da057a4SKozlowski Mateusz 	ftl_mempool_destroy(g_mpool);
780da057a4SKozlowski Mateusz 	g_mpool = NULL;
790da057a4SKozlowski Mateusz 	return 0;
800da057a4SKozlowski Mateusz }
810da057a4SKozlowski Mateusz 
820da057a4SKozlowski Mateusz int
main(int argc,char ** argv)830da057a4SKozlowski Mateusz main(int argc, char **argv)
840da057a4SKozlowski Mateusz {
850da057a4SKozlowski Mateusz 	CU_pSuite suite = NULL;
860da057a4SKozlowski Mateusz 	unsigned int num_failures;
870da057a4SKozlowski Mateusz 
880da057a4SKozlowski Mateusz 	CU_initialize_registry();
890da057a4SKozlowski Mateusz 
900da057a4SKozlowski Mateusz 	suite = CU_add_suite("ftl_mempool", test_setup, test_cleanup);
910da057a4SKozlowski Mateusz 	CU_ADD_TEST(suite, test_ftl_mempool_create);
920da057a4SKozlowski Mateusz 	CU_ADD_TEST(suite, test_ftl_mempool_get_put);
930da057a4SKozlowski Mateusz 
94*ea941caeSKonrad Sztyber 	num_failures = spdk_ut_run_tests(argc, argv, NULL);
950da057a4SKozlowski Mateusz 	CU_cleanup_registry();
960da057a4SKozlowski Mateusz 
970da057a4SKozlowski Mateusz 	return num_failures;
980da057a4SKozlowski Mateusz }
99