tests: Rename test_gid to test_setgroups
[uid_wrapper.git] / tests / test_setgroups.c
1 #include "config.h"
2
3 #include <stdarg.h>
4 #include <stddef.h>
5 #include <setjmp.h>
6 #include <cmocka.h>
7
8 #include <errno.h>
9 #include <string.h>
10 #include <sys/types.h>
11 #include <unistd.h>
12
13 #include <grp.h>
14
15 #define ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0]))
16
17 static void test_uwrap_getgroups(void **state)
18 {
19         gid_t rlist[20] = {0};
20         int num_groups;
21         int rc;
22
23         (void) state; /* unused */
24         num_groups = getgroups(0, NULL);
25         assert_int_not_equal(num_groups, -1);
26
27         rc = getgroups(ARRAY_SIZE(rlist), rlist);
28         assert_int_equal(rc, num_groups);
29         assert_int_equal(rlist[0], getegid());
30 }
31
32 static void test_uwrap_setgroups(void **state)
33 {
34         gid_t glist[] = { 100, 200, 300, 400, 500 };
35         gid_t rlist[16];
36         int rc;
37
38         (void) state; /* unused */
39
40         rc = setgroups(ARRAY_SIZE(glist), glist);
41         assert_int_equal(rc, 0);
42
43         rc = getgroups(ARRAY_SIZE(rlist), rlist);
44         assert_int_equal(rc, 5);
45
46         assert_memory_equal(glist, rlist, sizeof(glist));
47
48         /* Drop all supplementary groups. This is often done by daemons */
49         memset(rlist, 0, sizeof(rlist));
50
51         rc = setgroups(0, NULL);
52         assert_int_equal(rc, 0);
53
54         rc = getgroups(ARRAY_SIZE(rlist), rlist);
55         assert_int_equal(rc, 0);
56
57         assert_int_equal(rlist[0], 0);
58 }
59
60 int main(void) {
61         int rc;
62
63         const struct CMUnitTest uwrap_tests[] = {
64                 cmocka_unit_test(test_uwrap_getgroups),
65                 cmocka_unit_test(test_uwrap_setgroups),
66         };
67
68         rc = cmocka_run_group_tests(uwrap_tests, NULL, NULL);
69
70         return rc;
71 }