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