static void test_install_printf(void) { char name[] = "name.service", path[] = "/run/systemd/system/name.service"; UnitFileInstallInfo i = { .name = name, .path = path, }; UnitFileInstallInfo i2 = { .name= name, .path = path, }; char name3[] = "*****@*****.**", path3[] = "/run/systemd/system/name.service"; UnitFileInstallInfo i3 = { .name = name3, .path = path3, }; UnitFileInstallInfo i4 = { .name = name3, .path = path3, }; _cleanup_free_ char *mid = NULL, *bid = NULL, *host = NULL, *uid = NULL, *user = NULL; assert_se(specifier_machine_id('m', NULL, NULL, &mid) >= 0 && mid); assert_se(specifier_boot_id('b', NULL, NULL, &bid) >= 0 && bid); assert_se((host = gethostname_malloc())); assert_se((user = uid_to_name(getuid()))); assert_se(asprintf(&uid, UID_FMT, getuid()) >= 0); #define expect(src, pattern, result) \ do { \ _cleanup_free_ char *t = NULL; \ _cleanup_free_ char \ *d1 = strdup(i.name), \ *d2 = strdup(i.path); \ assert_se(install_full_printf(&src, pattern, &t) >= 0 || !result); \ memzero(i.name, strlen(i.name)); \ memzero(i.path, strlen(i.path)); \ assert_se(d1 && d2); \ if (result) { \ printf("%s\n", t); \ assert_se(streq(t, result)); \ } else assert_se(t == NULL); \ strcpy(i.name, d1); \ strcpy(i.path, d2); \ } while (false) expect(i, "%n", "name.service"); expect(i, "%N", "name"); expect(i, "%p", "name"); expect(i, "%i", ""); expect(i, "%u", user); expect(i, "%U", uid); expect(i, "%m", mid); expect(i, "%b", bid); expect(i, "%H", host); expect(i2, "%u", user); expect(i2, "%U", uid); expect(i3, "%n", "*****@*****.**"); expect(i3, "%N", "name@inst"); expect(i3, "%p", "name"); expect(i3, "%u", user); expect(i3, "%U", uid); expect(i3, "%m", mid); expect(i3, "%b", bid); expect(i3, "%H", host); expect(i4, "%u", user); expect(i4, "%U", uid); }
static void test_install_printf(void) { char name[] = "name.service", path[] = "/run/systemd/system/name.service", user[] = "xxxx-no-such-user"; InstallInfo i = {name, path, user}; InstallInfo i2 = {name, path, NULL}; char name3[] = "*****@*****.**", path3[] = "/run/systemd/system/name.service"; InstallInfo i3 = {name3, path3, user}; InstallInfo i4 = {name3, path3, NULL}; _cleanup_free_ char *mid, *bid, *host; assert_se(specifier_machine_id('m', NULL, NULL, &mid) >= 0 && mid); assert_se(specifier_boot_id('b', NULL, NULL, &bid) >= 0 && bid); assert_se((host = gethostname_malloc())); #define expect(src, pattern, result) \ do { \ _cleanup_free_ char *t = NULL; \ _cleanup_free_ char \ *d1 = strdup(i.name), \ *d2 = strdup(i.path), \ *d3 = strdup(i.user); \ assert_se(install_full_printf(&src, pattern, &t) >= 0 || !result); \ memzero(i.name, strlen(i.name)); \ memzero(i.path, strlen(i.path)); \ memzero(i.user, strlen(i.user)); \ assert_se(d1 && d2 && d3); \ if (result) { \ printf("%s\n", t); \ assert_se(streq(t, result)); \ } else assert_se(t == NULL); \ strcpy(i.name, d1); \ strcpy(i.path, d2); \ strcpy(i.user, d3); \ } while(false) assert_se(setenv("USER", "root", 1) == 0); expect(i, "%n", "name.service"); expect(i, "%N", "name"); expect(i, "%p", "name"); expect(i, "%i", ""); expect(i, "%u", "xxxx-no-such-user"); DISABLE_WARNING_NONNULL; expect(i, "%U", NULL); REENABLE_WARNING; expect(i, "%m", mid); expect(i, "%b", bid); expect(i, "%H", host); expect(i2, "%u", "root"); expect(i2, "%U", "0"); expect(i3, "%n", "*****@*****.**"); expect(i3, "%N", "name@inst"); expect(i3, "%p", "name"); expect(i3, "%u", "xxxx-no-such-user"); DISABLE_WARNING_NONNULL; expect(i3, "%U", NULL); REENABLE_WARNING; expect(i3, "%m", mid); expect(i3, "%b", bid); expect(i3, "%H", host); expect(i4, "%u", "root"); expect(i4, "%U", "0"); }
static int test_unit_printf(void) { Manager *m; Unit *u, *u2; int r; _cleanup_free_ char *mid, *bid, *host, *root_uid; struct passwd *root; assert_se(specifier_machine_id('m', NULL, NULL, &mid) >= 0 && mid); assert_se(specifier_boot_id('b', NULL, NULL, &bid) >= 0 && bid); assert_se((host = gethostname_malloc())); assert_se((root = getpwnam("root"))); assert_se(asprintf(&root_uid, "%d", (int) root->pw_uid) > 0); r = manager_new(SYSTEMD_USER, &m); if (r == -EPERM || r == -EACCES || r == -EADDRINUSE) { puts("manager_new: Permission denied. Skipping test."); return EXIT_TEST_SKIP; } assert(r == 0); #define expect(unit, pattern, expected) \ { \ char *e; \ _cleanup_free_ char *t; \ assert_se(unit_full_printf(unit, pattern, &t) >= 0); \ printf("result: %s\nexpect: %s\n", t, expected); \ if ((e = endswith(expected, "*"))) \ assert(strncmp(t, e, e-expected)); \ else \ assert(streq(t, expected)); \ } assert_se(setenv("USER", "root", 1) == 0); assert_se(setenv("HOME", "/root", 1) == 0); assert_se(u = unit_new(m, sizeof(Service))); assert_se(unit_add_name(u, "blah.service") == 0); assert_se(unit_add_name(u, "blah.service") == 0); /* general tests */ expect(u, "%%", "%"); expect(u, "%%s", "%s"); expect(u, "%", ""); // REALLY? /* normal unit */ expect(u, "%n", "blah.service"); expect(u, "%N", "blah"); expect(u, "%p", "blah"); expect(u, "%P", "blah"); expect(u, "%i", ""); expect(u, "%I", ""); expect(u, "%u", root->pw_name); expect(u, "%U", root_uid); expect(u, "%h", root->pw_dir); expect(u, "%s", "/bin/sh"); expect(u, "%m", mid); expect(u, "%b", bid); expect(u, "%H", host); expect(u, "%t", "/run/user/*"); /* templated */ assert_se(u2 = unit_new(m, sizeof(Service))); assert_se(unit_add_name(u2, "*****@*****.**") == 0); assert_se(unit_add_name(u2, "*****@*****.**") == 0); expect(u2, "%n", "*****@*****.**"); expect(u2, "%N", "blah@foo-foo"); expect(u2, "%p", "blah"); expect(u2, "%P", "blah"); expect(u2, "%i", "foo-foo"); expect(u2, "%I", "foo/foo"); expect(u2, "%u", root->pw_name); expect(u2, "%U", root_uid); expect(u2, "%h", root->pw_dir); expect(u2, "%s", "/bin/sh"); expect(u2, "%m", mid); expect(u2, "%b", bid); expect(u2, "%H", host); expect(u2, "%t", "/run/user/*"); manager_free(m); return 0; }
static int test_unit_printf(void) { Manager *m = NULL; Unit *u, *u2; int r; _cleanup_free_ char *mid = NULL, *bid = NULL, *host = NULL, *uid = NULL, *user = NULL, *shell = NULL, *home = NULL; assert_se(specifier_machine_id('m', NULL, NULL, &mid) >= 0 && mid); assert_se(specifier_boot_id('b', NULL, NULL, &bid) >= 0 && bid); assert_se(host = gethostname_malloc()); assert_se(user = getusername_malloc()); assert_se(asprintf(&uid, UID_FMT, getuid())); assert_se(get_home_dir(&home) >= 0); assert_se(get_shell(&shell) >= 0); r = manager_new(UNIT_FILE_USER, true, &m); if (r == -EPERM || r == -EACCES || r == -EADDRINUSE) { puts("manager_new: Permission denied. Skipping test."); return EXIT_TEST_SKIP; } assert_se(r == 0); #define expect(unit, pattern, expected) \ { \ char *e; \ _cleanup_free_ char *t = NULL; \ assert_se(unit_full_printf(unit, pattern, &t) >= 0); \ printf("result: %s\nexpect: %s\n", t, expected); \ if ((e = endswith(expected, "*"))) \ assert_se(strncmp(t, e, e-expected)); \ else \ assert_se(streq(t, expected)); \ } assert_se(setenv("XDG_RUNTIME_DIR", "/run/user/1/", 1) == 0); assert_se(u = unit_new(m, sizeof(Service))); assert_se(unit_add_name(u, "blah.service") == 0); assert_se(unit_add_name(u, "blah.service") == 0); /* general tests */ expect(u, "%%", "%"); expect(u, "%%s", "%s"); expect(u, "%", ""); // REALLY? /* normal unit */ expect(u, "%n", "blah.service"); expect(u, "%f", "/blah"); expect(u, "%N", "blah"); expect(u, "%p", "blah"); expect(u, "%P", "blah"); expect(u, "%i", ""); 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 */ assert_se(u2 = unit_new(m, sizeof(Service))); assert_se(unit_add_name(u2, "*****@*****.**") == 0); assert_se(unit_add_name(u2, "*****@*****.**") == 0); expect(u2, "%n", "*****@*****.**"); 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/*"); manager_free(m); #undef expect return 0; }