diff options
author | Andreas Schneider <asn@samba.org> | 2014-05-27 20:53:51 +0200 |
---|---|---|
committer | Michael Adam <obnox@samba.org> | 2014-05-31 12:30:45 +0200 |
commit | 37b472d7972f0d18bd343137d4991f5e091a2ed7 (patch) | |
tree | b9bd27d5fea7a6283b9e26bac6887c38dc9d2352 /tests | |
parent | bdbbf3853c644da05e1fd74c523380a846394cec (diff) | |
download | socket_wrapper-37b472d7972f0d18bd343137d4991f5e091a2ed7.tar.gz socket_wrapper-37b472d7972f0d18bd343137d4991f5e091a2ed7.tar.xz socket_wrapper-37b472d7972f0d18bd343137d4991f5e091a2ed7.zip |
tests: Add test that getsockname is correct after socket().
Signed-off-by: Andreas Schneider <asn@samba.org>
Reviewed-by: Michael Adam <obnox@samba.org>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/CMakeLists.txt | 1 | ||||
-rw-r--r-- | tests/test_echo_tcp_socket.c | 69 |
2 files changed, 70 insertions, 0 deletions
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 287539b..6a5f978 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -20,6 +20,7 @@ target_link_libraries(${TORTURE_LIBRARY} set(SWRAP_TESTS test_ioctl + test_echo_tcp_socket test_echo_tcp_connect test_echo_tcp_socket_options test_echo_tcp_write_read diff --git a/tests/test_echo_tcp_socket.c b/tests/test_echo_tcp_socket.c new file mode 100644 index 0000000..04f15aa --- /dev/null +++ b/tests/test_echo_tcp_socket.c @@ -0,0 +1,69 @@ +#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 test_socket_getsockname(void **state) +{ + struct sockaddr_in sin; + socklen_t slen = sizeof(struct sockaddr_in); + int rc; + int s; + + (void) state; /* unused */ + + s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); + assert_int_not_equal(s, -1); + + ZERO_STRUCT(sin); + rc = getsockname(s, (struct sockaddr *)&sin, &slen); + assert_return_code(rc, errno); + assert_int_equal(sin.sin_family, AF_INET); +} + +#ifdef HAVE_IPV6 +static void test_socket_getsockname6(void **state) +{ + struct sockaddr_in6 sin6; + socklen_t slen = sizeof(struct sockaddr_in6); + int rc; + int s; + + (void) state; /* unused */ + + s = socket(AF_INET6, SOCK_STREAM, IPPROTO_TCP); + assert_int_not_equal(s, -1); + + ZERO_STRUCT(sin6); + rc = getsockname(s, (struct sockaddr *)&sin6, &slen); + assert_return_code(rc, errno); + assert_int_equal(sin6.sin6_family, AF_INET6); +} +#endif + +int main(void) { + int rc; + + const UnitTest tests[] = { + unit_test(test_socket_getsockname), +#ifdef HAVE_IPV6 + unit_test(test_socket_getsockname6), +#endif + }; + + rc = run_tests(tests); + + return rc; +} |