]> git.samba.org - socket_wrapper.git/commitdiff
tests: Add tests for bindresvport().
authorAndreas Schneider <asn@samba.org>
Wed, 28 May 2014 07:46:40 +0000 (09:46 +0200)
committerMichael Adam <obnox@samba.org>
Sat, 31 May 2014 10:32:35 +0000 (12:32 +0200)
Signed-off-by: Andreas Schneider <asn@samba.org>
Reviewed-by: Michael Adam <obnox@samba.org>
tests/test_echo_tcp_bind.c

index 6f811dc5afe84a9b6049311b928234029cf0df1c..b3f265641a45b6210e3203c6bb2ee2c2b9f8b9df 100644 (file)
@@ -63,6 +63,66 @@ static void test_bind_ipv4(void **state)
        close(s);
 }
 
+static void test_bindresvport_ipv4(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_return_code(s, errno);
+
+       ZERO_STRUCT(sin);
+       sin.sin_family = AF_INET;
+
+       rc = inet_pton(AF_INET, "127.0.0.20", &sin.sin_addr);
+       assert_int_equal(rc, 1);
+
+       rc = bindresvport(s, &sin);
+       assert_return_code(rc, errno);
+
+       ZERO_STRUCT(sin);
+       sin.sin_family = AF_INET;
+       sin.sin_port = htons(torture_server_port());
+       rc = inet_pton(AF_INET, torture_server_address(AF_INET), &sin.sin_addr);
+       assert_int_equal(rc, 1);
+
+       rc = connect(s, (struct sockaddr *)&sin, slen);
+       assert_return_code(rc, errno);
+
+       close(s);
+}
+
+static void test_bindresvport_ipv4_null(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_return_code(s, errno);
+
+       rc = bindresvport(s, NULL);
+       assert_return_code(rc, errno);
+
+       ZERO_STRUCT(sin);
+       sin.sin_family = AF_INET;
+       sin.sin_port = htons(torture_server_port());
+       rc = inet_pton(AF_INET, torture_server_address(AF_INET), &sin.sin_addr);
+       assert_int_equal(rc, 1);
+
+       rc = connect(s, (struct sockaddr *)&sin, slen);
+       assert_return_code(rc, errno);
+
+       close(s);
+}
+
 #ifdef HAVE_IPV6
 static void test_bind_on_ipv6_sock(void **state)
 {
@@ -88,6 +148,47 @@ static void test_bind_on_ipv6_sock(void **state)
 
        close(s);
 }
+
+static void test_bindresvport_on_ipv6_sock(void **state)
+{
+       struct sockaddr_in sin;
+       int rc;
+       int s;
+
+       (void) state; /* unused */
+
+       s = socket(AF_INET6, SOCK_STREAM, IPPROTO_TCP);
+       assert_return_code(s, errno);
+
+       ZERO_STRUCT(sin);
+       sin.sin_family = AF_INET;
+
+       rc = inet_pton(AF_INET, "127.0.0.20", &sin.sin_addr);
+       assert_int_equal(rc, 1);
+
+       rc = bindresvport(s, &sin);
+       assert_int_equal(rc, -1);
+       assert_int_equal(errno, EINVAL);
+
+       close(s);
+}
+
+static void test_bindresvport_on_ipv6_sock_null(void **state)
+{
+       int rc;
+       int s;
+
+       (void) state; /* unused */
+
+       s = socket(AF_INET6, SOCK_STREAM, IPPROTO_TCP);
+       assert_return_code(s, errno);
+
+       rc = bindresvport(s, NULL);
+       assert_return_code(rc, errno);
+
+       close(s);
+}
+
 #endif /* HAVE_IPV6 */
 
 int main(void) {
@@ -97,10 +198,22 @@ int main(void) {
                unit_test_setup_teardown(test_bind_ipv4,
                                         setup_echo_srv_tcp_ipv4,
                                         teardown),
+               unit_test_setup_teardown(test_bindresvport_ipv4,
+                                        setup_echo_srv_tcp_ipv4,
+                                        teardown),
+               unit_test_setup_teardown(test_bindresvport_ipv4_null,
+                                        setup_echo_srv_tcp_ipv4,
+                                        teardown),
 #ifdef HAVE_IPV6
                unit_test_setup_teardown(test_bind_on_ipv6_sock,
                                         setup_echo_srv_tcp_ipv6,
                                         teardown),
+               unit_test_setup_teardown(test_bindresvport_on_ipv6_sock,
+                                        setup_echo_srv_tcp_ipv6,
+                                        teardown),
+               unit_test_setup_teardown(test_bindresvport_on_ipv6_sock_null,
+                                        setup_echo_srv_tcp_ipv6,
+                                        teardown),
 #endif /* HAVE_IPV6 */
        };