1*17ccae8bSSeongJae Park /* SPDX-License-Identifier: GPL-2.0 */ 2*17ccae8bSSeongJae Park /* 3*17ccae8bSSeongJae Park * DAMON Debugfs Interface Unit Tests 4*17ccae8bSSeongJae Park * 5*17ccae8bSSeongJae Park * Author: SeongJae Park <sjpark@amazon.de> 6*17ccae8bSSeongJae Park */ 7*17ccae8bSSeongJae Park 8*17ccae8bSSeongJae Park #ifdef CONFIG_DAMON_DBGFS_KUNIT_TEST 9*17ccae8bSSeongJae Park 10*17ccae8bSSeongJae Park #ifndef _DAMON_DBGFS_TEST_H 11*17ccae8bSSeongJae Park #define _DAMON_DBGFS_TEST_H 12*17ccae8bSSeongJae Park 13*17ccae8bSSeongJae Park #include <kunit/test.h> 14*17ccae8bSSeongJae Park 15*17ccae8bSSeongJae Park static void damon_dbgfs_test_str_to_target_ids(struct kunit *test) 16*17ccae8bSSeongJae Park { 17*17ccae8bSSeongJae Park char *question; 18*17ccae8bSSeongJae Park unsigned long *answers; 19*17ccae8bSSeongJae Park unsigned long expected[] = {12, 35, 46}; 20*17ccae8bSSeongJae Park ssize_t nr_integers = 0, i; 21*17ccae8bSSeongJae Park 22*17ccae8bSSeongJae Park question = "123"; 23*17ccae8bSSeongJae Park answers = str_to_target_ids(question, strnlen(question, 128), 24*17ccae8bSSeongJae Park &nr_integers); 25*17ccae8bSSeongJae Park KUNIT_EXPECT_EQ(test, (ssize_t)1, nr_integers); 26*17ccae8bSSeongJae Park KUNIT_EXPECT_EQ(test, 123ul, answers[0]); 27*17ccae8bSSeongJae Park kfree(answers); 28*17ccae8bSSeongJae Park 29*17ccae8bSSeongJae Park question = "123abc"; 30*17ccae8bSSeongJae Park answers = str_to_target_ids(question, strnlen(question, 128), 31*17ccae8bSSeongJae Park &nr_integers); 32*17ccae8bSSeongJae Park KUNIT_EXPECT_EQ(test, (ssize_t)1, nr_integers); 33*17ccae8bSSeongJae Park KUNIT_EXPECT_EQ(test, 123ul, answers[0]); 34*17ccae8bSSeongJae Park kfree(answers); 35*17ccae8bSSeongJae Park 36*17ccae8bSSeongJae Park question = "a123"; 37*17ccae8bSSeongJae Park answers = str_to_target_ids(question, strnlen(question, 128), 38*17ccae8bSSeongJae Park &nr_integers); 39*17ccae8bSSeongJae Park KUNIT_EXPECT_EQ(test, (ssize_t)0, nr_integers); 40*17ccae8bSSeongJae Park kfree(answers); 41*17ccae8bSSeongJae Park 42*17ccae8bSSeongJae Park question = "12 35"; 43*17ccae8bSSeongJae Park answers = str_to_target_ids(question, strnlen(question, 128), 44*17ccae8bSSeongJae Park &nr_integers); 45*17ccae8bSSeongJae Park KUNIT_EXPECT_EQ(test, (ssize_t)2, nr_integers); 46*17ccae8bSSeongJae Park for (i = 0; i < nr_integers; i++) 47*17ccae8bSSeongJae Park KUNIT_EXPECT_EQ(test, expected[i], answers[i]); 48*17ccae8bSSeongJae Park kfree(answers); 49*17ccae8bSSeongJae Park 50*17ccae8bSSeongJae Park question = "12 35 46"; 51*17ccae8bSSeongJae Park answers = str_to_target_ids(question, strnlen(question, 128), 52*17ccae8bSSeongJae Park &nr_integers); 53*17ccae8bSSeongJae Park KUNIT_EXPECT_EQ(test, (ssize_t)3, nr_integers); 54*17ccae8bSSeongJae Park for (i = 0; i < nr_integers; i++) 55*17ccae8bSSeongJae Park KUNIT_EXPECT_EQ(test, expected[i], answers[i]); 56*17ccae8bSSeongJae Park kfree(answers); 57*17ccae8bSSeongJae Park 58*17ccae8bSSeongJae Park question = "12 35 abc 46"; 59*17ccae8bSSeongJae Park answers = str_to_target_ids(question, strnlen(question, 128), 60*17ccae8bSSeongJae Park &nr_integers); 61*17ccae8bSSeongJae Park KUNIT_EXPECT_EQ(test, (ssize_t)2, nr_integers); 62*17ccae8bSSeongJae Park for (i = 0; i < 2; i++) 63*17ccae8bSSeongJae Park KUNIT_EXPECT_EQ(test, expected[i], answers[i]); 64*17ccae8bSSeongJae Park kfree(answers); 65*17ccae8bSSeongJae Park 66*17ccae8bSSeongJae Park question = ""; 67*17ccae8bSSeongJae Park answers = str_to_target_ids(question, strnlen(question, 128), 68*17ccae8bSSeongJae Park &nr_integers); 69*17ccae8bSSeongJae Park KUNIT_EXPECT_EQ(test, (ssize_t)0, nr_integers); 70*17ccae8bSSeongJae Park kfree(answers); 71*17ccae8bSSeongJae Park 72*17ccae8bSSeongJae Park question = "\n"; 73*17ccae8bSSeongJae Park answers = str_to_target_ids(question, strnlen(question, 128), 74*17ccae8bSSeongJae Park &nr_integers); 75*17ccae8bSSeongJae Park KUNIT_EXPECT_EQ(test, (ssize_t)0, nr_integers); 76*17ccae8bSSeongJae Park kfree(answers); 77*17ccae8bSSeongJae Park } 78*17ccae8bSSeongJae Park 79*17ccae8bSSeongJae Park static void damon_dbgfs_test_set_targets(struct kunit *test) 80*17ccae8bSSeongJae Park { 81*17ccae8bSSeongJae Park struct damon_ctx *ctx = dbgfs_new_ctx(); 82*17ccae8bSSeongJae Park unsigned long ids[] = {1, 2, 3}; 83*17ccae8bSSeongJae Park char buf[64]; 84*17ccae8bSSeongJae Park 85*17ccae8bSSeongJae Park /* Make DAMON consider target id as plain number */ 86*17ccae8bSSeongJae Park ctx->primitive.target_valid = NULL; 87*17ccae8bSSeongJae Park ctx->primitive.cleanup = NULL; 88*17ccae8bSSeongJae Park 89*17ccae8bSSeongJae Park damon_set_targets(ctx, ids, 3); 90*17ccae8bSSeongJae Park sprint_target_ids(ctx, buf, 64); 91*17ccae8bSSeongJae Park KUNIT_EXPECT_STREQ(test, (char *)buf, "1 2 3\n"); 92*17ccae8bSSeongJae Park 93*17ccae8bSSeongJae Park damon_set_targets(ctx, NULL, 0); 94*17ccae8bSSeongJae Park sprint_target_ids(ctx, buf, 64); 95*17ccae8bSSeongJae Park KUNIT_EXPECT_STREQ(test, (char *)buf, "\n"); 96*17ccae8bSSeongJae Park 97*17ccae8bSSeongJae Park damon_set_targets(ctx, (unsigned long []){1, 2}, 2); 98*17ccae8bSSeongJae Park sprint_target_ids(ctx, buf, 64); 99*17ccae8bSSeongJae Park KUNIT_EXPECT_STREQ(test, (char *)buf, "1 2\n"); 100*17ccae8bSSeongJae Park 101*17ccae8bSSeongJae Park damon_set_targets(ctx, (unsigned long []){2}, 1); 102*17ccae8bSSeongJae Park sprint_target_ids(ctx, buf, 64); 103*17ccae8bSSeongJae Park KUNIT_EXPECT_STREQ(test, (char *)buf, "2\n"); 104*17ccae8bSSeongJae Park 105*17ccae8bSSeongJae Park damon_set_targets(ctx, NULL, 0); 106*17ccae8bSSeongJae Park sprint_target_ids(ctx, buf, 64); 107*17ccae8bSSeongJae Park KUNIT_EXPECT_STREQ(test, (char *)buf, "\n"); 108*17ccae8bSSeongJae Park 109*17ccae8bSSeongJae Park dbgfs_destroy_ctx(ctx); 110*17ccae8bSSeongJae Park } 111*17ccae8bSSeongJae Park 112*17ccae8bSSeongJae Park static struct kunit_case damon_test_cases[] = { 113*17ccae8bSSeongJae Park KUNIT_CASE(damon_dbgfs_test_str_to_target_ids), 114*17ccae8bSSeongJae Park KUNIT_CASE(damon_dbgfs_test_set_targets), 115*17ccae8bSSeongJae Park {}, 116*17ccae8bSSeongJae Park }; 117*17ccae8bSSeongJae Park 118*17ccae8bSSeongJae Park static struct kunit_suite damon_test_suite = { 119*17ccae8bSSeongJae Park .name = "damon-dbgfs", 120*17ccae8bSSeongJae Park .test_cases = damon_test_cases, 121*17ccae8bSSeongJae Park }; 122*17ccae8bSSeongJae Park kunit_test_suite(damon_test_suite); 123*17ccae8bSSeongJae Park 124*17ccae8bSSeongJae Park #endif /* _DAMON_TEST_H */ 125*17ccae8bSSeongJae Park 126*17ccae8bSSeongJae Park #endif /* CONFIG_DAMON_KUNIT_TEST */ 127