1 /* SPDX-License-Identifier: GPL-2.0 */ 1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 2 /* 3 * Data Access Monitor Unit Tests 3 * Data Access Monitor Unit Tests 4 * 4 * 5 * Author: SeongJae Park <sj@kernel.org> 5 * Author: SeongJae Park <sj@kernel.org> 6 */ 6 */ 7 7 8 #ifdef CONFIG_DAMON_SYSFS_KUNIT_TEST 8 #ifdef CONFIG_DAMON_SYSFS_KUNIT_TEST 9 9 10 #ifndef _DAMON_SYSFS_TEST_H 10 #ifndef _DAMON_SYSFS_TEST_H 11 #define _DAMON_SYSFS_TEST_H 11 #define _DAMON_SYSFS_TEST_H 12 12 13 #include <kunit/test.h> 13 #include <kunit/test.h> 14 14 15 static unsigned int nr_damon_targets(struct da 15 static unsigned int nr_damon_targets(struct damon_ctx *ctx) 16 { 16 { 17 struct damon_target *t; 17 struct damon_target *t; 18 unsigned int nr_targets = 0; 18 unsigned int nr_targets = 0; 19 19 20 damon_for_each_target(t, ctx) 20 damon_for_each_target(t, ctx) 21 nr_targets++; 21 nr_targets++; 22 22 23 return nr_targets; 23 return nr_targets; 24 } 24 } 25 25 26 static int __damon_sysfs_test_get_any_pid(int 26 static int __damon_sysfs_test_get_any_pid(int min, int max) 27 { 27 { 28 struct pid *pid; 28 struct pid *pid; 29 int i; 29 int i; 30 30 31 for (i = min; i <= max; i++) { 31 for (i = min; i <= max; i++) { 32 pid = find_get_pid(i); 32 pid = find_get_pid(i); 33 if (pid) { 33 if (pid) { 34 put_pid(pid); 34 put_pid(pid); 35 return i; 35 return i; 36 } 36 } 37 } 37 } 38 return -1; 38 return -1; 39 } 39 } 40 40 41 static void damon_sysfs_test_add_targets(struc 41 static void damon_sysfs_test_add_targets(struct kunit *test) 42 { 42 { 43 struct damon_sysfs_targets *sysfs_targ 43 struct damon_sysfs_targets *sysfs_targets; 44 struct damon_sysfs_target *sysfs_targe 44 struct damon_sysfs_target *sysfs_target; 45 struct damon_ctx *ctx; 45 struct damon_ctx *ctx; 46 46 47 sysfs_targets = damon_sysfs_targets_al 47 sysfs_targets = damon_sysfs_targets_alloc(); 48 sysfs_targets->nr = 1; 48 sysfs_targets->nr = 1; 49 sysfs_targets->targets_arr = kmalloc_a 49 sysfs_targets->targets_arr = kmalloc_array(1, 50 sizeof(*sysfs_targets- 50 sizeof(*sysfs_targets->targets_arr), GFP_KERNEL); 51 51 52 sysfs_target = damon_sysfs_target_allo 52 sysfs_target = damon_sysfs_target_alloc(); 53 sysfs_target->pid = __damon_sysfs_test 53 sysfs_target->pid = __damon_sysfs_test_get_any_pid(12, 100); 54 sysfs_target->regions = damon_sysfs_re 54 sysfs_target->regions = damon_sysfs_regions_alloc(); 55 sysfs_targets->targets_arr[0] = sysfs_ 55 sysfs_targets->targets_arr[0] = sysfs_target; 56 56 57 ctx = damon_new_ctx(); 57 ctx = damon_new_ctx(); 58 58 59 damon_sysfs_add_targets(ctx, sysfs_tar 59 damon_sysfs_add_targets(ctx, sysfs_targets); 60 KUNIT_EXPECT_EQ(test, 1u, nr_damon_tar 60 KUNIT_EXPECT_EQ(test, 1u, nr_damon_targets(ctx)); 61 61 62 sysfs_target->pid = __damon_sysfs_test 62 sysfs_target->pid = __damon_sysfs_test_get_any_pid( 63 sysfs_target->pid + 1, 63 sysfs_target->pid + 1, 200); 64 damon_sysfs_add_targets(ctx, sysfs_tar 64 damon_sysfs_add_targets(ctx, sysfs_targets); 65 KUNIT_EXPECT_EQ(test, 2u, nr_damon_tar 65 KUNIT_EXPECT_EQ(test, 2u, nr_damon_targets(ctx)); 66 66 67 damon_destroy_ctx(ctx); 67 damon_destroy_ctx(ctx); 68 kfree(sysfs_targets->targets_arr); 68 kfree(sysfs_targets->targets_arr); 69 kfree(sysfs_targets); 69 kfree(sysfs_targets); 70 kfree(sysfs_target->regions); 70 kfree(sysfs_target->regions); 71 kfree(sysfs_target); 71 kfree(sysfs_target); 72 } 72 } 73 73 74 static struct kunit_case damon_sysfs_test_case 74 static struct kunit_case damon_sysfs_test_cases[] = { 75 KUNIT_CASE(damon_sysfs_test_add_target 75 KUNIT_CASE(damon_sysfs_test_add_targets), 76 {}, 76 {}, 77 }; 77 }; 78 78 79 static struct kunit_suite damon_sysfs_test_sui 79 static struct kunit_suite damon_sysfs_test_suite = { 80 .name = "damon-sysfs", 80 .name = "damon-sysfs", 81 .test_cases = damon_sysfs_test_cases, 81 .test_cases = damon_sysfs_test_cases, 82 }; 82 }; 83 kunit_test_suite(damon_sysfs_test_suite); 83 kunit_test_suite(damon_sysfs_test_suite); 84 84 85 #endif /* _DAMON_SYSFS_TEST_H */ 85 #endif /* _DAMON_SYSFS_TEST_H */ 86 86 87 #endif /* CONFIG_DAMON_SYSFS_KUNIT_TEST */ 87 #endif /* CONFIG_DAMON_SYSFS_KUNIT_TEST */ 88 88
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.