| 1 | |
| 2 |
|
| 3 | #define _GNU_SOURCE
|
| 4 | #include <check.h>
|
| 5 | #include <stdio.h>
|
| 6 | #include <stdlib.h>
|
| 7 | #include <sched.h>
|
| 8 | #include <limits.h>
|
| 9 | #include <unistd.h>
|
| 10 | #include <sys/sysinfo.h>
|
| 11 |
|
| 12 | #include "../../src/utils.h"
|
| 13 |
|
| 14 | extern int nr_cpus;
|
| 15 |
|
| 16 | START_TEST(test_strtoi)
|
| 17 | {
|
| 18 | int result;
|
| 19 | char buf[64];
|
| 20 |
|
| 21 | ck_assert_int_eq(strtoi("123", &result), 0);
|
| 22 | ck_assert_int_eq(result, 123);
|
| 23 | ck_assert_int_eq(strtoi(" -456", &result), 0);
|
| 24 | ck_assert_int_eq(result, -456);
|
| 25 |
|
| 26 | snprintf(buf, sizeof(buf), "%d", INT_MAX);
|
| 27 | ck_assert_int_eq(strtoi(buf, &result), 0);
|
| 28 | snprintf(buf, sizeof(buf), "%ld", (long)INT_MAX + 1);
|
| 29 | ck_assert_int_eq(strtoi(buf, &result), -1);
|
| 30 |
|
| 31 | ck_assert_int_eq(strtoi("", &result), -1);
|
| 32 | ck_assert_int_eq(strtoi("123abc", &result), -1);
|
| 33 | ck_assert_int_eq(strtoi("123 ", &result), -1);
|
| 34 | }
|
| 35 | END_TEST
|
| 36 |
|
| 37 | START_TEST(test_parse_cpu_set)
|
| 38 | {
|
| 39 | cpu_set_t set;
|
| 40 |
|
| 41 | nr_cpus = 8;
|
| 42 | ck_assert_int_eq(parse_cpu_set("0", &set), 0);
|
| 43 | ck_assert(CPU_ISSET(0, &set));
|
| 44 | ck_assert(!CPU_ISSET(1, &set));
|
| 45 |
|
| 46 | ck_assert_int_eq(parse_cpu_set("0,2", &set), 0);
|
| 47 | ck_assert(CPU_ISSET(0, &set));
|
| 48 | ck_assert(CPU_ISSET(2, &set));
|
| 49 |
|
| 50 | ck_assert_int_eq(parse_cpu_set("0-3", &set), 0);
|
| 51 | ck_assert(CPU_ISSET(0, &set));
|
| 52 | ck_assert(CPU_ISSET(1, &set));
|
| 53 | ck_assert(CPU_ISSET(2, &set));
|
| 54 | ck_assert(CPU_ISSET(3, &set));
|
| 55 |
|
| 56 | ck_assert_int_eq(parse_cpu_set("1-3,5", &set), 0);
|
| 57 | ck_assert(!CPU_ISSET(0, &set));
|
| 58 | ck_assert(CPU_ISSET(1, &set));
|
| 59 | ck_assert(CPU_ISSET(2, &set));
|
| 60 | ck_assert(CPU_ISSET(3, &set));
|
| 61 | ck_assert(!CPU_ISSET(4, &set));
|
| 62 | ck_assert(CPU_ISSET(5, &set));
|
| 63 |
|
| 64 | ck_assert_int_eq(parse_cpu_set("-1", &set), 1);
|
| 65 | ck_assert_int_eq(parse_cpu_set("abc", &set), 1);
|
| 66 | ck_assert_int_eq(parse_cpu_set("9999", &set), 1);
|
| 67 | }
|
| 68 | END_TEST
|
| 69 |
|
| 70 | START_TEST(test_parse_prio)
|
| 71 | {
|
| 72 | struct sched_attr attr;
|
| 73 |
|
| 74 | ck_assert_int_eq(parse_prio("f:50", &attr), 0);
|
| 75 | ck_assert_uint_eq(attr.sched_policy, SCHED_FIFO);
|
| 76 | ck_assert_uint_eq(attr.sched_priority, 50U);
|
| 77 |
|
| 78 | ck_assert_int_eq(parse_prio("r:30", &attr), 0);
|
| 79 | ck_assert_uint_eq(attr.sched_policy, SCHED_RR);
|
| 80 |
|
| 81 | ck_assert_int_eq(parse_prio("o:0", &attr), 0);
|
| 82 | ck_assert_uint_eq(attr.sched_policy, SCHED_OTHER);
|
| 83 | ck_assert_int_eq(attr.sched_nice, 0);
|
| 84 |
|
| 85 | ck_assert_int_eq(parse_prio("d:10ms:100ms", &attr), 0);
|
| 86 | ck_assert_uint_eq(attr.sched_policy, 6U);
|
| 87 |
|
| 88 | ck_assert_int_eq(parse_prio("f:999", &attr), -1);
|
| 89 | ck_assert_int_eq(parse_prio("o:-20", &attr), -1);
|
| 90 | ck_assert_int_eq(parse_prio("d:100ms:10ms", &attr), -1);
|
| 91 | ck_assert_int_eq(parse_prio("x:50", &attr), -1);
|
| 92 | }
|
| 93 | END_TEST
|
| 94 |
|
| 95 | Suite *utils_suite(void)
|
| 96 | {
|
| 97 | Suite *s = suite_create("utils");
|
| 98 | TCase *tc = tcase_create("core");
|
| 99 |
|
| 100 | tcase_add_test(tc, test_strtoi);
|
| 101 | tcase_add_test(tc, test_parse_cpu_set);
|
| 102 | tcase_add_test(tc, test_parse_prio);
|
| 103 |
|
| 104 | suite_add_tcase(s, tc);
|
| 105 | return s;
|
| 106 | }
|