10 #include <sys/types.h>
15 #define ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0]))
17 static void test_uwrap_getgroups(void **state)
19 gid_t rlist[20] = {0};
23 (void) state; /* unused */
24 num_groups = getgroups(0, NULL);
25 assert_int_not_equal(num_groups, -1);
27 rc = getgroups(ARRAY_SIZE(rlist), rlist);
28 assert_int_equal(rc, num_groups);
29 assert_int_equal(rlist[0], getegid());
32 static void test_uwrap_setgroups(void **state)
34 gid_t glist[] = { 100, 200, 300, 400, 500 };
38 (void) state; /* unused */
40 rc = setgroups(ARRAY_SIZE(glist), glist);
41 assert_int_equal(rc, 0);
43 rc = getgroups(ARRAY_SIZE(rlist), rlist);
44 assert_int_equal(rc, 5);
46 assert_memory_equal(glist, rlist, sizeof(glist));
48 /* Drop all supplementary groups. This is often done by daemons */
49 memset(rlist, 0, sizeof(rlist));
51 rc = setgroups(0, NULL);
52 assert_int_equal(rc, 0);
54 rc = getgroups(ARRAY_SIZE(rlist), rlist);
55 assert_int_equal(rc, 0);
57 assert_int_equal(rlist[0], 0);
63 const struct CMUnitTest uwrap_tests[] = {
64 cmocka_unit_test(test_uwrap_getgroups),
65 cmocka_unit_test(test_uwrap_setgroups),
68 rc = cmocka_run_group_tests(uwrap_tests, NULL, NULL);