]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/test/test-condition.c
util: split out escaping code into escape.[ch]
[thirdparty/systemd.git] / src / test / test-condition.c
CommitLineData
b08f2be6
RC
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
134e56dc 20#include "condition.h"
b08f2be6
RC
21#include "macro.h"
22#include "util.h"
23#include "log.h"
24#include "architecture.h"
d1bddcec 25#include "sd-id128.h"
015df1f7
RC
26#include "selinux-util.h"
27#include "audit.h"
28#include "ima-util.h"
29#include "apparmor-util.h"
30#include "smack-util.h"
958b66ea 31#include "hostname-util.h"
d1bddcec 32
015df1f7 33static void test_condition_test_path(void) {
d1bddcec
LP
34 Condition *condition;
35
36 condition = condition_new(CONDITION_PATH_EXISTS, "/bin/sh", false, false);
37 assert_se(condition_test(condition));
38 condition_free(condition);
39
b80ba1da
LP
40 condition = condition_new(CONDITION_PATH_EXISTS, "/bin/s?", false, false);
41 assert_se(!condition_test(condition));
42 condition_free(condition);
43
44 condition = condition_new(CONDITION_PATH_EXISTS_GLOB, "/bin/s?", false, false);
45 assert_se(condition_test(condition));
46 condition_free(condition);
47
48 condition = condition_new(CONDITION_PATH_EXISTS_GLOB, "/bin/s?", false, true);
49 assert_se(!condition_test(condition));
50 condition_free(condition);
51
d1bddcec
LP
52 condition = condition_new(CONDITION_PATH_EXISTS, "/thiscertainlywontexist", false, false);
53 assert_se(!condition_test(condition));
54 condition_free(condition);
55
56 condition = condition_new(CONDITION_PATH_EXISTS, "/thiscertainlywontexist", false, true);
57 assert_se(condition_test(condition));
58 condition_free(condition);
b80ba1da
LP
59
60 condition = condition_new(CONDITION_PATH_IS_DIRECTORY, "/bin", false, false);
61 assert_se(condition_test(condition));
62 condition_free(condition);
63
64 condition = condition_new(CONDITION_DIRECTORY_NOT_EMPTY, "/bin", false, false);
65 assert_se(condition_test(condition));
66 condition_free(condition);
67
68 condition = condition_new(CONDITION_FILE_NOT_EMPTY, "/bin/sh", false, false);
69 assert_se(condition_test(condition));
70 condition_free(condition);
71
72 condition = condition_new(CONDITION_FILE_IS_EXECUTABLE, "/bin/sh", false, false);
73 assert_se(condition_test(condition));
74 condition_free(condition);
75
76 condition = condition_new(CONDITION_FILE_IS_EXECUTABLE, "/etc/passwd", false, false);
77 assert_se(!condition_test(condition));
78 condition_free(condition);
79
80 condition = condition_new(CONDITION_PATH_IS_MOUNT_POINT, "/proc", false, false);
81 assert_se(condition_test(condition));
82 condition_free(condition);
83
84 condition = condition_new(CONDITION_PATH_IS_MOUNT_POINT, "/", false, false);
85 assert_se(condition_test(condition));
86 condition_free(condition);
87
88 condition = condition_new(CONDITION_PATH_IS_MOUNT_POINT, "/bin", false, false);
89 assert_se(!condition_test(condition));
90 condition_free(condition);
015df1f7
RC
91
92 condition = condition_new(CONDITION_PATH_IS_READ_WRITE, "/tmp", false, false);
93 assert_se(condition_test(condition));
94 condition_free(condition);
95
96 condition = condition_new(CONDITION_PATH_IS_SYMBOLIC_LINK, "/dev/stdout", false, false);
97 assert_se(condition_test(condition));
98 condition_free(condition);
d1bddcec 99}
b08f2be6
RC
100
101static void test_condition_test_ac_power(void) {
102 Condition *condition;
103
104 condition = condition_new(CONDITION_AC_POWER, "true", false, false);
d1bddcec 105 assert_se(condition_test(condition) == on_ac_power());
b08f2be6
RC
106 condition_free(condition);
107
108 condition = condition_new(CONDITION_AC_POWER, "false", false, false);
d1bddcec 109 assert_se(condition_test(condition) != on_ac_power());
b08f2be6
RC
110 condition_free(condition);
111
112 condition = condition_new(CONDITION_AC_POWER, "false", false, true);
d1bddcec 113 assert_se(condition_test(condition) == on_ac_power());
b08f2be6
RC
114 condition_free(condition);
115}
116
117static void test_condition_test_host(void) {
118 Condition *condition;
119 sd_id128_t id;
120 int r;
121 char sid[SD_ID128_STRING_MAX];
76082570 122 _cleanup_free_ char *hostname = NULL;
b08f2be6
RC
123
124 r = sd_id128_get_machine(&id);
125 assert_se(r >= 0);
126 assert_se(sd_id128_to_string(id, sid));
127
128 condition = condition_new(CONDITION_HOST, sid, false, false);
d1bddcec 129 assert_se(condition_test(condition));
b08f2be6
RC
130 condition_free(condition);
131
132 condition = condition_new(CONDITION_HOST, "garbage value jjjjjjjjjjjjjj", false, false);
d1bddcec 133 assert_se(!condition_test(condition));
b08f2be6
RC
134 condition_free(condition);
135
136 condition = condition_new(CONDITION_HOST, sid, false, true);
d1bddcec 137 assert_se(!condition_test(condition));
b08f2be6
RC
138 condition_free(condition);
139
140 hostname = gethostname_malloc();
141 assert_se(hostname);
142
143 condition = condition_new(CONDITION_HOST, hostname, false, false);
d1bddcec 144 assert_se(condition_test(condition));
b08f2be6
RC
145 condition_free(condition);
146}
147
148static void test_condition_test_architecture(void) {
149 Condition *condition;
b08f2be6 150 const char *sa;
592fd144 151 int a;
b08f2be6
RC
152
153 a = uname_architecture();
154 assert_se(a >= 0);
155
156 sa = architecture_to_string(a);
157 assert_se(sa);
158
159 condition = condition_new(CONDITION_ARCHITECTURE, sa, false, false);
d1bddcec 160 assert_se(condition_test(condition));
b08f2be6
RC
161 condition_free(condition);
162
163 condition = condition_new(CONDITION_ARCHITECTURE, "garbage value", false, false);
d1bddcec 164 assert_se(condition_test(condition) < 0);
b08f2be6
RC
165 condition_free(condition);
166
167 condition = condition_new(CONDITION_ARCHITECTURE, sa, false, true);
d1bddcec 168 assert_se(!condition_test(condition));
b08f2be6
RC
169 condition_free(condition);
170}
171
07318c29
LP
172static void test_condition_test_kernel_command_line(void) {
173 Condition *condition;
174
175 condition = condition_new(CONDITION_KERNEL_COMMAND_LINE, "thisreallyshouldntbeonthekernelcommandline", false, false);
d1bddcec 176 assert_se(!condition_test(condition));
07318c29
LP
177 condition_free(condition);
178
179 condition = condition_new(CONDITION_KERNEL_COMMAND_LINE, "andthis=neither", false, false);
d1bddcec 180 assert_se(!condition_test(condition));
07318c29
LP
181 condition_free(condition);
182}
183
b80ba1da
LP
184static void test_condition_test_null(void) {
185 Condition *condition;
186
187 condition = condition_new(CONDITION_NULL, NULL, false, false);
188 assert_se(condition_test(condition));
189 condition_free(condition);
190
191 condition = condition_new(CONDITION_NULL, NULL, false, true);
192 assert_se(!condition_test(condition));
193 condition_free(condition);
194}
195
015df1f7
RC
196static void test_condition_test_security(void) {
197 Condition *condition;
198
199 condition = condition_new(CONDITION_SECURITY, "garbage oifdsjfoidsjoj", false, false);
200 assert_se(!condition_test(condition));
201 condition_free(condition);
202
203 condition = condition_new(CONDITION_SECURITY, "selinux", false, true);
204 assert_se(condition_test(condition) != mac_selinux_use());
205 condition_free(condition);
206
207 condition = condition_new(CONDITION_SECURITY, "ima", false, false);
208 assert_se(condition_test(condition) == use_ima());
209 condition_free(condition);
210
211 condition = condition_new(CONDITION_SECURITY, "apparmor", false, false);
212 assert_se(condition_test(condition) == mac_apparmor_use());
213 condition_free(condition);
214
215 condition = condition_new(CONDITION_SECURITY, "smack", false, false);
216 assert_se(condition_test(condition) == mac_smack_use());
217 condition_free(condition);
218
219 condition = condition_new(CONDITION_SECURITY, "audit", false, false);
220 assert_se(condition_test(condition) == use_audit());
221 condition_free(condition);
222}
223
224
b08f2be6
RC
225int main(int argc, char *argv[]) {
226 log_parse_environment();
227 log_open();
228
015df1f7 229 test_condition_test_path();
b08f2be6
RC
230 test_condition_test_ac_power();
231 test_condition_test_host();
232 test_condition_test_architecture();
07318c29 233 test_condition_test_kernel_command_line();
b80ba1da 234 test_condition_test_null();
015df1f7 235 test_condition_test_security();
b08f2be6
RC
236
237 return 0;
238}