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