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