projects/linux·blob master · refs

106 lines · 2.6 KiB

1// SPDX-License-Identifier: GPL-2.0
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
14extern int nr_cpus;
15
16START_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}
35END_TEST
36
37START_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}
68END_TEST
69
70START_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}
93END_TEST
94
95Suite *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}