2 This file is part of systemd
4 Copyright 2014 Ronny Chevalier
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.
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.
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/>.
22 #include "apparmor-util.h"
23 #include "architecture.h"
24 #include "audit-util.h"
25 #include "condition.h"
26 #include "hostname-util.h"
30 #include "selinux-util.h"
31 #include "smack-util.h"
34 static void test_condition_test_path(void) {
37 condition
= condition_new(CONDITION_PATH_EXISTS
, "/bin/sh", false, false);
38 assert_se(condition_test(condition
));
39 condition_free(condition
);
41 condition
= condition_new(CONDITION_PATH_EXISTS
, "/bin/s?", false, false);
42 assert_se(!condition_test(condition
));
43 condition_free(condition
);
45 condition
= condition_new(CONDITION_PATH_EXISTS_GLOB
, "/bin/s?", false, false);
46 assert_se(condition_test(condition
));
47 condition_free(condition
);
49 condition
= condition_new(CONDITION_PATH_EXISTS_GLOB
, "/bin/s?", false, true);
50 assert_se(!condition_test(condition
));
51 condition_free(condition
);
53 condition
= condition_new(CONDITION_PATH_EXISTS
, "/thiscertainlywontexist", false, false);
54 assert_se(!condition_test(condition
));
55 condition_free(condition
);
57 condition
= condition_new(CONDITION_PATH_EXISTS
, "/thiscertainlywontexist", false, true);
58 assert_se(condition_test(condition
));
59 condition_free(condition
);
61 condition
= condition_new(CONDITION_PATH_IS_DIRECTORY
, "/bin", false, false);
62 assert_se(condition_test(condition
));
63 condition_free(condition
);
65 condition
= condition_new(CONDITION_DIRECTORY_NOT_EMPTY
, "/bin", false, false);
66 assert_se(condition_test(condition
));
67 condition_free(condition
);
69 condition
= condition_new(CONDITION_FILE_NOT_EMPTY
, "/bin/sh", false, false);
70 assert_se(condition_test(condition
));
71 condition_free(condition
);
73 condition
= condition_new(CONDITION_FILE_IS_EXECUTABLE
, "/bin/sh", false, false);
74 assert_se(condition_test(condition
));
75 condition_free(condition
);
77 condition
= condition_new(CONDITION_FILE_IS_EXECUTABLE
, "/etc/passwd", false, false);
78 assert_se(!condition_test(condition
));
79 condition_free(condition
);
81 condition
= condition_new(CONDITION_PATH_IS_MOUNT_POINT
, "/proc", false, false);
82 assert_se(condition_test(condition
));
83 condition_free(condition
);
85 condition
= condition_new(CONDITION_PATH_IS_MOUNT_POINT
, "/", false, false);
86 assert_se(condition_test(condition
));
87 condition_free(condition
);
89 condition
= condition_new(CONDITION_PATH_IS_MOUNT_POINT
, "/bin", false, false);
90 assert_se(!condition_test(condition
));
91 condition_free(condition
);
93 condition
= condition_new(CONDITION_PATH_IS_READ_WRITE
, "/tmp", false, false);
94 assert_se(condition_test(condition
));
95 condition_free(condition
);
97 condition
= condition_new(CONDITION_PATH_IS_SYMBOLIC_LINK
, "/dev/stdout", false, false);
98 assert_se(condition_test(condition
));
99 condition_free(condition
);
102 static void test_condition_test_ac_power(void) {
103 Condition
*condition
;
105 condition
= condition_new(CONDITION_AC_POWER
, "true", false, false);
106 assert_se(condition_test(condition
) == on_ac_power());
107 condition_free(condition
);
109 condition
= condition_new(CONDITION_AC_POWER
, "false", false, false);
110 assert_se(condition_test(condition
) != on_ac_power());
111 condition_free(condition
);
113 condition
= condition_new(CONDITION_AC_POWER
, "false", false, true);
114 assert_se(condition_test(condition
) == on_ac_power());
115 condition_free(condition
);
118 static void test_condition_test_host(void) {
119 Condition
*condition
;
122 char sid
[SD_ID128_STRING_MAX
];
123 _cleanup_free_
char *hostname
= NULL
;
125 r
= sd_id128_get_machine(&id
);
127 assert_se(sd_id128_to_string(id
, sid
));
129 condition
= condition_new(CONDITION_HOST
, sid
, false, false);
130 assert_se(condition_test(condition
));
131 condition_free(condition
);
133 condition
= condition_new(CONDITION_HOST
, "garbage value jjjjjjjjjjjjjj", false, false);
134 assert_se(!condition_test(condition
));
135 condition_free(condition
);
137 condition
= condition_new(CONDITION_HOST
, sid
, false, true);
138 assert_se(!condition_test(condition
));
139 condition_free(condition
);
141 hostname
= gethostname_malloc();
144 condition
= condition_new(CONDITION_HOST
, hostname
, false, false);
145 assert_se(condition_test(condition
));
146 condition_free(condition
);
149 static void test_condition_test_architecture(void) {
150 Condition
*condition
;
154 a
= uname_architecture();
157 sa
= architecture_to_string(a
);
160 condition
= condition_new(CONDITION_ARCHITECTURE
, sa
, false, false);
161 assert_se(condition_test(condition
));
162 condition_free(condition
);
164 condition
= condition_new(CONDITION_ARCHITECTURE
, "garbage value", false, false);
165 assert_se(condition_test(condition
) < 0);
166 condition_free(condition
);
168 condition
= condition_new(CONDITION_ARCHITECTURE
, sa
, false, true);
169 assert_se(!condition_test(condition
));
170 condition_free(condition
);
173 static void test_condition_test_kernel_command_line(void) {
174 Condition
*condition
;
176 condition
= condition_new(CONDITION_KERNEL_COMMAND_LINE
, "thisreallyshouldntbeonthekernelcommandline", false, false);
177 assert_se(!condition_test(condition
));
178 condition_free(condition
);
180 condition
= condition_new(CONDITION_KERNEL_COMMAND_LINE
, "andthis=neither", false, false);
181 assert_se(!condition_test(condition
));
182 condition_free(condition
);
185 static void test_condition_test_null(void) {
186 Condition
*condition
;
188 condition
= condition_new(CONDITION_NULL
, NULL
, false, false);
189 assert_se(condition_test(condition
));
190 condition_free(condition
);
192 condition
= condition_new(CONDITION_NULL
, NULL
, false, true);
193 assert_se(!condition_test(condition
));
194 condition_free(condition
);
197 static void test_condition_test_security(void) {
198 Condition
*condition
;
200 condition
= condition_new(CONDITION_SECURITY
, "garbage oifdsjfoidsjoj", false, false);
201 assert_se(!condition_test(condition
));
202 condition_free(condition
);
204 condition
= condition_new(CONDITION_SECURITY
, "selinux", false, true);
205 assert_se(condition_test(condition
) != mac_selinux_use());
206 condition_free(condition
);
208 condition
= condition_new(CONDITION_SECURITY
, "ima", false, false);
209 assert_se(condition_test(condition
) == use_ima());
210 condition_free(condition
);
212 condition
= condition_new(CONDITION_SECURITY
, "apparmor", false, false);
213 assert_se(condition_test(condition
) == mac_apparmor_use());
214 condition_free(condition
);
216 condition
= condition_new(CONDITION_SECURITY
, "smack", false, false);
217 assert_se(condition_test(condition
) == mac_smack_use());
218 condition_free(condition
);
220 condition
= condition_new(CONDITION_SECURITY
, "audit", false, false);
221 assert_se(condition_test(condition
) == use_audit());
222 condition_free(condition
);
226 int main(int argc
, char *argv
[]) {
227 log_parse_environment();
230 test_condition_test_path();
231 test_condition_test_ac_power();
232 test_condition_test_host();
233 test_condition_test_architecture();
234 test_condition_test_kernel_command_line();
235 test_condition_test_null();
236 test_condition_test_security();