Merge pull request #22649 from keszybz/symlink-enablement-yet-again-punish-me-harder
Fixups to the unit enablement logic
This commit is contained in:
@@ -97,7 +97,7 @@ int main(int argc, char *argv[]) {
|
||||
|
||||
/* The simple tests succeeded. Now let's try full unit-based use-case. */
|
||||
|
||||
assert_se(manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_BASIC, &m) >= 0);
|
||||
assert_se(manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_BASIC, &m) >= 0);
|
||||
assert_se(manager_startup(m, NULL, NULL, NULL) >= 0);
|
||||
|
||||
assert_se(u = unit_new(m, sizeof(Service)));
|
||||
|
||||
@@ -301,7 +301,7 @@ int main(int argc, char *argv[]) {
|
||||
assert_se(set_unit_path(unit_dir) >= 0);
|
||||
assert_se(runtime_dir = setup_fake_runtime_dir());
|
||||
|
||||
assert_se(manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_BASIC, &m) >= 0);
|
||||
assert_se(manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_BASIC, &m) >= 0);
|
||||
assert_se(manager_startup(m, NULL, NULL, NULL) >= 0);
|
||||
|
||||
assert_se(test_bpf_cgroup_programs(m,
|
||||
|
||||
@@ -90,7 +90,7 @@ int main(int argc, char *argv[]) {
|
||||
assert_se(set_unit_path(unit_dir) >= 0);
|
||||
assert_se(runtime_dir = setup_fake_runtime_dir());
|
||||
|
||||
assert_se(manager_new(UNIT_FILE_SYSTEM, MANAGER_TEST_RUN_BASIC, &m) >= 0);
|
||||
assert_se(manager_new(LOOKUP_SCOPE_SYSTEM, MANAGER_TEST_RUN_BASIC, &m) >= 0);
|
||||
assert_se(manager_startup(m, NULL, NULL, NULL) >= 0);
|
||||
|
||||
/* We need to enable access to the filesystem where the binary is so we
|
||||
|
||||
@@ -42,7 +42,7 @@ TEST_RET(cgroup_mask, .sd_booted = true) {
|
||||
assert_se(get_testdata_dir("units", &unit_dir) >= 0);
|
||||
assert_se(set_unit_path(unit_dir) >= 0);
|
||||
assert_se(runtime_dir = setup_fake_runtime_dir());
|
||||
r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_BASIC, &m);
|
||||
r = manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_BASIC, &m);
|
||||
if (IN_SET(r, -EPERM, -EACCES)) {
|
||||
log_error_errno(r, "manager_new: %m");
|
||||
return log_tests_skipped("cannot create manager");
|
||||
|
||||
@@ -26,7 +26,7 @@ TEST_RET(default_memory_low, .sd_booted = true) {
|
||||
assert_se(get_testdata_dir("units", &unit_dir) >= 0);
|
||||
assert_se(set_unit_path(unit_dir) >= 0);
|
||||
assert_se(runtime_dir = setup_fake_runtime_dir());
|
||||
r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_BASIC, &m);
|
||||
r = manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_BASIC, &m);
|
||||
if (IN_SET(r, -EPERM, -EACCES)) {
|
||||
log_error_errno(r, "manager_new: %m");
|
||||
return log_tests_skipped("cannot create manager");
|
||||
|
||||
@@ -93,7 +93,7 @@ int main(int argc, char *argv[]) {
|
||||
assert_se(set_unit_path(unit_dir) >= 0);
|
||||
assert_se(runtime_dir = setup_fake_runtime_dir());
|
||||
|
||||
r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_BASIC, &m);
|
||||
r = manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_BASIC, &m);
|
||||
if (manager_errno_skip_test(r))
|
||||
return log_tests_skipped_errno(r, "manager_new");
|
||||
assert_se(r >= 0);
|
||||
|
||||
+23
-59
@@ -9,7 +9,12 @@
|
||||
#include "tests.h"
|
||||
#include "tmpfile-util.h"
|
||||
|
||||
/* In case of repeating keys, later entries win. */
|
||||
|
||||
#define env_file_1 \
|
||||
"a=a\n" \
|
||||
"a=b\n" \
|
||||
"a=b\n" \
|
||||
"a=a\n" \
|
||||
"b=b\\\n" \
|
||||
"c\n" \
|
||||
@@ -55,18 +60,11 @@
|
||||
|
||||
|
||||
TEST(load_env_file_1) {
|
||||
_cleanup_strv_free_ char **data = NULL;
|
||||
int r;
|
||||
|
||||
_cleanup_(unlink_tempfilep) char name[] = "/tmp/test-load-env-file.XXXXXX";
|
||||
_cleanup_close_ int fd;
|
||||
assert_se(write_tmpfile(name, env_file_1) == 0);
|
||||
|
||||
fd = mkostemp_safe(name);
|
||||
assert_se(fd >= 0);
|
||||
assert_se(write(fd, env_file_1, strlen(env_file_1)) == strlen(env_file_1));
|
||||
|
||||
r = load_env_file(NULL, name, &data);
|
||||
assert_se(r == 0);
|
||||
_cleanup_strv_free_ char **data = NULL;
|
||||
assert_se(load_env_file(NULL, name, &data) == 0);
|
||||
assert_se(streq(data[0], "a=a"));
|
||||
assert_se(streq(data[1], "b=bc"));
|
||||
assert_se(streq(data[2], "d=de f"));
|
||||
@@ -77,50 +75,30 @@ TEST(load_env_file_1) {
|
||||
}
|
||||
|
||||
TEST(load_env_file_2) {
|
||||
_cleanup_strv_free_ char **data = NULL;
|
||||
int r;
|
||||
|
||||
_cleanup_(unlink_tempfilep) char name[] = "/tmp/test-load-env-file.XXXXXX";
|
||||
_cleanup_close_ int fd;
|
||||
assert_se(write_tmpfile(name, env_file_2) == 0);
|
||||
|
||||
fd = mkostemp_safe(name);
|
||||
assert_se(fd >= 0);
|
||||
assert_se(write(fd, env_file_2, strlen(env_file_2)) == strlen(env_file_2));
|
||||
|
||||
r = load_env_file(NULL, name, &data);
|
||||
assert_se(r == 0);
|
||||
_cleanup_strv_free_ char **data = NULL;
|
||||
assert_se(load_env_file(NULL, name, &data) == 0);
|
||||
assert_se(streq(data[0], "a=a"));
|
||||
assert_se(data[1] == NULL);
|
||||
}
|
||||
|
||||
TEST(load_env_file_3) {
|
||||
_cleanup_strv_free_ char **data = NULL;
|
||||
int r;
|
||||
|
||||
_cleanup_(unlink_tempfilep) char name[] = "/tmp/test-load-env-file.XXXXXX";
|
||||
_cleanup_close_ int fd;
|
||||
assert_se(write_tmpfile(name, env_file_3) == 0);
|
||||
|
||||
fd = mkostemp_safe(name);
|
||||
assert_se(fd >= 0);
|
||||
assert_se(write(fd, env_file_3, strlen(env_file_3)) == strlen(env_file_3));
|
||||
|
||||
r = load_env_file(NULL, name, &data);
|
||||
assert_se(r == 0);
|
||||
_cleanup_strv_free_ char **data = NULL;
|
||||
assert_se(load_env_file(NULL, name, &data) == 0);
|
||||
assert_se(data == NULL);
|
||||
}
|
||||
|
||||
TEST(load_env_file_4) {
|
||||
_cleanup_strv_free_ char **data = NULL;
|
||||
_cleanup_(unlink_tempfilep) char name[] = "/tmp/test-load-env-file.XXXXXX";
|
||||
_cleanup_close_ int fd;
|
||||
int r;
|
||||
assert_se(write_tmpfile(name, env_file_4) == 0);
|
||||
|
||||
fd = mkostemp_safe(name);
|
||||
assert_se(fd >= 0);
|
||||
assert_se(write(fd, env_file_4, strlen(env_file_4)) == strlen(env_file_4));
|
||||
|
||||
r = load_env_file(NULL, name, &data);
|
||||
assert_se(r == 0);
|
||||
_cleanup_strv_free_ char **data = NULL;
|
||||
assert_se(load_env_file(NULL, name, &data) == 0);
|
||||
assert_se(streq(data[0], "HWMON_MODULES=coretemp f71882fg"));
|
||||
assert_se(streq(data[1], "MODULE_0=coretemp"));
|
||||
assert_se(streq(data[2], "MODULE_1=f71882fg"));
|
||||
@@ -128,36 +106,22 @@ TEST(load_env_file_4) {
|
||||
}
|
||||
|
||||
TEST(load_env_file_5) {
|
||||
_cleanup_strv_free_ char **data = NULL;
|
||||
int r;
|
||||
|
||||
_cleanup_(unlink_tempfilep) char name[] = "/tmp/test-load-env-file.XXXXXX";
|
||||
_cleanup_close_ int fd;
|
||||
assert_se(write_tmpfile(name, env_file_5) == 0);
|
||||
|
||||
fd = mkostemp_safe(name);
|
||||
assert_se(fd >= 0);
|
||||
assert_se(write(fd, env_file_5, strlen(env_file_5)) == strlen(env_file_5));
|
||||
|
||||
r = load_env_file(NULL, name, &data);
|
||||
assert_se(r == 0);
|
||||
_cleanup_strv_free_ char **data = NULL;
|
||||
assert_se(load_env_file(NULL, name, &data) == 0);
|
||||
assert_se(streq(data[0], "a="));
|
||||
assert_se(streq(data[1], "b="));
|
||||
assert_se(data[2] == NULL);
|
||||
}
|
||||
|
||||
TEST(load_env_file_6) {
|
||||
_cleanup_strv_free_ char **data = NULL;
|
||||
int r;
|
||||
|
||||
_cleanup_(unlink_tempfilep) char name[] = "/tmp/test-load-env-file.XXXXXX";
|
||||
_cleanup_close_ int fd;
|
||||
assert_se(write_tmpfile(name, env_file_6) == 0);
|
||||
|
||||
fd = mkostemp_safe(name);
|
||||
assert_se(fd >= 0);
|
||||
assert_se(write(fd, env_file_6, strlen(env_file_6)) == strlen(env_file_6));
|
||||
|
||||
r = load_env_file(NULL, name, &data);
|
||||
assert_se(r == 0);
|
||||
_cleanup_strv_free_ char **data = NULL;
|
||||
assert_se(load_env_file(NULL, name, &data) == 0);
|
||||
assert_se(streq(data[0], "a= n t x y '"));
|
||||
assert_se(streq(data[1], "b=$'"));
|
||||
assert_se(streq(data[2], "c= \\n\\t\\$\\`\\\\\n"));
|
||||
|
||||
@@ -1117,7 +1117,7 @@ typedef struct test_entry {
|
||||
|
||||
#define entry(x) {x, #x}
|
||||
|
||||
static int run_tests(UnitFileScope scope, const test_entry tests[], char **patterns) {
|
||||
static int run_tests(LookupScope scope, const test_entry tests[], char **patterns) {
|
||||
_cleanup_(manager_freep) Manager *m = NULL;
|
||||
int r;
|
||||
|
||||
@@ -1239,11 +1239,11 @@ int main(int argc, char *argv[]) {
|
||||
assert_se(unsetenv("VAR2") == 0);
|
||||
assert_se(unsetenv("VAR3") == 0);
|
||||
|
||||
r = run_tests(UNIT_FILE_USER, user_tests, argv + 1);
|
||||
r = run_tests(LOOKUP_SCOPE_USER, user_tests, argv + 1);
|
||||
if (r != 0)
|
||||
return r;
|
||||
|
||||
r = run_tests(UNIT_FILE_SYSTEM, system_tests, argv + 1);
|
||||
r = run_tests(LOOKUP_SCOPE_SYSTEM, system_tests, argv + 1);
|
||||
if (r != 0)
|
||||
return r;
|
||||
|
||||
@@ -1265,11 +1265,11 @@ int main(int argc, char *argv[]) {
|
||||
|
||||
can_unshare = false;
|
||||
|
||||
r = run_tests(UNIT_FILE_USER, user_tests, argv + 1);
|
||||
r = run_tests(LOOKUP_SCOPE_USER, user_tests, argv + 1);
|
||||
if (r != 0)
|
||||
return r;
|
||||
|
||||
return run_tests(UNIT_FILE_SYSTEM, system_tests, argv + 1);
|
||||
return run_tests(LOOKUP_SCOPE_SYSTEM, system_tests, argv + 1);
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
|
||||
@@ -109,8 +109,7 @@ TEST(parse_env_file) {
|
||||
"eleven", &eleven,
|
||||
"twelve", &twelve,
|
||||
"thirteen", &thirteen);
|
||||
|
||||
assert_se(r >= 0);
|
||||
assert_se(r == 0);
|
||||
|
||||
log_info("one=[%s]", strna(one));
|
||||
log_info("two=[%s]", strna(two));
|
||||
|
||||
+258
-255
File diff suppressed because it is too large
Load Diff
+36
-36
@@ -32,13 +32,13 @@ int main(int argc, char* argv[]) {
|
||||
test_setup_logging(LOG_DEBUG);
|
||||
|
||||
h = hashmap_new(&string_hash_ops);
|
||||
r = unit_file_get_list(UNIT_FILE_SYSTEM, NULL, h, NULL, NULL);
|
||||
r = unit_file_get_list(LOOKUP_SCOPE_SYSTEM, NULL, h, NULL, NULL);
|
||||
assert_se(r == 0);
|
||||
|
||||
HASHMAP_FOREACH(p, h) {
|
||||
UnitFileState s = _UNIT_FILE_STATE_INVALID;
|
||||
|
||||
r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, basename(p->path), &s);
|
||||
r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, basename(p->path), &s);
|
||||
|
||||
assert_se((r < 0 && p->state == UNIT_FILE_BAD) ||
|
||||
(p->state == s));
|
||||
@@ -52,18 +52,18 @@ int main(int argc, char* argv[]) {
|
||||
|
||||
log_info("/*** enable **/");
|
||||
|
||||
r = unit_file_enable(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
|
||||
r = unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
|
||||
assert_se(r >= 0);
|
||||
|
||||
log_info("/*** enable2 **/");
|
||||
|
||||
r = unit_file_enable(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
|
||||
r = unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
|
||||
assert_se(r >= 0);
|
||||
|
||||
dump_changes(changes, n_changes);
|
||||
unit_file_changes_free(changes, n_changes);
|
||||
|
||||
r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, files[0], &state);
|
||||
r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, files[0], &state);
|
||||
assert_se(r >= 0);
|
||||
assert_se(state == UNIT_FILE_ENABLED);
|
||||
|
||||
@@ -71,13 +71,13 @@ int main(int argc, char* argv[]) {
|
||||
changes = NULL;
|
||||
n_changes = 0;
|
||||
|
||||
r = unit_file_disable(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
|
||||
r = unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
|
||||
assert_se(r >= 0);
|
||||
|
||||
dump_changes(changes, n_changes);
|
||||
unit_file_changes_free(changes, n_changes);
|
||||
|
||||
r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, files[0], &state);
|
||||
r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, files[0], &state);
|
||||
assert_se(r >= 0);
|
||||
assert_se(state == UNIT_FILE_DISABLED);
|
||||
|
||||
@@ -85,16 +85,16 @@ int main(int argc, char* argv[]) {
|
||||
changes = NULL;
|
||||
n_changes = 0;
|
||||
|
||||
r = unit_file_mask(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
|
||||
r = unit_file_mask(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
|
||||
assert_se(r >= 0);
|
||||
log_info("/*** mask2 ***/");
|
||||
r = unit_file_mask(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
|
||||
r = unit_file_mask(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
|
||||
assert_se(r >= 0);
|
||||
|
||||
dump_changes(changes, n_changes);
|
||||
unit_file_changes_free(changes, n_changes);
|
||||
|
||||
r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, files[0], &state);
|
||||
r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, files[0], &state);
|
||||
assert_se(r >= 0);
|
||||
assert_se(state == UNIT_FILE_MASKED);
|
||||
|
||||
@@ -102,16 +102,16 @@ int main(int argc, char* argv[]) {
|
||||
changes = NULL;
|
||||
n_changes = 0;
|
||||
|
||||
r = unit_file_unmask(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
|
||||
r = unit_file_unmask(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
|
||||
assert_se(r >= 0);
|
||||
log_info("/*** unmask2 ***/");
|
||||
r = unit_file_unmask(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
|
||||
r = unit_file_unmask(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
|
||||
assert_se(r >= 0);
|
||||
|
||||
dump_changes(changes, n_changes);
|
||||
unit_file_changes_free(changes, n_changes);
|
||||
|
||||
r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, files[0], &state);
|
||||
r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, files[0], &state);
|
||||
assert_se(r >= 0);
|
||||
assert_se(state == UNIT_FILE_DISABLED);
|
||||
|
||||
@@ -119,13 +119,13 @@ int main(int argc, char* argv[]) {
|
||||
changes = NULL;
|
||||
n_changes = 0;
|
||||
|
||||
r = unit_file_mask(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
|
||||
r = unit_file_mask(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
|
||||
assert_se(r >= 0);
|
||||
|
||||
dump_changes(changes, n_changes);
|
||||
unit_file_changes_free(changes, n_changes);
|
||||
|
||||
r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, files[0], &state);
|
||||
r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, files[0], &state);
|
||||
assert_se(r >= 0);
|
||||
assert_se(state == UNIT_FILE_MASKED);
|
||||
|
||||
@@ -133,16 +133,16 @@ int main(int argc, char* argv[]) {
|
||||
changes = NULL;
|
||||
n_changes = 0;
|
||||
|
||||
r = unit_file_disable(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
|
||||
r = unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
|
||||
assert_se(r >= 0);
|
||||
log_info("/*** disable2 ***/");
|
||||
r = unit_file_disable(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
|
||||
r = unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
|
||||
assert_se(r >= 0);
|
||||
|
||||
dump_changes(changes, n_changes);
|
||||
unit_file_changes_free(changes, n_changes);
|
||||
|
||||
r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, files[0], &state);
|
||||
r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, files[0], &state);
|
||||
assert_se(r >= 0);
|
||||
assert_se(state == UNIT_FILE_MASKED);
|
||||
|
||||
@@ -150,13 +150,13 @@ int main(int argc, char* argv[]) {
|
||||
changes = NULL;
|
||||
n_changes = 0;
|
||||
|
||||
r = unit_file_unmask(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
|
||||
r = unit_file_unmask(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
|
||||
assert_se(r >= 0);
|
||||
|
||||
dump_changes(changes, n_changes);
|
||||
unit_file_changes_free(changes, n_changes);
|
||||
|
||||
r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, files[0], &state);
|
||||
r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, files[0], &state);
|
||||
assert_se(r >= 0);
|
||||
assert_se(state == UNIT_FILE_DISABLED);
|
||||
|
||||
@@ -164,13 +164,13 @@ int main(int argc, char* argv[]) {
|
||||
changes = NULL;
|
||||
n_changes = 0;
|
||||
|
||||
r = unit_file_enable(UNIT_FILE_SYSTEM, 0, NULL, (char**) files2, &changes, &n_changes);
|
||||
r = unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files2, &changes, &n_changes);
|
||||
assert_se(r >= 0);
|
||||
|
||||
dump_changes(changes, n_changes);
|
||||
unit_file_changes_free(changes, n_changes);
|
||||
|
||||
r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, basename(files2[0]), &state);
|
||||
r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, basename(files2[0]), &state);
|
||||
assert_se(r >= 0);
|
||||
assert_se(state == UNIT_FILE_ENABLED);
|
||||
|
||||
@@ -178,26 +178,26 @@ int main(int argc, char* argv[]) {
|
||||
changes = NULL;
|
||||
n_changes = 0;
|
||||
|
||||
r = unit_file_disable(UNIT_FILE_SYSTEM, 0, NULL, STRV_MAKE(basename(files2[0])), &changes, &n_changes);
|
||||
r = unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, NULL, STRV_MAKE(basename(files2[0])), &changes, &n_changes);
|
||||
assert_se(r >= 0);
|
||||
|
||||
dump_changes(changes, n_changes);
|
||||
unit_file_changes_free(changes, n_changes);
|
||||
|
||||
r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, basename(files2[0]), &state);
|
||||
r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, basename(files2[0]), &state);
|
||||
assert_se(r < 0);
|
||||
|
||||
log_info("/*** link files2 ***/");
|
||||
changes = NULL;
|
||||
n_changes = 0;
|
||||
|
||||
r = unit_file_link(UNIT_FILE_SYSTEM, 0, NULL, (char**) files2, &changes, &n_changes);
|
||||
r = unit_file_link(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files2, &changes, &n_changes);
|
||||
assert_se(r >= 0);
|
||||
|
||||
dump_changes(changes, n_changes);
|
||||
unit_file_changes_free(changes, n_changes);
|
||||
|
||||
r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, basename(files2[0]), &state);
|
||||
r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, basename(files2[0]), &state);
|
||||
assert_se(r >= 0);
|
||||
assert_se(state == UNIT_FILE_LINKED);
|
||||
|
||||
@@ -205,26 +205,26 @@ int main(int argc, char* argv[]) {
|
||||
changes = NULL;
|
||||
n_changes = 0;
|
||||
|
||||
r = unit_file_disable(UNIT_FILE_SYSTEM, 0, NULL, STRV_MAKE(basename(files2[0])), &changes, &n_changes);
|
||||
r = unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, NULL, STRV_MAKE(basename(files2[0])), &changes, &n_changes);
|
||||
assert_se(r >= 0);
|
||||
|
||||
dump_changes(changes, n_changes);
|
||||
unit_file_changes_free(changes, n_changes);
|
||||
|
||||
r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, basename(files2[0]), &state);
|
||||
r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, basename(files2[0]), &state);
|
||||
assert_se(r < 0);
|
||||
|
||||
log_info("/*** link files2 ***/");
|
||||
changes = NULL;
|
||||
n_changes = 0;
|
||||
|
||||
r = unit_file_link(UNIT_FILE_SYSTEM, 0, NULL, (char**) files2, &changes, &n_changes);
|
||||
r = unit_file_link(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files2, &changes, &n_changes);
|
||||
assert_se(r >= 0);
|
||||
|
||||
dump_changes(changes, n_changes);
|
||||
unit_file_changes_free(changes, n_changes);
|
||||
|
||||
r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, basename(files2[0]), &state);
|
||||
r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, basename(files2[0]), &state);
|
||||
assert_se(r >= 0);
|
||||
assert_se(state == UNIT_FILE_LINKED);
|
||||
|
||||
@@ -232,13 +232,13 @@ int main(int argc, char* argv[]) {
|
||||
changes = NULL;
|
||||
n_changes = 0;
|
||||
|
||||
r = unit_file_reenable(UNIT_FILE_SYSTEM, 0, NULL, (char**) files2, &changes, &n_changes);
|
||||
r = unit_file_reenable(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files2, &changes, &n_changes);
|
||||
assert_se(r >= 0);
|
||||
|
||||
dump_changes(changes, n_changes);
|
||||
unit_file_changes_free(changes, n_changes);
|
||||
|
||||
r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, basename(files2[0]), &state);
|
||||
r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, basename(files2[0]), &state);
|
||||
assert_se(r >= 0);
|
||||
assert_se(state == UNIT_FILE_ENABLED);
|
||||
|
||||
@@ -246,25 +246,25 @@ int main(int argc, char* argv[]) {
|
||||
changes = NULL;
|
||||
n_changes = 0;
|
||||
|
||||
r = unit_file_disable(UNIT_FILE_SYSTEM, 0, NULL, STRV_MAKE(basename(files2[0])), &changes, &n_changes);
|
||||
r = unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, NULL, STRV_MAKE(basename(files2[0])), &changes, &n_changes);
|
||||
assert_se(r >= 0);
|
||||
|
||||
dump_changes(changes, n_changes);
|
||||
unit_file_changes_free(changes, n_changes);
|
||||
|
||||
r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, basename(files2[0]), &state);
|
||||
r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, basename(files2[0]), &state);
|
||||
assert_se(r < 0);
|
||||
log_info("/*** preset files ***/");
|
||||
changes = NULL;
|
||||
n_changes = 0;
|
||||
|
||||
r = unit_file_preset(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, UNIT_FILE_PRESET_FULL, &changes, &n_changes);
|
||||
r = unit_file_preset(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files, UNIT_FILE_PRESET_FULL, &changes, &n_changes);
|
||||
assert_se(r >= 0);
|
||||
|
||||
dump_changes(changes, n_changes);
|
||||
unit_file_changes_free(changes, n_changes);
|
||||
|
||||
r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, basename(files[0]), &state);
|
||||
r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, basename(files[0]), &state);
|
||||
assert_se(r >= 0);
|
||||
assert_se(state == UNIT_FILE_ENABLED);
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@ TEST_RET(unit_file_get_set) {
|
||||
h = hashmap_new(&string_hash_ops);
|
||||
assert_se(h);
|
||||
|
||||
r = unit_file_get_list(UNIT_FILE_SYSTEM, NULL, h, NULL, NULL);
|
||||
r = unit_file_get_list(LOOKUP_SCOPE_SYSTEM, NULL, h, NULL, NULL);
|
||||
if (IN_SET(r, -EPERM, -EACCES))
|
||||
return log_tests_skipped_errno(r, "unit_file_get_list");
|
||||
|
||||
@@ -101,7 +101,7 @@ TEST(config_parse_exec) {
|
||||
_cleanup_(manager_freep) Manager *m = NULL;
|
||||
_cleanup_(unit_freep) Unit *u = NULL;
|
||||
|
||||
r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_MINIMAL, &m);
|
||||
r = manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_MINIMAL, &m);
|
||||
if (manager_errno_skip_test(r)) {
|
||||
log_notice_errno(r, "Skipping test: manager_new: %m");
|
||||
return;
|
||||
@@ -445,7 +445,7 @@ TEST(config_parse_log_extra_fields) {
|
||||
_cleanup_(unit_freep) Unit *u = NULL;
|
||||
ExecContext c = {};
|
||||
|
||||
r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_MINIMAL, &m);
|
||||
r = manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_MINIMAL, &m);
|
||||
if (manager_errno_skip_test(r)) {
|
||||
log_notice_errno(r, "Skipping test: manager_new: %m");
|
||||
return;
|
||||
@@ -510,59 +510,74 @@ TEST(install_printf, .sd_booted = true) {
|
||||
assert_se(user = uid_to_name(getuid()));
|
||||
assert_se(asprintf(&uid, UID_FMT, getuid()) >= 0);
|
||||
|
||||
#define expect(src, pattern, result) \
|
||||
#define expect(scope, src, pattern, result) \
|
||||
do { \
|
||||
_cleanup_free_ char *t = NULL; \
|
||||
_cleanup_free_ char \
|
||||
*d1 = strdup(i.name), \
|
||||
*d2 = strdup(i.path); \
|
||||
assert_se(install_name_printf(&src, pattern, NULL, &t) >= 0 || !result); \
|
||||
_cleanup_free_ char *t = NULL, \
|
||||
*d1 = ASSERT_PTR(strdup(i.name)), \
|
||||
*d2 = ASSERT_PTR(strdup(i.path)); \
|
||||
int r = install_name_printf(scope, &src, pattern, &t); \
|
||||
assert_se(result ? r >= 0 : r < 0); \
|
||||
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); \
|
||||
} else \
|
||||
assert_se(!t); \
|
||||
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, "%j", "name");
|
||||
expect(i, "%g", group);
|
||||
expect(i, "%G", gid);
|
||||
expect(i, "%u", user);
|
||||
expect(i, "%U", uid);
|
||||
expect(LOOKUP_SCOPE_SYSTEM, i, "%n", "name.service");
|
||||
expect(LOOKUP_SCOPE_SYSTEM, i, "%N", "name");
|
||||
expect(LOOKUP_SCOPE_SYSTEM, i, "%p", "name");
|
||||
expect(LOOKUP_SCOPE_SYSTEM, i, "%i", "");
|
||||
expect(LOOKUP_SCOPE_SYSTEM, i, "%j", "name");
|
||||
expect(LOOKUP_SCOPE_SYSTEM, i, "%g", "root");
|
||||
expect(LOOKUP_SCOPE_SYSTEM, i, "%G", "0");
|
||||
expect(LOOKUP_SCOPE_SYSTEM, i, "%u", "root");
|
||||
expect(LOOKUP_SCOPE_SYSTEM, i, "%U", "0");
|
||||
|
||||
expect(i, "%m", mid);
|
||||
expect(i, "%b", bid);
|
||||
expect(i, "%H", host);
|
||||
expect(LOOKUP_SCOPE_SYSTEM, i, "%m", mid);
|
||||
expect(LOOKUP_SCOPE_SYSTEM, i, "%b", bid);
|
||||
expect(LOOKUP_SCOPE_SYSTEM, i, "%H", host);
|
||||
|
||||
expect(i2, "%g", group);
|
||||
expect(i2, "%G", gid);
|
||||
expect(i2, "%u", user);
|
||||
expect(i2, "%U", uid);
|
||||
expect(LOOKUP_SCOPE_SYSTEM, i2, "%g", "root");
|
||||
expect(LOOKUP_SCOPE_SYSTEM, i2, "%G", "0");
|
||||
expect(LOOKUP_SCOPE_SYSTEM, i2, "%u", "root");
|
||||
expect(LOOKUP_SCOPE_SYSTEM, i2, "%U", "0");
|
||||
|
||||
expect(i3, "%n", "name@inst.service");
|
||||
expect(i3, "%N", "name@inst");
|
||||
expect(i3, "%p", "name");
|
||||
expect(i3, "%g", group);
|
||||
expect(i3, "%G", gid);
|
||||
expect(i3, "%u", user);
|
||||
expect(i3, "%U", uid);
|
||||
expect(LOOKUP_SCOPE_USER, i2, "%g", group);
|
||||
expect(LOOKUP_SCOPE_USER, i2, "%G", gid);
|
||||
expect(LOOKUP_SCOPE_USER, i2, "%u", user);
|
||||
expect(LOOKUP_SCOPE_USER, i2, "%U", uid);
|
||||
|
||||
expect(i3, "%m", mid);
|
||||
expect(i3, "%b", bid);
|
||||
expect(i3, "%H", host);
|
||||
/* gcc-12.0.1-0.9.fc36.x86_64 insist that streq(…, NULL) is called,
|
||||
* even though the call is inside of a conditional where the pointer is checked. :( */
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wnonnull"
|
||||
expect(LOOKUP_SCOPE_GLOBAL, i2, "%g", NULL);
|
||||
expect(LOOKUP_SCOPE_GLOBAL, i2, "%G", NULL);
|
||||
expect(LOOKUP_SCOPE_GLOBAL, i2, "%u", NULL);
|
||||
expect(LOOKUP_SCOPE_GLOBAL, i2, "%U", NULL);
|
||||
#pragma GCC diagnostic pop
|
||||
|
||||
expect(i4, "%g", group);
|
||||
expect(i4, "%G", gid);
|
||||
expect(i4, "%u", user);
|
||||
expect(i4, "%U", uid);
|
||||
expect(LOOKUP_SCOPE_SYSTEM, i3, "%n", "name@inst.service");
|
||||
expect(LOOKUP_SCOPE_SYSTEM, i3, "%N", "name@inst");
|
||||
expect(LOOKUP_SCOPE_SYSTEM, i3, "%p", "name");
|
||||
expect(LOOKUP_SCOPE_USER, i3, "%g", group);
|
||||
expect(LOOKUP_SCOPE_USER, i3, "%G", gid);
|
||||
expect(LOOKUP_SCOPE_USER, i3, "%u", user);
|
||||
expect(LOOKUP_SCOPE_USER, i3, "%U", uid);
|
||||
|
||||
expect(LOOKUP_SCOPE_SYSTEM, i3, "%m", mid);
|
||||
expect(LOOKUP_SCOPE_SYSTEM, i3, "%b", bid);
|
||||
expect(LOOKUP_SCOPE_SYSTEM, i3, "%H", host);
|
||||
|
||||
expect(LOOKUP_SCOPE_USER, i4, "%g", group);
|
||||
expect(LOOKUP_SCOPE_USER, i4, "%G", gid);
|
||||
expect(LOOKUP_SCOPE_USER, i4, "%u", user);
|
||||
expect(LOOKUP_SCOPE_USER, i4, "%U", uid);
|
||||
}
|
||||
|
||||
static uint64_t make_cap(int cap) {
|
||||
@@ -791,7 +806,7 @@ TEST(config_parse_unit_env_file) {
|
||||
_cleanup_strv_free_ char **files = NULL;
|
||||
int r;
|
||||
|
||||
r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_MINIMAL, &m);
|
||||
r = manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_MINIMAL, &m);
|
||||
if (manager_errno_skip_test(r)) {
|
||||
log_notice_errno(r, "Skipping test: manager_new: %m");
|
||||
return;
|
||||
@@ -924,7 +939,7 @@ TEST(unit_is_recursive_template_dependency) {
|
||||
Unit *u;
|
||||
int r;
|
||||
|
||||
r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_MINIMAL, &m);
|
||||
r = manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_MINIMAL, &m);
|
||||
if (manager_errno_skip_test(r)) {
|
||||
log_notice_errno(r, "Skipping test: manager_new: %m");
|
||||
return;
|
||||
|
||||
@@ -2,8 +2,11 @@
|
||||
|
||||
#include <errno.h>
|
||||
|
||||
#include "fs-util.h"
|
||||
#include "log.h"
|
||||
#include "os-util.h"
|
||||
#include "string-util.h"
|
||||
#include "strv.h"
|
||||
#include "tests.h"
|
||||
|
||||
TEST(path_is_os_tree) {
|
||||
@@ -12,4 +15,61 @@ TEST(path_is_os_tree) {
|
||||
assert_se(path_is_os_tree("/idontexist") == -ENOENT);
|
||||
}
|
||||
|
||||
TEST(parse_os_release) {
|
||||
/* Let's assume that we're running in a valid system, so os-release is available */
|
||||
_cleanup_free_ char *id = NULL, *id2 = NULL, *name = NULL, *foobar = NULL;
|
||||
assert_se(parse_os_release(NULL, "ID", &id) == 0);
|
||||
log_info("ID: %s", id);
|
||||
|
||||
assert_se(setenv("SYSTEMD_OS_RELEASE", "/dev/null", 1) == 0);
|
||||
assert_se(parse_os_release(NULL, "ID", &id2) == 0);
|
||||
log_info("ID: %s", strnull(id2));
|
||||
|
||||
_cleanup_(unlink_tempfilep) char tmpfile[] = "/tmp/test-os-util.XXXXXX";
|
||||
assert_se(write_tmpfile(tmpfile,
|
||||
"ID=the-id \n"
|
||||
"NAME=the-name") == 0);
|
||||
|
||||
assert_se(setenv("SYSTEMD_OS_RELEASE", tmpfile, 1) == 0);
|
||||
assert_se(parse_os_release(NULL, "ID", &id, "NAME", &name) == 0);
|
||||
log_info("ID: %s NAME: %s", id, name);
|
||||
assert_se(streq(id, "the-id"));
|
||||
assert_se(streq(name, "the-name"));
|
||||
|
||||
_cleanup_(unlink_tempfilep) char tmpfile2[] = "/tmp/test-os-util.XXXXXX";
|
||||
assert_se(write_tmpfile(tmpfile2,
|
||||
"ID=\"ignored\" \n"
|
||||
"ID=\"the-id\" \n"
|
||||
"NAME='the-name'") == 0);
|
||||
|
||||
assert_se(setenv("SYSTEMD_OS_RELEASE", tmpfile2, 1) == 0);
|
||||
assert_se(parse_os_release(NULL, "ID", &id, "NAME", &name) == 0);
|
||||
log_info("ID: %s NAME: %s", id, name);
|
||||
assert_se(streq(id, "the-id"));
|
||||
assert_se(streq(name, "the-name"));
|
||||
|
||||
assert_se(parse_os_release(NULL, "FOOBAR", &foobar) == 0);
|
||||
log_info("FOOBAR: %s", strnull(foobar));
|
||||
assert_se(foobar == NULL);
|
||||
|
||||
assert_se(unsetenv("SYSTEMD_OS_RELEASE") == 0);
|
||||
}
|
||||
|
||||
TEST(load_os_release_pairs) {
|
||||
_cleanup_(unlink_tempfilep) char tmpfile[] = "/tmp/test-os-util.XXXXXX";
|
||||
assert_se(write_tmpfile(tmpfile,
|
||||
"ID=\"ignored\" \n"
|
||||
"ID=\"the-id\" \n"
|
||||
"NAME='the-name'") == 0);
|
||||
|
||||
assert_se(setenv("SYSTEMD_OS_RELEASE", tmpfile, 1) == 0);
|
||||
|
||||
_cleanup_strv_free_ char **pairs = NULL;
|
||||
assert_se(load_os_release_pairs(NULL, &pairs) == 0);
|
||||
assert_se(strv_equal(pairs, STRV_MAKE("ID", "the-id",
|
||||
"NAME", "the-name")));
|
||||
|
||||
assert_se(unsetenv("SYSTEMD_OS_RELEASE") == 0);
|
||||
}
|
||||
|
||||
DEFINE_TEST_MAIN(LOG_DEBUG);
|
||||
|
||||
+15
-15
@@ -11,7 +11,7 @@
|
||||
#include "tests.h"
|
||||
#include "tmpfile-util.h"
|
||||
|
||||
static void test_paths_one(UnitFileScope scope) {
|
||||
static void test_paths_one(LookupScope scope) {
|
||||
_cleanup_(rm_rf_physical_and_freep) char *tmp = NULL;
|
||||
_cleanup_(lookup_paths_free) LookupPaths lp_without_env = {};
|
||||
_cleanup_(lookup_paths_free) LookupPaths lp_with_env = {};
|
||||
@@ -34,9 +34,9 @@ static void test_paths_one(UnitFileScope scope) {
|
||||
}
|
||||
|
||||
TEST(paths) {
|
||||
test_paths_one(UNIT_FILE_SYSTEM);
|
||||
test_paths_one(UNIT_FILE_USER);
|
||||
test_paths_one(UNIT_FILE_GLOBAL);
|
||||
test_paths_one(LOOKUP_SCOPE_SYSTEM);
|
||||
test_paths_one(LOOKUP_SCOPE_USER);
|
||||
test_paths_one(LOOKUP_SCOPE_GLOBAL);
|
||||
}
|
||||
|
||||
TEST(user_and_global_paths) {
|
||||
@@ -48,8 +48,8 @@ TEST(user_and_global_paths) {
|
||||
assert_se(unsetenv("XDG_DATA_DIRS") == 0);
|
||||
assert_se(unsetenv("XDG_CONFIG_DIRS") == 0);
|
||||
|
||||
assert_se(lookup_paths_init(&lp_global, UNIT_FILE_GLOBAL, 0, NULL) == 0);
|
||||
assert_se(lookup_paths_init(&lp_user, UNIT_FILE_USER, 0, NULL) == 0);
|
||||
assert_se(lookup_paths_init(&lp_global, LOOKUP_SCOPE_GLOBAL, 0, NULL) == 0);
|
||||
assert_se(lookup_paths_init(&lp_user, LOOKUP_SCOPE_USER, 0, NULL) == 0);
|
||||
g = lp_global.search_path;
|
||||
u = lp_user.search_path;
|
||||
|
||||
@@ -70,7 +70,7 @@ TEST(user_and_global_paths) {
|
||||
log_info("+ %s", *p);
|
||||
}
|
||||
|
||||
static void test_generator_binary_paths_one(UnitFileScope scope) {
|
||||
static void test_generator_binary_paths_one(LookupScope scope) {
|
||||
_cleanup_(rm_rf_physical_and_freep) char *tmp = NULL;
|
||||
_cleanup_strv_free_ char **gp_without_env = NULL;
|
||||
_cleanup_strv_free_ char **env_gp_without_env = NULL;
|
||||
@@ -85,13 +85,13 @@ static void test_generator_binary_paths_one(UnitFileScope scope) {
|
||||
assert_se(unsetenv("SYSTEMD_ENVIRONMENT_GENERATOR_PATH") == 0);
|
||||
|
||||
gp_without_env = generator_binary_paths(scope);
|
||||
env_gp_without_env = env_generator_binary_paths(scope == UNIT_FILE_SYSTEM ? true : false);
|
||||
env_gp_without_env = env_generator_binary_paths(scope == LOOKUP_SCOPE_SYSTEM ? true : false);
|
||||
|
||||
log_info("Generators dirs (%s):", scope == UNIT_FILE_SYSTEM ? "system" : "user");
|
||||
log_info("Generators dirs (%s):", scope == LOOKUP_SCOPE_SYSTEM ? "system" : "user");
|
||||
STRV_FOREACH(dir, gp_without_env)
|
||||
log_info(" %s", *dir);
|
||||
|
||||
log_info("Environment generators dirs (%s):", scope == UNIT_FILE_SYSTEM ? "system" : "user");
|
||||
log_info("Environment generators dirs (%s):", scope == LOOKUP_SCOPE_SYSTEM ? "system" : "user");
|
||||
STRV_FOREACH(dir, env_gp_without_env)
|
||||
log_info(" %s", *dir);
|
||||
|
||||
@@ -104,13 +104,13 @@ static void test_generator_binary_paths_one(UnitFileScope scope) {
|
||||
assert_se(setenv("SYSTEMD_ENVIRONMENT_GENERATOR_PATH", systemd_env_generator_path, 1) == 0);
|
||||
|
||||
gp_with_env = generator_binary_paths(scope);
|
||||
env_gp_with_env = env_generator_binary_paths(scope == UNIT_FILE_SYSTEM ? true : false);
|
||||
env_gp_with_env = env_generator_binary_paths(scope == LOOKUP_SCOPE_SYSTEM ? true : false);
|
||||
|
||||
log_info("Generators dirs (%s):", scope == UNIT_FILE_SYSTEM ? "system" : "user");
|
||||
log_info("Generators dirs (%s):", scope == LOOKUP_SCOPE_SYSTEM ? "system" : "user");
|
||||
STRV_FOREACH(dir, gp_with_env)
|
||||
log_info(" %s", *dir);
|
||||
|
||||
log_info("Environment generators dirs (%s):", scope == UNIT_FILE_SYSTEM ? "system" : "user");
|
||||
log_info("Environment generators dirs (%s):", scope == LOOKUP_SCOPE_SYSTEM ? "system" : "user");
|
||||
STRV_FOREACH(dir, env_gp_with_env)
|
||||
log_info(" %s", *dir);
|
||||
|
||||
@@ -119,8 +119,8 @@ static void test_generator_binary_paths_one(UnitFileScope scope) {
|
||||
}
|
||||
|
||||
TEST(generator_binary_paths) {
|
||||
test_generator_binary_paths_one(UNIT_FILE_SYSTEM);
|
||||
test_generator_binary_paths_one(UNIT_FILE_USER);
|
||||
test_generator_binary_paths_one(LOOKUP_SCOPE_SYSTEM);
|
||||
test_generator_binary_paths_one(LOOKUP_SCOPE_USER);
|
||||
}
|
||||
|
||||
DEFINE_TEST_MAIN(LOG_DEBUG);
|
||||
|
||||
@@ -33,7 +33,7 @@ static int setup_test(Manager **m) {
|
||||
if (r == -ENOMEDIUM)
|
||||
return log_tests_skipped("cgroupfs not available");
|
||||
|
||||
r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_BASIC, &tmp);
|
||||
r = manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_BASIC, &tmp);
|
||||
if (manager_errno_skip_test(r))
|
||||
return log_tests_skipped_errno(r, "manager_new");
|
||||
assert_se(r >= 0);
|
||||
|
||||
@@ -30,7 +30,7 @@ int main(int argc, char *argv[]) {
|
||||
assert_se(set_unit_path(unit_dir) >= 0);
|
||||
assert_se(runtime_dir = setup_fake_runtime_dir());
|
||||
|
||||
r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_BASIC, &m);
|
||||
r = manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_BASIC, &m);
|
||||
if (manager_errno_skip_test(r))
|
||||
return log_tests_skipped_errno(r, "manager_new");
|
||||
assert_se(r >= 0);
|
||||
|
||||
@@ -135,7 +135,7 @@ int main(int argc, char *argv[]) {
|
||||
assert_se(set_unit_path(unit_dir) >= 0);
|
||||
assert_se(runtime_dir = setup_fake_runtime_dir());
|
||||
|
||||
assert_se(manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_BASIC, &m) >= 0);
|
||||
assert_se(manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_BASIC, &m) >= 0);
|
||||
assert_se(manager_startup(m, NULL, NULL, NULL) >= 0);
|
||||
|
||||
assert_se(test_socket_bind(m, "socket_bind_test.service", netcat_path, "2000", STRV_MAKE("2000"), STRV_MAKE("any")) >= 0);
|
||||
|
||||
@@ -228,17 +228,12 @@ TEST(passfd_read) {
|
||||
|
||||
if (r == 0) {
|
||||
/* Child */
|
||||
char tmpfile[] = "/tmp/test-socket-util-passfd-read-XXXXXX";
|
||||
_cleanup_close_ int tmpfd = -1;
|
||||
|
||||
pair[0] = safe_close(pair[0]);
|
||||
|
||||
tmpfd = mkostemp_safe(tmpfile);
|
||||
assert_se(tmpfd >= 0);
|
||||
assert_se(write(tmpfd, file_contents, strlen(file_contents)) == (ssize_t) strlen(file_contents));
|
||||
tmpfd = safe_close(tmpfd);
|
||||
char tmpfile[] = "/tmp/test-socket-util-passfd-read-XXXXXX";
|
||||
assert_se(write_tmpfile(tmpfile, file_contents) == 0);
|
||||
|
||||
tmpfd = open(tmpfile, O_RDONLY);
|
||||
_cleanup_close_ int tmpfd = open(tmpfile, O_RDONLY);
|
||||
assert_se(tmpfd >= 0);
|
||||
assert_se(unlink(tmpfile) == 0);
|
||||
|
||||
@@ -277,16 +272,12 @@ TEST(passfd_contents_read) {
|
||||
/* Child */
|
||||
struct iovec iov = IOVEC_INIT_STRING(wire_contents);
|
||||
char tmpfile[] = "/tmp/test-socket-util-passfd-contents-read-XXXXXX";
|
||||
_cleanup_close_ int tmpfd = -1;
|
||||
|
||||
pair[0] = safe_close(pair[0]);
|
||||
|
||||
tmpfd = mkostemp_safe(tmpfile);
|
||||
assert_se(tmpfd >= 0);
|
||||
assert_se(write(tmpfd, file_contents, strlen(file_contents)) == (ssize_t) strlen(file_contents));
|
||||
tmpfd = safe_close(tmpfd);
|
||||
assert_se(write_tmpfile(tmpfile, file_contents) == 0);
|
||||
|
||||
tmpfd = open(tmpfile, O_RDONLY);
|
||||
_cleanup_close_ int tmpfd = open(tmpfile, O_RDONLY);
|
||||
assert_se(tmpfd >= 0);
|
||||
assert_se(unlink(tmpfile) == 0);
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
#include "string-util.h"
|
||||
#include "strv.h"
|
||||
#include "tests.h"
|
||||
#include "unit-file.h"
|
||||
|
||||
static void test_specifier_escape_one(const char *a, const char *b) {
|
||||
_cleanup_free_ char *x = NULL;
|
||||
@@ -46,7 +47,7 @@ TEST(specifier_escape_strv) {
|
||||
static const Specifier specifier_table[] = {
|
||||
COMMON_SYSTEM_SPECIFIERS,
|
||||
|
||||
COMMON_CREDS_SPECIFIERS,
|
||||
COMMON_CREDS_SPECIFIERS(LOOKUP_SCOPE_USER),
|
||||
{ 'h', specifier_user_home, NULL },
|
||||
|
||||
COMMON_TMP_SPECIFIERS,
|
||||
@@ -138,4 +139,18 @@ TEST(specifiers) {
|
||||
}
|
||||
}
|
||||
|
||||
TEST(specifiers_missing_data_ok) {
|
||||
_cleanup_free_ char *resolved = NULL;
|
||||
|
||||
assert_se(setenv("SYSTEMD_OS_RELEASE", "/dev/null", 1) == 0);
|
||||
assert_se(specifier_printf("%A-%B-%M-%o-%w-%W", SIZE_MAX, specifier_table, NULL, NULL, &resolved) >= 0);
|
||||
assert_se(streq(resolved, "-----"));
|
||||
|
||||
assert_se(setenv("SYSTEMD_OS_RELEASE", "/nosuchfileordirectory", 1) == 0);
|
||||
assert_se(specifier_printf("%A-%B-%M-%o-%w-%W", SIZE_MAX, specifier_table, NULL, NULL, &resolved) == -EUNATCH);
|
||||
assert_se(streq(resolved, "-----"));
|
||||
|
||||
assert_se(unsetenv("SYSTEMD_OS_RELEASE") == 0);
|
||||
}
|
||||
|
||||
DEFINE_TEST_MAIN(LOG_DEBUG);
|
||||
|
||||
@@ -18,6 +18,30 @@
|
||||
#include "tests.h"
|
||||
#include "tmpfile-util.h"
|
||||
|
||||
TEST(null_or_empty_path) {
|
||||
assert_se(null_or_empty_path("/dev/null") == 1);
|
||||
assert_se(null_or_empty_path("/dev/tty") == 1); /* We assume that any character device is "empty", bleh. */
|
||||
assert_se(null_or_empty_path("../../../../../../../../../../../../../../../../../../../../dev/null") == 1);
|
||||
assert_se(null_or_empty_path("/proc/self/exe") == 0);
|
||||
assert_se(null_or_empty_path("/nosuchfileordir") == -ENOENT);
|
||||
}
|
||||
|
||||
TEST(null_or_empty_path_with_root) {
|
||||
assert_se(null_or_empty_path_with_root("/dev/null", NULL) == 1);
|
||||
assert_se(null_or_empty_path_with_root("/dev/null", "/") == 1);
|
||||
assert_se(null_or_empty_path_with_root("/dev/null", "/.././../") == 1);
|
||||
assert_se(null_or_empty_path_with_root("/dev/null", "/.././..") == 1);
|
||||
assert_se(null_or_empty_path_with_root("../../../../../../../../../../../../../../../../../../../../dev/null", NULL) == 1);
|
||||
assert_se(null_or_empty_path_with_root("../../../../../../../../../../../../../../../../../../../../dev/null", "/") == 1);
|
||||
assert_se(null_or_empty_path_with_root("/proc/self/exe", NULL) == 0);
|
||||
assert_se(null_or_empty_path_with_root("/proc/self/exe", "/") == 0);
|
||||
assert_se(null_or_empty_path_with_root("/nosuchfileordir", NULL) == -ENOENT);
|
||||
assert_se(null_or_empty_path_with_root("/nosuchfileordir", "/.././../") == -ENOENT);
|
||||
assert_se(null_or_empty_path_with_root("/nosuchfileordir", "/.././..") == -ENOENT);
|
||||
assert_se(null_or_empty_path_with_root("/foobar/barbar/dev/null", "/foobar/barbar") == 1);
|
||||
assert_se(null_or_empty_path_with_root("/foobar/barbar/dev/null", "/foobar/barbar/") == 1);
|
||||
}
|
||||
|
||||
TEST(files_same) {
|
||||
_cleanup_close_ int fd = -1;
|
||||
char name[] = "/tmp/test-files_same.XXXXXX";
|
||||
|
||||
+15
-15
@@ -8,20 +8,20 @@
|
||||
#include "unit-file.h"
|
||||
|
||||
TEST(unit_validate_alias_symlink_and_warn) {
|
||||
assert_se(unit_validate_alias_symlink_and_warn("/path/a.service", "/other/b.service") == 0);
|
||||
assert_se(unit_validate_alias_symlink_and_warn("/path/a.service", "/other/b.socket") == -EXDEV);
|
||||
assert_se(unit_validate_alias_symlink_and_warn("/path/a.service", "/other/b.foobar") == -EXDEV);
|
||||
assert_se(unit_validate_alias_symlink_and_warn("/path/a@.service", "/other/b@.service") == 0);
|
||||
assert_se(unit_validate_alias_symlink_and_warn("/path/a@.service", "/other/b@.socket") == -EXDEV);
|
||||
assert_se(unit_validate_alias_symlink_and_warn("/path/a@XXX.service", "/other/b@YYY.service") == -EXDEV);
|
||||
assert_se(unit_validate_alias_symlink_and_warn("/path/a@XXX.service", "/other/b@YYY.socket") == -EXDEV);
|
||||
assert_se(unit_validate_alias_symlink_and_warn("/path/a@.service", "/other/b@YYY.service") == -EXDEV);
|
||||
assert_se(unit_validate_alias_symlink_and_warn("/path/a@XXX.service", "/other/b@XXX.service") == 0);
|
||||
assert_se(unit_validate_alias_symlink_and_warn("/path/a@XXX.service", "/other/b@.service") == 0);
|
||||
assert_se(unit_validate_alias_symlink_and_warn("/path/a@.service", "/other/b.service") == -EXDEV);
|
||||
assert_se(unit_validate_alias_symlink_and_warn("/path/a.service", "/other/b@.service") == -EXDEV);
|
||||
assert_se(unit_validate_alias_symlink_and_warn("/path/a@.slice", "/other/b.slice") == -EINVAL);
|
||||
assert_se(unit_validate_alias_symlink_and_warn("/path/a.slice", "/other/b.slice") == -EINVAL);
|
||||
assert_se(unit_validate_alias_symlink_or_warn(LOG_INFO, "/path/a.service", "/other/b.service") == 0);
|
||||
assert_se(unit_validate_alias_symlink_or_warn(LOG_INFO, "/path/a.service", "/other/b.socket") == -EXDEV);
|
||||
assert_se(unit_validate_alias_symlink_or_warn(LOG_INFO, "/path/a.service", "/other/b.foobar") == -EXDEV);
|
||||
assert_se(unit_validate_alias_symlink_or_warn(LOG_INFO, "/path/a@.service", "/other/b@.service") == 0);
|
||||
assert_se(unit_validate_alias_symlink_or_warn(LOG_INFO, "/path/a@.service", "/other/b@.socket") == -EXDEV);
|
||||
assert_se(unit_validate_alias_symlink_or_warn(LOG_INFO, "/path/a@XXX.service", "/other/b@YYY.service") == -EXDEV);
|
||||
assert_se(unit_validate_alias_symlink_or_warn(LOG_INFO, "/path/a@XXX.service", "/other/b@YYY.socket") == -EXDEV);
|
||||
assert_se(unit_validate_alias_symlink_or_warn(LOG_INFO, "/path/a@.service", "/other/b@YYY.service") == -EXDEV);
|
||||
assert_se(unit_validate_alias_symlink_or_warn(LOG_INFO, "/path/a@XXX.service", "/other/b@XXX.service") == 0);
|
||||
assert_se(unit_validate_alias_symlink_or_warn(LOG_INFO, "/path/a@XXX.service", "/other/b@.service") == 0);
|
||||
assert_se(unit_validate_alias_symlink_or_warn(LOG_INFO, "/path/a@.service", "/other/b.service") == -EXDEV);
|
||||
assert_se(unit_validate_alias_symlink_or_warn(LOG_INFO, "/path/a.service", "/other/b@.service") == -EXDEV);
|
||||
assert_se(unit_validate_alias_symlink_or_warn(LOG_INFO, "/path/a@.slice", "/other/b.slice") == -EINVAL);
|
||||
assert_se(unit_validate_alias_symlink_or_warn(LOG_INFO, "/path/a.slice", "/other/b.slice") == -EINVAL);
|
||||
}
|
||||
|
||||
TEST(unit_file_build_name_map) {
|
||||
@@ -35,7 +35,7 @@ TEST(unit_file_build_name_map) {
|
||||
|
||||
ids = strv_skip(saved_argv, 1);
|
||||
|
||||
assert_se(lookup_paths_init(&lp, UNIT_FILE_SYSTEM, 0, NULL) >= 0);
|
||||
assert_se(lookup_paths_init(&lp, LOOKUP_SCOPE_SYSTEM, 0, NULL) >= 0);
|
||||
|
||||
assert_se(unit_file_build_name_map(&lp, &mtime, &unit_ids, &unit_names, NULL) == 1);
|
||||
|
||||
|
||||
@@ -228,7 +228,7 @@ TEST_RET(unit_printf, .sd_booted = true) {
|
||||
assert_se(get_home_dir(&home) >= 0);
|
||||
assert_se(get_shell(&shell) >= 0);
|
||||
|
||||
r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_MINIMAL, &m);
|
||||
r = manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_MINIMAL, &m);
|
||||
if (manager_errno_skip_test(r))
|
||||
return log_tests_skipped_errno(r, "manager_new");
|
||||
assert_se(r == 0);
|
||||
|
||||
@@ -31,7 +31,7 @@ TEST(deserialize_exec_command) {
|
||||
_cleanup_(manager_freep) Manager *m = NULL;
|
||||
int r;
|
||||
|
||||
r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_MINIMAL, &m);
|
||||
r = manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_MINIMAL, &m);
|
||||
if (manager_errno_skip_test(r)) {
|
||||
log_notice_errno(r, "Skipping test: manager_new: %m");
|
||||
return;
|
||||
|
||||
@@ -26,7 +26,7 @@ int main(int argc, char *argv[]) {
|
||||
|
||||
assert_se(runtime_dir = setup_fake_runtime_dir());
|
||||
|
||||
assert_se(manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_BASIC, &m) >= 0);
|
||||
assert_se(manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_BASIC, &m) >= 0);
|
||||
assert_se(manager_startup(m, NULL, NULL, NULL) >= 0);
|
||||
|
||||
assert_se(a = unit_new(m, sizeof(Service)));
|
||||
|
||||
Reference in New Issue
Block a user