mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-03-10 00:58:20 +03:00
Merge pull request #24461 from keszybz/better-unmask-message
Better unmask message when unit is masked via kernel commandline
This commit is contained in:
commit
aaf4325954
@ -2122,21 +2122,21 @@ static int send_unit_files_changed(sd_bus *bus, void *userdata) {
|
|||||||
* if possible, and fall back to generating an error from error code c.
|
* if possible, and fall back to generating an error from error code c.
|
||||||
* The error message only describes the first error.
|
* The error message only describes the first error.
|
||||||
*
|
*
|
||||||
* Coordinate with unit_file_dump_changes() in install.c.
|
* Coordinate with install_changes_dump() in install.c.
|
||||||
*/
|
*/
|
||||||
static int install_error(
|
static int install_error(
|
||||||
sd_bus_error *error,
|
sd_bus_error *error,
|
||||||
int c,
|
int c,
|
||||||
UnitFileChange *changes,
|
InstallChange *changes,
|
||||||
size_t n_changes) {
|
size_t n_changes) {
|
||||||
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
for (size_t i = 0; i < n_changes; i++)
|
for (size_t i = 0; i < n_changes; i++)
|
||||||
|
|
||||||
switch (changes[i].type_or_errno) {
|
switch (changes[i].change_or_errno) {
|
||||||
|
|
||||||
case 0 ... _UNIT_FILE_CHANGE_TYPE_MAX: /* not errors */
|
case 0 ... _INSTALL_CHANGE_MAX: /* not errors */
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
case -EEXIST:
|
case -EEXIST:
|
||||||
@ -2178,23 +2178,23 @@ static int install_error(
|
|||||||
goto found;
|
goto found;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
assert(changes[i].type_or_errno < 0); /* other errors */
|
assert(changes[i].change_or_errno < 0); /* other errors */
|
||||||
r = sd_bus_error_set_errnof(error, changes[i].type_or_errno, "File %s: %m", changes[i].path);
|
r = sd_bus_error_set_errnof(error, changes[i].change_or_errno, "File %s: %m", changes[i].path);
|
||||||
goto found;
|
goto found;
|
||||||
}
|
}
|
||||||
|
|
||||||
r = c < 0 ? c : -EINVAL;
|
r = c < 0 ? c : -EINVAL;
|
||||||
|
|
||||||
found:
|
found:
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int reply_unit_file_changes_and_free(
|
static int reply_install_changes_and_free(
|
||||||
Manager *m,
|
Manager *m,
|
||||||
sd_bus_message *message,
|
sd_bus_message *message,
|
||||||
int carries_install_info,
|
int carries_install_info,
|
||||||
UnitFileChange *changes,
|
InstallChange *changes,
|
||||||
size_t n_changes,
|
size_t n_changes,
|
||||||
sd_bus_error *error) {
|
sd_bus_error *error) {
|
||||||
|
|
||||||
@ -2202,7 +2202,7 @@ static int reply_unit_file_changes_and_free(
|
|||||||
bool bad = false, good = false;
|
bool bad = false, good = false;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
if (unit_file_changes_have_modification(changes, n_changes)) {
|
if (install_changes_have_modification(changes, n_changes)) {
|
||||||
r = bus_foreach_bus(m, NULL, send_unit_files_changed, NULL);
|
r = bus_foreach_bus(m, NULL, send_unit_files_changed, NULL);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
log_debug_errno(r, "Failed to send UnitFilesChanged signal: %m");
|
log_debug_errno(r, "Failed to send UnitFilesChanged signal: %m");
|
||||||
@ -2224,14 +2224,14 @@ static int reply_unit_file_changes_and_free(
|
|||||||
|
|
||||||
for (size_t i = 0; i < n_changes; i++) {
|
for (size_t i = 0; i < n_changes; i++) {
|
||||||
|
|
||||||
if (changes[i].type_or_errno < 0) {
|
if (changes[i].change_or_errno < 0) {
|
||||||
bad = true;
|
bad = true;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
r = sd_bus_message_append(
|
r = sd_bus_message_append(
|
||||||
reply, "(sss)",
|
reply, "(sss)",
|
||||||
unit_file_change_type_to_string(changes[i].type_or_errno),
|
install_change_to_string(changes[i].change_or_errno),
|
||||||
changes[i].path,
|
changes[i].path,
|
||||||
changes[i].source);
|
changes[i].source);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
@ -2249,23 +2249,23 @@ static int reply_unit_file_changes_and_free(
|
|||||||
if (r < 0)
|
if (r < 0)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
return sd_bus_send(NULL, reply, NULL);
|
return sd_bus_send(NULL, reply, NULL);
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int method_enable_unit_files_generic(
|
static int method_enable_unit_files_generic(
|
||||||
sd_bus_message *message,
|
sd_bus_message *message,
|
||||||
Manager *m,
|
Manager *m,
|
||||||
int (*call)(LookupScope scope, UnitFileFlags flags, const char *root_dir, char *files[], UnitFileChange **changes, size_t *n_changes),
|
int (*call)(LookupScope scope, UnitFileFlags flags, const char *root_dir, char *files[], InstallChange **changes, size_t *n_changes),
|
||||||
bool carries_install_info,
|
bool carries_install_info,
|
||||||
sd_bus_error *error) {
|
sd_bus_error *error) {
|
||||||
|
|
||||||
_cleanup_strv_free_ char **l = NULL;
|
_cleanup_strv_free_ char **l = NULL;
|
||||||
UnitFileChange *changes = NULL;
|
InstallChange *changes = NULL;
|
||||||
size_t n_changes = 0;
|
size_t n_changes = 0;
|
||||||
UnitFileFlags flags;
|
UnitFileFlags flags;
|
||||||
int r;
|
int r;
|
||||||
@ -2305,7 +2305,7 @@ static int method_enable_unit_files_generic(
|
|||||||
if (r < 0)
|
if (r < 0)
|
||||||
return install_error(error, r, changes, n_changes);
|
return install_error(error, r, changes, n_changes);
|
||||||
|
|
||||||
return reply_unit_file_changes_and_free(m, message, carries_install_info ? r : -1, changes, n_changes, error);
|
return reply_install_changes_and_free(m, message, carries_install_info ? r : -1, changes, n_changes, error);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int method_enable_unit_files_with_flags(sd_bus_message *message, void *userdata, sd_bus_error *error) {
|
static int method_enable_unit_files_with_flags(sd_bus_message *message, void *userdata, sd_bus_error *error) {
|
||||||
@ -2324,7 +2324,7 @@ static int method_link_unit_files(sd_bus_message *message, void *userdata, sd_bu
|
|||||||
return method_enable_unit_files_generic(message, userdata, unit_file_link, false, error);
|
return method_enable_unit_files_generic(message, userdata, unit_file_link, false, error);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int unit_file_preset_without_mode(LookupScope scope, UnitFileFlags flags, const char *root_dir, char **files, UnitFileChange **changes, size_t *n_changes) {
|
static int unit_file_preset_without_mode(LookupScope scope, UnitFileFlags flags, const char *root_dir, char **files, InstallChange **changes, size_t *n_changes) {
|
||||||
return unit_file_preset(scope, flags, root_dir, files, UNIT_FILE_PRESET_FULL, changes, n_changes);
|
return unit_file_preset(scope, flags, root_dir, files, UNIT_FILE_PRESET_FULL, changes, n_changes);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2339,7 +2339,7 @@ static int method_mask_unit_files(sd_bus_message *message, void *userdata, sd_bu
|
|||||||
static int method_preset_unit_files_with_mode(sd_bus_message *message, void *userdata, sd_bus_error *error) {
|
static int method_preset_unit_files_with_mode(sd_bus_message *message, void *userdata, sd_bus_error *error) {
|
||||||
|
|
||||||
_cleanup_strv_free_ char **l = NULL;
|
_cleanup_strv_free_ char **l = NULL;
|
||||||
UnitFileChange *changes = NULL;
|
InstallChange *changes = NULL;
|
||||||
size_t n_changes = 0;
|
size_t n_changes = 0;
|
||||||
Manager *m = ASSERT_PTR(userdata);
|
Manager *m = ASSERT_PTR(userdata);
|
||||||
UnitFilePresetMode preset_mode;
|
UnitFilePresetMode preset_mode;
|
||||||
@ -2377,17 +2377,17 @@ static int method_preset_unit_files_with_mode(sd_bus_message *message, void *use
|
|||||||
if (r < 0)
|
if (r < 0)
|
||||||
return install_error(error, r, changes, n_changes);
|
return install_error(error, r, changes, n_changes);
|
||||||
|
|
||||||
return reply_unit_file_changes_and_free(m, message, r, changes, n_changes, error);
|
return reply_install_changes_and_free(m, message, r, changes, n_changes, error);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int method_disable_unit_files_generic(
|
static int method_disable_unit_files_generic(
|
||||||
sd_bus_message *message,
|
sd_bus_message *message,
|
||||||
Manager *m,
|
Manager *m,
|
||||||
int (*call)(LookupScope scope, UnitFileFlags flags, const char *root_dir, char *files[], UnitFileChange **changes, size_t *n_changes),
|
int (*call)(LookupScope scope, UnitFileFlags flags, const char *root_dir, char *files[], InstallChange **changes, size_t *n_changes),
|
||||||
sd_bus_error *error) {
|
sd_bus_error *error) {
|
||||||
|
|
||||||
_cleanup_strv_free_ char **l = NULL;
|
_cleanup_strv_free_ char **l = NULL;
|
||||||
UnitFileChange *changes = NULL;
|
InstallChange *changes = NULL;
|
||||||
UnitFileFlags flags;
|
UnitFileFlags flags;
|
||||||
size_t n_changes = 0;
|
size_t n_changes = 0;
|
||||||
int r;
|
int r;
|
||||||
@ -2428,7 +2428,7 @@ static int method_disable_unit_files_generic(
|
|||||||
if (r < 0)
|
if (r < 0)
|
||||||
return install_error(error, r, changes, n_changes);
|
return install_error(error, r, changes, n_changes);
|
||||||
|
|
||||||
return reply_unit_file_changes_and_free(m, message, -1, changes, n_changes, error);
|
return reply_install_changes_and_free(m, message, -1, changes, n_changes, error);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int method_disable_unit_files_with_flags(sd_bus_message *message, void *userdata, sd_bus_error *error) {
|
static int method_disable_unit_files_with_flags(sd_bus_message *message, void *userdata, sd_bus_error *error) {
|
||||||
@ -2445,7 +2445,7 @@ static int method_unmask_unit_files(sd_bus_message *message, void *userdata, sd_
|
|||||||
|
|
||||||
static int method_revert_unit_files(sd_bus_message *message, void *userdata, sd_bus_error *error) {
|
static int method_revert_unit_files(sd_bus_message *message, void *userdata, sd_bus_error *error) {
|
||||||
_cleanup_strv_free_ char **l = NULL;
|
_cleanup_strv_free_ char **l = NULL;
|
||||||
UnitFileChange *changes = NULL;
|
InstallChange *changes = NULL;
|
||||||
size_t n_changes = 0;
|
size_t n_changes = 0;
|
||||||
Manager *m = ASSERT_PTR(userdata);
|
Manager *m = ASSERT_PTR(userdata);
|
||||||
int r;
|
int r;
|
||||||
@ -2466,11 +2466,11 @@ static int method_revert_unit_files(sd_bus_message *message, void *userdata, sd_
|
|||||||
if (r < 0)
|
if (r < 0)
|
||||||
return install_error(error, r, changes, n_changes);
|
return install_error(error, r, changes, n_changes);
|
||||||
|
|
||||||
return reply_unit_file_changes_and_free(m, message, -1, changes, n_changes, error);
|
return reply_install_changes_and_free(m, message, -1, changes, n_changes, error);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int method_set_default_target(sd_bus_message *message, void *userdata, sd_bus_error *error) {
|
static int method_set_default_target(sd_bus_message *message, void *userdata, sd_bus_error *error) {
|
||||||
UnitFileChange *changes = NULL;
|
InstallChange *changes = NULL;
|
||||||
size_t n_changes = 0;
|
size_t n_changes = 0;
|
||||||
Manager *m = ASSERT_PTR(userdata);
|
Manager *m = ASSERT_PTR(userdata);
|
||||||
const char *name;
|
const char *name;
|
||||||
@ -2496,11 +2496,11 @@ static int method_set_default_target(sd_bus_message *message, void *userdata, sd
|
|||||||
if (r < 0)
|
if (r < 0)
|
||||||
return install_error(error, r, changes, n_changes);
|
return install_error(error, r, changes, n_changes);
|
||||||
|
|
||||||
return reply_unit_file_changes_and_free(m, message, -1, changes, n_changes, error);
|
return reply_install_changes_and_free(m, message, -1, changes, n_changes, error);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int method_preset_all_unit_files(sd_bus_message *message, void *userdata, sd_bus_error *error) {
|
static int method_preset_all_unit_files(sd_bus_message *message, void *userdata, sd_bus_error *error) {
|
||||||
UnitFileChange *changes = NULL;
|
InstallChange *changes = NULL;
|
||||||
size_t n_changes = 0;
|
size_t n_changes = 0;
|
||||||
Manager *m = ASSERT_PTR(userdata);
|
Manager *m = ASSERT_PTR(userdata);
|
||||||
UnitFilePresetMode preset_mode;
|
UnitFilePresetMode preset_mode;
|
||||||
@ -2538,13 +2538,13 @@ static int method_preset_all_unit_files(sd_bus_message *message, void *userdata,
|
|||||||
if (r < 0)
|
if (r < 0)
|
||||||
return install_error(error, r, changes, n_changes);
|
return install_error(error, r, changes, n_changes);
|
||||||
|
|
||||||
return reply_unit_file_changes_and_free(m, message, -1, changes, n_changes, error);
|
return reply_install_changes_and_free(m, message, -1, changes, n_changes, error);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int method_add_dependency_unit_files(sd_bus_message *message, void *userdata, sd_bus_error *error) {
|
static int method_add_dependency_unit_files(sd_bus_message *message, void *userdata, sd_bus_error *error) {
|
||||||
_cleanup_strv_free_ char **l = NULL;
|
_cleanup_strv_free_ char **l = NULL;
|
||||||
Manager *m = ASSERT_PTR(userdata);
|
Manager *m = ASSERT_PTR(userdata);
|
||||||
UnitFileChange *changes = NULL;
|
InstallChange *changes = NULL;
|
||||||
size_t n_changes = 0;
|
size_t n_changes = 0;
|
||||||
int runtime, force, r;
|
int runtime, force, r;
|
||||||
char *target, *type;
|
char *target, *type;
|
||||||
@ -2577,12 +2577,12 @@ static int method_add_dependency_unit_files(sd_bus_message *message, void *userd
|
|||||||
if (r < 0)
|
if (r < 0)
|
||||||
return install_error(error, r, changes, n_changes);
|
return install_error(error, r, changes, n_changes);
|
||||||
|
|
||||||
return reply_unit_file_changes_and_free(m, message, -1, changes, n_changes, error);
|
return reply_install_changes_and_free(m, message, -1, changes, n_changes, error);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int method_get_unit_file_links(sd_bus_message *message, void *userdata, sd_bus_error *error) {
|
static int method_get_unit_file_links(sd_bus_message *message, void *userdata, sd_bus_error *error) {
|
||||||
_cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
|
_cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
|
||||||
UnitFileChange *changes = NULL;
|
InstallChange *changes = NULL;
|
||||||
size_t n_changes = 0, i;
|
size_t n_changes = 0, i;
|
||||||
UnitFileFlags flags;
|
UnitFileFlags flags;
|
||||||
const char *name;
|
const char *name;
|
||||||
@ -2610,7 +2610,7 @@ static int method_get_unit_file_links(sd_bus_message *message, void *userdata, s
|
|||||||
return log_error_errno(r, "Failed to get file links for %s: %m", name);
|
return log_error_errno(r, "Failed to get file links for %s: %m", name);
|
||||||
|
|
||||||
for (i = 0; i < n_changes; i++)
|
for (i = 0; i < n_changes; i++)
|
||||||
if (changes[i].type_or_errno == UNIT_FILE_UNLINK) {
|
if (changes[i].change_or_errno == INSTALL_CHANGE_UNLINK) {
|
||||||
r = sd_bus_message_append(reply, "s", changes[i].path);
|
r = sd_bus_message_append(reply, "s", changes[i].path);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
@ -1599,7 +1599,7 @@ static int start_machine(int argc, char *argv[], void *userdata) {
|
|||||||
static int enable_machine(int argc, char *argv[], void *userdata) {
|
static int enable_machine(int argc, char *argv[], void *userdata) {
|
||||||
_cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL, *reply = NULL;
|
_cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL, *reply = NULL;
|
||||||
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
|
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
|
||||||
UnitFileChange *changes = NULL;
|
InstallChange *changes = NULL;
|
||||||
size_t n_changes = 0;
|
size_t n_changes = 0;
|
||||||
const char *method = NULL;
|
const char *method = NULL;
|
||||||
sd_bus *bus = ASSERT_PTR(userdata);
|
sd_bus *bus = ASSERT_PTR(userdata);
|
||||||
@ -1671,7 +1671,7 @@ static int enable_machine(int argc, char *argv[], void *userdata) {
|
|||||||
r = 0;
|
r = 0;
|
||||||
|
|
||||||
finish:
|
finish:
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
|
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
@ -540,7 +540,7 @@ static int maybe_enable_disable(sd_bus *bus, const char *path, bool enable) {
|
|||||||
_cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL, *reply = NULL;
|
_cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL, *reply = NULL;
|
||||||
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
|
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
|
||||||
_cleanup_strv_free_ char **names = NULL;
|
_cleanup_strv_free_ char **names = NULL;
|
||||||
UnitFileChange *changes = NULL;
|
InstallChange *changes = NULL;
|
||||||
const uint64_t flags = UNIT_FILE_PORTABLE | (arg_runtime ? UNIT_FILE_RUNTIME : 0);
|
const uint64_t flags = UNIT_FILE_PORTABLE | (arg_runtime ? UNIT_FILE_RUNTIME : 0);
|
||||||
size_t n_changes = 0;
|
size_t n_changes = 0;
|
||||||
int r;
|
int r;
|
||||||
@ -582,7 +582,7 @@ static int maybe_enable_disable(sd_bus *bus, const char *path, bool enable) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
(void) bus_deserialize_and_dump_unit_file_changes(reply, arg_quiet, &changes, &n_changes);
|
(void) bus_deserialize_and_dump_unit_file_changes(reply, arg_quiet, &changes, &n_changes);
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -2668,11 +2668,11 @@ int bus_append_unit_property_assignment_many(sd_bus_message *m, UnitType t, char
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int bus_deserialize_and_dump_unit_file_changes(sd_bus_message *m, bool quiet, UnitFileChange **changes, size_t *n_changes) {
|
int bus_deserialize_and_dump_unit_file_changes(sd_bus_message *m, bool quiet, InstallChange **changes, size_t *n_changes) {
|
||||||
const char *type, *path, *source;
|
const char *type, *path, *source;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
/* changes is dereferenced when calling unit_file_dump_changes() later,
|
/* changes is dereferenced when calling install_changes_dump() later,
|
||||||
* so we have to make sure this is not NULL. */
|
* so we have to make sure this is not NULL. */
|
||||||
assert(changes);
|
assert(changes);
|
||||||
assert(n_changes);
|
assert(n_changes);
|
||||||
@ -2684,14 +2684,14 @@ int bus_deserialize_and_dump_unit_file_changes(sd_bus_message *m, bool quiet, Un
|
|||||||
while ((r = sd_bus_message_read(m, "(sss)", &type, &path, &source)) > 0) {
|
while ((r = sd_bus_message_read(m, "(sss)", &type, &path, &source)) > 0) {
|
||||||
/* We expect only "success" changes to be sent over the bus.
|
/* We expect only "success" changes to be sent over the bus.
|
||||||
Hence, reject anything negative. */
|
Hence, reject anything negative. */
|
||||||
int ch = unit_file_change_type_from_string(type);
|
int ch = install_change_from_string(type);
|
||||||
if (ch < 0) {
|
if (ch < 0) {
|
||||||
log_notice_errno(ch, "Manager reported unknown change type \"%s\" for path \"%s\", ignoring.",
|
log_notice_errno(ch, "Manager reported unknown change type \"%s\" for path \"%s\", ignoring.",
|
||||||
type, path);
|
type, path);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
r = unit_file_changes_add(changes, n_changes, ch, path, source);
|
r = install_changes_add(changes, n_changes, ch, path, source);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
@ -2702,7 +2702,7 @@ int bus_deserialize_and_dump_unit_file_changes(sd_bus_message *m, bool quiet, Un
|
|||||||
if (r < 0)
|
if (r < 0)
|
||||||
return bus_log_parse_error(r);
|
return bus_log_parse_error(r);
|
||||||
|
|
||||||
unit_file_dump_changes(0, NULL, *changes, *n_changes, quiet);
|
install_changes_dump(0, NULL, *changes, *n_changes, quiet);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@ int bus_parse_unit_info(sd_bus_message *message, UnitInfo *u);
|
|||||||
int bus_append_unit_property_assignment(sd_bus_message *m, UnitType t, const char *assignment);
|
int bus_append_unit_property_assignment(sd_bus_message *m, UnitType t, const char *assignment);
|
||||||
int bus_append_unit_property_assignment_many(sd_bus_message *m, UnitType t, char **l);
|
int bus_append_unit_property_assignment_many(sd_bus_message *m, UnitType t, char **l);
|
||||||
|
|
||||||
int bus_deserialize_and_dump_unit_file_changes(sd_bus_message *m, bool quiet, UnitFileChange **changes, size_t *n_changes);
|
int bus_deserialize_and_dump_unit_file_changes(sd_bus_message *m, bool quiet, InstallChange **changes, size_t *n_changes);
|
||||||
|
|
||||||
int unit_load_state(sd_bus *bus, const char *name, char **load_state);
|
int unit_load_state(sd_bus *bus, const char *name, char **load_state);
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
#include "user-util.h"
|
#include "user-util.h"
|
||||||
|
|
||||||
static int specifier_prefix_and_instance(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
|
static int specifier_prefix_and_instance(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
|
||||||
const UnitFileInstallInfo *i = ASSERT_PTR(userdata);
|
const InstallInfo *i = ASSERT_PTR(userdata);
|
||||||
_cleanup_free_ char *prefix = NULL;
|
_cleanup_free_ char *prefix = NULL;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
@ -36,7 +36,7 @@ static int specifier_prefix_and_instance(char specifier, const void *data, const
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int specifier_name(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
|
static int specifier_name(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
|
||||||
const UnitFileInstallInfo *i = ASSERT_PTR(userdata);
|
const InstallInfo *i = ASSERT_PTR(userdata);
|
||||||
char *ans;
|
char *ans;
|
||||||
|
|
||||||
if (unit_name_is_valid(i->name, UNIT_NAME_TEMPLATE) && i->default_instance)
|
if (unit_name_is_valid(i->name, UNIT_NAME_TEMPLATE) && i->default_instance)
|
||||||
@ -50,13 +50,13 @@ static int specifier_name(char specifier, const void *data, const char *root, co
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int specifier_prefix(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
|
static int specifier_prefix(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
|
||||||
const UnitFileInstallInfo *i = ASSERT_PTR(userdata);
|
const InstallInfo *i = ASSERT_PTR(userdata);
|
||||||
|
|
||||||
return unit_name_to_prefix(i->name, ret);
|
return unit_name_to_prefix(i->name, ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int specifier_instance(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
|
static int specifier_instance(char specifier, const void *data, const char *root, const void *userdata, char **ret) {
|
||||||
const UnitFileInstallInfo *i = ASSERT_PTR(userdata);
|
const InstallInfo *i = ASSERT_PTR(userdata);
|
||||||
char *instance;
|
char *instance;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
@ -99,7 +99,7 @@ static int specifier_last_component(char specifier, const void *data, const char
|
|||||||
|
|
||||||
int install_name_printf(
|
int install_name_printf(
|
||||||
LookupScope scope,
|
LookupScope scope,
|
||||||
const UnitFileInstallInfo *info,
|
const InstallInfo *info,
|
||||||
const char *format,
|
const char *format,
|
||||||
char **ret) {
|
char **ret) {
|
||||||
/* This is similar to unit_name_printf() */
|
/* This is similar to unit_name_printf() */
|
||||||
|
@ -6,6 +6,6 @@
|
|||||||
|
|
||||||
int install_name_printf(
|
int install_name_printf(
|
||||||
LookupScope scope,
|
LookupScope scope,
|
||||||
const UnitFileInstallInfo *info,
|
const InstallInfo *info,
|
||||||
const char *format,
|
const char *format,
|
||||||
char **ret);
|
char **ret);
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -4,12 +4,12 @@
|
|||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
typedef enum UnitFilePresetMode UnitFilePresetMode;
|
typedef enum UnitFilePresetMode UnitFilePresetMode;
|
||||||
typedef enum UnitFileChangeType UnitFileChangeType;
|
typedef enum InstallChangeType InstallChangeType;
|
||||||
typedef enum UnitFileFlags UnitFileFlags;
|
typedef enum UnitFileFlags UnitFileFlags;
|
||||||
typedef enum UnitFileType UnitFileType;
|
typedef enum InstallMode InstallMode;
|
||||||
typedef struct UnitFileChange UnitFileChange;
|
typedef struct InstallChange InstallChange;
|
||||||
typedef struct UnitFileList UnitFileList;
|
typedef struct UnitFileList UnitFileList;
|
||||||
typedef struct UnitFileInstallInfo UnitFileInstallInfo;
|
typedef struct InstallInfo InstallInfo;
|
||||||
|
|
||||||
#include "hashmap.h"
|
#include "hashmap.h"
|
||||||
#include "macro.h"
|
#include "macro.h"
|
||||||
@ -29,14 +29,15 @@ enum UnitFilePresetMode {
|
|||||||
/* This enum type is anonymous, since we usually store it in an 'int', as we overload it with negative errno
|
/* This enum type is anonymous, since we usually store it in an 'int', as we overload it with negative errno
|
||||||
* values. */
|
* values. */
|
||||||
enum {
|
enum {
|
||||||
UNIT_FILE_SYMLINK,
|
INSTALL_CHANGE_SYMLINK,
|
||||||
UNIT_FILE_UNLINK,
|
INSTALL_CHANGE_UNLINK,
|
||||||
UNIT_FILE_IS_MASKED,
|
INSTALL_CHANGE_IS_MASKED,
|
||||||
UNIT_FILE_IS_DANGLING,
|
INSTALL_CHANGE_IS_MASKED_GENERATOR,
|
||||||
UNIT_FILE_DESTINATION_NOT_PRESENT,
|
INSTALL_CHANGE_IS_DANGLING,
|
||||||
UNIT_FILE_AUXILIARY_FAILED,
|
INSTALL_CHANGE_DESTINATION_NOT_PRESENT,
|
||||||
_UNIT_FILE_CHANGE_TYPE_MAX,
|
INSTALL_CHANGE_AUXILIARY_FAILED,
|
||||||
_UNIT_FILE_CHANGE_TYPE_INVALID = -EINVAL,
|
_INSTALL_CHANGE_MAX,
|
||||||
|
_INSTALL_CHANGE_INVALID = -EINVAL,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum UnitFileFlags {
|
enum UnitFileFlags {
|
||||||
@ -48,18 +49,20 @@ enum UnitFileFlags {
|
|||||||
_UNIT_FILE_FLAGS_MASK_PUBLIC = UNIT_FILE_RUNTIME|UNIT_FILE_PORTABLE|UNIT_FILE_FORCE,
|
_UNIT_FILE_FLAGS_MASK_PUBLIC = UNIT_FILE_RUNTIME|UNIT_FILE_PORTABLE|UNIT_FILE_FORCE,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* type can either one of the UNIT_FILE_SYMLINK, UNIT_FILE_UNLINK, … listed above, or a negative errno value.
|
/* change_or_errno can be either one of the INSTALL_CHANGE_SYMLINK, INSTALL_CHANGE_UNLINK, … listed above, or
|
||||||
|
* a negative errno value.
|
||||||
|
*
|
||||||
* If source is specified, it should be the contents of the path symlink. In case of an error, source should
|
* If source is specified, it should be the contents of the path symlink. In case of an error, source should
|
||||||
* be the existing symlink contents or NULL. */
|
* be the existing symlink contents or NULL. */
|
||||||
struct UnitFileChange {
|
struct InstallChange {
|
||||||
int type_or_errno; /* UNIT_FILE_SYMLINK, … if positive, errno if negative */
|
int change_or_errno; /* INSTALL_CHANGE_SYMLINK, … if positive, errno if negative */
|
||||||
char *path;
|
char *path;
|
||||||
char *source;
|
char *source;
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline bool unit_file_changes_have_modification(const UnitFileChange* changes, size_t n_changes) {
|
static inline bool install_changes_have_modification(const InstallChange* changes, size_t n_changes) {
|
||||||
for (size_t i = 0; i < n_changes; i++)
|
for (size_t i = 0; i < n_changes; i++)
|
||||||
if (IN_SET(changes[i].type_or_errno, UNIT_FILE_SYMLINK, UNIT_FILE_UNLINK))
|
if (IN_SET(changes[i].change_or_errno, INSTALL_CHANGE_SYMLINK, INSTALL_CHANGE_UNLINK))
|
||||||
return true;
|
return true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -69,16 +72,16 @@ struct UnitFileList {
|
|||||||
UnitFileState state;
|
UnitFileState state;
|
||||||
};
|
};
|
||||||
|
|
||||||
enum UnitFileType {
|
enum InstallMode {
|
||||||
UNIT_FILE_TYPE_REGULAR,
|
INSTALL_MODE_REGULAR,
|
||||||
UNIT_FILE_TYPE_LINKED,
|
INSTALL_MODE_LINKED,
|
||||||
UNIT_FILE_TYPE_ALIAS,
|
INSTALL_MODE_ALIAS,
|
||||||
UNIT_FILE_TYPE_MASKED,
|
INSTALL_MODE_MASKED,
|
||||||
_UNIT_FILE_TYPE_MAX,
|
_INSTALL_MODE_MAX,
|
||||||
_UNIT_FILE_TYPE_INVALID = -EINVAL,
|
_INSTALL_MODE_INVALID = -EINVAL,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct UnitFileInstallInfo {
|
struct InstallInfo {
|
||||||
char *name;
|
char *name;
|
||||||
char *path;
|
char *path;
|
||||||
char *root;
|
char *root;
|
||||||
@ -91,7 +94,7 @@ struct UnitFileInstallInfo {
|
|||||||
char *default_instance;
|
char *default_instance;
|
||||||
char *symlink_target;
|
char *symlink_target;
|
||||||
|
|
||||||
UnitFileType type;
|
InstallMode install_mode;
|
||||||
bool auxiliary;
|
bool auxiliary;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -99,71 +102,71 @@ int unit_file_enable(
|
|||||||
LookupScope scope,
|
LookupScope scope,
|
||||||
UnitFileFlags flags,
|
UnitFileFlags flags,
|
||||||
const char *root_dir,
|
const char *root_dir,
|
||||||
char **files,
|
char **names_or_paths,
|
||||||
UnitFileChange **changes,
|
InstallChange **changes,
|
||||||
size_t *n_changes);
|
size_t *n_changes);
|
||||||
int unit_file_disable(
|
int unit_file_disable(
|
||||||
LookupScope scope,
|
LookupScope scope,
|
||||||
UnitFileFlags flags,
|
UnitFileFlags flags,
|
||||||
const char *root_dir,
|
const char *root_dir,
|
||||||
char **files,
|
char **names,
|
||||||
UnitFileChange **changes,
|
InstallChange **changes,
|
||||||
size_t *n_changes);
|
size_t *n_changes);
|
||||||
int unit_file_reenable(
|
int unit_file_reenable(
|
||||||
LookupScope scope,
|
LookupScope scope,
|
||||||
UnitFileFlags flags,
|
UnitFileFlags flags,
|
||||||
const char *root_dir,
|
const char *root_dir,
|
||||||
char **names_or_paths,
|
char **names_or_paths,
|
||||||
UnitFileChange **changes,
|
InstallChange **changes,
|
||||||
size_t *n_changes);
|
size_t *n_changes);
|
||||||
int unit_file_preset(
|
int unit_file_preset(
|
||||||
LookupScope scope,
|
LookupScope scope,
|
||||||
UnitFileFlags flags,
|
UnitFileFlags flags,
|
||||||
const char *root_dir,
|
const char *root_dir,
|
||||||
char **files,
|
char **names,
|
||||||
UnitFilePresetMode mode,
|
UnitFilePresetMode mode,
|
||||||
UnitFileChange **changes,
|
InstallChange **changes,
|
||||||
size_t *n_changes);
|
size_t *n_changes);
|
||||||
int unit_file_preset_all(
|
int unit_file_preset_all(
|
||||||
LookupScope scope,
|
LookupScope scope,
|
||||||
UnitFileFlags flags,
|
UnitFileFlags flags,
|
||||||
const char *root_dir,
|
const char *root_dir,
|
||||||
UnitFilePresetMode mode,
|
UnitFilePresetMode mode,
|
||||||
UnitFileChange **changes,
|
InstallChange **changes,
|
||||||
size_t *n_changes);
|
size_t *n_changes);
|
||||||
int unit_file_mask(
|
int unit_file_mask(
|
||||||
LookupScope scope,
|
LookupScope scope,
|
||||||
UnitFileFlags flags,
|
UnitFileFlags flags,
|
||||||
const char *root_dir,
|
const char *root_dir,
|
||||||
char **files,
|
char **names,
|
||||||
UnitFileChange **changes,
|
InstallChange **changes,
|
||||||
size_t *n_changes);
|
size_t *n_changes);
|
||||||
int unit_file_unmask(
|
int unit_file_unmask(
|
||||||
LookupScope scope,
|
LookupScope scope,
|
||||||
UnitFileFlags flags,
|
UnitFileFlags flags,
|
||||||
const char *root_dir,
|
const char *root_dir,
|
||||||
char **files,
|
char **names,
|
||||||
UnitFileChange **changes,
|
InstallChange **changes,
|
||||||
size_t *n_changes);
|
size_t *n_changes);
|
||||||
int unit_file_link(
|
int unit_file_link(
|
||||||
LookupScope scope,
|
LookupScope scope,
|
||||||
UnitFileFlags flags,
|
UnitFileFlags flags,
|
||||||
const char *root_dir,
|
const char *root_dir,
|
||||||
char **files,
|
char **files,
|
||||||
UnitFileChange **changes,
|
InstallChange **changes,
|
||||||
size_t *n_changes);
|
size_t *n_changes);
|
||||||
int unit_file_revert(
|
int unit_file_revert(
|
||||||
LookupScope scope,
|
LookupScope scope,
|
||||||
const char *root_dir,
|
const char *root_dir,
|
||||||
char **files,
|
char **names,
|
||||||
UnitFileChange **changes,
|
InstallChange **changes,
|
||||||
size_t *n_changes);
|
size_t *n_changes);
|
||||||
int unit_file_set_default(
|
int unit_file_set_default(
|
||||||
LookupScope scope,
|
LookupScope scope,
|
||||||
UnitFileFlags flags,
|
UnitFileFlags flags,
|
||||||
const char *root_dir,
|
const char *root_dir,
|
||||||
const char *file,
|
const char *name,
|
||||||
UnitFileChange **changes,
|
InstallChange **changes,
|
||||||
size_t *n_changes);
|
size_t *n_changes);
|
||||||
int unit_file_get_default(
|
int unit_file_get_default(
|
||||||
LookupScope scope,
|
LookupScope scope,
|
||||||
@ -173,10 +176,10 @@ int unit_file_add_dependency(
|
|||||||
LookupScope scope,
|
LookupScope scope,
|
||||||
UnitFileFlags flags,
|
UnitFileFlags flags,
|
||||||
const char *root_dir,
|
const char *root_dir,
|
||||||
char **files,
|
char **names,
|
||||||
const char *target,
|
const char *target,
|
||||||
UnitDependency dep,
|
UnitDependency dep,
|
||||||
UnitFileChange **changes,
|
InstallChange **changes,
|
||||||
size_t *n_changes);
|
size_t *n_changes);
|
||||||
|
|
||||||
int unit_file_lookup_state(
|
int unit_file_lookup_state(
|
||||||
@ -191,15 +194,15 @@ int unit_file_exists(LookupScope scope, const LookupPaths *paths, const char *na
|
|||||||
int unit_file_get_list(LookupScope scope, const char *root_dir, Hashmap *h, char **states, char **patterns);
|
int unit_file_get_list(LookupScope scope, const char *root_dir, Hashmap *h, char **states, char **patterns);
|
||||||
Hashmap* unit_file_list_free(Hashmap *h);
|
Hashmap* unit_file_list_free(Hashmap *h);
|
||||||
|
|
||||||
int unit_file_changes_add(UnitFileChange **changes, size_t *n_changes, int type, const char *path, const char *source);
|
int install_changes_add(InstallChange **changes, size_t *n_changes, int type, const char *path, const char *source);
|
||||||
void unit_file_changes_free(UnitFileChange *changes, size_t n_changes);
|
void install_changes_free(InstallChange *changes, size_t n_changes);
|
||||||
void unit_file_dump_changes(int r, const char *verb, const UnitFileChange *changes, size_t n_changes, bool quiet);
|
void install_changes_dump(int r, const char *verb, const InstallChange *changes, size_t n_changes, bool quiet);
|
||||||
|
|
||||||
int unit_file_verify_alias(
|
int unit_file_verify_alias(
|
||||||
const UnitFileInstallInfo *info,
|
const InstallInfo *info,
|
||||||
const char *dst,
|
const char *dst,
|
||||||
char **ret_dst,
|
char **ret_dst,
|
||||||
UnitFileChange **changes,
|
InstallChange **changes,
|
||||||
size_t *n_changes);
|
size_t *n_changes);
|
||||||
|
|
||||||
typedef struct UnitFilePresetRule UnitFilePresetRule;
|
typedef struct UnitFilePresetRule UnitFilePresetRule;
|
||||||
@ -217,8 +220,8 @@ const char *unit_file_state_to_string(UnitFileState s) _const_;
|
|||||||
UnitFileState unit_file_state_from_string(const char *s) _pure_;
|
UnitFileState unit_file_state_from_string(const char *s) _pure_;
|
||||||
/* from_string conversion is unreliable because of the overlap between -EPERM and -1 for error. */
|
/* from_string conversion is unreliable because of the overlap between -EPERM and -1 for error. */
|
||||||
|
|
||||||
const char *unit_file_change_type_to_string(int s) _const_;
|
const char *install_change_to_string(int s) _const_;
|
||||||
int unit_file_change_type_from_string(const char *s) _pure_;
|
int install_change_from_string(const char *s) _pure_;
|
||||||
|
|
||||||
const char *unit_file_preset_mode_to_string(UnitFilePresetMode m) _const_;
|
const char *unit_file_preset_mode_to_string(UnitFilePresetMode m) _const_;
|
||||||
UnitFilePresetMode unit_file_preset_mode_from_string(const char *s) _pure_;
|
UnitFilePresetMode unit_file_preset_mode_from_string(const char *s) _pure_;
|
||||||
|
@ -11,7 +11,7 @@ int verb_add_dependency(int argc, char *argv[], void *userdata) {
|
|||||||
_cleanup_strv_free_ char **names = NULL;
|
_cleanup_strv_free_ char **names = NULL;
|
||||||
_cleanup_free_ char *target = NULL;
|
_cleanup_free_ char *target = NULL;
|
||||||
const char *verb = argv[0];
|
const char *verb = argv[0];
|
||||||
UnitFileChange *changes = NULL;
|
InstallChange *changes = NULL;
|
||||||
size_t n_changes = 0;
|
size_t n_changes = 0;
|
||||||
UnitDependency dep;
|
UnitDependency dep;
|
||||||
int r;
|
int r;
|
||||||
@ -38,7 +38,7 @@ int verb_add_dependency(int argc, char *argv[], void *userdata) {
|
|||||||
|
|
||||||
if (install_client_side()) {
|
if (install_client_side()) {
|
||||||
r = unit_file_add_dependency(arg_scope, unit_file_flags_from_args(), arg_root, names, target, dep, &changes, &n_changes);
|
r = unit_file_add_dependency(arg_scope, unit_file_flags_from_args(), arg_root, names, target, dep, &changes, &n_changes);
|
||||||
unit_file_dump_changes(r, "add dependency on", changes, n_changes, arg_quiet);
|
install_changes_dump(r, "add dependency on", changes, n_changes, arg_quiet);
|
||||||
|
|
||||||
if (r > 0)
|
if (r > 0)
|
||||||
r = 0;
|
r = 0;
|
||||||
@ -84,7 +84,7 @@ int verb_add_dependency(int argc, char *argv[], void *userdata) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
finish:
|
finish:
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
|
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
@ -64,7 +64,7 @@ static int normalize_names(char **names) {
|
|||||||
int verb_enable(int argc, char *argv[], void *userdata) {
|
int verb_enable(int argc, char *argv[], void *userdata) {
|
||||||
_cleanup_strv_free_ char **names = NULL;
|
_cleanup_strv_free_ char **names = NULL;
|
||||||
const char *verb = argv[0];
|
const char *verb = argv[0];
|
||||||
UnitFileChange *changes = NULL;
|
InstallChange *changes = NULL;
|
||||||
size_t n_changes = 0;
|
size_t n_changes = 0;
|
||||||
int carries_install_info = -1;
|
int carries_install_info = -1;
|
||||||
bool ignore_carries_install_info = arg_quiet;
|
bool ignore_carries_install_info = arg_quiet;
|
||||||
@ -127,7 +127,7 @@ int verb_enable(int argc, char *argv[], void *userdata) {
|
|||||||
else
|
else
|
||||||
assert_not_reached();
|
assert_not_reached();
|
||||||
|
|
||||||
unit_file_dump_changes(r, verb, changes, n_changes, arg_quiet);
|
install_changes_dump(r, verb, changes, n_changes, arg_quiet);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
goto finish;
|
goto finish;
|
||||||
r = 0;
|
r = 0;
|
||||||
@ -280,7 +280,7 @@ int verb_enable(int argc, char *argv[], void *userdata) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
finish:
|
finish:
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
|
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
#include "systemctl.h"
|
#include "systemctl.h"
|
||||||
|
|
||||||
static int show_installation_targets_client_side(const char *name) {
|
static int show_installation_targets_client_side(const char *name) {
|
||||||
UnitFileChange *changes = NULL;
|
InstallChange *changes = NULL;
|
||||||
size_t n_changes = 0;
|
size_t n_changes = 0;
|
||||||
UnitFileFlags flags;
|
UnitFileFlags flags;
|
||||||
char **p;
|
char **p;
|
||||||
@ -23,7 +23,7 @@ static int show_installation_targets_client_side(const char *name) {
|
|||||||
return log_error_errno(r, "Failed to get file links for %s: %m", name);
|
return log_error_errno(r, "Failed to get file links for %s: %m", name);
|
||||||
|
|
||||||
for (size_t i = 0; i < n_changes; i++)
|
for (size_t i = 0; i < n_changes; i++)
|
||||||
if (changes[i].type_or_errno == UNIT_FILE_UNLINK)
|
if (changes[i].change_or_errno == INSTALL_CHANGE_UNLINK)
|
||||||
printf(" %s\n", changes[i].path);
|
printf(" %s\n", changes[i].path);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -8,13 +8,13 @@
|
|||||||
#include "systemctl.h"
|
#include "systemctl.h"
|
||||||
|
|
||||||
int verb_preset_all(int argc, char *argv[], void *userdata) {
|
int verb_preset_all(int argc, char *argv[], void *userdata) {
|
||||||
UnitFileChange *changes = NULL;
|
InstallChange *changes = NULL;
|
||||||
size_t n_changes = 0;
|
size_t n_changes = 0;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
if (install_client_side()) {
|
if (install_client_side()) {
|
||||||
r = unit_file_preset_all(arg_scope, unit_file_flags_from_args(), arg_root, arg_preset_mode, &changes, &n_changes);
|
r = unit_file_preset_all(arg_scope, unit_file_flags_from_args(), arg_root, arg_preset_mode, &changes, &n_changes);
|
||||||
unit_file_dump_changes(r, "preset", changes, n_changes, arg_quiet);
|
install_changes_dump(r, "preset", changes, n_changes, arg_quiet);
|
||||||
|
|
||||||
if (r > 0)
|
if (r > 0)
|
||||||
r = 0;
|
r = 0;
|
||||||
@ -57,7 +57,7 @@ int verb_preset_all(int argc, char *argv[], void *userdata) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
finish:
|
finish:
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
|
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
@ -93,7 +93,7 @@ int verb_get_default(int argc, char *argv[], void *userdata) {
|
|||||||
|
|
||||||
int verb_set_default(int argc, char *argv[], void *userdata) {
|
int verb_set_default(int argc, char *argv[], void *userdata) {
|
||||||
_cleanup_free_ char *unit = NULL;
|
_cleanup_free_ char *unit = NULL;
|
||||||
UnitFileChange *changes = NULL;
|
InstallChange *changes = NULL;
|
||||||
size_t n_changes = 0;
|
size_t n_changes = 0;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
@ -108,7 +108,7 @@ int verb_set_default(int argc, char *argv[], void *userdata) {
|
|||||||
|
|
||||||
if (install_client_side()) {
|
if (install_client_side()) {
|
||||||
r = unit_file_set_default(arg_scope, UNIT_FILE_FORCE, arg_root, unit, &changes, &n_changes);
|
r = unit_file_set_default(arg_scope, UNIT_FILE_FORCE, arg_root, unit, &changes, &n_changes);
|
||||||
unit_file_dump_changes(r, "set default", changes, n_changes, arg_quiet);
|
install_changes_dump(r, "set default", changes, n_changes, arg_quiet);
|
||||||
|
|
||||||
if (r > 0)
|
if (r > 0)
|
||||||
r = 0;
|
r = 0;
|
||||||
@ -154,7 +154,7 @@ int verb_set_default(int argc, char *argv[], void *userdata) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
finish:
|
finish:
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
|
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,7 @@ STATIC_DESTRUCTOR_REGISTER(root, rm_rf_physical_and_freep);
|
|||||||
TEST(basic_mask_and_enable) {
|
TEST(basic_mask_and_enable) {
|
||||||
const char *p;
|
const char *p;
|
||||||
UnitFileState state;
|
UnitFileState state;
|
||||||
UnitFileChange *changes = NULL;
|
InstallChange *changes = NULL;
|
||||||
size_t n_changes = 0;
|
size_t n_changes = 0;
|
||||||
|
|
||||||
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "a.service", NULL) == -ENOENT);
|
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "a.service", NULL) == -ENOENT);
|
||||||
@ -59,12 +59,12 @@ TEST(basic_mask_and_enable) {
|
|||||||
|
|
||||||
assert_se(unit_file_mask(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) >= 0);
|
assert_se(unit_file_mask(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) >= 0);
|
||||||
assert_se(n_changes == 1);
|
assert_se(n_changes == 1);
|
||||||
assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
|
assert_se(changes[0].change_or_errno == INSTALL_CHANGE_SYMLINK);
|
||||||
assert_se(streq(changes[0].source, "/dev/null"));
|
assert_se(streq(changes[0].source, "/dev/null"));
|
||||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/a.service");
|
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/a.service");
|
||||||
assert_se(streq(changes[0].path, p));
|
assert_se(streq(changes[0].path, p));
|
||||||
|
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
changes = NULL; n_changes = 0;
|
changes = NULL; n_changes = 0;
|
||||||
|
|
||||||
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "a.service", &state) >= 0 && state == UNIT_FILE_MASKED);
|
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "a.service", &state) >= 0 && state == UNIT_FILE_MASKED);
|
||||||
@ -74,24 +74,24 @@ TEST(basic_mask_and_enable) {
|
|||||||
|
|
||||||
/* Enabling a masked unit should fail! */
|
/* Enabling a masked unit should fail! */
|
||||||
assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) == -ERFKILL);
|
assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) == -ERFKILL);
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
changes = NULL; n_changes = 0;
|
changes = NULL; n_changes = 0;
|
||||||
|
|
||||||
assert_se(unit_file_unmask(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) >= 0);
|
assert_se(unit_file_unmask(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) >= 0);
|
||||||
assert_se(n_changes == 1);
|
assert_se(n_changes == 1);
|
||||||
assert_se(changes[0].type_or_errno == UNIT_FILE_UNLINK);
|
assert_se(changes[0].change_or_errno == INSTALL_CHANGE_UNLINK);
|
||||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/a.service");
|
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/a.service");
|
||||||
assert_se(streq(changes[0].path, p));
|
assert_se(streq(changes[0].path, p));
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
changes = NULL; n_changes = 0;
|
changes = NULL; n_changes = 0;
|
||||||
|
|
||||||
assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) == 1);
|
assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) == 1);
|
||||||
assert_se(n_changes == 1);
|
assert_se(n_changes == 1);
|
||||||
assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
|
assert_se(changes[0].change_or_errno == INSTALL_CHANGE_SYMLINK);
|
||||||
assert_se(streq(changes[0].source, "/usr/lib/systemd/system/a.service"));
|
assert_se(streq(changes[0].source, "/usr/lib/systemd/system/a.service"));
|
||||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/a.service");
|
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/a.service");
|
||||||
assert_se(streq(changes[0].path, p));
|
assert_se(streq(changes[0].path, p));
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
changes = NULL; n_changes = 0;
|
changes = NULL; n_changes = 0;
|
||||||
|
|
||||||
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "a.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
|
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "a.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
|
||||||
@ -102,15 +102,15 @@ TEST(basic_mask_and_enable) {
|
|||||||
/* Enabling it again should succeed but be a NOP */
|
/* Enabling it again should succeed but be a NOP */
|
||||||
assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) >= 0);
|
assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) >= 0);
|
||||||
assert_se(n_changes == 0);
|
assert_se(n_changes == 0);
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
changes = NULL; n_changes = 0;
|
changes = NULL; n_changes = 0;
|
||||||
|
|
||||||
assert_se(unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) >= 0);
|
assert_se(unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) >= 0);
|
||||||
assert_se(n_changes == 1);
|
assert_se(n_changes == 1);
|
||||||
assert_se(changes[0].type_or_errno == UNIT_FILE_UNLINK);
|
assert_se(changes[0].change_or_errno == INSTALL_CHANGE_UNLINK);
|
||||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/a.service");
|
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/a.service");
|
||||||
assert_se(streq(changes[0].path, p));
|
assert_se(streq(changes[0].path, p));
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
changes = NULL; n_changes = 0;
|
changes = NULL; n_changes = 0;
|
||||||
|
|
||||||
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "a.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
|
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "a.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
|
||||||
@ -121,17 +121,17 @@ TEST(basic_mask_and_enable) {
|
|||||||
/* Disabling a disabled unit must succeed but be a NOP */
|
/* Disabling a disabled unit must succeed but be a NOP */
|
||||||
assert_se(unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) >= 0);
|
assert_se(unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) >= 0);
|
||||||
assert_se(n_changes == 0);
|
assert_se(n_changes == 0);
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
changes = NULL; n_changes = 0;
|
changes = NULL; n_changes = 0;
|
||||||
|
|
||||||
/* Let's enable this indirectly via a symlink */
|
/* Let's enable this indirectly via a symlink */
|
||||||
assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("d.service"), &changes, &n_changes) >= 0);
|
assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("d.service"), &changes, &n_changes) >= 0);
|
||||||
assert_se(n_changes == 1);
|
assert_se(n_changes == 1);
|
||||||
assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
|
assert_se(changes[0].change_or_errno == INSTALL_CHANGE_SYMLINK);
|
||||||
assert_se(streq(changes[0].source, "/usr/lib/systemd/system/a.service"));
|
assert_se(streq(changes[0].source, "/usr/lib/systemd/system/a.service"));
|
||||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/a.service");
|
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/a.service");
|
||||||
assert_se(streq(changes[0].path, p));
|
assert_se(streq(changes[0].path, p));
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
changes = NULL; n_changes = 0;
|
changes = NULL; n_changes = 0;
|
||||||
|
|
||||||
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "a.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
|
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "a.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
|
||||||
@ -143,13 +143,13 @@ TEST(basic_mask_and_enable) {
|
|||||||
|
|
||||||
assert_se(unit_file_reenable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("b.service"), &changes, &n_changes) >= 0);
|
assert_se(unit_file_reenable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("b.service"), &changes, &n_changes) >= 0);
|
||||||
assert_se(n_changes == 2);
|
assert_se(n_changes == 2);
|
||||||
assert_se(changes[0].type_or_errno == UNIT_FILE_UNLINK);
|
assert_se(changes[0].change_or_errno == INSTALL_CHANGE_UNLINK);
|
||||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/a.service");
|
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/a.service");
|
||||||
assert_se(streq(changes[0].path, p));
|
assert_se(streq(changes[0].path, p));
|
||||||
assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK);
|
assert_se(changes[1].change_or_errno == INSTALL_CHANGE_SYMLINK);
|
||||||
assert_se(streq(changes[1].source, "/usr/lib/systemd/system/a.service"));
|
assert_se(streq(changes[1].source, "/usr/lib/systemd/system/a.service"));
|
||||||
assert_se(streq(changes[1].path, p));
|
assert_se(streq(changes[1].path, p));
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
changes = NULL; n_changes = 0;
|
changes = NULL; n_changes = 0;
|
||||||
|
|
||||||
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "a.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
|
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "a.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
|
||||||
@ -185,15 +185,15 @@ TEST(basic_mask_and_enable) {
|
|||||||
|
|
||||||
assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("f.service"), &changes, &n_changes) == 1);
|
assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("f.service"), &changes, &n_changes) == 1);
|
||||||
assert_se(n_changes == 2);
|
assert_se(n_changes == 2);
|
||||||
assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
|
assert_se(changes[0].change_or_errno == INSTALL_CHANGE_SYMLINK);
|
||||||
assert_se(streq(changes[0].source, "/usr/lib/systemd/system/f.service"));
|
assert_se(streq(changes[0].source, "/usr/lib/systemd/system/f.service"));
|
||||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/x.target.wants/f.service");
|
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/x.target.wants/f.service");
|
||||||
assert_se(streq(changes[0].path, p));
|
assert_se(streq(changes[0].path, p));
|
||||||
assert_se(changes[1].type_or_errno == UNIT_FILE_DESTINATION_NOT_PRESENT);
|
assert_se(changes[1].change_or_errno == INSTALL_CHANGE_DESTINATION_NOT_PRESENT);
|
||||||
p = strjoina(root, "/usr/lib/systemd/system/f.service");
|
p = strjoina(root, "/usr/lib/systemd/system/f.service");
|
||||||
assert_se(streq(changes[1].source, p));
|
assert_se(streq(changes[1].source, p));
|
||||||
assert_se(streq(changes[1].path, "x.target"));
|
assert_se(streq(changes[1].path, "x.target"));
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
changes = NULL; n_changes = 0;
|
changes = NULL; n_changes = 0;
|
||||||
|
|
||||||
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "f.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
|
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "f.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
|
||||||
@ -202,7 +202,7 @@ TEST(basic_mask_and_enable) {
|
|||||||
TEST(linked_units) {
|
TEST(linked_units) {
|
||||||
const char *p, *q;
|
const char *p, *q;
|
||||||
UnitFileState state;
|
UnitFileState state;
|
||||||
UnitFileChange *changes = NULL;
|
InstallChange *changes = NULL;
|
||||||
size_t n_changes = 0, i;
|
size_t n_changes = 0, i;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -253,11 +253,11 @@ TEST(linked_units) {
|
|||||||
/* First, let's link the unit into the search path */
|
/* First, let's link the unit into the search path */
|
||||||
assert_se(unit_file_link(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("/opt/linked.service"), &changes, &n_changes) >= 0);
|
assert_se(unit_file_link(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("/opt/linked.service"), &changes, &n_changes) >= 0);
|
||||||
assert_se(n_changes == 1);
|
assert_se(n_changes == 1);
|
||||||
assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
|
assert_se(changes[0].change_or_errno == INSTALL_CHANGE_SYMLINK);
|
||||||
assert_se(streq(changes[0].source, "/opt/linked.service"));
|
assert_se(streq(changes[0].source, "/opt/linked.service"));
|
||||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/linked.service");
|
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/linked.service");
|
||||||
assert_se(streq(changes[0].path, p));
|
assert_se(streq(changes[0].path, p));
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
changes = NULL; n_changes = 0;
|
changes = NULL; n_changes = 0;
|
||||||
|
|
||||||
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "linked.service", &state) >= 0 && state == UNIT_FILE_LINKED);
|
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "linked.service", &state) >= 0 && state == UNIT_FILE_LINKED);
|
||||||
@ -265,10 +265,10 @@ TEST(linked_units) {
|
|||||||
/* Let's unlink it from the search path again */
|
/* Let's unlink it from the search path again */
|
||||||
assert_se(unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("linked.service"), &changes, &n_changes) >= 0);
|
assert_se(unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("linked.service"), &changes, &n_changes) >= 0);
|
||||||
assert_se(n_changes == 1);
|
assert_se(n_changes == 1);
|
||||||
assert_se(changes[0].type_or_errno == UNIT_FILE_UNLINK);
|
assert_se(changes[0].change_or_errno == INSTALL_CHANGE_UNLINK);
|
||||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/linked.service");
|
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/linked.service");
|
||||||
assert_se(streq(changes[0].path, p));
|
assert_se(streq(changes[0].path, p));
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
changes = NULL; n_changes = 0;
|
changes = NULL; n_changes = 0;
|
||||||
|
|
||||||
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "linked.service", NULL) == -ENOENT);
|
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "linked.service", NULL) == -ENOENT);
|
||||||
@ -279,7 +279,7 @@ TEST(linked_units) {
|
|||||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/linked.service");
|
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/linked.service");
|
||||||
q = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/linked.service");
|
q = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/linked.service");
|
||||||
for (i = 0 ; i < n_changes; i++) {
|
for (i = 0 ; i < n_changes; i++) {
|
||||||
assert_se(changes[i].type_or_errno == UNIT_FILE_SYMLINK);
|
assert_se(changes[i].change_or_errno == INSTALL_CHANGE_SYMLINK);
|
||||||
assert_se(streq(changes[i].source, "/opt/linked.service"));
|
assert_se(streq(changes[i].source, "/opt/linked.service"));
|
||||||
|
|
||||||
if (p && streq(changes[i].path, p))
|
if (p && streq(changes[i].path, p))
|
||||||
@ -290,7 +290,7 @@ TEST(linked_units) {
|
|||||||
assert_not_reached();
|
assert_not_reached();
|
||||||
}
|
}
|
||||||
assert_se(!p && !q);
|
assert_se(!p && !q);
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
changes = NULL; n_changes = 0;
|
changes = NULL; n_changes = 0;
|
||||||
|
|
||||||
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "linked.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
|
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "linked.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
|
||||||
@ -301,7 +301,7 @@ TEST(linked_units) {
|
|||||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/linked.service");
|
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/linked.service");
|
||||||
q = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/linked.service");
|
q = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/linked.service");
|
||||||
for (i = 0; i < n_changes; i++) {
|
for (i = 0; i < n_changes; i++) {
|
||||||
assert_se(changes[i].type_or_errno == UNIT_FILE_UNLINK);
|
assert_se(changes[i].change_or_errno == INSTALL_CHANGE_UNLINK);
|
||||||
|
|
||||||
if (p && streq(changes[i].path, p))
|
if (p && streq(changes[i].path, p))
|
||||||
p = NULL;
|
p = NULL;
|
||||||
@ -311,7 +311,7 @@ TEST(linked_units) {
|
|||||||
assert_not_reached();
|
assert_not_reached();
|
||||||
}
|
}
|
||||||
assert_se(!p && !q);
|
assert_se(!p && !q);
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
changes = NULL; n_changes = 0;
|
changes = NULL; n_changes = 0;
|
||||||
|
|
||||||
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "linked.service", NULL) == -ENOENT);
|
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "linked.service", NULL) == -ENOENT);
|
||||||
@ -321,7 +321,7 @@ TEST(linked_units) {
|
|||||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/linked2.service");
|
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/linked2.service");
|
||||||
q = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/linked2.service");
|
q = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/linked2.service");
|
||||||
for (i = 0 ; i < n_changes; i++) {
|
for (i = 0 ; i < n_changes; i++) {
|
||||||
assert_se(changes[i].type_or_errno == UNIT_FILE_SYMLINK);
|
assert_se(changes[i].change_or_errno == INSTALL_CHANGE_SYMLINK);
|
||||||
assert_se(streq(changes[i].source, "/opt/linked2.service"));
|
assert_se(streq(changes[i].source, "/opt/linked2.service"));
|
||||||
|
|
||||||
if (p && streq(changes[i].path, p))
|
if (p && streq(changes[i].path, p))
|
||||||
@ -332,22 +332,22 @@ TEST(linked_units) {
|
|||||||
assert_not_reached();
|
assert_not_reached();
|
||||||
}
|
}
|
||||||
assert_se(!p && !q);
|
assert_se(!p && !q);
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
changes = NULL; n_changes = 0;
|
changes = NULL; n_changes = 0;
|
||||||
|
|
||||||
assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("linked3.service"), &changes, &n_changes) >= 0);
|
assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("linked3.service"), &changes, &n_changes) >= 0);
|
||||||
assert_se(n_changes == 1);
|
assert_se(n_changes == 1);
|
||||||
assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
|
assert_se(changes[0].change_or_errno == INSTALL_CHANGE_SYMLINK);
|
||||||
assert_se(startswith(changes[0].path, root));
|
assert_se(startswith(changes[0].path, root));
|
||||||
assert_se(endswith(changes[0].path, "linked3.service"));
|
assert_se(endswith(changes[0].path, "linked3.service"));
|
||||||
assert_se(streq(changes[0].source, "/opt/linked3.service"));
|
assert_se(streq(changes[0].source, "/opt/linked3.service"));
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
changes = NULL; n_changes = 0;
|
changes = NULL; n_changes = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(default) {
|
TEST(default) {
|
||||||
_cleanup_free_ char *def = NULL;
|
_cleanup_free_ char *def = NULL;
|
||||||
UnitFileChange *changes = NULL;
|
InstallChange *changes = NULL;
|
||||||
size_t n_changes = 0;
|
size_t n_changes = 0;
|
||||||
const char *p;
|
const char *p;
|
||||||
|
|
||||||
@ -361,20 +361,20 @@ TEST(default) {
|
|||||||
|
|
||||||
assert_se(unit_file_set_default(LOOKUP_SCOPE_SYSTEM, 0, root, "idontexist.target", &changes, &n_changes) == -ENOENT);
|
assert_se(unit_file_set_default(LOOKUP_SCOPE_SYSTEM, 0, root, "idontexist.target", &changes, &n_changes) == -ENOENT);
|
||||||
assert_se(n_changes == 1);
|
assert_se(n_changes == 1);
|
||||||
assert_se(changes[0].type_or_errno == -ENOENT);
|
assert_se(changes[0].change_or_errno == -ENOENT);
|
||||||
assert_se(streq_ptr(changes[0].path, "idontexist.target"));
|
assert_se(streq_ptr(changes[0].path, "idontexist.target"));
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
changes = NULL; n_changes = 0;
|
changes = NULL; n_changes = 0;
|
||||||
|
|
||||||
assert_se(unit_file_get_default(LOOKUP_SCOPE_SYSTEM, root, &def) == -ENOENT);
|
assert_se(unit_file_get_default(LOOKUP_SCOPE_SYSTEM, root, &def) == -ENOENT);
|
||||||
|
|
||||||
assert_se(unit_file_set_default(LOOKUP_SCOPE_SYSTEM, 0, root, "test-default.target", &changes, &n_changes) >= 0);
|
assert_se(unit_file_set_default(LOOKUP_SCOPE_SYSTEM, 0, root, "test-default.target", &changes, &n_changes) >= 0);
|
||||||
assert_se(n_changes == 1);
|
assert_se(n_changes == 1);
|
||||||
assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
|
assert_se(changes[0].change_or_errno == INSTALL_CHANGE_SYMLINK);
|
||||||
assert_se(streq(changes[0].source, "/usr/lib/systemd/system/test-default-real.target"));
|
assert_se(streq(changes[0].source, "/usr/lib/systemd/system/test-default-real.target"));
|
||||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR "/" SPECIAL_DEFAULT_TARGET);
|
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR "/" SPECIAL_DEFAULT_TARGET);
|
||||||
assert_se(streq(changes[0].path, p));
|
assert_se(streq(changes[0].path, p));
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
changes = NULL; n_changes = 0;
|
changes = NULL; n_changes = 0;
|
||||||
|
|
||||||
assert_se(unit_file_get_default(LOOKUP_SCOPE_SYSTEM, root, &def) >= 0);
|
assert_se(unit_file_get_default(LOOKUP_SCOPE_SYSTEM, root, &def) >= 0);
|
||||||
@ -382,7 +382,7 @@ TEST(default) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TEST(add_dependency) {
|
TEST(add_dependency) {
|
||||||
UnitFileChange *changes = NULL;
|
InstallChange *changes = NULL;
|
||||||
size_t n_changes = 0;
|
size_t n_changes = 0;
|
||||||
const char *p;
|
const char *p;
|
||||||
|
|
||||||
@ -400,16 +400,16 @@ TEST(add_dependency) {
|
|||||||
|
|
||||||
assert_se(unit_file_add_dependency(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("add-dependency-test-service.service"), "add-dependency-test-target.target", UNIT_WANTS, &changes, &n_changes) >= 0);
|
assert_se(unit_file_add_dependency(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("add-dependency-test-service.service"), "add-dependency-test-target.target", UNIT_WANTS, &changes, &n_changes) >= 0);
|
||||||
assert_se(n_changes == 1);
|
assert_se(n_changes == 1);
|
||||||
assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
|
assert_se(changes[0].change_or_errno == INSTALL_CHANGE_SYMLINK);
|
||||||
assert_se(streq(changes[0].source, "/usr/lib/systemd/system/real-add-dependency-test-service.service"));
|
assert_se(streq(changes[0].source, "/usr/lib/systemd/system/real-add-dependency-test-service.service"));
|
||||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/real-add-dependency-test-target.target.wants/real-add-dependency-test-service.service");
|
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/real-add-dependency-test-target.target.wants/real-add-dependency-test-service.service");
|
||||||
assert_se(streq(changes[0].path, p));
|
assert_se(streq(changes[0].path, p));
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
changes = NULL; n_changes = 0;
|
changes = NULL; n_changes = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(template_enable) {
|
TEST(template_enable) {
|
||||||
UnitFileChange *changes = NULL;
|
InstallChange *changes = NULL;
|
||||||
size_t n_changes = 0;
|
size_t n_changes = 0;
|
||||||
UnitFileState state;
|
UnitFileState state;
|
||||||
const char *p;
|
const char *p;
|
||||||
@ -441,11 +441,11 @@ TEST(template_enable) {
|
|||||||
|
|
||||||
assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("template@.service"), &changes, &n_changes) >= 0);
|
assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("template@.service"), &changes, &n_changes) >= 0);
|
||||||
assert_se(n_changes == 1);
|
assert_se(n_changes == 1);
|
||||||
assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
|
assert_se(changes[0].change_or_errno == INSTALL_CHANGE_SYMLINK);
|
||||||
assert_se(streq(changes[0].source, "/usr/lib/systemd/system/template@.service"));
|
assert_se(streq(changes[0].source, "/usr/lib/systemd/system/template@.service"));
|
||||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/template@def.service");
|
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/template@def.service");
|
||||||
assert_se(streq(changes[0].path, p));
|
assert_se(streq(changes[0].path, p));
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
changes = NULL; n_changes = 0;
|
changes = NULL; n_changes = 0;
|
||||||
|
|
||||||
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
|
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
|
||||||
@ -457,9 +457,9 @@ TEST(template_enable) {
|
|||||||
|
|
||||||
assert_se(unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("template@.service"), &changes, &n_changes) >= 0);
|
assert_se(unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("template@.service"), &changes, &n_changes) >= 0);
|
||||||
assert_se(n_changes == 1);
|
assert_se(n_changes == 1);
|
||||||
assert_se(changes[0].type_or_errno == UNIT_FILE_UNLINK);
|
assert_se(changes[0].change_or_errno == INSTALL_CHANGE_UNLINK);
|
||||||
assert_se(streq(changes[0].path, p));
|
assert_se(streq(changes[0].path, p));
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
changes = NULL; n_changes = 0;
|
changes = NULL; n_changes = 0;
|
||||||
|
|
||||||
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
|
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
|
||||||
@ -472,11 +472,11 @@ TEST(template_enable) {
|
|||||||
log_info("== %s with template@foo.service enabled ==", __func__);
|
log_info("== %s with template@foo.service enabled ==", __func__);
|
||||||
|
|
||||||
assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("template@foo.service"), &changes, &n_changes) >= 0);
|
assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("template@foo.service"), &changes, &n_changes) >= 0);
|
||||||
assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
|
assert_se(changes[0].change_or_errno == INSTALL_CHANGE_SYMLINK);
|
||||||
assert_se(streq(changes[0].source, "/usr/lib/systemd/system/template@.service"));
|
assert_se(streq(changes[0].source, "/usr/lib/systemd/system/template@.service"));
|
||||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/template@foo.service");
|
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/template@foo.service");
|
||||||
assert_se(streq(changes[0].path, p));
|
assert_se(streq(changes[0].path, p));
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
changes = NULL; n_changes = 0;
|
changes = NULL; n_changes = 0;
|
||||||
|
|
||||||
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@.service", &state) >= 0 && state == UNIT_FILE_INDIRECT);
|
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@.service", &state) >= 0 && state == UNIT_FILE_INDIRECT);
|
||||||
@ -488,9 +488,9 @@ TEST(template_enable) {
|
|||||||
|
|
||||||
assert_se(unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("template@foo.service"), &changes, &n_changes) >= 0);
|
assert_se(unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("template@foo.service"), &changes, &n_changes) >= 0);
|
||||||
assert_se(n_changes == 1);
|
assert_se(n_changes == 1);
|
||||||
assert_se(changes[0].type_or_errno == UNIT_FILE_UNLINK);
|
assert_se(changes[0].change_or_errno == INSTALL_CHANGE_UNLINK);
|
||||||
assert_se(streq(changes[0].path, p));
|
assert_se(streq(changes[0].path, p));
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
changes = NULL; n_changes = 0;
|
changes = NULL; n_changes = 0;
|
||||||
|
|
||||||
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
|
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
|
||||||
@ -505,11 +505,11 @@ TEST(template_enable) {
|
|||||||
log_info("== %s with template-symlink@quux.service enabled ==", __func__);
|
log_info("== %s with template-symlink@quux.service enabled ==", __func__);
|
||||||
|
|
||||||
assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("template-symlink@quux.service"), &changes, &n_changes) >= 0);
|
assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("template-symlink@quux.service"), &changes, &n_changes) >= 0);
|
||||||
assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
|
assert_se(changes[0].change_or_errno == INSTALL_CHANGE_SYMLINK);
|
||||||
assert_se(streq(changes[0].source, "/usr/lib/systemd/system/template@.service"));
|
assert_se(streq(changes[0].source, "/usr/lib/systemd/system/template@.service"));
|
||||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/template@quux.service");
|
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/template@quux.service");
|
||||||
assert_se(streq(changes[0].path, p));
|
assert_se(streq(changes[0].path, p));
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
changes = NULL; n_changes = 0;
|
changes = NULL; n_changes = 0;
|
||||||
|
|
||||||
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@.service", &state) >= 0 && state == UNIT_FILE_INDIRECT);
|
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@.service", &state) >= 0 && state == UNIT_FILE_INDIRECT);
|
||||||
@ -523,7 +523,7 @@ TEST(template_enable) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TEST(indirect) {
|
TEST(indirect) {
|
||||||
UnitFileChange *changes = NULL;
|
InstallChange *changes = NULL;
|
||||||
size_t n_changes = 0;
|
size_t n_changes = 0;
|
||||||
UnitFileState state;
|
UnitFileState state;
|
||||||
const char *p;
|
const char *p;
|
||||||
@ -551,11 +551,11 @@ TEST(indirect) {
|
|||||||
|
|
||||||
assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("indirectc.service"), &changes, &n_changes) >= 0);
|
assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("indirectc.service"), &changes, &n_changes) >= 0);
|
||||||
assert_se(n_changes == 1);
|
assert_se(n_changes == 1);
|
||||||
assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
|
assert_se(changes[0].change_or_errno == INSTALL_CHANGE_SYMLINK);
|
||||||
assert_se(streq(changes[0].source, "/usr/lib/systemd/system/indirectb.service"));
|
assert_se(streq(changes[0].source, "/usr/lib/systemd/system/indirectb.service"));
|
||||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/indirectb.service");
|
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/indirectb.service");
|
||||||
assert_se(streq(changes[0].path, p));
|
assert_se(streq(changes[0].path, p));
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
changes = NULL; n_changes = 0;
|
changes = NULL; n_changes = 0;
|
||||||
|
|
||||||
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "indirecta.service", &state) >= 0 && state == UNIT_FILE_INDIRECT);
|
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "indirecta.service", &state) >= 0 && state == UNIT_FILE_INDIRECT);
|
||||||
@ -564,15 +564,15 @@ TEST(indirect) {
|
|||||||
|
|
||||||
assert_se(unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("indirectc.service"), &changes, &n_changes) >= 0);
|
assert_se(unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("indirectc.service"), &changes, &n_changes) >= 0);
|
||||||
assert_se(n_changes == 1);
|
assert_se(n_changes == 1);
|
||||||
assert_se(changes[0].type_or_errno == UNIT_FILE_UNLINK);
|
assert_se(changes[0].change_or_errno == INSTALL_CHANGE_UNLINK);
|
||||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/indirectb.service");
|
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/indirectb.service");
|
||||||
assert_se(streq(changes[0].path, p));
|
assert_se(streq(changes[0].path, p));
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
changes = NULL; n_changes = 0;
|
changes = NULL; n_changes = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(preset_and_list) {
|
TEST(preset_and_list) {
|
||||||
UnitFileChange *changes = NULL;
|
InstallChange *changes = NULL;
|
||||||
size_t n_changes = 0, i;
|
size_t n_changes = 0, i;
|
||||||
const char *p, *q;
|
const char *p, *q;
|
||||||
UnitFileState state;
|
UnitFileState state;
|
||||||
@ -603,11 +603,11 @@ TEST(preset_and_list) {
|
|||||||
|
|
||||||
assert_se(unit_file_preset(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("preset-yes.service"), UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0);
|
assert_se(unit_file_preset(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("preset-yes.service"), UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0);
|
||||||
assert_se(n_changes == 1);
|
assert_se(n_changes == 1);
|
||||||
assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
|
assert_se(changes[0].change_or_errno == INSTALL_CHANGE_SYMLINK);
|
||||||
assert_se(streq(changes[0].source, "/usr/lib/systemd/system/preset-yes.service"));
|
assert_se(streq(changes[0].source, "/usr/lib/systemd/system/preset-yes.service"));
|
||||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/preset-yes.service");
|
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/preset-yes.service");
|
||||||
assert_se(streq(changes[0].path, p));
|
assert_se(streq(changes[0].path, p));
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
changes = NULL; n_changes = 0;
|
changes = NULL; n_changes = 0;
|
||||||
|
|
||||||
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "preset-yes.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
|
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "preset-yes.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
|
||||||
@ -615,10 +615,10 @@ TEST(preset_and_list) {
|
|||||||
|
|
||||||
assert_se(unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("preset-yes.service"), &changes, &n_changes) >= 0);
|
assert_se(unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("preset-yes.service"), &changes, &n_changes) >= 0);
|
||||||
assert_se(n_changes == 1);
|
assert_se(n_changes == 1);
|
||||||
assert_se(changes[0].type_or_errno == UNIT_FILE_UNLINK);
|
assert_se(changes[0].change_or_errno == INSTALL_CHANGE_UNLINK);
|
||||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/preset-yes.service");
|
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/preset-yes.service");
|
||||||
assert_se(streq(changes[0].path, p));
|
assert_se(streq(changes[0].path, p));
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
changes = NULL; n_changes = 0;
|
changes = NULL; n_changes = 0;
|
||||||
|
|
||||||
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "preset-yes.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
|
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "preset-yes.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
|
||||||
@ -626,7 +626,7 @@ TEST(preset_and_list) {
|
|||||||
|
|
||||||
assert_se(unit_file_preset(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("preset-no.service"), UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0);
|
assert_se(unit_file_preset(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("preset-no.service"), UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0);
|
||||||
assert_se(n_changes == 0);
|
assert_se(n_changes == 0);
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
changes = NULL; n_changes = 0;
|
changes = NULL; n_changes = 0;
|
||||||
|
|
||||||
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "preset-yes.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
|
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "preset-yes.service", &state) >= 0 && state == UNIT_FILE_DISABLED);
|
||||||
@ -640,14 +640,14 @@ TEST(preset_and_list) {
|
|||||||
|
|
||||||
for (i = 0; i < n_changes; i++) {
|
for (i = 0; i < n_changes; i++) {
|
||||||
|
|
||||||
if (changes[i].type_or_errno == UNIT_FILE_SYMLINK) {
|
if (changes[i].change_or_errno == INSTALL_CHANGE_SYMLINK) {
|
||||||
assert_se(streq(changes[i].source, "/usr/lib/systemd/system/preset-yes.service"));
|
assert_se(streq(changes[i].source, "/usr/lib/systemd/system/preset-yes.service"));
|
||||||
assert_se(streq(changes[i].path, p));
|
assert_se(streq(changes[i].path, p));
|
||||||
} else
|
} else
|
||||||
assert_se(changes[i].type_or_errno == UNIT_FILE_UNLINK);
|
assert_se(changes[i].change_or_errno == INSTALL_CHANGE_UNLINK);
|
||||||
}
|
}
|
||||||
|
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
changes = NULL; n_changes = 0;
|
changes = NULL; n_changes = 0;
|
||||||
|
|
||||||
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "preset-yes.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
|
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "preset-yes.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
|
||||||
@ -681,7 +681,7 @@ TEST(preset_and_list) {
|
|||||||
TEST(revert) {
|
TEST(revert) {
|
||||||
const char *p;
|
const char *p;
|
||||||
UnitFileState state;
|
UnitFileState state;
|
||||||
UnitFileChange *changes = NULL;
|
InstallChange *changes = NULL;
|
||||||
size_t n_changes = 0;
|
size_t n_changes = 0;
|
||||||
|
|
||||||
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "xx.service", NULL) == -ENOENT);
|
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "xx.service", NULL) == -ENOENT);
|
||||||
@ -696,7 +696,7 @@ TEST(revert) {
|
|||||||
/* Initially there's nothing to revert */
|
/* Initially there's nothing to revert */
|
||||||
assert_se(unit_file_revert(LOOKUP_SCOPE_SYSTEM, root, STRV_MAKE("xx.service"), &changes, &n_changes) >= 0);
|
assert_se(unit_file_revert(LOOKUP_SCOPE_SYSTEM, root, STRV_MAKE("xx.service"), &changes, &n_changes) >= 0);
|
||||||
assert_se(n_changes == 0);
|
assert_se(n_changes == 0);
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
changes = NULL; n_changes = 0;
|
changes = NULL; n_changes = 0;
|
||||||
|
|
||||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/xx.service");
|
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/xx.service");
|
||||||
@ -705,9 +705,9 @@ TEST(revert) {
|
|||||||
/* Revert the override file */
|
/* Revert the override file */
|
||||||
assert_se(unit_file_revert(LOOKUP_SCOPE_SYSTEM, root, STRV_MAKE("xx.service"), &changes, &n_changes) >= 0);
|
assert_se(unit_file_revert(LOOKUP_SCOPE_SYSTEM, root, STRV_MAKE("xx.service"), &changes, &n_changes) >= 0);
|
||||||
assert_se(n_changes == 1);
|
assert_se(n_changes == 1);
|
||||||
assert_se(changes[0].type_or_errno == UNIT_FILE_UNLINK);
|
assert_se(changes[0].change_or_errno == INSTALL_CHANGE_UNLINK);
|
||||||
assert_se(streq(changes[0].path, p));
|
assert_se(streq(changes[0].path, p));
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
changes = NULL; n_changes = 0;
|
changes = NULL; n_changes = 0;
|
||||||
|
|
||||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/xx.service.d/dropin.conf");
|
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/xx.service.d/dropin.conf");
|
||||||
@ -716,18 +716,18 @@ TEST(revert) {
|
|||||||
/* Revert the dropin file */
|
/* Revert the dropin file */
|
||||||
assert_se(unit_file_revert(LOOKUP_SCOPE_SYSTEM, root, STRV_MAKE("xx.service"), &changes, &n_changes) >= 0);
|
assert_se(unit_file_revert(LOOKUP_SCOPE_SYSTEM, root, STRV_MAKE("xx.service"), &changes, &n_changes) >= 0);
|
||||||
assert_se(n_changes == 2);
|
assert_se(n_changes == 2);
|
||||||
assert_se(changes[0].type_or_errno == UNIT_FILE_UNLINK);
|
assert_se(changes[0].change_or_errno == INSTALL_CHANGE_UNLINK);
|
||||||
assert_se(streq(changes[0].path, p));
|
assert_se(streq(changes[0].path, p));
|
||||||
|
|
||||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/xx.service.d");
|
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/xx.service.d");
|
||||||
assert_se(changes[1].type_or_errno == UNIT_FILE_UNLINK);
|
assert_se(changes[1].change_or_errno == INSTALL_CHANGE_UNLINK);
|
||||||
assert_se(streq(changes[1].path, p));
|
assert_se(streq(changes[1].path, p));
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
changes = NULL; n_changes = 0;
|
changes = NULL; n_changes = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(preset_order) {
|
TEST(preset_order) {
|
||||||
UnitFileChange *changes = NULL;
|
InstallChange *changes = NULL;
|
||||||
size_t n_changes = 0;
|
size_t n_changes = 0;
|
||||||
const char *p;
|
const char *p;
|
||||||
UnitFileState state;
|
UnitFileState state;
|
||||||
@ -756,11 +756,11 @@ TEST(preset_order) {
|
|||||||
|
|
||||||
assert_se(unit_file_preset(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("prefix-1.service"), UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0);
|
assert_se(unit_file_preset(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("prefix-1.service"), UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0);
|
||||||
assert_se(n_changes == 1);
|
assert_se(n_changes == 1);
|
||||||
assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
|
assert_se(changes[0].change_or_errno == INSTALL_CHANGE_SYMLINK);
|
||||||
assert_se(streq(changes[0].source, "/usr/lib/systemd/system/prefix-1.service"));
|
assert_se(streq(changes[0].source, "/usr/lib/systemd/system/prefix-1.service"));
|
||||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/prefix-1.service");
|
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/prefix-1.service");
|
||||||
assert_se(streq(changes[0].path, p));
|
assert_se(streq(changes[0].path, p));
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
changes = NULL; n_changes = 0;
|
changes = NULL; n_changes = 0;
|
||||||
|
|
||||||
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "prefix-1.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
|
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "prefix-1.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
|
||||||
@ -798,7 +798,7 @@ TEST(static_instance) {
|
|||||||
TEST(with_dropin) {
|
TEST(with_dropin) {
|
||||||
const char *p;
|
const char *p;
|
||||||
UnitFileState state;
|
UnitFileState state;
|
||||||
UnitFileChange *changes = NULL;
|
InstallChange *changes = NULL;
|
||||||
size_t n_changes = 0;
|
size_t n_changes = 0;
|
||||||
|
|
||||||
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-1.service", &state) == -ENOENT);
|
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-1.service", &state) == -ENOENT);
|
||||||
@ -864,57 +864,57 @@ TEST(with_dropin) {
|
|||||||
|
|
||||||
assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("with-dropin-1.service"), &changes, &n_changes) == 1);
|
assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("with-dropin-1.service"), &changes, &n_changes) == 1);
|
||||||
assert_se(n_changes == 2);
|
assert_se(n_changes == 2);
|
||||||
assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
|
assert_se(changes[0].change_or_errno == INSTALL_CHANGE_SYMLINK);
|
||||||
assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK);
|
assert_se(changes[1].change_or_errno == INSTALL_CHANGE_SYMLINK);
|
||||||
assert_se(streq(changes[0].source, "/usr/lib/systemd/system/with-dropin-1.service"));
|
assert_se(streq(changes[0].source, "/usr/lib/systemd/system/with-dropin-1.service"));
|
||||||
assert_se(streq(changes[1].source, "/usr/lib/systemd/system/with-dropin-1.service"));
|
assert_se(streq(changes[1].source, "/usr/lib/systemd/system/with-dropin-1.service"));
|
||||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-1.service");
|
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-1.service");
|
||||||
assert_se(streq(changes[0].path, p));
|
assert_se(streq(changes[0].path, p));
|
||||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/graphical.target.wants/with-dropin-1.service");
|
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/graphical.target.wants/with-dropin-1.service");
|
||||||
assert_se(streq(changes[1].path, p));
|
assert_se(streq(changes[1].path, p));
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
changes = NULL; n_changes = 0;
|
changes = NULL; n_changes = 0;
|
||||||
|
|
||||||
assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("with-dropin-2.service"), &changes, &n_changes) == 1);
|
assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("with-dropin-2.service"), &changes, &n_changes) == 1);
|
||||||
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-2.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
|
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-2.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
|
||||||
assert_se(n_changes == 2);
|
assert_se(n_changes == 2);
|
||||||
assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
|
assert_se(changes[0].change_or_errno == INSTALL_CHANGE_SYMLINK);
|
||||||
assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK);
|
assert_se(changes[1].change_or_errno == INSTALL_CHANGE_SYMLINK);
|
||||||
assert_se(streq(changes[0].source, SYSTEM_CONFIG_UNIT_DIR"/with-dropin-2.service"));
|
assert_se(streq(changes[0].source, SYSTEM_CONFIG_UNIT_DIR"/with-dropin-2.service"));
|
||||||
assert_se(streq(changes[1].source, SYSTEM_CONFIG_UNIT_DIR"/with-dropin-2.service"));
|
assert_se(streq(changes[1].source, SYSTEM_CONFIG_UNIT_DIR"/with-dropin-2.service"));
|
||||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-2.service");
|
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-2.service");
|
||||||
assert_se(streq(changes[0].path, p));
|
assert_se(streq(changes[0].path, p));
|
||||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/graphical.target.wants/with-dropin-2.service");
|
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/graphical.target.wants/with-dropin-2.service");
|
||||||
assert_se(streq(changes[1].path, p));
|
assert_se(streq(changes[1].path, p));
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
changes = NULL; n_changes = 0;
|
changes = NULL; n_changes = 0;
|
||||||
|
|
||||||
assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("with-dropin-3.service"), &changes, &n_changes) == 1);
|
assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("with-dropin-3.service"), &changes, &n_changes) == 1);
|
||||||
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-3.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
|
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-3.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
|
||||||
assert_se(n_changes == 2);
|
assert_se(n_changes == 2);
|
||||||
assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
|
assert_se(changes[0].change_or_errno == INSTALL_CHANGE_SYMLINK);
|
||||||
assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK);
|
assert_se(changes[1].change_or_errno == INSTALL_CHANGE_SYMLINK);
|
||||||
assert_se(streq(changes[0].source, "/usr/lib/systemd/system/with-dropin-3.service"));
|
assert_se(streq(changes[0].source, "/usr/lib/systemd/system/with-dropin-3.service"));
|
||||||
assert_se(streq(changes[1].source, "/usr/lib/systemd/system/with-dropin-3.service"));
|
assert_se(streq(changes[1].source, "/usr/lib/systemd/system/with-dropin-3.service"));
|
||||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-3.service");
|
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-3.service");
|
||||||
assert_se(streq(changes[0].path, p));
|
assert_se(streq(changes[0].path, p));
|
||||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/graphical.target.wants/with-dropin-3.service");
|
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/graphical.target.wants/with-dropin-3.service");
|
||||||
assert_se(streq(changes[1].path, p));
|
assert_se(streq(changes[1].path, p));
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
changes = NULL; n_changes = 0;
|
changes = NULL; n_changes = 0;
|
||||||
|
|
||||||
assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("with-dropin-4a.service"), &changes, &n_changes) == 2);
|
assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("with-dropin-4a.service"), &changes, &n_changes) == 2);
|
||||||
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-3.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
|
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-3.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
|
||||||
assert_se(n_changes == 2);
|
assert_se(n_changes == 2);
|
||||||
assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
|
assert_se(changes[0].change_or_errno == INSTALL_CHANGE_SYMLINK);
|
||||||
assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK);
|
assert_se(changes[1].change_or_errno == INSTALL_CHANGE_SYMLINK);
|
||||||
assert_se(streq(changes[0].source, "/usr/lib/systemd/system/with-dropin-4a.service"));
|
assert_se(streq(changes[0].source, "/usr/lib/systemd/system/with-dropin-4a.service"));
|
||||||
assert_se(streq(changes[1].source, "/usr/lib/systemd/system/with-dropin-4b.service"));
|
assert_se(streq(changes[1].source, "/usr/lib/systemd/system/with-dropin-4b.service"));
|
||||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-4a.service");
|
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-4a.service");
|
||||||
assert_se(streq(changes[0].path, p));
|
assert_se(streq(changes[0].path, p));
|
||||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-4b.service");
|
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-4b.service");
|
||||||
assert_se(streq(changes[1].path, p));
|
assert_se(streq(changes[1].path, p));
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
changes = NULL; n_changes = 0;
|
changes = NULL; n_changes = 0;
|
||||||
|
|
||||||
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-1.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
|
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-1.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
|
||||||
@ -927,7 +927,7 @@ TEST(with_dropin) {
|
|||||||
TEST(with_dropin_template) {
|
TEST(with_dropin_template) {
|
||||||
const char *p;
|
const char *p;
|
||||||
UnitFileState state;
|
UnitFileState state;
|
||||||
UnitFileChange *changes = NULL;
|
InstallChange *changes = NULL;
|
||||||
size_t n_changes = 0;
|
size_t n_changes = 0;
|
||||||
|
|
||||||
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-1@.service", &state) == -ENOENT);
|
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-1@.service", &state) == -ENOENT);
|
||||||
@ -973,46 +973,46 @@ TEST(with_dropin_template) {
|
|||||||
|
|
||||||
assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("with-dropin-1@instance-1.service"), &changes, &n_changes) == 1);
|
assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("with-dropin-1@instance-1.service"), &changes, &n_changes) == 1);
|
||||||
assert_se(n_changes == 2);
|
assert_se(n_changes == 2);
|
||||||
assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
|
assert_se(changes[0].change_or_errno == INSTALL_CHANGE_SYMLINK);
|
||||||
assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK);
|
assert_se(changes[1].change_or_errno == INSTALL_CHANGE_SYMLINK);
|
||||||
assert_se(streq(changes[0].source, "/usr/lib/systemd/system/with-dropin-1@.service"));
|
assert_se(streq(changes[0].source, "/usr/lib/systemd/system/with-dropin-1@.service"));
|
||||||
assert_se(streq(changes[1].source, "/usr/lib/systemd/system/with-dropin-1@.service"));
|
assert_se(streq(changes[1].source, "/usr/lib/systemd/system/with-dropin-1@.service"));
|
||||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-1@instance-1.service");
|
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-1@instance-1.service");
|
||||||
assert_se(streq(changes[0].path, p));
|
assert_se(streq(changes[0].path, p));
|
||||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/graphical.target.wants/with-dropin-1@instance-1.service");
|
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/graphical.target.wants/with-dropin-1@instance-1.service");
|
||||||
assert_se(streq(changes[1].path, p));
|
assert_se(streq(changes[1].path, p));
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
changes = NULL; n_changes = 0;
|
changes = NULL; n_changes = 0;
|
||||||
|
|
||||||
assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("with-dropin-2@instance-1.service"), &changes, &n_changes) == 1);
|
assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("with-dropin-2@instance-1.service"), &changes, &n_changes) == 1);
|
||||||
assert_se(n_changes == 2);
|
assert_se(n_changes == 2);
|
||||||
assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
|
assert_se(changes[0].change_or_errno == INSTALL_CHANGE_SYMLINK);
|
||||||
assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK);
|
assert_se(changes[1].change_or_errno == INSTALL_CHANGE_SYMLINK);
|
||||||
assert_se(streq(changes[0].source, "/usr/lib/systemd/system/with-dropin-2@.service"));
|
assert_se(streq(changes[0].source, "/usr/lib/systemd/system/with-dropin-2@.service"));
|
||||||
assert_se(streq(changes[1].source, "/usr/lib/systemd/system/with-dropin-2@.service"));
|
assert_se(streq(changes[1].source, "/usr/lib/systemd/system/with-dropin-2@.service"));
|
||||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-2@instance-1.service");
|
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-2@instance-1.service");
|
||||||
assert_se(streq(changes[0].path, p));
|
assert_se(streq(changes[0].path, p));
|
||||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/graphical.target.wants/with-dropin-2@instance-1.service");
|
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/graphical.target.wants/with-dropin-2@instance-1.service");
|
||||||
assert_se(streq(changes[1].path, p));
|
assert_se(streq(changes[1].path, p));
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
changes = NULL; n_changes = 0;
|
changes = NULL; n_changes = 0;
|
||||||
|
|
||||||
assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("with-dropin-2@instance-2.service"), &changes, &n_changes) == 1);
|
assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("with-dropin-2@instance-2.service"), &changes, &n_changes) == 1);
|
||||||
assert_se(n_changes == 1);
|
assert_se(n_changes == 1);
|
||||||
assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
|
assert_se(changes[0].change_or_errno == INSTALL_CHANGE_SYMLINK);
|
||||||
assert_se(streq(changes[0].source, "/usr/lib/systemd/system/with-dropin-2@.service"));
|
assert_se(streq(changes[0].source, "/usr/lib/systemd/system/with-dropin-2@.service"));
|
||||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-2@instance-2.service");
|
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-2@instance-2.service");
|
||||||
assert_se(streq(changes[0].path, p));
|
assert_se(streq(changes[0].path, p));
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
changes = NULL; n_changes = 0;
|
changes = NULL; n_changes = 0;
|
||||||
|
|
||||||
assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("with-dropin-3@.service"), &changes, &n_changes) == 1);
|
assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("with-dropin-3@.service"), &changes, &n_changes) == 1);
|
||||||
assert_se(n_changes == 1);
|
assert_se(n_changes == 1);
|
||||||
assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
|
assert_se(changes[0].change_or_errno == INSTALL_CHANGE_SYMLINK);
|
||||||
assert_se(streq(changes[0].source, "/usr/lib/systemd/system/with-dropin-3@.service"));
|
assert_se(streq(changes[0].source, "/usr/lib/systemd/system/with-dropin-3@.service"));
|
||||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-3@instance-2.service");
|
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-3@instance-2.service");
|
||||||
assert_se(streq(changes[0].path, p));
|
assert_se(streq(changes[0].path, p));
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
changes = NULL; n_changes = 0;
|
changes = NULL; n_changes = 0;
|
||||||
|
|
||||||
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-1@instance-1.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
|
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-1@instance-1.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
|
||||||
@ -1023,7 +1023,7 @@ TEST(with_dropin_template) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TEST(preset_multiple_instances) {
|
TEST(preset_multiple_instances) {
|
||||||
UnitFileChange *changes = NULL;
|
InstallChange *changes = NULL;
|
||||||
size_t n_changes = 0;
|
size_t n_changes = 0;
|
||||||
const char *p;
|
const char *p;
|
||||||
UnitFileState state;
|
UnitFileState state;
|
||||||
@ -1049,18 +1049,18 @@ TEST(preset_multiple_instances) {
|
|||||||
assert_se(unit_file_preset(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("foo@bar0.service"), UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0);
|
assert_se(unit_file_preset(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("foo@bar0.service"), UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0);
|
||||||
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "foo@bar0.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
|
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "foo@bar0.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
|
||||||
assert_se(n_changes == 1);
|
assert_se(n_changes == 1);
|
||||||
assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
|
assert_se(changes[0].change_or_errno == INSTALL_CHANGE_SYMLINK);
|
||||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/foo@bar0.service");
|
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/foo@bar0.service");
|
||||||
assert_se(streq(changes[0].path, p));
|
assert_se(streq(changes[0].path, p));
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
changes = NULL; n_changes = 0;
|
changes = NULL; n_changes = 0;
|
||||||
|
|
||||||
assert_se(unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("foo@bar0.service"), &changes, &n_changes) >= 0);
|
assert_se(unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("foo@bar0.service"), &changes, &n_changes) >= 0);
|
||||||
assert_se(n_changes == 1);
|
assert_se(n_changes == 1);
|
||||||
assert_se(changes[0].type_or_errno == UNIT_FILE_UNLINK);
|
assert_se(changes[0].change_or_errno == INSTALL_CHANGE_UNLINK);
|
||||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/foo@bar0.service");
|
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/foo@bar0.service");
|
||||||
assert_se(streq(changes[0].path, p));
|
assert_se(streq(changes[0].path, p));
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
changes = NULL; n_changes = 0;
|
changes = NULL; n_changes = 0;
|
||||||
|
|
||||||
/* Check for preset-all case, only instances on the list should be enabled, not including the default instance */
|
/* Check for preset-all case, only instances on the list should be enabled, not including the default instance */
|
||||||
@ -1076,16 +1076,16 @@ TEST(preset_multiple_instances) {
|
|||||||
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "foo@bar1.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
|
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "foo@bar1.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
|
||||||
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "foo@bartest.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
|
assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "foo@bartest.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
|
||||||
|
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void verify_one(
|
static void verify_one(
|
||||||
const UnitFileInstallInfo *i,
|
const InstallInfo *i,
|
||||||
const char *alias,
|
const char *alias,
|
||||||
int expected,
|
int expected,
|
||||||
const char *updated_name) {
|
const char *updated_name) {
|
||||||
int r;
|
int r;
|
||||||
static const UnitFileInstallInfo *last_info = NULL;
|
static const InstallInfo *last_info = NULL;
|
||||||
_cleanup_free_ char *alias2 = NULL;
|
_cleanup_free_ char *alias2 = NULL;
|
||||||
|
|
||||||
if (i != last_info)
|
if (i != last_info)
|
||||||
@ -1106,7 +1106,7 @@ static void verify_one(
|
|||||||
}
|
}
|
||||||
|
|
||||||
TEST(verify_alias) {
|
TEST(verify_alias) {
|
||||||
const UnitFileInstallInfo
|
const InstallInfo
|
||||||
plain_service = { .name = (char*) "plain.service" },
|
plain_service = { .name = (char*) "plain.service" },
|
||||||
bare_template = { .name = (char*) "template1@.service" },
|
bare_template = { .name = (char*) "template1@.service" },
|
||||||
di_template = { .name = (char*) "template2@.service",
|
di_template = { .name = (char*) "template2@.service",
|
||||||
|
@ -6,15 +6,15 @@
|
|||||||
#include "install.h"
|
#include "install.h"
|
||||||
#include "tests.h"
|
#include "tests.h"
|
||||||
|
|
||||||
static void dump_changes(UnitFileChange *c, unsigned n) {
|
static void dump_changes(InstallChange *c, unsigned n) {
|
||||||
unsigned i;
|
unsigned i;
|
||||||
|
|
||||||
assert_se(n == 0 || c);
|
assert_se(n == 0 || c);
|
||||||
|
|
||||||
for (i = 0; i < n; i++) {
|
for (i = 0; i < n; i++) {
|
||||||
if (c[i].type_or_errno == UNIT_FILE_UNLINK)
|
if (c[i].change_or_errno == INSTALL_CHANGE_UNLINK)
|
||||||
printf("rm '%s'\n", c[i].path);
|
printf("rm '%s'\n", c[i].path);
|
||||||
else if (c[i].type_or_errno == UNIT_FILE_SYMLINK)
|
else if (c[i].change_or_errno == INSTALL_CHANGE_SYMLINK)
|
||||||
printf("ln -s '%s' '%s'\n", c[i].source, c[i].path);
|
printf("ln -s '%s' '%s'\n", c[i].source, c[i].path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -25,7 +25,7 @@ int main(int argc, char* argv[]) {
|
|||||||
int r;
|
int r;
|
||||||
const char *const files[] = { "avahi-daemon.service", NULL };
|
const char *const files[] = { "avahi-daemon.service", NULL };
|
||||||
const char *const files2[] = { "/home/lennart/test.service", NULL };
|
const char *const files2[] = { "/home/lennart/test.service", NULL };
|
||||||
UnitFileChange *changes = NULL;
|
InstallChange *changes = NULL;
|
||||||
size_t n_changes = 0;
|
size_t n_changes = 0;
|
||||||
UnitFileState state = 0;
|
UnitFileState state = 0;
|
||||||
|
|
||||||
@ -61,7 +61,7 @@ int main(int argc, char* argv[]) {
|
|||||||
assert_se(r >= 0);
|
assert_se(r >= 0);
|
||||||
|
|
||||||
dump_changes(changes, n_changes);
|
dump_changes(changes, n_changes);
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
|
|
||||||
r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, files[0], &state);
|
r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, files[0], &state);
|
||||||
assert_se(r >= 0);
|
assert_se(r >= 0);
|
||||||
@ -75,7 +75,7 @@ int main(int argc, char* argv[]) {
|
|||||||
assert_se(r >= 0);
|
assert_se(r >= 0);
|
||||||
|
|
||||||
dump_changes(changes, n_changes);
|
dump_changes(changes, n_changes);
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
|
|
||||||
r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, files[0], &state);
|
r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, files[0], &state);
|
||||||
assert_se(r >= 0);
|
assert_se(r >= 0);
|
||||||
@ -92,7 +92,7 @@ int main(int argc, char* argv[]) {
|
|||||||
assert_se(r >= 0);
|
assert_se(r >= 0);
|
||||||
|
|
||||||
dump_changes(changes, n_changes);
|
dump_changes(changes, n_changes);
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
|
|
||||||
r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, files[0], &state);
|
r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, files[0], &state);
|
||||||
assert_se(r >= 0);
|
assert_se(r >= 0);
|
||||||
@ -109,7 +109,7 @@ int main(int argc, char* argv[]) {
|
|||||||
assert_se(r >= 0);
|
assert_se(r >= 0);
|
||||||
|
|
||||||
dump_changes(changes, n_changes);
|
dump_changes(changes, n_changes);
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
|
|
||||||
r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, files[0], &state);
|
r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, files[0], &state);
|
||||||
assert_se(r >= 0);
|
assert_se(r >= 0);
|
||||||
@ -123,7 +123,7 @@ int main(int argc, char* argv[]) {
|
|||||||
assert_se(r >= 0);
|
assert_se(r >= 0);
|
||||||
|
|
||||||
dump_changes(changes, n_changes);
|
dump_changes(changes, n_changes);
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
|
|
||||||
r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, files[0], &state);
|
r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, files[0], &state);
|
||||||
assert_se(r >= 0);
|
assert_se(r >= 0);
|
||||||
@ -140,7 +140,7 @@ int main(int argc, char* argv[]) {
|
|||||||
assert_se(r >= 0);
|
assert_se(r >= 0);
|
||||||
|
|
||||||
dump_changes(changes, n_changes);
|
dump_changes(changes, n_changes);
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
|
|
||||||
r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, files[0], &state);
|
r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, files[0], &state);
|
||||||
assert_se(r >= 0);
|
assert_se(r >= 0);
|
||||||
@ -154,7 +154,7 @@ int main(int argc, char* argv[]) {
|
|||||||
assert_se(r >= 0);
|
assert_se(r >= 0);
|
||||||
|
|
||||||
dump_changes(changes, n_changes);
|
dump_changes(changes, n_changes);
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
|
|
||||||
r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, files[0], &state);
|
r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, files[0], &state);
|
||||||
assert_se(r >= 0);
|
assert_se(r >= 0);
|
||||||
@ -168,7 +168,7 @@ int main(int argc, char* argv[]) {
|
|||||||
assert_se(r >= 0);
|
assert_se(r >= 0);
|
||||||
|
|
||||||
dump_changes(changes, n_changes);
|
dump_changes(changes, n_changes);
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
|
|
||||||
r = unit_file_get_state(LOOKUP_SCOPE_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(r >= 0);
|
||||||
@ -182,7 +182,7 @@ int main(int argc, char* argv[]) {
|
|||||||
assert_se(r >= 0);
|
assert_se(r >= 0);
|
||||||
|
|
||||||
dump_changes(changes, n_changes);
|
dump_changes(changes, n_changes);
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
|
|
||||||
r = unit_file_get_state(LOOKUP_SCOPE_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(r < 0);
|
||||||
@ -195,7 +195,7 @@ int main(int argc, char* argv[]) {
|
|||||||
assert_se(r >= 0);
|
assert_se(r >= 0);
|
||||||
|
|
||||||
dump_changes(changes, n_changes);
|
dump_changes(changes, n_changes);
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
|
|
||||||
r = unit_file_get_state(LOOKUP_SCOPE_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(r >= 0);
|
||||||
@ -209,7 +209,7 @@ int main(int argc, char* argv[]) {
|
|||||||
assert_se(r >= 0);
|
assert_se(r >= 0);
|
||||||
|
|
||||||
dump_changes(changes, n_changes);
|
dump_changes(changes, n_changes);
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
|
|
||||||
r = unit_file_get_state(LOOKUP_SCOPE_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(r < 0);
|
||||||
@ -222,7 +222,7 @@ int main(int argc, char* argv[]) {
|
|||||||
assert_se(r >= 0);
|
assert_se(r >= 0);
|
||||||
|
|
||||||
dump_changes(changes, n_changes);
|
dump_changes(changes, n_changes);
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
|
|
||||||
r = unit_file_get_state(LOOKUP_SCOPE_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(r >= 0);
|
||||||
@ -236,7 +236,7 @@ int main(int argc, char* argv[]) {
|
|||||||
assert_se(r >= 0);
|
assert_se(r >= 0);
|
||||||
|
|
||||||
dump_changes(changes, n_changes);
|
dump_changes(changes, n_changes);
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
|
|
||||||
r = unit_file_get_state(LOOKUP_SCOPE_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(r >= 0);
|
||||||
@ -250,7 +250,7 @@ int main(int argc, char* argv[]) {
|
|||||||
assert_se(r >= 0);
|
assert_se(r >= 0);
|
||||||
|
|
||||||
dump_changes(changes, n_changes);
|
dump_changes(changes, n_changes);
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
|
|
||||||
r = unit_file_get_state(LOOKUP_SCOPE_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(r < 0);
|
||||||
@ -262,7 +262,7 @@ int main(int argc, char* argv[]) {
|
|||||||
assert_se(r >= 0);
|
assert_se(r >= 0);
|
||||||
|
|
||||||
dump_changes(changes, n_changes);
|
dump_changes(changes, n_changes);
|
||||||
unit_file_changes_free(changes, n_changes);
|
install_changes_free(changes, n_changes);
|
||||||
|
|
||||||
r = unit_file_get_state(LOOKUP_SCOPE_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(r >= 0);
|
||||||
|
@ -509,12 +509,12 @@ TEST(config_parse_log_extra_fields) {
|
|||||||
TEST(install_printf, .sd_booted = true) {
|
TEST(install_printf, .sd_booted = true) {
|
||||||
char name[] = "name.service",
|
char name[] = "name.service",
|
||||||
path[] = "/run/systemd/system/name.service";
|
path[] = "/run/systemd/system/name.service";
|
||||||
UnitFileInstallInfo i = { .name = name, .path = path, };
|
InstallInfo i = { .name = name, .path = path, };
|
||||||
UnitFileInstallInfo i2 = { .name= name, .path = path, };
|
InstallInfo i2 = { .name= name, .path = path, };
|
||||||
char name3[] = "name@inst.service",
|
char name3[] = "name@inst.service",
|
||||||
path3[] = "/run/systemd/system/name.service";
|
path3[] = "/run/systemd/system/name.service";
|
||||||
UnitFileInstallInfo i3 = { .name = name3, .path = path3, };
|
InstallInfo i3 = { .name = name3, .path = path3, };
|
||||||
UnitFileInstallInfo i4 = { .name = name3, .path = path3, };
|
InstallInfo i4 = { .name = name3, .path = path3, };
|
||||||
|
|
||||||
_cleanup_free_ char *mid = NULL, *bid = NULL, *host = NULL, *gid = NULL, *group = NULL, *uid = NULL, *user = NULL;
|
_cleanup_free_ char *mid = NULL, *bid = NULL, *host = NULL, *gid = NULL, *group = NULL, *uid = NULL, *user = NULL;
|
||||||
|
|
||||||
|
@ -116,7 +116,7 @@ int main(int argc, char **argv) {
|
|||||||
test_table(timer_state, TIMER_STATE);
|
test_table(timer_state, TIMER_STATE);
|
||||||
test_table(unit_active_state, UNIT_ACTIVE_STATE);
|
test_table(unit_active_state, UNIT_ACTIVE_STATE);
|
||||||
test_table(unit_dependency, UNIT_DEPENDENCY);
|
test_table(unit_dependency, UNIT_DEPENDENCY);
|
||||||
test_table(unit_file_change_type, UNIT_FILE_CHANGE_TYPE);
|
test_table(install_change, INSTALL_CHANGE);
|
||||||
test_table(unit_file_preset_mode, UNIT_FILE_PRESET);
|
test_table(unit_file_preset_mode, UNIT_FILE_PRESET);
|
||||||
test_table(unit_file_state, UNIT_FILE_STATE);
|
test_table(unit_file_state, UNIT_FILE_STATE);
|
||||||
test_table(unit_load_state, UNIT_LOAD_STATE);
|
test_table(unit_load_state, UNIT_LOAD_STATE);
|
||||||
|
@ -17,8 +17,7 @@ import unittest
|
|||||||
import uuid
|
import uuid
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
|
|
||||||
|
class InstallChange(Enum):
|
||||||
class UnitFileChange(Enum):
|
|
||||||
NO_CHANGE = 0
|
NO_CHANGE = 0
|
||||||
LINES_SWAPPED = 1
|
LINES_SWAPPED = 1
|
||||||
COMMAND_ADDED_BEFORE = 2
|
COMMAND_ADDED_BEFORE = 2
|
||||||
@ -39,7 +38,7 @@ class ExecutionResumeTest(unittest.TestCase):
|
|||||||
ExecStart=/bin/sleep 3
|
ExecStart=/bin/sleep 3
|
||||||
ExecStart=/bin/bash -c "echo foo >> {self.output_file}"
|
ExecStart=/bin/bash -c "echo foo >> {self.output_file}"
|
||||||
'''
|
'''
|
||||||
self.unit_files[UnitFileChange.NO_CHANGE] = unit_file_content
|
self.unit_files[InstallChange.NO_CHANGE] = unit_file_content
|
||||||
|
|
||||||
unit_file_content = f'''
|
unit_file_content = f'''
|
||||||
[Service]
|
[Service]
|
||||||
@ -47,7 +46,7 @@ class ExecutionResumeTest(unittest.TestCase):
|
|||||||
ExecStart=/bin/bash -c "echo foo >> {self.output_file}"
|
ExecStart=/bin/bash -c "echo foo >> {self.output_file}"
|
||||||
ExecStart=/bin/sleep 3
|
ExecStart=/bin/sleep 3
|
||||||
'''
|
'''
|
||||||
self.unit_files[UnitFileChange.LINES_SWAPPED] = unit_file_content
|
self.unit_files[InstallChange.LINES_SWAPPED] = unit_file_content
|
||||||
|
|
||||||
unit_file_content = f'''
|
unit_file_content = f'''
|
||||||
[Service]
|
[Service]
|
||||||
@ -56,7 +55,7 @@ class ExecutionResumeTest(unittest.TestCase):
|
|||||||
ExecStart=/bin/sleep 3
|
ExecStart=/bin/sleep 3
|
||||||
ExecStart=/bin/bash -c "echo foo >> {self.output_file}"
|
ExecStart=/bin/bash -c "echo foo >> {self.output_file}"
|
||||||
'''
|
'''
|
||||||
self.unit_files[UnitFileChange.COMMAND_ADDED_BEFORE] = unit_file_content
|
self.unit_files[InstallChange.COMMAND_ADDED_BEFORE] = unit_file_content
|
||||||
|
|
||||||
unit_file_content = f'''
|
unit_file_content = f'''
|
||||||
[Service]
|
[Service]
|
||||||
@ -65,7 +64,7 @@ class ExecutionResumeTest(unittest.TestCase):
|
|||||||
ExecStart=/bin/bash -c "echo foo >> {self.output_file}"
|
ExecStart=/bin/bash -c "echo foo >> {self.output_file}"
|
||||||
ExecStart=/bin/bash -c "echo bar >> {self.output_file}"
|
ExecStart=/bin/bash -c "echo bar >> {self.output_file}"
|
||||||
'''
|
'''
|
||||||
self.unit_files[UnitFileChange.COMMAND_ADDED_AFTER] = unit_file_content
|
self.unit_files[InstallChange.COMMAND_ADDED_AFTER] = unit_file_content
|
||||||
|
|
||||||
unit_file_content = f'''
|
unit_file_content = f'''
|
||||||
[Service]
|
[Service]
|
||||||
@ -75,7 +74,7 @@ class ExecutionResumeTest(unittest.TestCase):
|
|||||||
ExecStart=/bin/bash -c "echo foo >> {self.output_file}"
|
ExecStart=/bin/bash -c "echo foo >> {self.output_file}"
|
||||||
ExecStart=/bin/bash -c "echo bar >> {self.output_file}"
|
ExecStart=/bin/bash -c "echo bar >> {self.output_file}"
|
||||||
'''
|
'''
|
||||||
self.unit_files[UnitFileChange.COMMAND_INTERLEAVED] = unit_file_content
|
self.unit_files[InstallChange.COMMAND_INTERLEAVED] = unit_file_content
|
||||||
|
|
||||||
unit_file_content = f'''
|
unit_file_content = f'''
|
||||||
[Service]
|
[Service]
|
||||||
@ -83,13 +82,13 @@ class ExecutionResumeTest(unittest.TestCase):
|
|||||||
ExecStart=/bin/bash -c "echo bar >> {self.output_file}"
|
ExecStart=/bin/bash -c "echo bar >> {self.output_file}"
|
||||||
ExecStart=/bin/bash -c "echo baz >> {self.output_file}"
|
ExecStart=/bin/bash -c "echo baz >> {self.output_file}"
|
||||||
'''
|
'''
|
||||||
self.unit_files[UnitFileChange.REMOVAL] = unit_file_content
|
self.unit_files[InstallChange.REMOVAL] = unit_file_content
|
||||||
|
|
||||||
def reload(self):
|
def reload(self):
|
||||||
subprocess.check_call(['systemctl', 'daemon-reload'])
|
subprocess.check_call(['systemctl', 'daemon-reload'])
|
||||||
|
|
||||||
def write_unit_file(self, unit_file_change):
|
def write_unit_file(self, unit_file_change):
|
||||||
if not isinstance(unit_file_change, UnitFileChange):
|
if not isinstance(unit_file_change, InstallChange):
|
||||||
raise ValueError('Unknown unit file change')
|
raise ValueError('Unknown unit file change')
|
||||||
|
|
||||||
content = self.unit_files[unit_file_change]
|
content = self.unit_files[unit_file_change]
|
||||||
@ -118,7 +117,7 @@ class ExecutionResumeTest(unittest.TestCase):
|
|||||||
self.fail(f'Timed out while waiting for the output file {self.output_file} to appear')
|
self.fail(f'Timed out while waiting for the output file {self.output_file} to appear')
|
||||||
|
|
||||||
def setup_unit(self):
|
def setup_unit(self):
|
||||||
self.write_unit_file(UnitFileChange.NO_CHANGE)
|
self.write_unit_file(InstallChange.NO_CHANGE)
|
||||||
subprocess.check_call(['systemctl', '--job-mode=replace', '--no-block', 'start', self.unit])
|
subprocess.check_call(['systemctl', '--job-mode=replace', '--no-block', 'start', self.unit])
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
|
|
||||||
@ -132,7 +131,7 @@ class ExecutionResumeTest(unittest.TestCase):
|
|||||||
|
|
||||||
def test_swapped(self):
|
def test_swapped(self):
|
||||||
self.setup_unit()
|
self.setup_unit()
|
||||||
self.write_unit_file(UnitFileChange.LINES_SWAPPED)
|
self.write_unit_file(InstallChange.LINES_SWAPPED)
|
||||||
self.reload()
|
self.reload()
|
||||||
|
|
||||||
self.assertTrue(not os.path.exists(self.output_file))
|
self.assertTrue(not os.path.exists(self.output_file))
|
||||||
@ -141,7 +140,7 @@ class ExecutionResumeTest(unittest.TestCase):
|
|||||||
expected_output = 'foo\n'
|
expected_output = 'foo\n'
|
||||||
|
|
||||||
self.setup_unit()
|
self.setup_unit()
|
||||||
self.write_unit_file(UnitFileChange.COMMAND_ADDED_BEFORE)
|
self.write_unit_file(InstallChange.COMMAND_ADDED_BEFORE)
|
||||||
self.reload()
|
self.reload()
|
||||||
|
|
||||||
self.check_output(expected_output)
|
self.check_output(expected_output)
|
||||||
@ -150,7 +149,7 @@ class ExecutionResumeTest(unittest.TestCase):
|
|||||||
expected_output = 'foo\nbar\n'
|
expected_output = 'foo\nbar\n'
|
||||||
|
|
||||||
self.setup_unit()
|
self.setup_unit()
|
||||||
self.write_unit_file(UnitFileChange.COMMAND_ADDED_AFTER)
|
self.write_unit_file(InstallChange.COMMAND_ADDED_AFTER)
|
||||||
self.reload()
|
self.reload()
|
||||||
|
|
||||||
self.check_output(expected_output)
|
self.check_output(expected_output)
|
||||||
@ -159,14 +158,14 @@ class ExecutionResumeTest(unittest.TestCase):
|
|||||||
expected_output = 'foo\nbar\n'
|
expected_output = 'foo\nbar\n'
|
||||||
|
|
||||||
self.setup_unit()
|
self.setup_unit()
|
||||||
self.write_unit_file(UnitFileChange.COMMAND_INTERLEAVED)
|
self.write_unit_file(InstallChange.COMMAND_INTERLEAVED)
|
||||||
self.reload()
|
self.reload()
|
||||||
|
|
||||||
self.check_output(expected_output)
|
self.check_output(expected_output)
|
||||||
|
|
||||||
def test_removal(self):
|
def test_removal(self):
|
||||||
self.setup_unit()
|
self.setup_unit()
|
||||||
self.write_unit_file(UnitFileChange.REMOVAL)
|
self.write_unit_file(InstallChange.REMOVAL)
|
||||||
self.reload()
|
self.reload()
|
||||||
|
|
||||||
self.assertTrue(not os.path.exists(self.output_file))
|
self.assertTrue(not os.path.exists(self.output_file))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user