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