chiark / gitweb /
fstab-generator: ignore invalid swap priority
[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 <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 }