xref: /linux/tools/tracing/rtla/tests/unit/unit_tests.c (revision 9e1e9d660255d7216067193d774f338d08d8528d)
13a4080e5SCosta Shulyupin // SPDX-License-Identifier: GPL-2.0
23a4080e5SCosta Shulyupin 
33a4080e5SCosta Shulyupin #define _GNU_SOURCE
43a4080e5SCosta Shulyupin #include <check.h>
53a4080e5SCosta Shulyupin #include <stdio.h>
63a4080e5SCosta Shulyupin #include <stdlib.h>
73a4080e5SCosta Shulyupin #include <sched.h>
83a4080e5SCosta Shulyupin #include <limits.h>
93a4080e5SCosta Shulyupin #include <unistd.h>
10*115b06a0SCosta Shulyupin #include <sys/sysinfo.h>
113a4080e5SCosta Shulyupin 
123a4080e5SCosta Shulyupin #include "../../src/utils.h"
13*115b06a0SCosta Shulyupin int nr_cpus;
143a4080e5SCosta Shulyupin 
153a4080e5SCosta Shulyupin START_TEST(test_strtoi)
163a4080e5SCosta Shulyupin {
173a4080e5SCosta Shulyupin 	int result;
183a4080e5SCosta Shulyupin 	char buf[64];
193a4080e5SCosta Shulyupin 
203a4080e5SCosta Shulyupin 	ck_assert_int_eq(strtoi("123", &result), 0);
213a4080e5SCosta Shulyupin 	ck_assert_int_eq(result, 123);
223a4080e5SCosta Shulyupin 	ck_assert_int_eq(strtoi(" -456", &result), 0);
233a4080e5SCosta Shulyupin 	ck_assert_int_eq(result, -456);
243a4080e5SCosta Shulyupin 
253a4080e5SCosta Shulyupin 	snprintf(buf, sizeof(buf), "%d", INT_MAX);
263a4080e5SCosta Shulyupin 	ck_assert_int_eq(strtoi(buf, &result), 0);
273a4080e5SCosta Shulyupin 	snprintf(buf, sizeof(buf), "%ld", (long)INT_MAX + 1);
283a4080e5SCosta Shulyupin 	ck_assert_int_eq(strtoi(buf, &result), -1);
293a4080e5SCosta Shulyupin 
303a4080e5SCosta Shulyupin 	ck_assert_int_eq(strtoi("", &result), -1);
313a4080e5SCosta Shulyupin 	ck_assert_int_eq(strtoi("123abc", &result), -1);
323a4080e5SCosta Shulyupin 	ck_assert_int_eq(strtoi("123 ", &result), -1);
333a4080e5SCosta Shulyupin }
343a4080e5SCosta Shulyupin END_TEST
353a4080e5SCosta Shulyupin 
363a4080e5SCosta Shulyupin START_TEST(test_parse_cpu_set)
373a4080e5SCosta Shulyupin {
383a4080e5SCosta Shulyupin 	cpu_set_t set;
393a4080e5SCosta Shulyupin 
40*115b06a0SCosta Shulyupin 	nr_cpus = 8;
413a4080e5SCosta Shulyupin 	ck_assert_int_eq(parse_cpu_set("0", &set), 0);
423a4080e5SCosta Shulyupin 	ck_assert(CPU_ISSET(0, &set));
433a4080e5SCosta Shulyupin 	ck_assert(!CPU_ISSET(1, &set));
443a4080e5SCosta Shulyupin 
453a4080e5SCosta Shulyupin 	ck_assert_int_eq(parse_cpu_set("0,2", &set), 0);
463a4080e5SCosta Shulyupin 	ck_assert(CPU_ISSET(0, &set));
473a4080e5SCosta Shulyupin 	ck_assert(CPU_ISSET(2, &set));
483a4080e5SCosta Shulyupin 
493a4080e5SCosta Shulyupin 	ck_assert_int_eq(parse_cpu_set("0-3", &set), 0);
503a4080e5SCosta Shulyupin 	ck_assert(CPU_ISSET(0, &set));
513a4080e5SCosta Shulyupin 	ck_assert(CPU_ISSET(1, &set));
523a4080e5SCosta Shulyupin 	ck_assert(CPU_ISSET(2, &set));
533a4080e5SCosta Shulyupin 	ck_assert(CPU_ISSET(3, &set));
543a4080e5SCosta Shulyupin 
553a4080e5SCosta Shulyupin 	ck_assert_int_eq(parse_cpu_set("1-3,5", &set), 0);
563a4080e5SCosta Shulyupin 	ck_assert(!CPU_ISSET(0, &set));
573a4080e5SCosta Shulyupin 	ck_assert(CPU_ISSET(1, &set));
583a4080e5SCosta Shulyupin 	ck_assert(CPU_ISSET(2, &set));
593a4080e5SCosta Shulyupin 	ck_assert(CPU_ISSET(3, &set));
603a4080e5SCosta Shulyupin 	ck_assert(!CPU_ISSET(4, &set));
613a4080e5SCosta Shulyupin 	ck_assert(CPU_ISSET(5, &set));
623a4080e5SCosta Shulyupin 
633a4080e5SCosta Shulyupin 	ck_assert_int_eq(parse_cpu_set("-1", &set), 1);
643a4080e5SCosta Shulyupin 	ck_assert_int_eq(parse_cpu_set("abc", &set), 1);
653a4080e5SCosta Shulyupin 	ck_assert_int_eq(parse_cpu_set("9999", &set), 1);
663a4080e5SCosta Shulyupin }
673a4080e5SCosta Shulyupin END_TEST
683a4080e5SCosta Shulyupin 
693a4080e5SCosta Shulyupin START_TEST(test_parse_prio)
703a4080e5SCosta Shulyupin {
713a4080e5SCosta Shulyupin 	struct sched_attr attr;
723a4080e5SCosta Shulyupin 
733a4080e5SCosta Shulyupin 	ck_assert_int_eq(parse_prio("f:50", &attr), 0);
743a4080e5SCosta Shulyupin 	ck_assert_uint_eq(attr.sched_policy, SCHED_FIFO);
753a4080e5SCosta Shulyupin 	ck_assert_uint_eq(attr.sched_priority, 50U);
763a4080e5SCosta Shulyupin 
773a4080e5SCosta Shulyupin 	ck_assert_int_eq(parse_prio("r:30", &attr), 0);
783a4080e5SCosta Shulyupin 	ck_assert_uint_eq(attr.sched_policy, SCHED_RR);
793a4080e5SCosta Shulyupin 
803a4080e5SCosta Shulyupin 	ck_assert_int_eq(parse_prio("o:0", &attr), 0);
813a4080e5SCosta Shulyupin 	ck_assert_uint_eq(attr.sched_policy, SCHED_OTHER);
823a4080e5SCosta Shulyupin 	ck_assert_int_eq(attr.sched_nice, 0);
833a4080e5SCosta Shulyupin 
843a4080e5SCosta Shulyupin 	ck_assert_int_eq(parse_prio("d:10ms:100ms", &attr), 0);
853a4080e5SCosta Shulyupin 	ck_assert_uint_eq(attr.sched_policy, 6U);
863a4080e5SCosta Shulyupin 
873a4080e5SCosta Shulyupin 	ck_assert_int_eq(parse_prio("f:999", &attr), -1);
883a4080e5SCosta Shulyupin 	ck_assert_int_eq(parse_prio("o:-20", &attr), -1);
893a4080e5SCosta Shulyupin 	ck_assert_int_eq(parse_prio("d:100ms:10ms", &attr), -1);
903a4080e5SCosta Shulyupin 	ck_assert_int_eq(parse_prio("x:50", &attr), -1);
913a4080e5SCosta Shulyupin }
923a4080e5SCosta Shulyupin END_TEST
933a4080e5SCosta Shulyupin 
943a4080e5SCosta Shulyupin Suite *utils_suite(void)
953a4080e5SCosta Shulyupin {
963a4080e5SCosta Shulyupin 	Suite *s = suite_create("utils");
973a4080e5SCosta Shulyupin 	TCase *tc = tcase_create("core");
983a4080e5SCosta Shulyupin 
993a4080e5SCosta Shulyupin 	tcase_add_test(tc, test_strtoi);
1003a4080e5SCosta Shulyupin 	tcase_add_test(tc, test_parse_cpu_set);
1013a4080e5SCosta Shulyupin 	tcase_add_test(tc, test_parse_prio);
1023a4080e5SCosta Shulyupin 
1033a4080e5SCosta Shulyupin 	suite_add_tcase(s, tc);
1043a4080e5SCosta Shulyupin 	return s;
1053a4080e5SCosta Shulyupin }
1063a4080e5SCosta Shulyupin 
1073a4080e5SCosta Shulyupin int main(void)
1083a4080e5SCosta Shulyupin {
1093a4080e5SCosta Shulyupin 	int num_failed;
1103a4080e5SCosta Shulyupin 	SRunner *sr;
1113a4080e5SCosta Shulyupin 
1123a4080e5SCosta Shulyupin 	sr = srunner_create(utils_suite());
1133a4080e5SCosta Shulyupin 	srunner_run_all(sr, CK_NORMAL);
1143a4080e5SCosta Shulyupin 	num_failed = srunner_ntests_failed(sr);
1153a4080e5SCosta Shulyupin 
1163a4080e5SCosta Shulyupin 	srunner_free(sr);
1173a4080e5SCosta Shulyupin 
1183a4080e5SCosta Shulyupin 	return (num_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
1193a4080e5SCosta Shulyupin }
120