]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/test/test-install.c
tests: when running a manager object in a test, migrate to private cgroup subroot...
[thirdparty/systemd.git] / src / test / test-install.c
CommitLineData
83096483
LP
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
5430f7f2
LP
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
83096483
LP
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
5430f7f2 14 Lesser General Public License for more details.
83096483 15
5430f7f2 16 You should have received a copy of the GNU Lesser General Public License
83096483
LP
17 along with systemd; If not, see <http://www.gnu.org/licenses/>.
18***/
19
83096483 20#include <stdio.h>
cf0fbc49 21#include <string.h>
83096483 22
83096483
LP
23#include "install.h"
24
25static void dump_changes(UnitFileChange *c, unsigned n) {
26 unsigned i;
27
bdf7026e 28 assert_se(n == 0 || c);
83096483
LP
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
38int 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;
0ec0deaa 47 UnitFileState state = 0;
83096483 48
596fc263
ZJS
49 log_set_max_level(LOG_DEBUG);
50 log_parse_environment();
51
d5099efc 52 h = hashmap_new(&string_hash_ops);
313fe66f 53 r = unit_file_get_list(UNIT_FILE_SYSTEM, NULL, h, NULL, NULL);
83096483
LP
54 assert_se(r == 0);
55
56 HASHMAP_FOREACH(p, h, i) {
0ec0deaa 57 UnitFileState s = _UNIT_FILE_STATE_INVALID;
83096483 58
0ec0deaa 59 r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, basename(p->path), &s);
83096483 60
0ec0deaa
LP
61 assert_se((r < 0 && p->state == UNIT_FILE_BAD) ||
62 (p->state == s));
83096483
LP
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
596fc263 71 log_info("/*** enable **/");
83096483 72
b3796dd8 73 r = unit_file_enable(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
83096483
LP
74 assert_se(r >= 0);
75
596fc263 76 log_info("/*** enable2 **/");
83096483 77
b3796dd8 78 r = unit_file_enable(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
83096483
LP
79 assert_se(r >= 0);
80
81 dump_changes(changes, n_changes);
82 unit_file_changes_free(changes, n_changes);
83
0ec0deaa
LP
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);
83096483 87
596fc263 88 log_info("/*** disable ***/");
83096483
LP
89 changes = NULL;
90 n_changes = 0;
91
b3796dd8 92 r = unit_file_disable(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
83096483
LP
93 assert_se(r >= 0);
94
95 dump_changes(changes, n_changes);
96 unit_file_changes_free(changes, n_changes);
97
0ec0deaa
LP
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);
83096483 101
596fc263 102 log_info("/*** mask ***/");
83096483
LP
103 changes = NULL;
104 n_changes = 0;
105
b3796dd8 106 r = unit_file_mask(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
83096483 107 assert_se(r >= 0);
596fc263 108 log_info("/*** mask2 ***/");
b3796dd8 109 r = unit_file_mask(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
83096483
LP
110 assert_se(r >= 0);
111
112 dump_changes(changes, n_changes);
113 unit_file_changes_free(changes, n_changes);
114
0ec0deaa
LP
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);
83096483 118
596fc263 119 log_info("/*** unmask ***/");
83096483
LP
120 changes = NULL;
121 n_changes = 0;
122
b3796dd8 123 r = unit_file_unmask(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
83096483 124 assert_se(r >= 0);
596fc263 125 log_info("/*** unmask2 ***/");
b3796dd8 126 r = unit_file_unmask(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
83096483
LP
127 assert_se(r >= 0);
128
129 dump_changes(changes, n_changes);
130 unit_file_changes_free(changes, n_changes);
131
0ec0deaa
LP
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);
83096483 135
596fc263 136 log_info("/*** mask ***/");
83096483
LP
137 changes = NULL;
138 n_changes = 0;
139
b3796dd8 140 r = unit_file_mask(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
83096483
LP
141 assert_se(r >= 0);
142
143 dump_changes(changes, n_changes);
144 unit_file_changes_free(changes, n_changes);
145
0ec0deaa
LP
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);
83096483 149
596fc263 150 log_info("/*** disable ***/");
83096483
LP
151 changes = NULL;
152 n_changes = 0;
153
b3796dd8 154 r = unit_file_disable(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
83096483 155 assert_se(r >= 0);
596fc263 156 log_info("/*** disable2 ***/");
b3796dd8 157 r = unit_file_disable(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
83096483
LP
158 assert_se(r >= 0);
159
160 dump_changes(changes, n_changes);
161 unit_file_changes_free(changes, n_changes);
162
0ec0deaa
LP
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);
83096483 166
596fc263 167 log_info("/*** umask ***/");
83096483
LP
168 changes = NULL;
169 n_changes = 0;
170
b3796dd8 171 r = unit_file_unmask(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes);
83096483
LP
172 assert_se(r >= 0);
173
174 dump_changes(changes, n_changes);
175 unit_file_changes_free(changes, n_changes);
176
0ec0deaa
LP
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);
83096483 180
596fc263 181 log_info("/*** enable files2 ***/");
83096483
LP
182 changes = NULL;
183 n_changes = 0;
184
b3796dd8 185 r = unit_file_enable(UNIT_FILE_SYSTEM, 0, NULL, (char**) files2, &changes, &n_changes);
83096483
LP
186 assert_se(r >= 0);
187
188 dump_changes(changes, n_changes);
189 unit_file_changes_free(changes, n_changes);
190
0ec0deaa
LP
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);
83096483 194
596fc263 195 log_info("/*** disable files2 ***/");
83096483
LP
196 changes = NULL;
197 n_changes = 0;
198
b3796dd8 199 r = unit_file_disable(UNIT_FILE_SYSTEM, 0, NULL, STRV_MAKE(basename(files2[0])), &changes, &n_changes);
83096483
LP
200 assert_se(r >= 0);
201
202 dump_changes(changes, n_changes);
203 unit_file_changes_free(changes, n_changes);
204
0ec0deaa
LP
205 r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, basename(files2[0]), &state);
206 assert_se(r < 0);
83096483 207
596fc263 208 log_info("/*** link files2 ***/");
83096483
LP
209 changes = NULL;
210 n_changes = 0;
211
b3796dd8 212 r = unit_file_link(UNIT_FILE_SYSTEM, 0, NULL, (char**) files2, &changes, &n_changes);
83096483
LP
213 assert_se(r >= 0);
214
215 dump_changes(changes, n_changes);
216 unit_file_changes_free(changes, n_changes);
217
0ec0deaa
LP
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);
83096483 221
596fc263 222 log_info("/*** disable files2 ***/");
83096483
LP
223 changes = NULL;
224 n_changes = 0;
225
b3796dd8 226 r = unit_file_disable(UNIT_FILE_SYSTEM, 0, NULL, STRV_MAKE(basename(files2[0])), &changes, &n_changes);
83096483
LP
227 assert_se(r >= 0);
228
229 dump_changes(changes, n_changes);
230 unit_file_changes_free(changes, n_changes);
231
0ec0deaa
LP
232 r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, basename(files2[0]), &state);
233 assert_se(r < 0);
83096483 234
596fc263 235 log_info("/*** link files2 ***/");
83096483
LP
236 changes = NULL;
237 n_changes = 0;
238
b3796dd8 239 r = unit_file_link(UNIT_FILE_SYSTEM, 0, NULL, (char**) files2, &changes, &n_changes);
83096483
LP
240 assert_se(r >= 0);
241
242 dump_changes(changes, n_changes);
243 unit_file_changes_free(changes, n_changes);
244
0ec0deaa
LP
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);
83096483 248
596fc263 249 log_info("/*** reenable files2 ***/");
83096483
LP
250 changes = NULL;
251 n_changes = 0;
252
b3796dd8 253 r = unit_file_reenable(UNIT_FILE_SYSTEM, 0, NULL, (char**) files2, &changes, &n_changes);
83096483
LP
254 assert_se(r >= 0);
255
256 dump_changes(changes, n_changes);
257 unit_file_changes_free(changes, n_changes);
258
0ec0deaa
LP
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);
83096483 262
596fc263 263 log_info("/*** disable files2 ***/");
83096483
LP
264 changes = NULL;
265 n_changes = 0;
266
b3796dd8 267 r = unit_file_disable(UNIT_FILE_SYSTEM, 0, NULL, STRV_MAKE(basename(files2[0])), &changes, &n_changes);
83096483
LP
268 assert_se(r >= 0);
269
270 dump_changes(changes, n_changes);
271 unit_file_changes_free(changes, n_changes);
272
0ec0deaa
LP
273 r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, basename(files2[0]), &state);
274 assert_se(r < 0);
596fc263 275 log_info("/*** preset files ***/");
83096483
LP
276 changes = NULL;
277 n_changes = 0;
278
b3796dd8 279 r = unit_file_preset(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, UNIT_FILE_PRESET_FULL, &changes, &n_changes);
83096483
LP
280 assert_se(r >= 0);
281
282 dump_changes(changes, n_changes);
283 unit_file_changes_free(changes, n_changes);
284
0ec0deaa
LP
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);
83096483
LP
288
289 return 0;
290}