1 /* SPDX-License-Identifier: GPL-2.0 */ 1 2 /* 3 * DAMON Debugfs Interface Unit Tests 4 * 5 * Author: SeongJae Park <sj@kernel.org> 6 */ 7 8 #ifdef CONFIG_DAMON_DBGFS_KUNIT_TEST 9 10 #ifndef _DAMON_DBGFS_TEST_H 11 #define _DAMON_DBGFS_TEST_H 12 13 #include <kunit/test.h> 14 15 static void damon_dbgfs_test_str_to_ints(struc 16 { 17 char *question; 18 int *answers; 19 int expected[] = {12, 35, 46}; 20 ssize_t nr_integers = 0, i; 21 22 question = "123"; 23 answers = str_to_ints(question, strlen 24 KUNIT_EXPECT_EQ(test, (ssize_t)1, nr_i 25 KUNIT_EXPECT_EQ(test, 123, answers[0]) 26 kfree(answers); 27 28 question = "123abc"; 29 answers = str_to_ints(question, strlen 30 KUNIT_EXPECT_EQ(test, (ssize_t)1, nr_i 31 KUNIT_EXPECT_EQ(test, 123, answers[0]) 32 kfree(answers); 33 34 question = "a123"; 35 answers = str_to_ints(question, strlen 36 KUNIT_EXPECT_EQ(test, (ssize_t)0, nr_i 37 kfree(answers); 38 39 question = "12 35"; 40 answers = str_to_ints(question, strlen 41 KUNIT_EXPECT_EQ(test, (ssize_t)2, nr_i 42 for (i = 0; i < nr_integers; i++) 43 KUNIT_EXPECT_EQ(test, expected 44 kfree(answers); 45 46 question = "12 35 46"; 47 answers = str_to_ints(question, strlen 48 KUNIT_EXPECT_EQ(test, (ssize_t)3, nr_i 49 for (i = 0; i < nr_integers; i++) 50 KUNIT_EXPECT_EQ(test, expected 51 kfree(answers); 52 53 question = "12 35 abc 46"; 54 answers = str_to_ints(question, strlen 55 KUNIT_EXPECT_EQ(test, (ssize_t)2, nr_i 56 for (i = 0; i < 2; i++) 57 KUNIT_EXPECT_EQ(test, expected 58 kfree(answers); 59 60 question = ""; 61 answers = str_to_ints(question, strlen 62 KUNIT_EXPECT_EQ(test, (ssize_t)0, nr_i 63 kfree(answers); 64 65 question = "\n"; 66 answers = str_to_ints(question, strlen 67 KUNIT_EXPECT_EQ(test, (ssize_t)0, nr_i 68 kfree(answers); 69 } 70 71 static void damon_dbgfs_test_set_targets(struc 72 { 73 struct damon_ctx *ctx = dbgfs_new_ctx( 74 char buf[64]; 75 76 /* Make DAMON consider target has no p 77 damon_select_ops(ctx, DAMON_OPS_PADDR) 78 79 dbgfs_set_targets(ctx, 0, NULL); 80 sprint_target_ids(ctx, buf, 64); 81 KUNIT_EXPECT_STREQ(test, (char *)buf, 82 83 dbgfs_set_targets(ctx, 1, NULL); 84 sprint_target_ids(ctx, buf, 64); 85 KUNIT_EXPECT_STREQ(test, (char *)buf, 86 87 dbgfs_set_targets(ctx, 0, NULL); 88 sprint_target_ids(ctx, buf, 64); 89 KUNIT_EXPECT_STREQ(test, (char *)buf, 90 91 dbgfs_destroy_ctx(ctx); 92 } 93 94 static void damon_dbgfs_test_set_init_regions( 95 { 96 struct damon_ctx *ctx = damon_new_ctx( 97 /* Each line represents one region in 98 char * const valid_inputs[] = {"1 10 2 99 "1 10 20\n", 100 "1 10 20\n0 39 59\n0 70 134\n 101 ""}; 102 /* Reading the file again will show so 103 char * const valid_expects[] = {"1 10 104 "1 10 20\n", 105 "0 39 59\n0 70 134\n1 10 20\n1 106 ""}; 107 char * const invalid_inputs[] = {"3 10 108 "1 10 20\n 1 14 26\n", 109 "0 10 20\n1 30 40\n 0 5 8"}; 110 char *input, *expect; 111 int i, rc; 112 char buf[256]; 113 114 damon_select_ops(ctx, DAMON_OPS_PADDR) 115 116 dbgfs_set_targets(ctx, 3, NULL); 117 118 /* Put valid inputs and check the resu 119 for (i = 0; i < ARRAY_SIZE(valid_input 120 input = valid_inputs[i]; 121 expect = valid_expects[i]; 122 123 rc = set_init_regions(ctx, inp 124 KUNIT_EXPECT_EQ(test, rc, 0); 125 126 memset(buf, 0, 256); 127 sprint_init_regions(ctx, buf, 128 129 KUNIT_EXPECT_STREQ(test, (char 130 } 131 /* Put invalid inputs and check the re 132 for (i = 0; i < ARRAY_SIZE(invalid_inp 133 input = invalid_inputs[i]; 134 pr_info("input: %s\n", input); 135 rc = set_init_regions(ctx, inp 136 KUNIT_EXPECT_EQ(test, rc, -EIN 137 138 memset(buf, 0, 256); 139 sprint_init_regions(ctx, buf, 140 141 KUNIT_EXPECT_STREQ(test, (char 142 } 143 144 dbgfs_set_targets(ctx, 0, NULL); 145 damon_destroy_ctx(ctx); 146 } 147 148 static struct kunit_case damon_test_cases[] = 149 KUNIT_CASE(damon_dbgfs_test_str_to_int 150 KUNIT_CASE(damon_dbgfs_test_set_target 151 KUNIT_CASE(damon_dbgfs_test_set_init_r 152 {}, 153 }; 154 155 static struct kunit_suite damon_test_suite = { 156 .name = "damon-dbgfs", 157 .test_cases = damon_test_cases, 158 }; 159 kunit_test_suite(damon_test_suite); 160 161 #endif /* _DAMON_TEST_H */ 162 163 #endif /* CONFIG_DAMON_KUNIT_TEST */ 164
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.