1 /* SPDX-License-Identifier: LGPL-2.1-or-later */
9 static void dump_changes(InstallChange
*c
, unsigned n
) {
12 assert_se(n
== 0 || c
);
14 for (i
= 0; i
< n
; i
++) {
15 if (c
[i
].type
== INSTALL_CHANGE_UNLINK
)
16 printf("rm '%s'\n", c
[i
].path
);
17 else if (c
[i
].type
== INSTALL_CHANGE_SYMLINK
)
18 printf("ln -s '%s' '%s'\n", c
[i
].source
, c
[i
].path
);
22 int main(int argc
, char* argv
[]) {
23 _cleanup_hashmap_free_ Hashmap
*h
= NULL
;
26 const char *const files
[] = { "avahi-daemon.service", NULL
};
27 const char *const files2
[] = { "/home/lennart/test.service", NULL
};
28 InstallChange
*changes
= NULL
;
30 UnitFileState state
= 0;
32 test_setup_logging(LOG_DEBUG
);
34 h
= hashmap_new(&unit_file_list_hash_ops_free
);
35 r
= unit_file_get_list(RUNTIME_SCOPE_SYSTEM
, NULL
, h
, NULL
, NULL
);
38 HASHMAP_FOREACH(p
, h
) {
39 UnitFileState s
= _UNIT_FILE_STATE_INVALID
;
41 r
= unit_file_get_state(RUNTIME_SCOPE_SYSTEM
, NULL
, basename(p
->path
), &s
);
43 assert_se((r
< 0 && p
->state
== UNIT_FILE_BAD
) ||
46 fprintf(stderr
, "%s (%s)\n",
48 unit_file_state_to_string(p
->state
));
51 log_info("/*** enable **/");
53 r
= unit_file_enable(RUNTIME_SCOPE_SYSTEM
, 0, NULL
, (char**) files
, &changes
, &n_changes
);
56 log_info("/*** enable2 **/");
58 r
= unit_file_enable(RUNTIME_SCOPE_SYSTEM
, 0, NULL
, (char**) files
, &changes
, &n_changes
);
61 dump_changes(changes
, n_changes
);
62 install_changes_free(changes
, n_changes
);
64 r
= unit_file_get_state(RUNTIME_SCOPE_SYSTEM
, NULL
, files
[0], &state
);
66 assert_se(state
== UNIT_FILE_ENABLED
);
68 log_info("/*** disable ***/");
72 r
= unit_file_disable(RUNTIME_SCOPE_SYSTEM
, 0, NULL
, (char**) files
, &changes
, &n_changes
);
75 dump_changes(changes
, n_changes
);
76 install_changes_free(changes
, n_changes
);
78 r
= unit_file_get_state(RUNTIME_SCOPE_SYSTEM
, NULL
, files
[0], &state
);
80 assert_se(state
== UNIT_FILE_DISABLED
);
82 log_info("/*** mask ***/");
86 r
= unit_file_mask(RUNTIME_SCOPE_SYSTEM
, 0, NULL
, (char**) files
, &changes
, &n_changes
);
88 log_info("/*** mask2 ***/");
89 r
= unit_file_mask(RUNTIME_SCOPE_SYSTEM
, 0, NULL
, (char**) files
, &changes
, &n_changes
);
92 dump_changes(changes
, n_changes
);
93 install_changes_free(changes
, n_changes
);
95 r
= unit_file_get_state(RUNTIME_SCOPE_SYSTEM
, NULL
, files
[0], &state
);
97 assert_se(state
== UNIT_FILE_MASKED
);
99 log_info("/*** unmask ***/");
103 r
= unit_file_unmask(RUNTIME_SCOPE_SYSTEM
, 0, NULL
, (char**) files
, &changes
, &n_changes
);
105 log_info("/*** unmask2 ***/");
106 r
= unit_file_unmask(RUNTIME_SCOPE_SYSTEM
, 0, NULL
, (char**) files
, &changes
, &n_changes
);
109 dump_changes(changes
, n_changes
);
110 install_changes_free(changes
, n_changes
);
112 r
= unit_file_get_state(RUNTIME_SCOPE_SYSTEM
, NULL
, files
[0], &state
);
114 assert_se(state
== UNIT_FILE_DISABLED
);
116 log_info("/*** mask ***/");
120 r
= unit_file_mask(RUNTIME_SCOPE_SYSTEM
, 0, NULL
, (char**) files
, &changes
, &n_changes
);
123 dump_changes(changes
, n_changes
);
124 install_changes_free(changes
, n_changes
);
126 r
= unit_file_get_state(RUNTIME_SCOPE_SYSTEM
, NULL
, files
[0], &state
);
128 assert_se(state
== UNIT_FILE_MASKED
);
130 log_info("/*** disable ***/");
134 r
= unit_file_disable(RUNTIME_SCOPE_SYSTEM
, 0, NULL
, (char**) files
, &changes
, &n_changes
);
136 log_info("/*** disable2 ***/");
137 r
= unit_file_disable(RUNTIME_SCOPE_SYSTEM
, 0, NULL
, (char**) files
, &changes
, &n_changes
);
140 dump_changes(changes
, n_changes
);
141 install_changes_free(changes
, n_changes
);
143 r
= unit_file_get_state(RUNTIME_SCOPE_SYSTEM
, NULL
, files
[0], &state
);
145 assert_se(state
== UNIT_FILE_MASKED
);
147 log_info("/*** umask ***/");
151 r
= unit_file_unmask(RUNTIME_SCOPE_SYSTEM
, 0, NULL
, (char**) files
, &changes
, &n_changes
);
154 dump_changes(changes
, n_changes
);
155 install_changes_free(changes
, n_changes
);
157 r
= unit_file_get_state(RUNTIME_SCOPE_SYSTEM
, NULL
, files
[0], &state
);
159 assert_se(state
== UNIT_FILE_DISABLED
);
161 log_info("/*** enable files2 ***/");
165 r
= unit_file_enable(RUNTIME_SCOPE_SYSTEM
, 0, NULL
, (char**) files2
, &changes
, &n_changes
);
168 dump_changes(changes
, n_changes
);
169 install_changes_free(changes
, n_changes
);
171 r
= unit_file_get_state(RUNTIME_SCOPE_SYSTEM
, NULL
, basename(files2
[0]), &state
);
173 assert_se(state
== UNIT_FILE_ENABLED
);
175 log_info("/*** disable files2 ***/");
179 r
= unit_file_disable(RUNTIME_SCOPE_SYSTEM
, 0, NULL
, STRV_MAKE(basename(files2
[0])), &changes
, &n_changes
);
182 dump_changes(changes
, n_changes
);
183 install_changes_free(changes
, n_changes
);
185 r
= unit_file_get_state(RUNTIME_SCOPE_SYSTEM
, NULL
, basename(files2
[0]), &state
);
188 log_info("/*** link files2 ***/");
192 r
= unit_file_link(RUNTIME_SCOPE_SYSTEM
, 0, NULL
, (char**) files2
, &changes
, &n_changes
);
195 dump_changes(changes
, n_changes
);
196 install_changes_free(changes
, n_changes
);
198 r
= unit_file_get_state(RUNTIME_SCOPE_SYSTEM
, NULL
, basename(files2
[0]), &state
);
200 assert_se(state
== UNIT_FILE_LINKED
);
202 log_info("/*** disable files2 ***/");
206 r
= unit_file_disable(RUNTIME_SCOPE_SYSTEM
, 0, NULL
, STRV_MAKE(basename(files2
[0])), &changes
, &n_changes
);
209 dump_changes(changes
, n_changes
);
210 install_changes_free(changes
, n_changes
);
212 r
= unit_file_get_state(RUNTIME_SCOPE_SYSTEM
, NULL
, basename(files2
[0]), &state
);
215 log_info("/*** link files2 ***/");
219 r
= unit_file_link(RUNTIME_SCOPE_SYSTEM
, 0, NULL
, (char**) files2
, &changes
, &n_changes
);
222 dump_changes(changes
, n_changes
);
223 install_changes_free(changes
, n_changes
);
225 r
= unit_file_get_state(RUNTIME_SCOPE_SYSTEM
, NULL
, basename(files2
[0]), &state
);
227 assert_se(state
== UNIT_FILE_LINKED
);
229 log_info("/*** reenable files2 ***/");
233 r
= unit_file_reenable(RUNTIME_SCOPE_SYSTEM
, 0, NULL
, (char**) files2
, &changes
, &n_changes
);
236 dump_changes(changes
, n_changes
);
237 install_changes_free(changes
, n_changes
);
239 r
= unit_file_get_state(RUNTIME_SCOPE_SYSTEM
, NULL
, basename(files2
[0]), &state
);
241 assert_se(state
== UNIT_FILE_ENABLED
);
243 log_info("/*** disable files2 ***/");
247 r
= unit_file_disable(RUNTIME_SCOPE_SYSTEM
, 0, NULL
, STRV_MAKE(basename(files2
[0])), &changes
, &n_changes
);
250 dump_changes(changes
, n_changes
);
251 install_changes_free(changes
, n_changes
);
253 r
= unit_file_get_state(RUNTIME_SCOPE_SYSTEM
, NULL
, basename(files2
[0]), &state
);
255 log_info("/*** preset files ***/");
259 r
= unit_file_preset(RUNTIME_SCOPE_SYSTEM
, 0, NULL
, (char**) files
, UNIT_FILE_PRESET_FULL
, &changes
, &n_changes
);
262 dump_changes(changes
, n_changes
);
263 install_changes_free(changes
, n_changes
);
265 r
= unit_file_get_state(RUNTIME_SCOPE_SYSTEM
, NULL
, basename(files
[0]), &state
);
267 assert_se(state
== UNIT_FILE_ENABLED
);