]>
Commit | Line | Data |
---|---|---|
db9ecf05 | 1 | /* SPDX-License-Identifier: LGPL-2.1-or-later */ |
42b83e8e AZ |
2 | |
3 | #include <linux/loadavg.h> | |
4 | ||
5 | #include "alloc-util.h" | |
6 | #include "fileio.h" | |
7 | #include "fs-util.h" | |
8 | #include "psi-util.h" | |
9 | #include "tests.h" | |
10 | ||
11 | static void test_read_mem_pressure(void) { | |
12 | _cleanup_(unlink_tempfilep) char path[] = "/tmp/pressurereadtestXXXXXX"; | |
13 | ResourcePressure rp; | |
14 | ||
15 | if (geteuid() != 0) | |
16 | return (void) log_tests_skipped("not root"); | |
17 | ||
18 | assert_se(mkstemp(path)); | |
19 | ||
20 | assert_se(read_resource_pressure("/verylikelynonexistentpath", PRESSURE_TYPE_SOME, &rp) < 0); | |
21 | assert_se(read_resource_pressure(path, PRESSURE_TYPE_SOME, &rp) < 0); | |
22 | ||
23 | assert_se(write_string_file(path, "herpdederp\n", WRITE_STRING_FILE_CREATE) == 0); | |
24 | assert_se(read_resource_pressure(path, PRESSURE_TYPE_SOME, &rp) < 0); | |
25 | ||
26 | /* Pressure file with some invalid values*/ | |
27 | assert_se(write_string_file(path, "some avg10=0.22=55 avg60=0.17=8 avg300=1.11=00 total=58761459\n" | |
28 | "full avg10=0.23=55 avg60=0.16=8 avg300=1.08=00 total=58464525", WRITE_STRING_FILE_CREATE) == 0); | |
29 | assert_se(read_resource_pressure(path, PRESSURE_TYPE_SOME, &rp) < 0); | |
30 | ||
31 | /* Same pressure valid values as below but with duplicate avg60 field */ | |
32 | assert_se(write_string_file(path, "some avg10=0.22 avg60=0.17 avg60=0.18 avg300=1.11 total=58761459\n" | |
33 | "full avg10=0.23 avg60=0.16 avg300=1.08 total=58464525", WRITE_STRING_FILE_CREATE) == 0); | |
34 | assert_se(read_resource_pressure(path, PRESSURE_TYPE_SOME, &rp) < 0); | |
35 | ||
36 | assert_se(write_string_file(path, "some avg10=0.22 avg60=0.17 avg300=1.11 total=58761459\n" | |
37 | "full avg10=0.23 avg60=0.16 avg300=1.08 total=58464525", WRITE_STRING_FILE_CREATE) == 0); | |
38 | assert_se(read_resource_pressure(path, PRESSURE_TYPE_SOME, &rp) == 0); | |
39 | assert_se(LOAD_INT(rp.avg10) == 0); | |
40 | assert_se(LOAD_FRAC(rp.avg10) == 22); | |
41 | assert_se(LOAD_INT(rp.avg60) == 0); | |
42 | assert_se(LOAD_FRAC(rp.avg60) == 17); | |
43 | assert_se(LOAD_INT(rp.avg300) == 1); | |
44 | assert_se(LOAD_FRAC(rp.avg300) == 11); | |
45 | assert_se(rp.total == 58761459); | |
46 | assert(read_resource_pressure(path, PRESSURE_TYPE_FULL, &rp) == 0); | |
47 | assert_se(LOAD_INT(rp.avg10) == 0); | |
48 | assert_se(LOAD_FRAC(rp.avg10) == 23); | |
49 | assert_se(LOAD_INT(rp.avg60) == 0); | |
50 | assert_se(LOAD_FRAC(rp.avg60) == 16); | |
51 | assert_se(LOAD_INT(rp.avg300) == 1); | |
52 | assert_se(LOAD_FRAC(rp.avg300) == 8); | |
53 | assert_se(rp.total == 58464525); | |
54 | ||
55 | /* Pressure file with extra unsupported fields */ | |
56 | assert_se(write_string_file(path, "some avg5=0.55 avg10=0.22 avg60=0.17 avg300=1.11 total=58761459\n" | |
57 | "full avg10=0.23 avg60=0.16 avg300=1.08 avg600=2.00 total=58464525", WRITE_STRING_FILE_CREATE) == 0); | |
58 | assert_se(read_resource_pressure(path, PRESSURE_TYPE_SOME, &rp) == 0); | |
59 | assert_se(LOAD_INT(rp.avg10) == 0); | |
60 | assert_se(LOAD_FRAC(rp.avg10) == 22); | |
61 | assert_se(LOAD_INT(rp.avg60) == 0); | |
62 | assert_se(LOAD_FRAC(rp.avg60) == 17); | |
63 | assert_se(LOAD_INT(rp.avg300) == 1); | |
64 | assert_se(LOAD_FRAC(rp.avg300) == 11); | |
65 | assert_se(rp.total == 58761459); | |
66 | assert(read_resource_pressure(path, PRESSURE_TYPE_FULL, &rp) == 0); | |
67 | assert_se(LOAD_INT(rp.avg10) == 0); | |
68 | assert_se(LOAD_FRAC(rp.avg10) == 23); | |
69 | assert_se(LOAD_INT(rp.avg60) == 0); | |
70 | assert_se(LOAD_FRAC(rp.avg60) == 16); | |
71 | assert_se(LOAD_INT(rp.avg300) == 1); | |
72 | assert_se(LOAD_FRAC(rp.avg300) == 8); | |
73 | assert_se(rp.total == 58464525); | |
74 | } | |
75 | ||
76 | int main(void) { | |
77 | test_setup_logging(LOG_DEBUG); | |
78 | test_read_mem_pressure(); | |
79 | return 0; | |
80 | } |