Merge pull request #7599 from keszybz/slice-templates
Make user@.service independent of logind
This commit is contained in:
@@ -253,13 +253,18 @@ static void test_controller_is_valid(void) {
|
||||
|
||||
static void test_slice_to_path_one(const char *unit, const char *path, int error) {
|
||||
_cleanup_free_ char *ret = NULL;
|
||||
int r;
|
||||
|
||||
assert_se(cg_slice_to_path(unit, &ret) == error);
|
||||
log_info("unit: %s", unit);
|
||||
|
||||
r = cg_slice_to_path(unit, &ret);
|
||||
log_info("actual: %s / %d", strnull(ret), r);
|
||||
log_info("expect: %s / %d", strnull(path), error);
|
||||
assert_se(r == error);
|
||||
assert_se(streq_ptr(ret, path));
|
||||
}
|
||||
|
||||
static void test_slice_to_path(void) {
|
||||
|
||||
test_slice_to_path_one("foobar.slice", "foobar.slice", 0);
|
||||
test_slice_to_path_one("foobar-waldo.slice", "foobar.slice/foobar-waldo.slice", 0);
|
||||
test_slice_to_path_one("foobar-waldo.service", NULL, -EINVAL);
|
||||
@@ -273,6 +278,15 @@ static void test_slice_to_path(void) {
|
||||
test_slice_to_path_one("foo.slice/foo--bar.slice", NULL, -EINVAL);
|
||||
test_slice_to_path_one("a-b.slice", "a.slice/a-b.slice", 0);
|
||||
test_slice_to_path_one("a-b-c-d-e.slice", "a.slice/a-b.slice/a-b-c.slice/a-b-c-d.slice/a-b-c-d-e.slice", 0);
|
||||
|
||||
test_slice_to_path_one("foobar@.slice", NULL, -EINVAL);
|
||||
test_slice_to_path_one("foobar@waldo.slice", NULL, -EINVAL);
|
||||
test_slice_to_path_one("foobar@waldo.service", NULL, -EINVAL);
|
||||
test_slice_to_path_one("-foo@-.slice", NULL, -EINVAL);
|
||||
test_slice_to_path_one("-foo@.slice", NULL, -EINVAL);
|
||||
test_slice_to_path_one("foo@-.slice", NULL, -EINVAL);
|
||||
test_slice_to_path_one("foo@@bar.slice", NULL, -EINVAL);
|
||||
test_slice_to_path_one("foo.slice/foo@@bar.slice", NULL, -EINVAL);
|
||||
}
|
||||
|
||||
static void test_shift_path_one(const char *raw, const char *root, const char *shifted) {
|
||||
|
||||
@@ -662,6 +662,7 @@ static void test_install_printf(void) {
|
||||
expect(i, "%N", "name");
|
||||
expect(i, "%p", "name");
|
||||
expect(i, "%i", "");
|
||||
expect(i, "%j", "name");
|
||||
expect(i, "%u", user);
|
||||
expect(i, "%U", uid);
|
||||
|
||||
|
||||
+81
-30
@@ -31,29 +31,39 @@
|
||||
#include "util.h"
|
||||
|
||||
static void test_unit_name_is_valid(void) {
|
||||
assert_se(unit_name_is_valid("foo.service", UNIT_NAME_ANY));
|
||||
assert_se(unit_name_is_valid("foo.service", UNIT_NAME_PLAIN));
|
||||
assert_se( unit_name_is_valid("foo.service", UNIT_NAME_ANY));
|
||||
assert_se( unit_name_is_valid("foo.service", UNIT_NAME_PLAIN));
|
||||
assert_se(!unit_name_is_valid("foo.service", UNIT_NAME_INSTANCE));
|
||||
assert_se(!unit_name_is_valid("foo.service", UNIT_NAME_TEMPLATE));
|
||||
assert_se(!unit_name_is_valid("foo.service", UNIT_NAME_INSTANCE|UNIT_NAME_TEMPLATE));
|
||||
|
||||
assert_se(unit_name_is_valid("foo@bar.service", UNIT_NAME_ANY));
|
||||
assert_se( unit_name_is_valid("foo@bar.service", UNIT_NAME_ANY));
|
||||
assert_se(!unit_name_is_valid("foo@bar.service", UNIT_NAME_PLAIN));
|
||||
assert_se(unit_name_is_valid("foo@bar.service", UNIT_NAME_INSTANCE));
|
||||
assert_se( unit_name_is_valid("foo@bar.service", UNIT_NAME_INSTANCE));
|
||||
assert_se(!unit_name_is_valid("foo@bar.service", UNIT_NAME_TEMPLATE));
|
||||
assert_se(unit_name_is_valid("foo@bar.service", UNIT_NAME_INSTANCE|UNIT_NAME_TEMPLATE));
|
||||
assert_se( unit_name_is_valid("foo@bar.service", UNIT_NAME_INSTANCE|UNIT_NAME_TEMPLATE));
|
||||
|
||||
assert_se(unit_name_is_valid("foo@.service", UNIT_NAME_ANY));
|
||||
assert_se( unit_name_is_valid("foo@bar@bar.service", UNIT_NAME_ANY));
|
||||
assert_se(!unit_name_is_valid("foo@bar@bar.service", UNIT_NAME_PLAIN));
|
||||
assert_se( unit_name_is_valid("foo@bar@bar.service", UNIT_NAME_INSTANCE));
|
||||
assert_se(!unit_name_is_valid("foo@bar@bar.service", UNIT_NAME_TEMPLATE));
|
||||
assert_se( unit_name_is_valid("foo@bar@bar.service", UNIT_NAME_INSTANCE|UNIT_NAME_TEMPLATE));
|
||||
|
||||
assert_se( unit_name_is_valid("foo@.service", UNIT_NAME_ANY));
|
||||
assert_se(!unit_name_is_valid("foo@.service", UNIT_NAME_PLAIN));
|
||||
assert_se(!unit_name_is_valid("foo@.service", UNIT_NAME_INSTANCE));
|
||||
assert_se(unit_name_is_valid("foo@.service", UNIT_NAME_TEMPLATE));
|
||||
assert_se(unit_name_is_valid("foo@.service", UNIT_NAME_INSTANCE|UNIT_NAME_TEMPLATE));
|
||||
assert_se( unit_name_is_valid("foo@.service", UNIT_NAME_TEMPLATE));
|
||||
assert_se( unit_name_is_valid("foo@.service", UNIT_NAME_INSTANCE|UNIT_NAME_TEMPLATE));
|
||||
|
||||
assert_se(!unit_name_is_valid(".service", UNIT_NAME_ANY));
|
||||
assert_se(!unit_name_is_valid("", UNIT_NAME_ANY));
|
||||
assert_se(!unit_name_is_valid("foo.waldo", UNIT_NAME_ANY));
|
||||
assert_se(!unit_name_is_valid("@.service", UNIT_NAME_ANY));
|
||||
assert_se(!unit_name_is_valid("@piep.service", UNIT_NAME_ANY));
|
||||
|
||||
assert_se( unit_name_is_valid("user@1000.slice", UNIT_NAME_ANY));
|
||||
assert_se( unit_name_is_valid("user@1000.slice", UNIT_NAME_INSTANCE));
|
||||
assert_se(!unit_name_is_valid("user@1000.slice", UNIT_NAME_TEMPLATE));
|
||||
}
|
||||
|
||||
static void test_unit_name_replace_instance_one(const char *pattern, const char *repl, const char *expected, int ret) {
|
||||
@@ -188,7 +198,7 @@ static void test_unit_name_mangle(void) {
|
||||
static int test_unit_printf(void) {
|
||||
_cleanup_free_ char *mid = NULL, *bid = NULL, *host = NULL, *uid = NULL, *user = NULL, *shell = NULL, *home = NULL;
|
||||
_cleanup_(manager_freep) Manager *m = NULL;
|
||||
Unit *u, *u2;
|
||||
Unit *u;
|
||||
int r;
|
||||
|
||||
assert_se(specifier_machine_id('m', NULL, NULL, &mid) >= 0 && mid);
|
||||
@@ -235,6 +245,9 @@ static int test_unit_printf(void) {
|
||||
expect(u, "%p", "blah");
|
||||
expect(u, "%P", "blah");
|
||||
expect(u, "%i", "");
|
||||
expect(u, "%I", "");
|
||||
expect(u, "%j", "blah");
|
||||
expect(u, "%J", "blah");
|
||||
expect(u, "%u", user);
|
||||
expect(u, "%U", uid);
|
||||
expect(u, "%h", home);
|
||||
@@ -244,24 +257,41 @@ static int test_unit_printf(void) {
|
||||
expect(u, "%t", "/run/user/*");
|
||||
|
||||
/* templated */
|
||||
assert_se(u2 = unit_new(m, sizeof(Service)));
|
||||
assert_se(unit_add_name(u2, "blah@foo-foo.service") == 0);
|
||||
assert_se(unit_add_name(u2, "blah@foo-foo.service") == 0);
|
||||
assert_se(u = unit_new(m, sizeof(Service)));
|
||||
assert_se(unit_add_name(u, "blah@foo-foo.service") == 0);
|
||||
assert_se(unit_add_name(u, "blah@foo-foo.service") == 0);
|
||||
|
||||
expect(u, "%n", "blah@foo-foo.service");
|
||||
expect(u, "%N", "blah@foo-foo");
|
||||
expect(u, "%f", "/foo/foo");
|
||||
expect(u, "%p", "blah");
|
||||
expect(u, "%P", "blah");
|
||||
expect(u, "%i", "foo-foo");
|
||||
expect(u, "%I", "foo/foo");
|
||||
expect(u, "%j", "blah");
|
||||
expect(u, "%J", "blah");
|
||||
expect(u, "%u", user);
|
||||
expect(u, "%U", uid);
|
||||
expect(u, "%h", home);
|
||||
expect(u, "%m", mid);
|
||||
expect(u, "%b", bid);
|
||||
expect(u, "%H", host);
|
||||
expect(u, "%t", "/run/user/*");
|
||||
|
||||
/* templated with components */
|
||||
assert_se(u = unit_new(m, sizeof(Slice)));
|
||||
assert_se(unit_add_name(u, "blah-blah\\x2d.slice") == 0);
|
||||
|
||||
expect(u, "%n", "blah-blah\\x2d.slice");
|
||||
expect(u, "%N", "blah-blah\\x2d");
|
||||
expect(u, "%f", "/blah/blah-");
|
||||
expect(u, "%p", "blah-blah\\x2d");
|
||||
expect(u, "%P", "blah/blah-");
|
||||
expect(u, "%i", "");
|
||||
expect(u, "%I", "");
|
||||
expect(u, "%j", "blah\\x2d");
|
||||
expect(u, "%J", "blah-");
|
||||
|
||||
expect(u2, "%n", "blah@foo-foo.service");
|
||||
expect(u2, "%N", "blah@foo-foo");
|
||||
expect(u2, "%f", "/foo/foo");
|
||||
expect(u2, "%p", "blah");
|
||||
expect(u2, "%P", "blah");
|
||||
expect(u2, "%i", "foo-foo");
|
||||
expect(u2, "%I", "foo/foo");
|
||||
expect(u2, "%u", user);
|
||||
expect(u2, "%U", uid);
|
||||
expect(u2, "%h", home);
|
||||
expect(u2, "%m", mid);
|
||||
expect(u2, "%b", bid);
|
||||
expect(u2, "%H", host);
|
||||
expect(u2, "%t", "/run/user/*");
|
||||
#undef expect
|
||||
|
||||
return 0;
|
||||
@@ -323,10 +353,10 @@ static void test_unit_name_build(void) {
|
||||
}
|
||||
|
||||
static void test_slice_name_is_valid(void) {
|
||||
assert_se(slice_name_is_valid(SPECIAL_ROOT_SLICE));
|
||||
assert_se(slice_name_is_valid("foo.slice"));
|
||||
assert_se(slice_name_is_valid("foo-bar.slice"));
|
||||
assert_se(slice_name_is_valid("foo-bar-baz.slice"));
|
||||
assert_se( slice_name_is_valid(SPECIAL_ROOT_SLICE));
|
||||
assert_se( slice_name_is_valid("foo.slice"));
|
||||
assert_se( slice_name_is_valid("foo-bar.slice"));
|
||||
assert_se( slice_name_is_valid("foo-bar-baz.slice"));
|
||||
assert_se(!slice_name_is_valid("-foo-bar-baz.slice"));
|
||||
assert_se(!slice_name_is_valid("foo-bar-baz-.slice"));
|
||||
assert_se(!slice_name_is_valid("-foo-bar-baz-.slice"));
|
||||
@@ -335,6 +365,20 @@ static void test_slice_name_is_valid(void) {
|
||||
assert_se(!slice_name_is_valid(".slice"));
|
||||
assert_se(!slice_name_is_valid(""));
|
||||
assert_se(!slice_name_is_valid("foo.service"));
|
||||
|
||||
assert_se(!slice_name_is_valid("foo@.slice"));
|
||||
assert_se(!slice_name_is_valid("foo@bar.slice"));
|
||||
assert_se(!slice_name_is_valid("foo-bar@baz.slice"));
|
||||
assert_se(!slice_name_is_valid("foo@bar@baz.slice"));
|
||||
assert_se(!slice_name_is_valid("foo@bar-baz.slice"));
|
||||
assert_se(!slice_name_is_valid("-foo-bar-baz@.slice"));
|
||||
assert_se(!slice_name_is_valid("foo-bar-baz@-.slice"));
|
||||
assert_se(!slice_name_is_valid("foo-bar-baz@a--b.slice"));
|
||||
assert_se(!slice_name_is_valid("-foo-bar-baz@-.slice"));
|
||||
assert_se(!slice_name_is_valid("foo-bar--baz@.slice"));
|
||||
assert_se(!slice_name_is_valid("foo--bar--baz@.slice"));
|
||||
assert_se(!slice_name_is_valid("@.slice"));
|
||||
assert_se(!slice_name_is_valid("foo@bar.service"));
|
||||
}
|
||||
|
||||
static void test_build_subslice(void) {
|
||||
@@ -372,6 +416,13 @@ static void test_build_parent_slice(void) {
|
||||
test_build_parent_slice_one("foo-bar-.slice", NULL, -EINVAL);
|
||||
test_build_parent_slice_one("foo-bar.service", NULL, -EINVAL);
|
||||
test_build_parent_slice_one(".slice", NULL, -EINVAL);
|
||||
test_build_parent_slice_one("foo@bar.slice", NULL, -EINVAL);
|
||||
test_build_parent_slice_one("foo-bar@baz.slice", NULL, -EINVAL);
|
||||
test_build_parent_slice_one("foo-bar--@baz.slice", NULL, -EINVAL);
|
||||
test_build_parent_slice_one("-foo-bar@bar.slice", NULL, -EINVAL);
|
||||
test_build_parent_slice_one("foo-bar@-.slice", NULL, -EINVAL);
|
||||
test_build_parent_slice_one("foo@bar.service", NULL, -EINVAL);
|
||||
test_build_parent_slice_one("@.slice", NULL, -EINVAL);
|
||||
}
|
||||
|
||||
static void test_unit_name_to_instance(void) {
|
||||
|
||||
Reference in New Issue
Block a user