cgroup: improve cg_mask_to_string a bit, and add tests for it
This commit is contained in:
parent
00b4a24743
commit
ec635a2d21
|
@ -2244,10 +2244,10 @@ int cg_trim_everywhere(CGroupMask supported, const char *path, bool delete_root)
|
||||||
}
|
}
|
||||||
|
|
||||||
int cg_mask_to_string(CGroupMask mask, char **ret) {
|
int cg_mask_to_string(CGroupMask mask, char **ret) {
|
||||||
const char *controllers[_CGROUP_CONTROLLER_MAX + 1];
|
_cleanup_free_ char *s = NULL;
|
||||||
|
size_t n = 0, allocated = 0;
|
||||||
|
bool space = false;
|
||||||
CGroupController c;
|
CGroupController c;
|
||||||
int i = 0;
|
|
||||||
char *s;
|
|
||||||
|
|
||||||
assert(ret);
|
assert(ret);
|
||||||
|
|
||||||
|
@ -2257,19 +2257,32 @@ int cg_mask_to_string(CGroupMask mask, char **ret) {
|
||||||
}
|
}
|
||||||
|
|
||||||
for (c = 0; c < _CGROUP_CONTROLLER_MAX; c++) {
|
for (c = 0; c < _CGROUP_CONTROLLER_MAX; c++) {
|
||||||
|
const char *k;
|
||||||
|
size_t l;
|
||||||
|
|
||||||
if (!(mask & CGROUP_CONTROLLER_TO_MASK(c)))
|
if (!(mask & CGROUP_CONTROLLER_TO_MASK(c)))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
controllers[i++] = cgroup_controller_to_string(c);
|
k = cgroup_controller_to_string(c);
|
||||||
controllers[i] = NULL;
|
l = strlen(k);
|
||||||
|
|
||||||
|
if (!GREEDY_REALLOC(s, allocated, n + space + l + 1))
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
if (space)
|
||||||
|
s[n] = ' ';
|
||||||
|
memcpy(s + n + space, k, l);
|
||||||
|
n += space + l;
|
||||||
|
|
||||||
|
space = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
s = strv_join((char **)controllers, NULL);
|
assert(s);
|
||||||
if (!s)
|
|
||||||
return -ENOMEM;
|
|
||||||
|
|
||||||
|
s[n] = 0;
|
||||||
*ret = s;
|
*ret = s;
|
||||||
|
s = NULL;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
#include "macro.h"
|
#include "macro.h"
|
||||||
#include "manager.h"
|
#include "manager.h"
|
||||||
#include "rm-rf.h"
|
#include "rm-rf.h"
|
||||||
|
#include "string-util.h"
|
||||||
#include "test-helper.h"
|
#include "test-helper.h"
|
||||||
#include "tests.h"
|
#include "tests.h"
|
||||||
#include "unit.h"
|
#include "unit.h"
|
||||||
|
@ -117,10 +118,38 @@ static int test_cgroup_mask(void) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void test_cg_mask_to_string_one(CGroupMask mask, const char *t) {
|
||||||
|
_cleanup_free_ char *b = NULL;
|
||||||
|
|
||||||
|
assert_se(cg_mask_to_string(mask, &b) >= 0);
|
||||||
|
assert_se(streq_ptr(b, t));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void test_cg_mask_to_string(void) {
|
||||||
|
test_cg_mask_to_string_one(0, NULL);
|
||||||
|
test_cg_mask_to_string_one(_CGROUP_MASK_ALL, "cpu cpuacct io blkio memory devices pids");
|
||||||
|
test_cg_mask_to_string_one(CGROUP_MASK_CPU, "cpu");
|
||||||
|
test_cg_mask_to_string_one(CGROUP_MASK_CPUACCT, "cpuacct");
|
||||||
|
test_cg_mask_to_string_one(CGROUP_MASK_IO, "io");
|
||||||
|
test_cg_mask_to_string_one(CGROUP_MASK_BLKIO, "blkio");
|
||||||
|
test_cg_mask_to_string_one(CGROUP_MASK_MEMORY, "memory");
|
||||||
|
test_cg_mask_to_string_one(CGROUP_MASK_DEVICES, "devices");
|
||||||
|
test_cg_mask_to_string_one(CGROUP_MASK_PIDS, "pids");
|
||||||
|
test_cg_mask_to_string_one(CGROUP_MASK_CPU|CGROUP_MASK_CPUACCT, "cpu cpuacct");
|
||||||
|
test_cg_mask_to_string_one(CGROUP_MASK_CPU|CGROUP_MASK_PIDS, "cpu pids");
|
||||||
|
test_cg_mask_to_string_one(CGROUP_MASK_CPUACCT|CGROUP_MASK_PIDS, "cpuacct pids");
|
||||||
|
test_cg_mask_to_string_one(CGROUP_MASK_DEVICES|CGROUP_MASK_PIDS, "devices pids");
|
||||||
|
test_cg_mask_to_string_one(CGROUP_MASK_IO|CGROUP_MASK_BLKIO, "io blkio");
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char* argv[]) {
|
int main(int argc, char* argv[]) {
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
|
|
||||||
|
log_parse_environment();
|
||||||
|
log_open();
|
||||||
|
|
||||||
TEST_REQ_RUNNING_SYSTEMD(rc = test_cgroup_mask());
|
TEST_REQ_RUNNING_SYSTEMD(rc = test_cgroup_mask());
|
||||||
|
test_cg_mask_to_string();
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue