summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorAnoop C S <anoopcs@redhat.com>2016-08-22 19:37:47 +0530
committerAndreas Schneider <asn@samba.org>2016-08-23 16:27:58 +0200
commit17cfdc6a6568f0dbc34d863ad2d80acaed15a6ad (patch)
treed2aa9539fbb17d7c89e32a96799ff482663af972 /tests
parent04dacf2d2e764eb9fd0791642893b4e1bc199ef0 (diff)
downloadsocket_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.txt1
-rw-r--r--tests/test_tcp_dup2.c50
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;
+}