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/>.
20 #include "condition.h"
24 #include "architecture.h"
26 #include "selinux-util.h"
29 #include "apparmor-util.h"
30 #include "smack-util.h"
32 static void test_condition_test_path(void) {
35 condition
= condition_new(CONDITION_PATH_EXISTS
, "/bin/sh", false, false);
36 assert_se(condition_test(condition
));
37 condition_free(condition
);
39 condition
= condition_new(CONDITION_PATH_EXISTS
, "/bin/s?", false, false);
40 assert_se(!condition_test(condition
));
41 condition_free(condition
);
43 condition
= condition_new(CONDITION_PATH_EXISTS_GLOB
, "/bin/s?", false, false);
44 assert_se(condition_test(condition
));
45 condition_free(condition
);
47 condition
= condition_new(CONDITION_PATH_EXISTS_GLOB
, "/bin/s?", false, true);
48 assert_se(!condition_test(condition
));
49 condition_free(condition
);
51 condition
= condition_new(CONDITION_PATH_EXISTS
, "/thiscertainlywontexist", false, false);
52 assert_se(!condition_test(condition
));
53 condition_free(condition
);
55 condition
= condition_new(CONDITION_PATH_EXISTS
, "/thiscertainlywontexist", false, true);
56 assert_se(condition_test(condition
));
57 condition_free(condition
);
59 condition
= condition_new(CONDITION_PATH_IS_DIRECTORY
, "/bin", false, false);
60 assert_se(condition_test(condition
));
61 condition_free(condition
);
63 condition
= condition_new(CONDITION_DIRECTORY_NOT_EMPTY
, "/bin", false, false);
64 assert_se(condition_test(condition
));
65 condition_free(condition
);
67 condition
= condition_new(CONDITION_FILE_NOT_EMPTY
, "/bin/sh", false, false);
68 assert_se(condition_test(condition
));
69 condition_free(condition
);
71 condition
= condition_new(CONDITION_FILE_IS_EXECUTABLE
, "/bin/sh", false, false);
72 assert_se(condition_test(condition
));
73 condition_free(condition
);
75 condition
= condition_new(CONDITION_FILE_IS_EXECUTABLE
, "/etc/passwd", false, false);
76 assert_se(!condition_test(condition
));
77 condition_free(condition
);
79 condition
= condition_new(CONDITION_PATH_IS_MOUNT_POINT
, "/proc", false, false);
80 assert_se(condition_test(condition
));
81 condition_free(condition
);
83 condition
= condition_new(CONDITION_PATH_IS_MOUNT_POINT
, "/", false, false);
84 assert_se(condition_test(condition
));
85 condition_free(condition
);
87 condition
= condition_new(CONDITION_PATH_IS_MOUNT_POINT
, "/bin", false, false);
88 assert_se(!condition_test(condition
));
89 condition_free(condition
);
91 condition
= condition_new(CONDITION_PATH_IS_READ_WRITE
, "/tmp", false, false);
92 assert_se(condition_test(condition
));
93 condition_free(condition
);
95 condition
= condition_new(CONDITION_PATH_IS_SYMBOLIC_LINK
, "/dev/stdout", false, false);
96 assert_se(condition_test(condition
));
97 condition_free(condition
);
100 static void test_condition_test_ac_power(void) {
101 Condition
*condition
;
103 condition
= condition_new(CONDITION_AC_POWER
, "true", false, false);
104 assert_se(condition_test(condition
) == on_ac_power());
105 condition_free(condition
);
107 condition
= condition_new(CONDITION_AC_POWER
, "false", false, false);
108 assert_se(condition_test(condition
) != on_ac_power());
109 condition_free(condition
);
111 condition
= condition_new(CONDITION_AC_POWER
, "false", false, true);
112 assert_se(condition_test(condition
) == on_ac_power());
113 condition_free(condition
);
116 static void test_condition_test_host(void) {
117 Condition
*condition
;
120 char sid
[SD_ID128_STRING_MAX
];
121 _cleanup_free_
char *hostname
= NULL
;
123 r
= sd_id128_get_machine(&id
);
125 assert_se(sd_id128_to_string(id
, sid
));
127 condition
= condition_new(CONDITION_HOST
, sid
, false, false);
128 assert_se(condition_test(condition
));
129 condition_free(condition
);
131 condition
= condition_new(CONDITION_HOST
, "garbage value jjjjjjjjjjjjjj", false, false);
132 assert_se(!condition_test(condition
));
133 condition_free(condition
);
135 condition
= condition_new(CONDITION_HOST
, sid
, false, true);
136 assert_se(!condition_test(condition
));
137 condition_free(condition
);
139 hostname
= gethostname_malloc();
142 condition
= condition_new(CONDITION_HOST
, hostname
, false, false);
143 assert_se(condition_test(condition
));
144 condition_free(condition
);
147 static void test_condition_test_architecture(void) {
148 Condition
*condition
;
152 a
= uname_architecture();
155 sa
= architecture_to_string(a
);
158 condition
= condition_new(CONDITION_ARCHITECTURE
, sa
, false, false);
159 assert_se(condition_test(condition
));
160 condition_free(condition
);
162 condition
= condition_new(CONDITION_ARCHITECTURE
, "garbage value", false, false);
163 assert_se(condition_test(condition
) < 0);
164 condition_free(condition
);
166 condition
= condition_new(CONDITION_ARCHITECTURE
, sa
, false, true);
167 assert_se(!condition_test(condition
));
168 condition_free(condition
);
171 static void test_condition_test_kernel_command_line(void) {
172 Condition
*condition
;
174 condition
= condition_new(CONDITION_KERNEL_COMMAND_LINE
, "thisreallyshouldntbeonthekernelcommandline", false, false);
175 assert_se(!condition_test(condition
));
176 condition_free(condition
);
178 condition
= condition_new(CONDITION_KERNEL_COMMAND_LINE
, "andthis=neither", false, false);
179 assert_se(!condition_test(condition
));
180 condition_free(condition
);
183 static void test_condition_test_null(void) {
184 Condition
*condition
;
186 condition
= condition_new(CONDITION_NULL
, NULL
, false, false);
187 assert_se(condition_test(condition
));
188 condition_free(condition
);
190 condition
= condition_new(CONDITION_NULL
, NULL
, false, true);
191 assert_se(!condition_test(condition
));
192 condition_free(condition
);
195 static void test_condition_test_security(void) {
196 Condition
*condition
;
198 condition
= condition_new(CONDITION_SECURITY
, "garbage oifdsjfoidsjoj", false, false);
199 assert_se(!condition_test(condition
));
200 condition_free(condition
);
202 condition
= condition_new(CONDITION_SECURITY
, "selinux", false, true);
203 assert_se(condition_test(condition
) != mac_selinux_use());
204 condition_free(condition
);
206 condition
= condition_new(CONDITION_SECURITY
, "ima", false, false);
207 assert_se(condition_test(condition
) == use_ima());
208 condition_free(condition
);
210 condition
= condition_new(CONDITION_SECURITY
, "apparmor", false, false);
211 assert_se(condition_test(condition
) == mac_apparmor_use());
212 condition_free(condition
);
214 condition
= condition_new(CONDITION_SECURITY
, "smack", false, false);
215 assert_se(condition_test(condition
) == mac_smack_use());
216 condition_free(condition
);
218 condition
= condition_new(CONDITION_SECURITY
, "audit", false, false);
219 assert_se(condition_test(condition
) == use_audit());
220 condition_free(condition
);
224 int main(int argc
, char *argv
[]) {
225 log_parse_environment();
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();