]> git.ipfire.org Git - thirdparty/systemd.git/blob - src/test/test-install.c
Merge pull request #756 from ldzhong/fix
[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 <string.h>
23 #include <stdio.h>
24
25 #include "install.h"
26
27 static void dump_changes(UnitFileChange *c, unsigned n) {
28 unsigned i;
29
30 assert_se(n == 0 || c);
31
32 for (i = 0; i < n; i++) {
33 if (c[i].type == UNIT_FILE_UNLINK)
34 printf("rm '%s'\n", c[i].path);
35 else if (c[i].type == UNIT_FILE_SYMLINK)
36 printf("ln -s '%s' '%s'\n", c[i].source, c[i].path);
37 }
38 }
39
40 int main(int argc, char* argv[]) {
41 Hashmap *h;
42 UnitFileList *p;
43 Iterator i;
44 int r;
45 const char *const files[] = { "avahi-daemon.service", NULL };
46 const char *const files2[] = { "/home/lennart/test.service", NULL };
47 UnitFileChange *changes = NULL;
48 unsigned n_changes = 0;
49
50 h = hashmap_new(&string_hash_ops);
51 r = unit_file_get_list(UNIT_FILE_SYSTEM, NULL, h);
52 assert_se(r == 0);
53
54 HASHMAP_FOREACH(p, h, i) {
55 UnitFileState s;
56
57 s = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, basename(p->path));
58
59 assert_se(p->state == s);
60
61 fprintf(stderr, "%s (%s)\n",
62 p->path,
63 unit_file_state_to_string(p->state));
64 }
65
66 unit_file_list_free(h);
67
68 log_error("enable");
69
70 r = unit_file_enable(UNIT_FILE_SYSTEM, false, NULL, (char**) files, false, &changes, &n_changes);
71 assert_se(r >= 0);
72
73 log_error("enable2");
74
75 r = unit_file_enable(UNIT_FILE_SYSTEM, false, NULL, (char**) files, false, &changes, &n_changes);
76 assert_se(r >= 0);
77
78 dump_changes(changes, n_changes);
79 unit_file_changes_free(changes, n_changes);
80
81 assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, NULL, files[0]) == UNIT_FILE_ENABLED);
82
83 log_error("disable");
84
85 changes = NULL;
86 n_changes = 0;
87
88 r = unit_file_disable(UNIT_FILE_SYSTEM, false, NULL, (char**) files, &changes, &n_changes);
89 assert_se(r >= 0);
90
91 dump_changes(changes, n_changes);
92 unit_file_changes_free(changes, n_changes);
93
94 assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, NULL, files[0]) == UNIT_FILE_DISABLED);
95
96 log_error("mask");
97 changes = NULL;
98 n_changes = 0;
99
100 r = unit_file_mask(UNIT_FILE_SYSTEM, false, NULL, (char**) files, false, &changes, &n_changes);
101 assert_se(r >= 0);
102 log_error("mask2");
103 r = unit_file_mask(UNIT_FILE_SYSTEM, false, NULL, (char**) files, false, &changes, &n_changes);
104 assert_se(r >= 0);
105
106 dump_changes(changes, n_changes);
107 unit_file_changes_free(changes, n_changes);
108
109 assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, NULL, files[0]) == UNIT_FILE_MASKED);
110
111 log_error("unmask");
112 changes = NULL;
113 n_changes = 0;
114
115 r = unit_file_unmask(UNIT_FILE_SYSTEM, false, NULL, (char**) files, &changes, &n_changes);
116 assert_se(r >= 0);
117 log_error("unmask2");
118 r = unit_file_unmask(UNIT_FILE_SYSTEM, false, NULL, (char**) files, &changes, &n_changes);
119 assert_se(r >= 0);
120
121 dump_changes(changes, n_changes);
122 unit_file_changes_free(changes, n_changes);
123
124 assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, NULL, files[0]) == UNIT_FILE_DISABLED);
125
126 log_error("mask");
127 changes = NULL;
128 n_changes = 0;
129
130 r = unit_file_mask(UNIT_FILE_SYSTEM, false, NULL, (char**) files, false, &changes, &n_changes);
131 assert_se(r >= 0);
132
133 dump_changes(changes, n_changes);
134 unit_file_changes_free(changes, n_changes);
135
136 assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, NULL, files[0]) == UNIT_FILE_MASKED);
137
138 log_error("disable");
139 changes = NULL;
140 n_changes = 0;
141
142 r = unit_file_disable(UNIT_FILE_SYSTEM, false, NULL, (char**) files, &changes, &n_changes);
143 assert_se(r >= 0);
144 log_error("disable2");
145 r = unit_file_disable(UNIT_FILE_SYSTEM, false, 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 assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, NULL, files[0]) == UNIT_FILE_MASKED);
152
153 log_error("umask");
154 changes = NULL;
155 n_changes = 0;
156
157 r = unit_file_unmask(UNIT_FILE_SYSTEM, false, 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 assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, NULL, files[0]) == UNIT_FILE_DISABLED);
164
165 log_error("enable files2");
166 changes = NULL;
167 n_changes = 0;
168
169 r = unit_file_enable(UNIT_FILE_SYSTEM, false, NULL, (char**) files2, false, &changes, &n_changes);
170 assert_se(r >= 0);
171
172 dump_changes(changes, n_changes);
173 unit_file_changes_free(changes, n_changes);
174
175 assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, NULL, basename(files2[0])) == UNIT_FILE_ENABLED);
176
177 log_error("disable files2");
178 changes = NULL;
179 n_changes = 0;
180
181 r = unit_file_disable(UNIT_FILE_SYSTEM, false, NULL, (char**) files2, &changes, &n_changes);
182 assert_se(r >= 0);
183
184 dump_changes(changes, n_changes);
185 unit_file_changes_free(changes, n_changes);
186
187 assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, NULL, basename(files2[0])) == _UNIT_FILE_STATE_INVALID);
188
189 log_error("link files2");
190 changes = NULL;
191 n_changes = 0;
192
193 r = unit_file_link(UNIT_FILE_SYSTEM, false, NULL, (char**) files2, false, &changes, &n_changes);
194 assert_se(r >= 0);
195
196 dump_changes(changes, n_changes);
197 unit_file_changes_free(changes, n_changes);
198
199 assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, NULL, basename(files2[0])) == UNIT_FILE_LINKED);
200
201 log_error("disable files2");
202 changes = NULL;
203 n_changes = 0;
204
205 r = unit_file_disable(UNIT_FILE_SYSTEM, false, NULL, (char**) files2, &changes, &n_changes);
206 assert_se(r >= 0);
207
208 dump_changes(changes, n_changes);
209 unit_file_changes_free(changes, n_changes);
210
211 assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, NULL, basename(files2[0])) == _UNIT_FILE_STATE_INVALID);
212
213 log_error("link files2");
214 changes = NULL;
215 n_changes = 0;
216
217 r = unit_file_link(UNIT_FILE_SYSTEM, false, NULL, (char**) files2, false, &changes, &n_changes);
218 assert_se(r >= 0);
219
220 dump_changes(changes, n_changes);
221 unit_file_changes_free(changes, n_changes);
222
223 assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, NULL, basename(files2[0])) == UNIT_FILE_LINKED);
224
225 log_error("reenable files2");
226 changes = NULL;
227 n_changes = 0;
228
229 r = unit_file_reenable(UNIT_FILE_SYSTEM, false, NULL, (char**) files2, false, &changes, &n_changes);
230 assert_se(r >= 0);
231
232 dump_changes(changes, n_changes);
233 unit_file_changes_free(changes, n_changes);
234
235 assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, NULL, basename(files2[0])) == UNIT_FILE_ENABLED);
236
237 log_error("disable files2");
238 changes = NULL;
239 n_changes = 0;
240
241 r = unit_file_disable(UNIT_FILE_SYSTEM, false, 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 assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, NULL, basename(files2[0])) == _UNIT_FILE_STATE_INVALID);
248 log_error("preset files");
249 changes = NULL;
250 n_changes = 0;
251
252 r = unit_file_preset(UNIT_FILE_SYSTEM, false, NULL, (char**) files, UNIT_FILE_PRESET_FULL, false, &changes, &n_changes);
253 assert_se(r >= 0);
254
255 dump_changes(changes, n_changes);
256 unit_file_changes_free(changes, n_changes);
257
258 assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, NULL, basename(files[0])) == UNIT_FILE_ENABLED);
259
260 return 0;
261 }