]> git.ipfire.org Git - thirdparty/systemd.git/blob - src/test/test-install.c
tree-wide: use _cleanup_set_free_ and friends
[thirdparty/systemd.git] / src / test / test-install.c
1 /* SPDX-License-Identifier: LGPL-2.1-or-later */
2
3 #include <stdio.h>
4 #include <string.h>
5
6 #include "install.h"
7 #include "tests.h"
8
9 static void dump_changes(InstallChange *c, unsigned n) {
10 unsigned i;
11
12 assert_se(n == 0 || c);
13
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);
19 }
20 }
21
22 int main(int argc, char* argv[]) {
23 _cleanup_hashmap_free_ Hashmap *h = NULL;
24 UnitFileList *p;
25 int r;
26 const char *const files[] = { "avahi-daemon.service", NULL };
27 const char *const files2[] = { "/home/lennart/test.service", NULL };
28 InstallChange *changes = NULL;
29 size_t n_changes = 0;
30 UnitFileState state = 0;
31
32 test_setup_logging(LOG_DEBUG);
33
34 h = hashmap_new(&unit_file_list_hash_ops_free);
35 r = unit_file_get_list(RUNTIME_SCOPE_SYSTEM, NULL, h, NULL, NULL);
36 assert_se(r == 0);
37
38 HASHMAP_FOREACH(p, h) {
39 UnitFileState s = _UNIT_FILE_STATE_INVALID;
40
41 r = unit_file_get_state(RUNTIME_SCOPE_SYSTEM, NULL, basename(p->path), &s);
42
43 assert_se((r < 0 && p->state == UNIT_FILE_BAD) ||
44 (p->state == s));
45
46 fprintf(stderr, "%s (%s)\n",
47 p->path,
48 unit_file_state_to_string(p->state));
49 }
50
51 log_info("/*** enable **/");
52
53 r = unit_file_enable(RUNTIME_SCOPE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
54 assert_se(r >= 0);
55
56 log_info("/*** enable2 **/");
57
58 r = unit_file_enable(RUNTIME_SCOPE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
59 assert_se(r >= 0);
60
61 dump_changes(changes, n_changes);
62 install_changes_free(changes, n_changes);
63
64 r = unit_file_get_state(RUNTIME_SCOPE_SYSTEM, NULL, files[0], &state);
65 assert_se(r >= 0);
66 assert_se(state == UNIT_FILE_ENABLED);
67
68 log_info("/*** disable ***/");
69 changes = NULL;
70 n_changes = 0;
71
72 r = unit_file_disable(RUNTIME_SCOPE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
73 assert_se(r >= 0);
74
75 dump_changes(changes, n_changes);
76 install_changes_free(changes, n_changes);
77
78 r = unit_file_get_state(RUNTIME_SCOPE_SYSTEM, NULL, files[0], &state);
79 assert_se(r >= 0);
80 assert_se(state == UNIT_FILE_DISABLED);
81
82 log_info("/*** mask ***/");
83 changes = NULL;
84 n_changes = 0;
85
86 r = unit_file_mask(RUNTIME_SCOPE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
87 assert_se(r >= 0);
88 log_info("/*** mask2 ***/");
89 r = unit_file_mask(RUNTIME_SCOPE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
90 assert_se(r >= 0);
91
92 dump_changes(changes, n_changes);
93 install_changes_free(changes, n_changes);
94
95 r = unit_file_get_state(RUNTIME_SCOPE_SYSTEM, NULL, files[0], &state);
96 assert_se(r >= 0);
97 assert_se(state == UNIT_FILE_MASKED);
98
99 log_info("/*** unmask ***/");
100 changes = NULL;
101 n_changes = 0;
102
103 r = unit_file_unmask(RUNTIME_SCOPE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
104 assert_se(r >= 0);
105 log_info("/*** unmask2 ***/");
106 r = unit_file_unmask(RUNTIME_SCOPE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
107 assert_se(r >= 0);
108
109 dump_changes(changes, n_changes);
110 install_changes_free(changes, n_changes);
111
112 r = unit_file_get_state(RUNTIME_SCOPE_SYSTEM, NULL, files[0], &state);
113 assert_se(r >= 0);
114 assert_se(state == UNIT_FILE_DISABLED);
115
116 log_info("/*** mask ***/");
117 changes = NULL;
118 n_changes = 0;
119
120 r = unit_file_mask(RUNTIME_SCOPE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
121 assert_se(r >= 0);
122
123 dump_changes(changes, n_changes);
124 install_changes_free(changes, n_changes);
125
126 r = unit_file_get_state(RUNTIME_SCOPE_SYSTEM, NULL, files[0], &state);
127 assert_se(r >= 0);
128 assert_se(state == UNIT_FILE_MASKED);
129
130 log_info("/*** disable ***/");
131 changes = NULL;
132 n_changes = 0;
133
134 r = unit_file_disable(RUNTIME_SCOPE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
135 assert_se(r >= 0);
136 log_info("/*** disable2 ***/");
137 r = unit_file_disable(RUNTIME_SCOPE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
138 assert_se(r >= 0);
139
140 dump_changes(changes, n_changes);
141 install_changes_free(changes, n_changes);
142
143 r = unit_file_get_state(RUNTIME_SCOPE_SYSTEM, NULL, files[0], &state);
144 assert_se(r >= 0);
145 assert_se(state == UNIT_FILE_MASKED);
146
147 log_info("/*** umask ***/");
148 changes = NULL;
149 n_changes = 0;
150
151 r = unit_file_unmask(RUNTIME_SCOPE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
152 assert_se(r >= 0);
153
154 dump_changes(changes, n_changes);
155 install_changes_free(changes, n_changes);
156
157 r = unit_file_get_state(RUNTIME_SCOPE_SYSTEM, NULL, files[0], &state);
158 assert_se(r >= 0);
159 assert_se(state == UNIT_FILE_DISABLED);
160
161 log_info("/*** enable files2 ***/");
162 changes = NULL;
163 n_changes = 0;
164
165 r = unit_file_enable(RUNTIME_SCOPE_SYSTEM, 0, NULL, (char**) files2, &changes, &n_changes);
166 assert_se(r >= 0);
167
168 dump_changes(changes, n_changes);
169 install_changes_free(changes, n_changes);
170
171 r = unit_file_get_state(RUNTIME_SCOPE_SYSTEM, NULL, basename(files2[0]), &state);
172 assert_se(r >= 0);
173 assert_se(state == UNIT_FILE_ENABLED);
174
175 log_info("/*** disable files2 ***/");
176 changes = NULL;
177 n_changes = 0;
178
179 r = unit_file_disable(RUNTIME_SCOPE_SYSTEM, 0, NULL, STRV_MAKE(basename(files2[0])), &changes, &n_changes);
180 assert_se(r >= 0);
181
182 dump_changes(changes, n_changes);
183 install_changes_free(changes, n_changes);
184
185 r = unit_file_get_state(RUNTIME_SCOPE_SYSTEM, NULL, basename(files2[0]), &state);
186 assert_se(r < 0);
187
188 log_info("/*** link files2 ***/");
189 changes = NULL;
190 n_changes = 0;
191
192 r = unit_file_link(RUNTIME_SCOPE_SYSTEM, 0, NULL, (char**) files2, &changes, &n_changes);
193 assert_se(r >= 0);
194
195 dump_changes(changes, n_changes);
196 install_changes_free(changes, n_changes);
197
198 r = unit_file_get_state(RUNTIME_SCOPE_SYSTEM, NULL, basename(files2[0]), &state);
199 assert_se(r >= 0);
200 assert_se(state == UNIT_FILE_LINKED);
201
202 log_info("/*** disable files2 ***/");
203 changes = NULL;
204 n_changes = 0;
205
206 r = unit_file_disable(RUNTIME_SCOPE_SYSTEM, 0, NULL, STRV_MAKE(basename(files2[0])), &changes, &n_changes);
207 assert_se(r >= 0);
208
209 dump_changes(changes, n_changes);
210 install_changes_free(changes, n_changes);
211
212 r = unit_file_get_state(RUNTIME_SCOPE_SYSTEM, NULL, basename(files2[0]), &state);
213 assert_se(r < 0);
214
215 log_info("/*** link files2 ***/");
216 changes = NULL;
217 n_changes = 0;
218
219 r = unit_file_link(RUNTIME_SCOPE_SYSTEM, 0, NULL, (char**) files2, &changes, &n_changes);
220 assert_se(r >= 0);
221
222 dump_changes(changes, n_changes);
223 install_changes_free(changes, n_changes);
224
225 r = unit_file_get_state(RUNTIME_SCOPE_SYSTEM, NULL, basename(files2[0]), &state);
226 assert_se(r >= 0);
227 assert_se(state == UNIT_FILE_LINKED);
228
229 log_info("/*** reenable files2 ***/");
230 changes = NULL;
231 n_changes = 0;
232
233 r = unit_file_reenable(RUNTIME_SCOPE_SYSTEM, 0, NULL, (char**) files2, &changes, &n_changes);
234 assert_se(r >= 0);
235
236 dump_changes(changes, n_changes);
237 install_changes_free(changes, n_changes);
238
239 r = unit_file_get_state(RUNTIME_SCOPE_SYSTEM, NULL, basename(files2[0]), &state);
240 assert_se(r >= 0);
241 assert_se(state == UNIT_FILE_ENABLED);
242
243 log_info("/*** disable files2 ***/");
244 changes = NULL;
245 n_changes = 0;
246
247 r = unit_file_disable(RUNTIME_SCOPE_SYSTEM, 0, NULL, STRV_MAKE(basename(files2[0])), &changes, &n_changes);
248 assert_se(r >= 0);
249
250 dump_changes(changes, n_changes);
251 install_changes_free(changes, n_changes);
252
253 r = unit_file_get_state(RUNTIME_SCOPE_SYSTEM, NULL, basename(files2[0]), &state);
254 assert_se(r < 0);
255 log_info("/*** preset files ***/");
256 changes = NULL;
257 n_changes = 0;
258
259 r = unit_file_preset(RUNTIME_SCOPE_SYSTEM, 0, NULL, (char**) files, UNIT_FILE_PRESET_FULL, &changes, &n_changes);
260 assert_se(r >= 0);
261
262 dump_changes(changes, n_changes);
263 install_changes_free(changes, n_changes);
264
265 r = unit_file_get_state(RUNTIME_SCOPE_SYSTEM, NULL, basename(files[0]), &state);
266 assert_se(r >= 0);
267 assert_se(state == UNIT_FILE_ENABLED);
268
269 return 0;
270 }