]> git.ipfire.org Git - thirdparty/systemd.git/blob - src/test/test-condition.c
test-condition: make function return void
[thirdparty/systemd.git] / src / test / test-condition.c
1 /* SPDX-License-Identifier: LGPL-2.1+ */
2
3 #include <stdio.h>
4 #include <sys/types.h>
5 #include <sys/utsname.h>
6 #include <unistd.h>
7
8 #include "sd-id128.h"
9
10 #include "alloc-util.h"
11 #include "apparmor-util.h"
12 #include "architecture.h"
13 #include "audit-util.h"
14 #include "cgroup-util.h"
15 #include "condition.h"
16 #include "efivars.h"
17 #include "hostname-util.h"
18 #include "id128-util.h"
19 #include "ima-util.h"
20 #include "log.h"
21 #include "macro.h"
22 #include "selinux-util.h"
23 #include "set.h"
24 #include "smack-util.h"
25 #include "string-util.h"
26 #include "strv.h"
27 #include "tomoyo-util.h"
28 #include "user-util.h"
29 #include "util.h"
30 #include "virt.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);
37 assert_se(condition_test(condition));
38 condition_free(condition);
39
40 condition = condition_new(CONDITION_PATH_EXISTS, "/bin/s?", false, false);
41 assert_se(condition);
42 assert_se(!condition_test(condition));
43 condition_free(condition);
44
45 condition = condition_new(CONDITION_PATH_EXISTS_GLOB, "/bin/s?", false, false);
46 assert_se(condition);
47 assert_se(condition_test(condition));
48 condition_free(condition);
49
50 condition = condition_new(CONDITION_PATH_EXISTS_GLOB, "/bin/s?", false, true);
51 assert_se(condition);
52 assert_se(!condition_test(condition));
53 condition_free(condition);
54
55 condition = condition_new(CONDITION_PATH_EXISTS, "/thiscertainlywontexist", false, false);
56 assert_se(condition);
57 assert_se(!condition_test(condition));
58 condition_free(condition);
59
60 condition = condition_new(CONDITION_PATH_EXISTS, "/thiscertainlywontexist", false, true);
61 assert_se(condition);
62 assert_se(condition_test(condition));
63 condition_free(condition);
64
65 condition = condition_new(CONDITION_PATH_IS_DIRECTORY, "/bin", false, false);
66 assert_se(condition);
67 assert_se(condition_test(condition));
68 condition_free(condition);
69
70 condition = condition_new(CONDITION_DIRECTORY_NOT_EMPTY, "/bin", false, false);
71 assert_se(condition);
72 assert_se(condition_test(condition));
73 condition_free(condition);
74
75 condition = condition_new(CONDITION_FILE_NOT_EMPTY, "/bin/sh", false, false);
76 assert_se(condition);
77 assert_se(condition_test(condition));
78 condition_free(condition);
79
80 condition = condition_new(CONDITION_FILE_IS_EXECUTABLE, "/bin/sh", false, false);
81 assert_se(condition);
82 assert_se(condition_test(condition));
83 condition_free(condition);
84
85 condition = condition_new(CONDITION_FILE_IS_EXECUTABLE, "/etc/passwd", false, false);
86 assert_se(condition);
87 assert_se(!condition_test(condition));
88 condition_free(condition);
89
90 condition = condition_new(CONDITION_PATH_IS_MOUNT_POINT, "/proc", false, false);
91 assert_se(condition);
92 assert_se(condition_test(condition));
93 condition_free(condition);
94
95 condition = condition_new(CONDITION_PATH_IS_MOUNT_POINT, "/", false, false);
96 assert_se(condition);
97 assert_se(condition_test(condition));
98 condition_free(condition);
99
100 condition = condition_new(CONDITION_PATH_IS_MOUNT_POINT, "/bin", false, false);
101 assert_se(condition);
102 assert_se(!condition_test(condition));
103 condition_free(condition);
104
105 condition = condition_new(CONDITION_PATH_IS_READ_WRITE, "/tmp", false, false);
106 assert_se(condition);
107 assert_se(condition_test(condition));
108 condition_free(condition);
109
110 condition = condition_new(CONDITION_PATH_IS_SYMBOLIC_LINK, "/dev/stdout", false, false);
111 assert_se(condition);
112 assert_se(condition_test(condition));
113 condition_free(condition);
114 }
115
116 static void test_condition_test_control_group_controller(void) {
117 Condition *condition;
118 CGroupMask system_mask;
119 CGroupController controller;
120 _cleanup_free_ char *controller_name = NULL;
121 int r;
122
123 r = cg_unified_flush();
124 if (r < 0) {
125 log_notice_errno(r, "Skipping ConditionControlGroupController tests: %m");
126 return;
127 }
128
129 /* Invalid controllers are ignored */
130 condition = condition_new(CONDITION_CONTROL_GROUP_CONTROLLER, "thisisnotarealcontroller", false, false);
131 assert_se(condition);
132 assert_se(condition_test(condition));
133 condition_free(condition);
134
135 condition = condition_new(CONDITION_CONTROL_GROUP_CONTROLLER, "thisisnotarealcontroller", false, true);
136 assert_se(condition);
137 assert_se(!condition_test(condition));
138 condition_free(condition);
139
140 assert_se(cg_mask_supported(&system_mask) >= 0);
141
142 /* Individual valid controllers one by one */
143 for (controller = 0; controller < _CGROUP_CONTROLLER_MAX; controller++) {
144 const char *local_controller_name = cgroup_controller_to_string(controller);
145 log_info("chosen controller is '%s'", local_controller_name);
146 if (system_mask & CGROUP_CONTROLLER_TO_MASK(controller)) {
147 log_info("this controller is available");
148 condition = condition_new(CONDITION_CONTROL_GROUP_CONTROLLER, local_controller_name, false, false);
149 assert_se(condition);
150 assert_se(condition_test(condition));
151 condition_free(condition);
152
153 condition = condition_new(CONDITION_CONTROL_GROUP_CONTROLLER, local_controller_name, false, true);
154 assert_se(condition);
155 assert_se(!condition_test(condition));
156 condition_free(condition);
157 } else {
158 log_info("this controller is unavailable");
159 condition = condition_new(CONDITION_CONTROL_GROUP_CONTROLLER, local_controller_name, false, false);
160 assert_se(condition);
161 assert_se(!condition_test(condition));
162 condition_free(condition);
163
164 condition = condition_new(CONDITION_CONTROL_GROUP_CONTROLLER, local_controller_name, false, true);
165 assert_se(condition);
166 assert_se(condition_test(condition));
167 condition_free(condition);
168 }
169 }
170
171 /* Multiple valid controllers at the same time */
172 assert_se(cg_mask_to_string(system_mask, &controller_name) >= 0);
173
174 condition = condition_new(CONDITION_CONTROL_GROUP_CONTROLLER, strempty(controller_name), false, false);
175 assert_se(condition);
176 assert_se(condition_test(condition));
177 condition_free(condition);
178
179 condition = condition_new(CONDITION_CONTROL_GROUP_CONTROLLER, strempty(controller_name), false, true);
180 assert_se(condition);
181 assert_se(!condition_test(condition));
182 condition_free(condition);
183 }
184
185 static void test_condition_test_ac_power(void) {
186 Condition *condition;
187
188 condition = condition_new(CONDITION_AC_POWER, "true", false, false);
189 assert_se(condition);
190 assert_se(condition_test(condition) == on_ac_power());
191 condition_free(condition);
192
193 condition = condition_new(CONDITION_AC_POWER, "false", false, false);
194 assert_se(condition);
195 assert_se(condition_test(condition) != on_ac_power());
196 condition_free(condition);
197
198 condition = condition_new(CONDITION_AC_POWER, "false", false, true);
199 assert_se(condition);
200 assert_se(condition_test(condition) == on_ac_power());
201 condition_free(condition);
202 }
203
204 static void test_condition_test_host(void) {
205 _cleanup_free_ char *hostname = NULL;
206 char sid[SD_ID128_STRING_MAX];
207 Condition *condition;
208 sd_id128_t id;
209 int r;
210
211 r = sd_id128_get_machine(&id);
212 assert_se(r >= 0);
213 assert_se(sd_id128_to_string(id, sid));
214
215 condition = condition_new(CONDITION_HOST, sid, false, false);
216 assert_se(condition);
217 assert_se(condition_test(condition));
218 condition_free(condition);
219
220 condition = condition_new(CONDITION_HOST, "garbage value jjjjjjjjjjjjjj", false, false);
221 assert_se(condition);
222 assert_se(!condition_test(condition));
223 condition_free(condition);
224
225 condition = condition_new(CONDITION_HOST, sid, false, true);
226 assert_se(condition);
227 assert_se(!condition_test(condition));
228 condition_free(condition);
229
230 hostname = gethostname_malloc();
231 assert_se(hostname);
232
233 /* if hostname looks like an id128 then skip testing it */
234 if (id128_is_valid(hostname))
235 log_notice("hostname is an id128, skipping test");
236 else {
237 condition = condition_new(CONDITION_HOST, hostname, false, false);
238 assert_se(condition);
239 assert_se(condition_test(condition));
240 condition_free(condition);
241 }
242 }
243
244 static void test_condition_test_architecture(void) {
245 Condition *condition;
246 const char *sa;
247 int a;
248
249 a = uname_architecture();
250 assert_se(a >= 0);
251
252 sa = architecture_to_string(a);
253 assert_se(sa);
254
255 condition = condition_new(CONDITION_ARCHITECTURE, sa, false, false);
256 assert_se(condition);
257 assert_se(condition_test(condition) > 0);
258 condition_free(condition);
259
260 condition = condition_new(CONDITION_ARCHITECTURE, "garbage value", false, false);
261 assert_se(condition);
262 assert_se(condition_test(condition) == 0);
263 condition_free(condition);
264
265 condition = condition_new(CONDITION_ARCHITECTURE, sa, false, true);
266 assert_se(condition);
267 assert_se(condition_test(condition) == 0);
268 condition_free(condition);
269 }
270
271 static void test_condition_test_kernel_command_line(void) {
272 Condition *condition;
273
274 condition = condition_new(CONDITION_KERNEL_COMMAND_LINE, "thisreallyshouldntbeonthekernelcommandline", false, false);
275 assert_se(condition);
276 assert_se(!condition_test(condition));
277 condition_free(condition);
278
279 condition = condition_new(CONDITION_KERNEL_COMMAND_LINE, "andthis=neither", false, false);
280 assert_se(condition);
281 assert_se(!condition_test(condition));
282 condition_free(condition);
283 }
284
285 static void test_condition_test_kernel_version(void) {
286 Condition *condition;
287 struct utsname u;
288 const char *v;
289
290 condition = condition_new(CONDITION_KERNEL_VERSION, "*thisreallyshouldntbeinthekernelversion*", false, false);
291 assert_se(condition);
292 assert_se(!condition_test(condition));
293 condition_free(condition);
294
295 condition = condition_new(CONDITION_KERNEL_VERSION, "*", false, false);
296 assert_se(condition);
297 assert_se(condition_test(condition));
298 condition_free(condition);
299
300 condition = condition_new(CONDITION_KERNEL_VERSION, "", false, false);
301 assert_se(condition);
302 assert_se(!condition_test(condition));
303 condition_free(condition);
304
305 assert_se(uname(&u) >= 0);
306
307 condition = condition_new(CONDITION_KERNEL_VERSION, u.release, false, false);
308 assert_se(condition);
309 assert_se(condition_test(condition));
310 condition_free(condition);
311
312 strshorten(u.release, 4);
313 strcpy(strchr(u.release, 0), "*");
314
315 condition = condition_new(CONDITION_KERNEL_VERSION, u.release, false, false);
316 assert_se(condition);
317 assert_se(condition_test(condition));
318 condition_free(condition);
319
320 /* 0.1.2 would be a very very very old kernel */
321 condition = condition_new(CONDITION_KERNEL_VERSION, "> 0.1.2", false, false);
322 assert_se(condition);
323 assert_se(condition_test(condition));
324 condition_free(condition);
325
326 condition = condition_new(CONDITION_KERNEL_VERSION, ">= 0.1.2", false, false);
327 assert_se(condition);
328 assert_se(condition_test(condition));
329 condition_free(condition);
330
331 condition = condition_new(CONDITION_KERNEL_VERSION, "< 0.1.2", false, false);
332 assert_se(condition);
333 assert_se(!condition_test(condition));
334 condition_free(condition);
335
336 condition = condition_new(CONDITION_KERNEL_VERSION, "<= 0.1.2", false, false);
337 assert_se(condition);
338 assert_se(!condition_test(condition));
339 condition_free(condition);
340
341 condition = condition_new(CONDITION_KERNEL_VERSION, "= 0.1.2", false, false);
342 assert_se(condition);
343 assert_se(!condition_test(condition));
344 condition_free(condition);
345
346 /* 4711.8.15 is a very very very future kernel */
347 condition = condition_new(CONDITION_KERNEL_VERSION, "< 4711.8.15", false, false);
348 assert_se(condition);
349 assert_se(condition_test(condition));
350 condition_free(condition);
351
352 condition = condition_new(CONDITION_KERNEL_VERSION, "<= 4711.8.15", false, false);
353 assert_se(condition);
354 assert_se(condition_test(condition));
355 condition_free(condition);
356
357 condition = condition_new(CONDITION_KERNEL_VERSION, "= 4711.8.15", false, false);
358 assert_se(condition);
359 assert_se(!condition_test(condition));
360 condition_free(condition);
361
362 condition = condition_new(CONDITION_KERNEL_VERSION, "> 4711.8.15", false, false);
363 assert_se(condition);
364 assert_se(!condition_test(condition));
365 condition_free(condition);
366
367 condition = condition_new(CONDITION_KERNEL_VERSION, ">= 4711.8.15", false, false);
368 assert_se(condition);
369 assert_se(!condition_test(condition));
370 condition_free(condition);
371
372 assert_se(uname(&u) >= 0);
373
374 v = strjoina(">=", u.release);
375 condition = condition_new(CONDITION_KERNEL_VERSION, v, false, false);
376 assert_se(condition);
377 assert_se(condition_test(condition));
378 condition_free(condition);
379
380 v = strjoina("= ", u.release);
381 condition = condition_new(CONDITION_KERNEL_VERSION, v, false, false);
382 assert_se(condition);
383 assert_se(condition_test(condition));
384 condition_free(condition);
385
386 v = strjoina("<=", u.release);
387 condition = condition_new(CONDITION_KERNEL_VERSION, v, false, false);
388 assert_se(condition);
389 assert_se(condition_test(condition));
390 condition_free(condition);
391
392 v = strjoina("> ", u.release);
393 condition = condition_new(CONDITION_KERNEL_VERSION, v, false, false);
394 assert_se(condition);
395 assert_se(!condition_test(condition));
396 condition_free(condition);
397
398 v = strjoina("< ", u.release);
399 condition = condition_new(CONDITION_KERNEL_VERSION, v, false, false);
400 assert_se(condition);
401 assert_se(!condition_test(condition));
402 condition_free(condition);
403 }
404
405 static void test_condition_test_null(void) {
406 Condition *condition;
407
408 condition = condition_new(CONDITION_NULL, NULL, false, false);
409 assert_se(condition);
410 assert_se(condition_test(condition));
411 condition_free(condition);
412
413 condition = condition_new(CONDITION_NULL, NULL, false, true);
414 assert_se(condition);
415 assert_se(!condition_test(condition));
416 condition_free(condition);
417 }
418
419 static void test_condition_test_security(void) {
420 Condition *condition;
421
422 condition = condition_new(CONDITION_SECURITY, "garbage oifdsjfoidsjoj", false, false);
423 assert_se(condition);
424 assert_se(!condition_test(condition));
425 condition_free(condition);
426
427 condition = condition_new(CONDITION_SECURITY, "selinux", false, true);
428 assert_se(condition);
429 assert_se(condition_test(condition) != mac_selinux_use());
430 condition_free(condition);
431
432 condition = condition_new(CONDITION_SECURITY, "apparmor", false, false);
433 assert_se(condition);
434 assert_se(condition_test(condition) == mac_apparmor_use());
435 condition_free(condition);
436
437 condition = condition_new(CONDITION_SECURITY, "tomoyo", false, false);
438 assert_se(condition);
439 assert_se(condition_test(condition) == mac_tomoyo_use());
440 condition_free(condition);
441
442 condition = condition_new(CONDITION_SECURITY, "ima", false, false);
443 assert_se(condition);
444 assert_se(condition_test(condition) == use_ima());
445 condition_free(condition);
446
447 condition = condition_new(CONDITION_SECURITY, "smack", false, false);
448 assert_se(condition);
449 assert_se(condition_test(condition) == mac_smack_use());
450 condition_free(condition);
451
452 condition = condition_new(CONDITION_SECURITY, "audit", false, false);
453 assert_se(condition);
454 assert_se(condition_test(condition) == use_audit());
455 condition_free(condition);
456
457 condition = condition_new(CONDITION_SECURITY, "uefi-secureboot", false, false);
458 assert_se(condition);
459 assert_se(condition_test(condition) == is_efi_secure_boot());
460 condition_free(condition);
461 }
462
463 static void print_securities(void) {
464 log_info("------ enabled security technologies ------");
465 log_info("SELinux: %s", yes_no(mac_selinux_use()));
466 log_info("AppArmor: %s", yes_no(mac_apparmor_use()));
467 log_info("Tomoyo: %s", yes_no(mac_tomoyo_use()));
468 log_info("IMA: %s", yes_no(use_ima()));
469 log_info("SMACK: %s", yes_no(mac_smack_use()));
470 log_info("Audit: %s", yes_no(use_audit()));
471 log_info("UEFI secure boot: %s", yes_no(is_efi_secure_boot()));
472 log_info("-------------------------------------------");
473 }
474
475 static void test_condition_test_virtualization(void) {
476 Condition *condition;
477 const char *virt;
478 int r;
479
480 condition = condition_new(CONDITION_VIRTUALIZATION, "garbage oifdsjfoidsjoj", false, false);
481 assert_se(condition);
482 r = condition_test(condition);
483 log_info("ConditionVirtualization=garbage → %i", r);
484 assert_se(r == 0);
485 condition_free(condition);
486
487 condition = condition_new(CONDITION_VIRTUALIZATION, "container", false, false);
488 assert_se(condition);
489 r = condition_test(condition);
490 log_info("ConditionVirtualization=container → %i", r);
491 assert_se(r == !!detect_container());
492 condition_free(condition);
493
494 condition = condition_new(CONDITION_VIRTUALIZATION, "vm", false, false);
495 assert_se(condition);
496 r = condition_test(condition);
497 log_info("ConditionVirtualization=vm → %i", r);
498 assert_se(r == (detect_vm() && !detect_container()));
499 condition_free(condition);
500
501 condition = condition_new(CONDITION_VIRTUALIZATION, "private-users", false, false);
502 assert_se(condition);
503 r = condition_test(condition);
504 log_info("ConditionVirtualization=private-users → %i", r);
505 assert_se(r == !!running_in_userns());
506 condition_free(condition);
507
508 NULSTR_FOREACH(virt,
509 "kvm\0"
510 "qemu\0"
511 "bochs\0"
512 "xen\0"
513 "uml\0"
514 "vmware\0"
515 "oracle\0"
516 "microsoft\0"
517 "zvm\0"
518 "parallels\0"
519 "bhyve\0"
520 "vm_other\0") {
521
522 condition = condition_new(CONDITION_VIRTUALIZATION, virt, false, false);
523 assert_se(condition);
524 r = condition_test(condition);
525 log_info("ConditionVirtualization=%s → %i", virt, r);
526 assert_se(r >= 0);
527 condition_free(condition);
528 }
529 }
530
531 static void test_condition_test_user(void) {
532 Condition *condition;
533 char* uid;
534 char* username;
535 int r;
536
537 condition = condition_new(CONDITION_USER, "garbage oifdsjfoidsjoj", false, false);
538 assert_se(condition);
539 r = condition_test(condition);
540 log_info("ConditionUser=garbage → %i", r);
541 assert_se(r == 0);
542 condition_free(condition);
543
544 assert_se(asprintf(&uid, "%"PRIu32, UINT32_C(0xFFFF)) > 0);
545 condition = condition_new(CONDITION_USER, uid, false, false);
546 assert_se(condition);
547 r = condition_test(condition);
548 log_info("ConditionUser=%s → %i", uid, r);
549 assert_se(r == 0);
550 condition_free(condition);
551 free(uid);
552
553 assert_se(asprintf(&uid, "%u", (unsigned)getuid()) > 0);
554 condition = condition_new(CONDITION_USER, uid, false, false);
555 assert_se(condition);
556 r = condition_test(condition);
557 log_info("ConditionUser=%s → %i", uid, r);
558 assert_se(r > 0);
559 condition_free(condition);
560 free(uid);
561
562 assert_se(asprintf(&uid, "%u", (unsigned)getuid()+1) > 0);
563 condition = condition_new(CONDITION_USER, uid, false, false);
564 assert_se(condition);
565 r = condition_test(condition);
566 log_info("ConditionUser=%s → %i", uid, r);
567 assert_se(r == 0);
568 condition_free(condition);
569 free(uid);
570
571 username = getusername_malloc();
572 assert_se(username);
573 condition = condition_new(CONDITION_USER, username, false, false);
574 assert_se(condition);
575 r = condition_test(condition);
576 log_info("ConditionUser=%s → %i", username, r);
577 assert_se(r > 0);
578 condition_free(condition);
579 free(username);
580
581 username = (char*)(geteuid() == 0 ? NOBODY_USER_NAME : "root");
582 condition = condition_new(CONDITION_USER, username, false, false);
583 assert_se(condition);
584 r = condition_test(condition);
585 log_info("ConditionUser=%s → %i", username, r);
586 assert_se(r == 0);
587 condition_free(condition);
588
589 condition = condition_new(CONDITION_USER, "@system", false, false);
590 assert_se(condition);
591 r = condition_test(condition);
592 log_info("ConditionUser=@system → %i", r);
593 if (uid_is_system(getuid()) || uid_is_system(geteuid()))
594 assert_se(r > 0);
595 else
596 assert_se(r == 0);
597 condition_free(condition);
598 }
599
600 static void test_condition_test_group(void) {
601 Condition *condition;
602 char* gid;
603 char* groupname;
604 gid_t *gids, max_gid;
605 int ngroups_max, ngroups, r, i;
606
607 assert_se(0 < asprintf(&gid, "%u", UINT32_C(0xFFFF)));
608 condition = condition_new(CONDITION_GROUP, gid, false, false);
609 assert_se(condition);
610 r = condition_test(condition);
611 log_info("ConditionGroup=%s → %i", gid, r);
612 assert_se(r == 0);
613 condition_free(condition);
614 free(gid);
615
616 assert_se(0 < asprintf(&gid, "%u", getgid()));
617 condition = condition_new(CONDITION_GROUP, gid, false, false);
618 assert_se(condition);
619 r = condition_test(condition);
620 log_info("ConditionGroup=%s → %i", gid, r);
621 assert_se(r > 0);
622 condition_free(condition);
623 free(gid);
624
625 ngroups_max = sysconf(_SC_NGROUPS_MAX);
626 assert(ngroups_max > 0);
627
628 gids = newa(gid_t, ngroups_max);
629
630 ngroups = getgroups(ngroups_max, gids);
631 assert(ngroups >= 0);
632
633 max_gid = getgid();
634 for (i = 0; i < ngroups; i++) {
635 assert_se(0 < asprintf(&gid, "%u", gids[i]));
636 condition = condition_new(CONDITION_GROUP, gid, false, false);
637 assert_se(condition);
638 r = condition_test(condition);
639 log_info("ConditionGroup=%s → %i", gid, r);
640 assert_se(r > 0);
641 condition_free(condition);
642 free(gid);
643 max_gid = gids[i] > max_gid ? gids[i] : max_gid;
644
645 groupname = gid_to_name(gids[i]);
646 assert_se(groupname);
647 condition = condition_new(CONDITION_GROUP, groupname, false, false);
648 assert_se(condition);
649 r = condition_test(condition);
650 log_info("ConditionGroup=%s → %i", groupname, r);
651 assert_se(r > 0);
652 condition_free(condition);
653 free(groupname);
654 max_gid = gids[i] > max_gid ? gids[i] : max_gid;
655 }
656
657 assert_se(0 < asprintf(&gid, "%u", max_gid+1));
658 condition = condition_new(CONDITION_GROUP, gid, false, false);
659 assert_se(condition);
660 r = condition_test(condition);
661 log_info("ConditionGroup=%s → %i", gid, r);
662 assert_se(r == 0);
663 condition_free(condition);
664 free(gid);
665
666 groupname = (char*)(geteuid() == 0 ? NOBODY_GROUP_NAME : "root");
667 condition = condition_new(CONDITION_GROUP, groupname, false, false);
668 assert_se(condition);
669 r = condition_test(condition);
670 log_info("ConditionGroup=%s → %i", groupname, r);
671 assert_se(r == 0);
672 condition_free(condition);
673 }
674
675 int main(int argc, char *argv[]) {
676 log_set_max_level(LOG_DEBUG);
677 log_parse_environment();
678 log_open();
679
680 test_condition_test_path();
681 test_condition_test_ac_power();
682 test_condition_test_host();
683 test_condition_test_architecture();
684 test_condition_test_kernel_command_line();
685 test_condition_test_kernel_version();
686 test_condition_test_null();
687 test_condition_test_security();
688 print_securities();
689 test_condition_test_virtualization();
690 test_condition_test_user();
691 test_condition_test_group();
692 test_condition_test_control_group_controller();
693
694 return 0;
695 }