chiark / gitweb /
shared: utf8 - support ucs4 -> utf8
[elogind.git] / src / test / test-condition.c
1 /***
2   This file is part of systemd
3
4   Copyright 2014 Ronny Chevalier
5
6   systemd is free software; you can redistribute it and/or modify it
7   under the terms of the GNU Lesser General Public License as published by
8   the Free Software Foundation; either version 2.1 of the License, or
9   (at your option) any later version.
10
11   systemd is distributed in the hope that it will be useful, but
12   WITHOUT ANY WARRANTY; without even the implied warranty of
13   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14   Lesser General Public License for more details.
15
16   You should have received a copy of the GNU Lesser General Public License
17   along with systemd; If not, see <http://www.gnu.org/licenses/>.
18 ***/
19
20 #include "condition.h"
21 #include "macro.h"
22 #include "util.h"
23 #include "log.h"
24 #include "architecture.h"
25 #include "sd-id128.h"
26 #include "selinux-util.h"
27 #include "audit.h"
28 #include "ima-util.h"
29 #include "apparmor-util.h"
30 #include "smack-util.h"
31
32 static void test_condition_test_path(void) {
33         Condition *condition;
34
35         condition = condition_new(CONDITION_PATH_EXISTS, "/bin/sh", false, false);
36         assert_se(condition_test(condition));
37         condition_free(condition);
38
39         condition = condition_new(CONDITION_PATH_EXISTS, "/bin/s?", false, false);
40         assert_se(!condition_test(condition));
41         condition_free(condition);
42
43         condition = condition_new(CONDITION_PATH_EXISTS_GLOB, "/bin/s?", false, false);
44         assert_se(condition_test(condition));
45         condition_free(condition);
46
47         condition = condition_new(CONDITION_PATH_EXISTS_GLOB, "/bin/s?", false, true);
48         assert_se(!condition_test(condition));
49         condition_free(condition);
50
51         condition = condition_new(CONDITION_PATH_EXISTS, "/thiscertainlywontexist", false, false);
52         assert_se(!condition_test(condition));
53         condition_free(condition);
54
55         condition = condition_new(CONDITION_PATH_EXISTS, "/thiscertainlywontexist", false, true);
56         assert_se(condition_test(condition));
57         condition_free(condition);
58
59         condition = condition_new(CONDITION_PATH_IS_DIRECTORY, "/bin", false, false);
60         assert_se(condition_test(condition));
61         condition_free(condition);
62
63         condition = condition_new(CONDITION_DIRECTORY_NOT_EMPTY, "/bin", false, false);
64         assert_se(condition_test(condition));
65         condition_free(condition);
66
67         condition = condition_new(CONDITION_FILE_NOT_EMPTY, "/bin/sh", false, false);
68         assert_se(condition_test(condition));
69         condition_free(condition);
70
71         condition = condition_new(CONDITION_FILE_IS_EXECUTABLE, "/bin/sh", false, false);
72         assert_se(condition_test(condition));
73         condition_free(condition);
74
75         condition = condition_new(CONDITION_FILE_IS_EXECUTABLE, "/etc/passwd", false, false);
76         assert_se(!condition_test(condition));
77         condition_free(condition);
78
79         condition = condition_new(CONDITION_PATH_IS_MOUNT_POINT, "/proc", false, false);
80         assert_se(condition_test(condition));
81         condition_free(condition);
82
83         condition = condition_new(CONDITION_PATH_IS_MOUNT_POINT, "/", false, false);
84         assert_se(condition_test(condition));
85         condition_free(condition);
86
87         condition = condition_new(CONDITION_PATH_IS_MOUNT_POINT, "/bin", false, false);
88         assert_se(!condition_test(condition));
89         condition_free(condition);
90
91         condition = condition_new(CONDITION_PATH_IS_READ_WRITE, "/tmp", false, false);
92         assert_se(condition_test(condition));
93         condition_free(condition);
94
95         condition = condition_new(CONDITION_PATH_IS_SYMBOLIC_LINK, "/dev/stdout", false, false);
96         assert_se(condition_test(condition));
97         condition_free(condition);
98 }
99
100 static void test_condition_test_ac_power(void) {
101         Condition *condition;
102
103         condition = condition_new(CONDITION_AC_POWER, "true", false, false);
104         assert_se(condition_test(condition) == on_ac_power());
105         condition_free(condition);
106
107         condition = condition_new(CONDITION_AC_POWER, "false", false, false);
108         assert_se(condition_test(condition) != on_ac_power());
109         condition_free(condition);
110
111         condition = condition_new(CONDITION_AC_POWER, "false", false, true);
112         assert_se(condition_test(condition) == on_ac_power());
113         condition_free(condition);
114 }
115
116 static void test_condition_test_host(void) {
117         Condition *condition;
118         sd_id128_t id;
119         int r;
120         char sid[SD_ID128_STRING_MAX];
121         _cleanup_free_ char *hostname = NULL;
122
123         r = sd_id128_get_machine(&id);
124         assert_se(r >= 0);
125         assert_se(sd_id128_to_string(id, sid));
126
127         condition = condition_new(CONDITION_HOST, sid, false, false);
128         assert_se(condition_test(condition));
129         condition_free(condition);
130
131         condition = condition_new(CONDITION_HOST, "garbage value jjjjjjjjjjjjjj", false, false);
132         assert_se(!condition_test(condition));
133         condition_free(condition);
134
135         condition = condition_new(CONDITION_HOST, sid, false, true);
136         assert_se(!condition_test(condition));
137         condition_free(condition);
138
139         hostname = gethostname_malloc();
140         assert_se(hostname);
141
142         condition = condition_new(CONDITION_HOST, hostname, false, false);
143         assert_se(condition_test(condition));
144         condition_free(condition);
145 }
146
147 static void test_condition_test_architecture(void) {
148         Condition *condition;
149         const char *sa;
150         int a;
151
152         a = uname_architecture();
153         assert_se(a >= 0);
154
155         sa = architecture_to_string(a);
156         assert_se(sa);
157
158         condition = condition_new(CONDITION_ARCHITECTURE, sa, false, false);
159         assert_se(condition_test(condition));
160         condition_free(condition);
161
162         condition = condition_new(CONDITION_ARCHITECTURE, "garbage value", false, false);
163         assert_se(condition_test(condition) < 0);
164         condition_free(condition);
165
166         condition = condition_new(CONDITION_ARCHITECTURE, sa, false, true);
167         assert_se(!condition_test(condition));
168         condition_free(condition);
169 }
170
171 static void test_condition_test_kernel_command_line(void) {
172         Condition *condition;
173
174         condition = condition_new(CONDITION_KERNEL_COMMAND_LINE, "thisreallyshouldntbeonthekernelcommandline", false, false);
175         assert_se(!condition_test(condition));
176         condition_free(condition);
177
178         condition = condition_new(CONDITION_KERNEL_COMMAND_LINE, "andthis=neither", false, false);
179         assert_se(!condition_test(condition));
180         condition_free(condition);
181 }
182
183 static void test_condition_test_null(void) {
184         Condition *condition;
185
186         condition = condition_new(CONDITION_NULL, NULL, false, false);
187         assert_se(condition_test(condition));
188         condition_free(condition);
189
190         condition = condition_new(CONDITION_NULL, NULL, false, true);
191         assert_se(!condition_test(condition));
192         condition_free(condition);
193 }
194
195 static void test_condition_test_security(void) {
196         Condition *condition;
197
198         condition = condition_new(CONDITION_SECURITY, "garbage oifdsjfoidsjoj", false, false);
199         assert_se(!condition_test(condition));
200         condition_free(condition);
201
202         condition = condition_new(CONDITION_SECURITY, "selinux", false, true);
203         assert_se(condition_test(condition) != mac_selinux_use());
204         condition_free(condition);
205
206         condition = condition_new(CONDITION_SECURITY, "ima", false, false);
207         assert_se(condition_test(condition) == use_ima());
208         condition_free(condition);
209
210         condition = condition_new(CONDITION_SECURITY, "apparmor", false, false);
211         assert_se(condition_test(condition) == mac_apparmor_use());
212         condition_free(condition);
213
214         condition = condition_new(CONDITION_SECURITY, "smack", false, false);
215         assert_se(condition_test(condition) == mac_smack_use());
216         condition_free(condition);
217
218         condition = condition_new(CONDITION_SECURITY, "audit", false, false);
219         assert_se(condition_test(condition) == use_audit());
220         condition_free(condition);
221 }
222
223
224 int main(int argc, char *argv[]) {
225         log_parse_environment();
226         log_open();
227
228         test_condition_test_path();
229         test_condition_test_ac_power();
230         test_condition_test_host();
231         test_condition_test_architecture();
232         test_condition_test_kernel_command_line();
233         test_condition_test_null();
234         test_condition_test_security();
235
236         return 0;
237 }