chiark / gitweb /
update TODO
[elogind.git] / src / 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 General Public License as published by
10   the Free Software Foundation; either version 2 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   General Public License for more details.
17
18   You should have received a copy of the GNU 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 "install.h"
29
30 static void dump_changes(UnitFileChange *c, unsigned n) {
31         unsigned i;
32
33         assert(n == 0 || c);
34
35         for (i = 0; i < n; i++) {
36                 if (c[i].type == UNIT_FILE_UNLINK)
37                         printf("rm '%s'\n", c[i].path);
38                 else if (c[i].type == UNIT_FILE_SYMLINK)
39                         printf("ln -s '%s' '%s'\n", c[i].source, c[i].path);
40         }
41 }
42
43 int main(int argc, char* argv[]) {
44         Hashmap *h;
45         UnitFileList *p;
46         Iterator i;
47         int r;
48         const char *const files[] = { "avahi-daemon.service", NULL };
49         const char *const files2[] = { "/home/lennart/test.service", NULL };
50         UnitFileChange *changes = NULL;
51         unsigned n_changes = 0;
52
53         h = hashmap_new(string_hash_func, string_compare_func);
54         r = unit_file_get_list(UNIT_FILE_SYSTEM, NULL, h);
55         assert_se(r == 0);
56
57         HASHMAP_FOREACH(p, h, i) {
58                 UnitFileState s;
59
60                 s = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, file_name_from_path(p->path));
61
62                 assert_se(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_error("enable");
72
73         r = unit_file_enable(UNIT_FILE_SYSTEM, false, NULL, (char**) files, false, &changes, &n_changes);
74         assert_se(r >= 0);
75
76         log_error("enable2");
77
78         r = unit_file_enable(UNIT_FILE_SYSTEM, false, NULL, (char**) files, false, &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         assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, NULL, files[0]) == UNIT_FILE_ENABLED);
85
86         log_error("disable");
87
88         changes = NULL;
89         n_changes = 0;
90
91         r = unit_file_disable(UNIT_FILE_SYSTEM, false, NULL, (char**) files, &changes, &n_changes);
92         assert_se(r >= 0);
93
94         dump_changes(changes, n_changes);
95         unit_file_changes_free(changes, n_changes);
96
97         assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, NULL, files[0]) == UNIT_FILE_DISABLED);
98
99         log_error("mask");
100         changes = NULL;
101         n_changes = 0;
102
103         r = unit_file_mask(UNIT_FILE_SYSTEM, false, NULL, (char**) files, false, &changes, &n_changes);
104         assert_se(r >= 0);
105         log_error("mask2");
106         r = unit_file_mask(UNIT_FILE_SYSTEM, false, NULL, (char**) files, false, &changes, &n_changes);
107         assert_se(r >= 0);
108
109         dump_changes(changes, n_changes);
110         unit_file_changes_free(changes, n_changes);
111
112         assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, NULL, files[0]) == UNIT_FILE_MASKED);
113
114         log_error("unmask");
115         changes = NULL;
116         n_changes = 0;
117
118         r = unit_file_unmask(UNIT_FILE_SYSTEM, false, NULL, (char**) files, &changes, &n_changes);
119         assert_se(r >= 0);
120         log_error("unmask2");
121         r = unit_file_unmask(UNIT_FILE_SYSTEM, false, NULL, (char**) files, &changes, &n_changes);
122         assert_se(r >= 0);
123
124         dump_changes(changes, n_changes);
125         unit_file_changes_free(changes, n_changes);
126
127         assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, NULL, files[0]) == UNIT_FILE_DISABLED);
128
129         log_error("mask");
130         changes = NULL;
131         n_changes = 0;
132
133         r = unit_file_mask(UNIT_FILE_SYSTEM, false, NULL, (char**) files, false, &changes, &n_changes);
134         assert_se(r >= 0);
135
136         dump_changes(changes, n_changes);
137         unit_file_changes_free(changes, n_changes);
138
139         assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, NULL, files[0]) == UNIT_FILE_MASKED);
140
141         log_error("disable");
142         changes = NULL;
143         n_changes = 0;
144
145         r = unit_file_disable(UNIT_FILE_SYSTEM, false, NULL, (char**) files, &changes, &n_changes);
146         assert_se(r >= 0);
147         log_error("disable2");
148         r = unit_file_disable(UNIT_FILE_SYSTEM, false, NULL, (char**) files, &changes, &n_changes);
149         assert_se(r >= 0);
150
151         dump_changes(changes, n_changes);
152         unit_file_changes_free(changes, n_changes);
153
154         assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, NULL, files[0]) == UNIT_FILE_MASKED);
155
156         log_error("umask");
157         changes = NULL;
158         n_changes = 0;
159
160         r = unit_file_unmask(UNIT_FILE_SYSTEM, false, NULL, (char**) files, &changes, &n_changes);
161         assert_se(r >= 0);
162
163         dump_changes(changes, n_changes);
164         unit_file_changes_free(changes, n_changes);
165
166         assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, NULL, files[0]) == UNIT_FILE_DISABLED);
167
168         log_error("enable files2");
169         changes = NULL;
170         n_changes = 0;
171
172         r = unit_file_enable(UNIT_FILE_SYSTEM, false, NULL, (char**) files2, false, &changes, &n_changes);
173         assert_se(r >= 0);
174
175         dump_changes(changes, n_changes);
176         unit_file_changes_free(changes, n_changes);
177
178         assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, NULL, file_name_from_path(files2[0])) == UNIT_FILE_ENABLED);
179
180         log_error("disable files2");
181         changes = NULL;
182         n_changes = 0;
183
184         r = unit_file_disable(UNIT_FILE_SYSTEM, false, NULL, (char**) files2, &changes, &n_changes);
185         assert_se(r >= 0);
186
187         dump_changes(changes, n_changes);
188         unit_file_changes_free(changes, n_changes);
189
190         assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, NULL, file_name_from_path(files2[0])) == _UNIT_FILE_STATE_INVALID);
191
192         log_error("link files2");
193         changes = NULL;
194         n_changes = 0;
195
196         r = unit_file_link(UNIT_FILE_SYSTEM, false, NULL, (char**) files2, false, &changes, &n_changes);
197         assert_se(r >= 0);
198
199         dump_changes(changes, n_changes);
200         unit_file_changes_free(changes, n_changes);
201
202         assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, NULL, file_name_from_path(files2[0])) == UNIT_FILE_LINKED);
203
204         log_error("disable files2");
205         changes = NULL;
206         n_changes = 0;
207
208         r = unit_file_disable(UNIT_FILE_SYSTEM, false, NULL, (char**) files2, &changes, &n_changes);
209         assert_se(r >= 0);
210
211         dump_changes(changes, n_changes);
212         unit_file_changes_free(changes, n_changes);
213
214         assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, NULL, file_name_from_path(files2[0])) == _UNIT_FILE_STATE_INVALID);
215
216         log_error("link files2");
217         changes = NULL;
218         n_changes = 0;
219
220         r = unit_file_link(UNIT_FILE_SYSTEM, false, NULL, (char**) files2, false, &changes, &n_changes);
221         assert_se(r >= 0);
222
223         dump_changes(changes, n_changes);
224         unit_file_changes_free(changes, n_changes);
225
226         assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, NULL, file_name_from_path(files2[0])) == UNIT_FILE_LINKED);
227
228         log_error("reenable files2");
229         changes = NULL;
230         n_changes = 0;
231
232         r = unit_file_reenable(UNIT_FILE_SYSTEM, false, NULL, (char**) files2, false, &changes, &n_changes);
233         assert_se(r >= 0);
234
235         dump_changes(changes, n_changes);
236         unit_file_changes_free(changes, n_changes);
237
238         assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, NULL, file_name_from_path(files2[0])) == UNIT_FILE_ENABLED);
239
240         log_error("disable files2");
241         changes = NULL;
242         n_changes = 0;
243
244         r = unit_file_disable(UNIT_FILE_SYSTEM, false, NULL, (char**) files2, &changes, &n_changes);
245         assert_se(r >= 0);
246
247         dump_changes(changes, n_changes);
248         unit_file_changes_free(changes, n_changes);
249
250         assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, NULL, file_name_from_path(files2[0])) == _UNIT_FILE_STATE_INVALID);
251         log_error("preset files");
252         changes = NULL;
253         n_changes = 0;
254
255         r = unit_file_preset(UNIT_FILE_SYSTEM, false, NULL, (char**) files, false, &changes, &n_changes);
256         assert_se(r >= 0);
257
258         dump_changes(changes, n_changes);
259         unit_file_changes_free(changes, n_changes);
260
261         assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, NULL, file_name_from_path(files[0])) == UNIT_FILE_ENABLED);
262
263         return 0;
264 }