The branch, master has been updated via 2ee37e0 tests: Add test_echo_udp_send_recv test. via 13c38c4 tests: Use inet_pton() instead of inet_aton(). from bfeac80 tests: Rename testsuite to test_ioctl.
http://gitweb.samba.org/?p=socket_wrapper.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit 2ee37e01cf0a48553a19f2714fb4252d967711df Author: Andreas Schneider <a...@samba.org> Date: Fri Dec 13 14:22:55 2013 +0100 tests: Add test_echo_udp_send_recv test. commit 13c38c4b417540a237f0158c7f6e21f531e071d4 Author: Andreas Schneider <a...@samba.org> Date: Fri Dec 13 14:22:24 2013 +0100 tests: Use inet_pton() instead of inet_aton(). ----------------------------------------------------------------------- Summary of changes: tests/CMakeLists.txt | 2 +- tests/test_echo_udp_send_recv.c | 144 +++++++++++++++++++++++++++++++++ tests/test_echo_udp_sendto_recvfrom.c | 2 +- 3 files changed, 146 insertions(+), 2 deletions(-) create mode 100644 tests/test_echo_udp_send_recv.c Changeset truncated at 500 lines: diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index cce34a2..ec5f238 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -17,7 +17,7 @@ target_link_libraries(${TORTURE_LIBRARY} ${CMOCKA_LIBRARY} ${SWRAP_REQUIRED_LIBRARIES}) -set(SWRAP_TESTS test_ioctl test_echo_udp_sendto_recvfrom) +set(SWRAP_TESTS test_ioctl test_echo_udp_sendto_recvfrom test_echo_udp_send_recv) foreach(_SWRAP_TEST ${SWRAP_TESTS}) add_cmocka_test(${_SWRAP_TEST} ${_SWRAP_TEST}.c ${TORTURE_LIBRARY}) diff --git a/tests/test_echo_udp_send_recv.c b/tests/test_echo_udp_send_recv.c new file mode 100644 index 0000000..c197251 --- /dev/null +++ b/tests/test_echo_udp_send_recv.c @@ -0,0 +1,144 @@ +#include <stdarg.h> +#include <stddef.h> +#include <setjmp.h> +#include <cmocka.h> + +#include "config.h" +#include "torture.h" + +#include <errno.h> +#include <sys/types.h> +#include <sys/socket.h> +#include <netinet/in.h> +#include <arpa/inet.h> +#include <stdlib.h> +#include <stdio.h> +#include <unistd.h> + +static void setup_echo_srv_udp_ipv4(void **state) +{ + torture_setup_echo_srv_udp_ipv4(state); +} + +static void setup_echo_srv_udp_ipv6(void **state) +{ + torture_setup_echo_srv_udp_ipv6(state); +} + +static void teardown(void **state) +{ + torture_teardown_echo_srv(state); +} + +static void test_send_recv_ipv4(void **state) +{ + struct sockaddr_in sin; + socklen_t slen = sizeof(struct sockaddr_in); + ssize_t ret; + int rc; + int i; + int s; + + (void) state; /* unused */ + + s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); + assert_int_not_equal(s, -1); + + ZERO_STRUCT(sin); + sin.sin_family = AF_INET; + sin.sin_port = htons(TORTURE_ECHO_SRV_PORT); + + rc = inet_pton(sin.sin_family, TORTURE_ECHO_SRV_IPV4, &sin.sin_addr); + assert_int_equal(rc, 1); + + rc = connect(s, (struct sockaddr *)&sin, slen); + assert_int_equal(rc, 0); + + for (i = 0; i < 10; i++) { + char send_buf[64] = {0}; + char recv_buf[64] = {0}; + + snprintf(send_buf, sizeof(send_buf), "packet.%d", i); + + ret = send(s, + send_buf, + sizeof(send_buf), + 0); + assert_int_not_equal(ret, -1); + + ret = recv(s, + recv_buf, + sizeof(recv_buf), + 0); + assert_int_not_equal(ret, -1); + + assert_memory_equal(send_buf, recv_buf, sizeof(send_buf)); + } + + close(s); +} + +#ifdef HAVE_IPV6 +static void test_send_recv_ipv6(void **state) +{ + struct sockaddr_in6 sin6; + socklen_t slen = sizeof(struct sockaddr_in6); + ssize_t ret; + int rc; + int i; + int s; + + (void) state; /* unused */ + + s = socket(AF_INET6, SOCK_DGRAM, IPPROTO_UDP); + assert_int_not_equal(s, -1); + + ZERO_STRUCT(sin6); + sin6.sin6_family = AF_INET6; + sin6.sin6_port = htons(TORTURE_ECHO_SRV_PORT); + + rc = inet_pton(AF_INET6, TORTURE_ECHO_SRV_IPV6, &sin6.sin6_addr); + assert_int_equal(rc, 1); + + rc = connect(s, (struct sockaddr *)&sin6, slen); + assert_int_equal(rc, 0); + + for (i = 0; i < 10; i++) { + char send_buf[64] = {0}; + char recv_buf[64] = {0}; + + snprintf(send_buf, sizeof(send_buf), "packet.%d", i); + + ret = send(s, + send_buf, + sizeof(send_buf), + 0); + assert_int_not_equal(ret, -1); + + ret = recv(s, + recv_buf, + sizeof(recv_buf), + 0); + assert_int_not_equal(ret, -1); + + assert_memory_equal(send_buf, recv_buf, sizeof(send_buf)); + } + + close(s); +} +#endif + +int main(void) { + int rc; + + const UnitTest tests[] = { + unit_test_setup_teardown(test_send_recv_ipv4, setup_echo_srv_udp_ipv4, teardown), +#ifdef HAVE_IPV6 + unit_test_setup_teardown(test_send_recv_ipv6, setup_echo_srv_udp_ipv6, teardown), +#endif + }; + + rc = run_tests(tests); + + return rc; +} diff --git a/tests/test_echo_udp_sendto_recvfrom.c b/tests/test_echo_udp_sendto_recvfrom.c index 4852766..f68cef9 100644 --- a/tests/test_echo_udp_sendto_recvfrom.c +++ b/tests/test_echo_udp_sendto_recvfrom.c @@ -50,7 +50,7 @@ static void test_sendto_recvfrom_ipv4(void **state) sin.sin_family = AF_INET; sin.sin_port = htons(TORTURE_ECHO_SRV_PORT); - rc = inet_aton(TORTURE_ECHO_SRV_IPV4, &sin.sin_addr); + rc = inet_pton(sin.sin_family, TORTURE_ECHO_SRV_IPV4, &sin.sin_addr); assert_int_equal(rc, 1); for (i = 0; i < 10; i++) { -- Socket Wrapper Repository