xref: /openbmc/linux/mm/damon/dbgfs-test.h (revision 17ccae8bb5c928946f6f3af14626ec458f74e6ad)
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