tests: let test_echo_tcp_sendmmsg_recvmmsg check raw SYS_close, SYS_recvmmsg and...
[socket_wrapper.git] / tests / test_fcntl.c
1 #include "torture.h"
2
3 #include <cmocka.h>
4 #include <unistd.h>
5 #include <fcntl.h>
6 #include <errno.h>
7
8 static int setup(void **state)
9 {
10         torture_setup_socket_dir(state);
11
12         return 0;
13 }
14
15 static int teardown(void **state)
16 {
17         torture_teardown_socket_dir(state);
18
19         return 0;
20 }
21
22 static void test_fcntl_dupfd_existing_open_fd(void **state)
23 {
24         int s, dup_s;
25
26         (void) state; /* unused */
27
28         s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
29         assert_return_code(s, errno);
30
31         dup_s = fcntl(s, F_DUPFD, 100);
32         assert_int_equal(dup_s, 100);
33
34         close(s);
35         close(dup_s);
36 }
37
38 static void test_fcntl_getfd_existing_open_fd(void **state)
39 {
40         int s, rc, flags;
41
42         (void) state; /* unused */
43
44         s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
45         assert_return_code(s, errno);
46
47         rc = fcntl(s, F_SETFD, FD_CLOEXEC);
48         assert_int_equal(rc, 0);
49
50         flags = fcntl(s, F_GETFD);
51         assert_int_equal(flags, FD_CLOEXEC);
52
53         close(s);
54 }
55
56 int main(void) {
57         int rc;
58
59         const struct CMUnitTest tcp_fcntl_dupfd_tests[] = {
60                 cmocka_unit_test(test_fcntl_dupfd_existing_open_fd),
61                 cmocka_unit_test(test_fcntl_getfd_existing_open_fd),
62         };
63
64         rc = cmocka_run_group_tests(tcp_fcntl_dupfd_tests, setup, teardown);
65
66         return rc;
67 }