chiark / gitweb /
core: add new .slice unit type for partitioning systems
[elogind.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_func, string_compare_func);
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, path_get_file_name(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, path_get_file_name(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, path_get_file_name(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, path_get_file_name(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, path_get_file_name(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, path_get_file_name(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, path_get_file_name(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, path_get_file_name(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, 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, path_get_file_name(files[0])) == UNIT_FILE_ENABLED);
263
264         return 0;
265 }