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