diff options
author | Anoop C S <anoopcs@redhat.com> | 2016-08-22 19:37:47 +0530 |
---|---|---|
committer | Andreas Schneider <asn@samba.org> | 2016-08-23 16:27:58 +0200 |
commit | 17cfdc6a6568f0dbc34d863ad2d80acaed15a6ad (patch) | |
tree | d2aa9539fbb17d7c89e32a96799ff482663af972 /tests | |
parent | 04dacf2d2e764eb9fd0791642893b4e1bc199ef0 (diff) | |
download | socket_wrapper-17cfdc6a6568f0dbc34d863ad2d80acaed15a6ad.tar.gz socket_wrapper-17cfdc6a6568f0dbc34d863ad2d80acaed15a6ad.tar.xz socket_wrapper-17cfdc6a6568f0dbc34d863ad2d80acaed15a6ad.zip |
swrap: Add test case to validate oldfd = newfd case in dup2()
Signed-off-by: Anoop C S <anoopcs@redhat.com>
Reviewed-by: Michael Adam <obnox@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/CMakeLists.txt | 1 | ||||
-rw-r--r-- | tests/test_tcp_dup2.c | 50 |
2 files changed, 51 insertions, 0 deletions
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index aecf6b8..9b5c4bf 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -21,6 +21,7 @@ target_link_libraries(${TORTURE_LIBRARY} set(SWRAP_TESTS test_ioctl test_tcp_listen + test_tcp_dup2 test_echo_tcp_socket test_echo_tcp_connect test_echo_tcp_bind diff --git a/tests/test_tcp_dup2.c b/tests/test_tcp_dup2.c new file mode 100644 index 0000000..fd6adc2 --- /dev/null +++ b/tests/test_tcp_dup2.c @@ -0,0 +1,50 @@ +#include "torture.h" + +#include <cmocka.h> +#include <unistd.h> + +static int setup(void **state) +{ + torture_setup_socket_dir(state); + + return 0; +} + +static int teardown(void **state) +{ + torture_teardown_socket_dir(state); + + return 0; +} + +static void test_dup2_existing_open_fd(void **state) +{ + int s, dup_s; + + (void) state; /* unused */ + + s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); + assert_int_not_equal(s, -1); + + /* + * Here we try to duplicate the existing socket fd to itself + * and as per man page for dup2() it must return the already + * open fd without any failure. + */ + dup_s = dup2(s, s); + assert_int_equal(dup_s, s); + + close(s); +} + +int main(void) { + int rc; + + const struct CMUnitTest tcp_dup2_tests[] = { + cmocka_unit_test(test_dup2_existing_open_fd), + }; + + rc = cmocka_run_group_tests(tcp_dup2_tests, setup, teardown); + + return rc; +} |