diff options
| author | Kees Cook <kees@kernel.org> | 2024-12-02 15:55:40 +0800 |
|---|---|---|
| committer | Kees Cook <kees@kernel.org> | 2025-02-10 18:25:39 -0800 |
| commit | db6fe4d61ece24193eb4d94a82d967501d53358c (patch) | |
| tree | 6c4cd0e856fb6249cfb0cb6a45b87f5dfafbb6f8 /lib/test_list_sort.c | |
| parent | 84ec093f55f58f5a4a66eb98bd6b6af413190bde (diff) | |
lib: Move KUnit tests into tests/ subdirectory
Following from the recent KUnit file naming discussion[1], move all
KUnit tests in lib/ into lib/tests/.
Link: https://lore.kernel.org/lkml/20240720165441.it.320-kees@kernel.org/ [1]
Acked-by: Steven Rostedt (Google) <rostedt@goodmis.org>
Acked-by: Jakub Kicinski <kuba@kernel.org>
Acked-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
Reviewed-by: David Gow <davidgow@google.com>
Acked-by: Vlastimil Babka <vbabka@suse.cz>
Reviewed-by: Rae Moar <rmoar@google.com>
Link: https://lore.kernel.org/r/20241202075545.3648096-4-davidgow@google.com
Signed-off-by: Kees Cook <kees@kernel.org>
Diffstat (limited to 'lib/test_list_sort.c')
| -rw-r--r-- | lib/test_list_sort.c | 123 |
1 files changed, 0 insertions, 123 deletions
diff --git a/lib/test_list_sort.c b/lib/test_list_sort.c deleted file mode 100644 index 30879abc8a42..000000000000 --- a/lib/test_list_sort.c +++ /dev/null @@ -1,123 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-only -#include <kunit/test.h> - -#include <linux/kernel.h> -#include <linux/list_sort.h> -#include <linux/list.h> -#include <linux/module.h> -#include <linux/printk.h> -#include <linux/slab.h> -#include <linux/random.h> - -/* - * The pattern of set bits in the list length determines which cases - * are hit in list_sort(). - */ -#define TEST_LIST_LEN (512+128+2) /* not including head */ - -#define TEST_POISON1 0xDEADBEEF -#define TEST_POISON2 0xA324354C - -struct debug_el { - unsigned int poison1; - struct list_head list; - unsigned int poison2; - int value; - unsigned int serial; -}; - -static void check(struct kunit *test, struct debug_el *ela, struct debug_el *elb) -{ - struct debug_el **elts = test->priv; - - KUNIT_EXPECT_LT_MSG(test, ela->serial, (unsigned int)TEST_LIST_LEN, "incorrect serial"); - KUNIT_EXPECT_LT_MSG(test, elb->serial, (unsigned int)TEST_LIST_LEN, "incorrect serial"); - - KUNIT_EXPECT_PTR_EQ_MSG(test, elts[ela->serial], ela, "phantom element"); - KUNIT_EXPECT_PTR_EQ_MSG(test, elts[elb->serial], elb, "phantom element"); - - KUNIT_EXPECT_EQ_MSG(test, ela->poison1, TEST_POISON1, "bad poison"); - KUNIT_EXPECT_EQ_MSG(test, ela->poison2, TEST_POISON2, "bad poison"); - - KUNIT_EXPECT_EQ_MSG(test, elb->poison1, TEST_POISON1, "bad poison"); - KUNIT_EXPECT_EQ_MSG(test, elb->poison2, TEST_POISON2, "bad poison"); -} - -/* `priv` is the test pointer so check() can fail the test if the list is invalid. */ -static int cmp(void *priv, const struct list_head *a, const struct list_head *b) -{ - struct debug_el *ela, *elb; - - ela = container_of(a, struct debug_el, list); - elb = container_of(b, struct debug_el, list); - - check(priv, ela, elb); - return ela->value - elb->value; -} - -static void list_sort_test(struct kunit *test) -{ - int i, count = 1; - struct debug_el *el, **elts; - struct list_head *cur; - LIST_HEAD(head); - - elts = kunit_kcalloc(test, TEST_LIST_LEN, sizeof(*elts), GFP_KERNEL); - KUNIT_ASSERT_NOT_ERR_OR_NULL(test, elts); - test->priv = elts; - - for (i = 0; i < TEST_LIST_LEN; i++) { - el = kunit_kmalloc(test, sizeof(*el), GFP_KERNEL); - KUNIT_ASSERT_NOT_ERR_OR_NULL(test, el); - - /* force some equivalencies */ - el->value = get_random_u32_below(TEST_LIST_LEN / 3); - el->serial = i; - el->poison1 = TEST_POISON1; - el->poison2 = TEST_POISON2; - elts[i] = el; - list_add_tail(&el->list, &head); - } - - list_sort(test, &head, cmp); - - for (cur = head.next; cur->next != &head; cur = cur->next) { - struct debug_el *el1; - int cmp_result; - - KUNIT_ASSERT_PTR_EQ_MSG(test, cur->next->prev, cur, - "list is corrupted"); - - cmp_result = cmp(test, cur, cur->next); - KUNIT_ASSERT_LE_MSG(test, cmp_result, 0, "list is not sorted"); - - el = container_of(cur, struct debug_el, list); - el1 = container_of(cur->next, struct debug_el, list); - if (cmp_result == 0) { - KUNIT_ASSERT_LE_MSG(test, el->serial, el1->serial, - "order of equivalent elements not preserved"); - } - - check(test, el, el1); - count++; - } - KUNIT_EXPECT_PTR_EQ_MSG(test, head.prev, cur, "list is corrupted"); - - KUNIT_EXPECT_EQ_MSG(test, count, TEST_LIST_LEN, - "list length changed after sorting!"); -} - -static struct kunit_case list_sort_cases[] = { - KUNIT_CASE(list_sort_test), - {} -}; - -static struct kunit_suite list_sort_suite = { - .name = "list_sort", - .test_cases = list_sort_cases, -}; - -kunit_test_suites(&list_sort_suite); - -MODULE_DESCRIPTION("list_sort() KUnit test suite"); -MODULE_LICENSE("GPL"); |