aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPau Espin Pedrol <pespin@sysmocom.de>2020-08-25 13:56:43 +0200
committerPau Espin Pedrol <pespin@sysmocom.de>2020-08-25 14:22:03 +0200
commit16b076cd15cdf5e3512656ee2e1bc55fa6afad53 (patch)
treef58f91a9126db97139288a6e87b641fd01874fd5
parent3119d476034eff13ead05d8320244edc0ad089f2 (diff)
tests: Split SCTP tests to its own file and run them conditionally
Some systmes (like the ones available in OBS) don't support creating SCTP sockets, so we need to skip those tests there. Change-Id: I1d16280674625877ec22cc60cbc5deb67868a656
-rw-r--r--configure.ac4
-rwxr-xr-xdebian/rules2
-rw-r--r--tests/Makefile.am8
-rw-r--r--tests/socket/socket_sctp_test.c233
-rw-r--r--tests/socket/socket_sctp_test.err8
-rw-r--r--tests/socket/socket_sctp_test.ok24
-rw-r--r--tests/socket/socket_test.c175
-rw-r--r--tests/socket/socket_test.err8
-rw-r--r--tests/socket/socket_test.ok24
-rw-r--r--tests/testsuite.at9
10 files changed, 287 insertions, 208 deletions
diff --git a/configure.ac b/configure.ac
index fbdcb579..b07a3bd6 100644
--- a/configure.ac
+++ b/configure.ac
@@ -197,6 +197,10 @@ AS_IF([test "x$ENABLE_LIBSCTP" = "xyes"], [
LIBS=$old_LIBS
])
+AC_ARG_ENABLE([sctp-tests], [AS_HELP_STRING([--disable-sctp-tests], [Do not run socket tests requiring system SCTP support])],
+ [ENABLE_SCTP_TESTS=$enableval], [ENABLE_SCTP_TESTS="yes"])
+AM_CONDITIONAL(ENABLE_SCTP_TESTS, test x"$ENABLE_SCTP_TESTS" = x"yes")
+
AC_ARG_ENABLE(plugin,
[AS_HELP_STRING(
[--disable-plugin],
diff --git a/debian/rules b/debian/rules
index a9d961c7..afff17fa 100755
--- a/debian/rules
+++ b/debian/rules
@@ -26,7 +26,7 @@ override_dh_auto_test:
dh_auto_test || (find . -name testsuite.log -exec cat {} \; ; false)
override_dh_auto_configure:
- dh_auto_configure -- --enable-static
+ dh_auto_configure -- --enable-static --disable-sctp-tests
override_dh_clean:
dh_clean
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 2a364d57..56d0ac50 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -358,6 +358,14 @@ EXTRA_DIST = testsuite.at $(srcdir)/package.m4 $(TESTSUITE) \
i460_mux/i460_mux_test.ok \
$(NULL)
+if ENABLE_LIBSCTP
+if ENABLE_SCTP_TESTS
+EXTRA_DIST += socket/socket_sctp_test.ok socket/socket_sctp_test.err
+check_PROGRAMS += socket/socket_sctp_test
+socket_socket_sctp_test_SOURCES = socket/socket_sctp_test.c
+endif
+endif
+
DISTCLEANFILES = atconfig atlocal conv/gsm0503_test_vectors.c
BUILT_SOURCES = conv/gsm0503_test_vectors.c
noinst_HEADERS = conv/conv.h
diff --git a/tests/socket/socket_sctp_test.c b/tests/socket/socket_sctp_test.c
new file mode 100644
index 00000000..e70b8be5
--- /dev/null
+++ b/tests/socket/socket_sctp_test.c
@@ -0,0 +1,233 @@
+/*
+ * (C) 2017 by Harald Welte <laforge@gnumonks.org>
+ * All Rights Reserved
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <fcntl.h>
+#include <inttypes.h>
+
+#include <sys/socket.h>
+#include <arpa/inet.h>
+#include <netinet/in.h>
+
+#include <osmocom/core/application.h>
+#include <osmocom/core/utils.h>
+#include <osmocom/core/socket.h>
+#include <osmocom/core/logging.h>
+#include <osmocom/core/bits.h>
+
+#include "../config.h"
+
+void *ctx = NULL;
+
+#ifdef HAVE_LIBSCTP
+static uint16_t sock_get_local_port(int fd, bool is_v6) {
+ struct sockaddr_storage sa;
+ struct sockaddr_in *sin = (struct sockaddr_in *)&sa;
+ struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)&sa;
+ socklen_t len = sizeof(sa);
+ int local_port;
+
+ OSMO_ASSERT(getsockname(fd, (struct sockaddr*)&sa, &len) == 0);
+ if(!is_v6)
+ local_port = osmo_load16be(&sin->sin_port);
+ else
+ local_port = osmo_load16be(&sin6->sin6_port);
+ //printf("Checking osmo_sock_init2_multiaddr() port: %" PRIu16 "\n", listen_port_v4);
+ return local_port;
+}
+
+/* Test API osmo_sock_init2_multiaddr with 1 local/remote address */
+static int test_sockinit2_multiaddr(const char **addrv4_loc, const char **addrv6_loc,
+ const char **addrv4_rem, const char **addrv6_rem,
+ size_t addrv4_size, size_t addrv6_size)
+{
+ int fd, rc;
+ int listen_fd_v4, listen_fd_v6;
+ int listen_port_v4, listen_port_v6;
+
+ printf("Checking osmo_sock_init2_multiaddr() with bind to a random local SCTP IPv4 port\n");
+
+ listen_fd_v4 = osmo_sock_init2_multiaddr(AF_INET, SOCK_STREAM, IPPROTO_SCTP,
+ addrv4_loc, addrv4_size, 0,
+ NULL, 0, 0, OSMO_SOCK_F_BIND);
+ OSMO_ASSERT(listen_fd_v4 >= 0);
+ /* expect it to be blocking */
+ rc = fcntl(listen_fd_v4, F_GETFL);
+ OSMO_ASSERT(!(rc & O_NONBLOCK));
+
+ listen_port_v4 = sock_get_local_port(listen_fd_v4, false);
+
+ printf("Checking osmo_sock_init2_multiaddr() with bind to a random local SCTP IPv6 port\n");
+
+ listen_fd_v6 = osmo_sock_init2_multiaddr(AF_INET6, SOCK_STREAM, IPPROTO_SCTP,
+ addrv6_loc, addrv6_size, 0,
+ NULL, 0, 0, OSMO_SOCK_F_BIND);
+ OSMO_ASSERT(listen_fd_v6 >= 0);
+ /* expect it to be blocking */
+ rc = fcntl(listen_fd_v6, F_GETFL);
+ OSMO_ASSERT(!(rc & O_NONBLOCK));
+
+ listen_port_v6 = sock_get_local_port(listen_fd_v6, true);
+
+ printf("Checking osmo_sock_init2_multiaddr() for OSMO_SOCK_F_NONBLOCK\n");
+ fd = osmo_sock_init2_multiaddr(AF_INET, SOCK_STREAM, IPPROTO_SCTP,
+ addrv4_loc, addrv4_size, 0,
+ NULL, 0, 0, OSMO_SOCK_F_BIND|OSMO_SOCK_F_NONBLOCK);
+ OSMO_ASSERT(fd >= 0);
+ /* expect it to be blocking */
+ rc = fcntl(fd, F_GETFL);
+ OSMO_ASSERT(rc & O_NONBLOCK);
+ close(fd);
+
+ printf("Checking osmo_sock_init2_multiaddr() for invalid flags\n");
+ fd = osmo_sock_init2_multiaddr(AF_INET, SOCK_STREAM, IPPROTO_SCTP,
+ addrv4_loc, addrv4_size, 0,
+ NULL, 0, 0, 0);
+ OSMO_ASSERT(fd < 0);
+
+ printf("Checking osmo_sock_init2_multiaddr() for combined BIND + CONNECT\n");
+ fd = osmo_sock_init2_multiaddr(AF_INET, SOCK_STREAM, IPPROTO_SCTP,
+ addrv4_rem, addrv4_size, 0,
+ addrv4_rem, addrv4_size, listen_port_v4,
+ OSMO_SOCK_F_BIND|OSMO_SOCK_F_CONNECT);
+ OSMO_ASSERT(fd >= 0);
+
+ printf("Checking osmo_sock_init2_multiaddr(AF_UNSPEC) must fail on mixed IPv4 & IPv6\n");
+ fd = osmo_sock_init2_multiaddr(AF_UNSPEC, SOCK_STREAM, IPPROTO_SCTP,
+ addrv4_rem, addrv4_size, 0,
+ addrv6_rem, addrv6_size, listen_port_v6,
+ OSMO_SOCK_F_BIND|OSMO_SOCK_F_CONNECT);
+ OSMO_ASSERT(fd < 0);
+
+ printf("Checking osmo_sock_init2_multiaddr(AF_UNSPEC) must fail on mixed IPv6 & IPv4\n");
+ fd = osmo_sock_init2_multiaddr(AF_UNSPEC, SOCK_STREAM, IPPROTO_SCTP,
+ addrv6_rem, addrv6_size, 0,
+ addrv4_rem, addrv4_size, listen_port_v4,
+ OSMO_SOCK_F_BIND|OSMO_SOCK_F_CONNECT);
+ OSMO_ASSERT(fd < 0);
+
+ printf("Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND + CONNECT on IPv4\n");
+ fd = osmo_sock_init2_multiaddr(AF_UNSPEC, SOCK_STREAM, IPPROTO_SCTP,
+ addrv4_rem, addrv4_size, 0,
+ addrv4_rem, addrv4_size, listen_port_v4,
+ OSMO_SOCK_F_BIND|OSMO_SOCK_F_CONNECT);
+ OSMO_ASSERT(fd >= 0);
+
+ printf("Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND + CONNECT on IPv6\n");
+ fd = osmo_sock_init2_multiaddr(AF_UNSPEC, SOCK_STREAM, IPPROTO_SCTP,
+ addrv6_rem, addrv6_size, 0,
+ addrv6_rem, addrv6_size, listen_port_v6,
+ OSMO_SOCK_F_BIND|OSMO_SOCK_F_CONNECT);
+ OSMO_ASSERT(fd >= 0);
+
+ close(listen_fd_v4);
+ close(listen_fd_v6);
+ printf("Done\n");
+ return 0;
+}
+
+/* Test API osmo_sock_init2_multiaddr with 1 local/remote address */
+static int test_sockinit2_multiaddr_simple(void)
+{
+ const char *addrv4_loc[] = { "0.0.0.0" };
+ const char *addrv6_loc[] = { "::" };
+ const char *addrv4_rem[] = { "127.0.0.1" };
+ const char *addrv6_rem[] = { "::1" };
+
+ return test_sockinit2_multiaddr(addrv4_loc, addrv6_loc,
+ addrv4_rem, addrv6_rem, 1, 1);
+}
+
+/* Test API osmo_sock_init2_multiaddr with several local/remote address */
+static int test_sockinit2_multiaddr_several(void)
+{
+ const char *addrv4_localhost[] = { "127.0.0.1", "127.0.0.2" };
+ const char *addrv6_localhost[] = { "::1" };
+
+ return test_sockinit2_multiaddr(addrv4_localhost, addrv6_localhost,
+ addrv4_localhost, addrv6_localhost, 2, 1);
+}
+
+/* Test API osmo_sock_init2_multiaddr with several local/remote address, using both ipv4+v6 */
+static int test_sockinit2_multiaddr_mixed(void)
+{
+ const char *addr_localhost[] = { "127.0.0.1", "127.0.0.2", "::1" };
+ size_t addr_size = ARRAY_SIZE(addr_localhost);
+
+ int listen_fd, listen_port, fd;
+
+ printf("Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND on AF_INET IPv4+v6 fails\n");
+ listen_fd = osmo_sock_init2_multiaddr(AF_INET, SOCK_STREAM, IPPROTO_SCTP,
+ addr_localhost, addr_size, 0,
+ NULL, 0, 0, OSMO_SOCK_F_BIND);
+ OSMO_ASSERT(listen_fd < 0);
+
+ printf("Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND on AF_INET6 IPv4+v6 fails\n");
+ listen_fd = osmo_sock_init2_multiaddr(AF_INET6, SOCK_STREAM, IPPROTO_SCTP,
+ addr_localhost, addr_size, 0,
+ NULL, 0, 0, OSMO_SOCK_F_BIND);
+ OSMO_ASSERT(listen_fd < 0);
+
+ printf("Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND on AF_UNSPEC IPv4+v6 succeeds\n");
+ listen_fd = osmo_sock_init2_multiaddr(AF_UNSPEC, SOCK_STREAM, IPPROTO_SCTP,
+ addr_localhost, addr_size, 0,
+ NULL, 0, 0, OSMO_SOCK_F_BIND);
+ OSMO_ASSERT(listen_fd >= 0);
+
+ listen_port = sock_get_local_port(listen_fd, true);
+
+ printf("Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND + CONNECT on IPv4\n");
+ fd = osmo_sock_init2_multiaddr(AF_UNSPEC, SOCK_STREAM, IPPROTO_SCTP,
+ addr_localhost, addr_size, 0,
+ addr_localhost, addr_size, listen_port,
+ OSMO_SOCK_F_BIND|OSMO_SOCK_F_CONNECT);
+ OSMO_ASSERT(fd >= 0);
+ close(fd);
+
+ close(listen_fd);
+ return 0;
+}
+#endif /* ifdef HAVE_LIBSCTP */
+
+const struct log_info_cat default_categories[] = {
+};
+
+static struct log_info info = {
+ .cat = default_categories,
+ .num_cat = ARRAY_SIZE(default_categories),
+};
+
+int main(int argc, char *argv[])
+{
+ ctx = talloc_named_const(NULL, 0, "socket_test_sctp");
+ osmo_init_logging2(ctx, &info);
+ log_set_use_color(osmo_stderr_target, 0);
+ log_set_print_filename(osmo_stderr_target, 0);
+#ifdef HAVE_LIBSCTP
+ test_sockinit2_multiaddr_simple();
+ test_sockinit2_multiaddr_several();
+ test_sockinit2_multiaddr_mixed();
+#endif /* ifdef HAVE_LIBSCTP */
+
+ return EXIT_SUCCESS;
+}
diff --git a/tests/socket/socket_sctp_test.err b/tests/socket/socket_sctp_test.err
new file mode 100644
index 00000000..996d0922
--- /dev/null
+++ b/tests/socket/socket_sctp_test.err
@@ -0,0 +1,8 @@
+invalid: you have to specify either BIND or CONNECT flags
+Invalid v4 vs v6 in local vs remote addresses
+Invalid v4 vs v6 in local vs remote addresses
+invalid: you have to specify either BIND or CONNECT flags
+Invalid v4 vs v6 in local vs remote addresses
+Invalid v4 vs v6 in local vs remote addresses
+getaddrinfo(::1, 0) failed: Address family for hostname not supported
+getaddrinfo(127.0.0.1, 0) failed: Address family for hostname not supported
diff --git a/tests/socket/socket_sctp_test.ok b/tests/socket/socket_sctp_test.ok
new file mode 100644
index 00000000..7608e889
--- /dev/null
+++ b/tests/socket/socket_sctp_test.ok
@@ -0,0 +1,24 @@
+Checking osmo_sock_init2_multiaddr() with bind to a random local SCTP IPv4 port
+Checking osmo_sock_init2_multiaddr() with bind to a random local SCTP IPv6 port
+Checking osmo_sock_init2_multiaddr() for OSMO_SOCK_F_NONBLOCK
+Checking osmo_sock_init2_multiaddr() for invalid flags
+Checking osmo_sock_init2_multiaddr() for combined BIND + CONNECT
+Checking osmo_sock_init2_multiaddr(AF_UNSPEC) must fail on mixed IPv4 & IPv6
+Checking osmo_sock_init2_multiaddr(AF_UNSPEC) must fail on mixed IPv6 & IPv4
+Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND + CONNECT on IPv4
+Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND + CONNECT on IPv6
+Done
+Checking osmo_sock_init2_multiaddr() with bind to a random local SCTP IPv4 port
+Checking osmo_sock_init2_multiaddr() with bind to a random local SCTP IPv6 port
+Checking osmo_sock_init2_multiaddr() for OSMO_SOCK_F_NONBLOCK
+Checking osmo_sock_init2_multiaddr() for invalid flags
+Checking osmo_sock_init2_multiaddr() for combined BIND + CONNECT
+Checking osmo_sock_init2_multiaddr(AF_UNSPEC) must fail on mixed IPv4 & IPv6
+Checking osmo_sock_init2_multiaddr(AF_UNSPEC) must fail on mixed IPv6 & IPv4
+Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND + CONNECT on IPv4
+Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND + CONNECT on IPv6
+Done
+Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND on AF_INET IPv4+v6 fails
+Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND on AF_INET6 IPv4+v6 fails
+Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND on AF_UNSPEC IPv4+v6 succeeds
+Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND + CONNECT on IPv4
diff --git a/tests/socket/socket_test.c b/tests/socket/socket_test.c
index 1d4253c4..a2e103c9 100644
--- a/tests/socket/socket_test.c
+++ b/tests/socket/socket_test.c
@@ -148,176 +148,6 @@ static int test_sockinit2(void)
return 0;
}
-#ifdef HAVE_LIBSCTP
-static uint16_t sock_get_local_port(int fd, bool is_v6) {
- struct sockaddr_storage sa;
- struct sockaddr_in *sin = (struct sockaddr_in *)&sa;
- struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *)&sa;
- socklen_t len = sizeof(sa);
- int local_port;
-
- OSMO_ASSERT(getsockname(fd, (struct sockaddr*)&sa, &len) == 0);
- if(!is_v6)
- local_port = osmo_load16be(&sin->sin_port);
- else
- local_port = osmo_load16be(&sin6->sin6_port);
- //printf("Checking osmo_sock_init2_multiaddr() port: %" PRIu16 "\n", listen_port_v4);
- return local_port;
-}
-
-/* Test API osmo_sock_init2_multiaddr with 1 local/remote address */
-static int test_sockinit2_multiaddr(const char **addrv4_loc, const char **addrv6_loc,
- const char **addrv4_rem, const char **addrv6_rem,
- size_t addrv4_size, size_t addrv6_size)
-{
- int fd, rc;
- int listen_fd_v4, listen_fd_v6;
- int listen_port_v4, listen_port_v6;
-
- printf("Checking osmo_sock_init2_multiaddr() with bind to a random local SCTP IPv4 port\n");
-
- listen_fd_v4 = osmo_sock_init2_multiaddr(AF_INET, SOCK_STREAM, IPPROTO_SCTP,
- addrv4_loc, addrv4_size, 0,
- NULL, 0, 0, OSMO_SOCK_F_BIND);
- OSMO_ASSERT(listen_fd_v4 >= 0);
- /* expect it to be blocking */
- rc = fcntl(listen_fd_v4, F_GETFL);
- OSMO_ASSERT(!(rc & O_NONBLOCK));
-
- listen_port_v4 = sock_get_local_port(listen_fd_v4, false);
-
- printf("Checking osmo_sock_init2_multiaddr() with bind to a random local SCTP IPv6 port\n");
-
- listen_fd_v6 = osmo_sock_init2_multiaddr(AF_INET6, SOCK_STREAM, IPPROTO_SCTP,
- addrv6_loc, addrv6_size, 0,
- NULL, 0, 0, OSMO_SOCK_F_BIND);
- OSMO_ASSERT(listen_fd_v6 >= 0);
- /* expect it to be blocking */
- rc = fcntl(listen_fd_v6, F_GETFL);
- OSMO_ASSERT(!(rc & O_NONBLOCK));
-
- listen_port_v6 = sock_get_local_port(listen_fd_v6, true);
-
- printf("Checking osmo_sock_init2_multiaddr() for OSMO_SOCK_F_NONBLOCK\n");
- fd = osmo_sock_init2_multiaddr(AF_INET, SOCK_STREAM, IPPROTO_SCTP,
- addrv4_loc, addrv4_size, 0,
- NULL, 0, 0, OSMO_SOCK_F_BIND|OSMO_SOCK_F_NONBLOCK);
- OSMO_ASSERT(fd >= 0);
- /* expect it to be blocking */
- rc = fcntl(fd, F_GETFL);
- OSMO_ASSERT(rc & O_NONBLOCK);
- close(fd);
-
- printf("Checking osmo_sock_init2_multiaddr() for invalid flags\n");
- fd = osmo_sock_init2_multiaddr(AF_INET, SOCK_STREAM, IPPROTO_SCTP,
- addrv4_loc, addrv4_size, 0,
- NULL, 0, 0, 0);
- OSMO_ASSERT(fd < 0);
-
- printf("Checking osmo_sock_init2_multiaddr() for combined BIND + CONNECT\n");
- fd = osmo_sock_init2_multiaddr(AF_INET, SOCK_STREAM, IPPROTO_SCTP,
- addrv4_rem, addrv4_size, 0,
- addrv4_rem, addrv4_size, listen_port_v4,
- OSMO_SOCK_F_BIND|OSMO_SOCK_F_CONNECT);
- OSMO_ASSERT(fd >= 0);
-
- printf("Checking osmo_sock_init2_multiaddr(AF_UNSPEC) must fail on mixed IPv4 & IPv6\n");
- fd = osmo_sock_init2_multiaddr(AF_UNSPEC, SOCK_STREAM, IPPROTO_SCTP,
- addrv4_rem, addrv4_size, 0,
- addrv6_rem, addrv6_size, listen_port_v6,
- OSMO_SOCK_F_BIND|OSMO_SOCK_F_CONNECT);
- OSMO_ASSERT(fd < 0);
-
- printf("Checking osmo_sock_init2_multiaddr(AF_UNSPEC) must fail on mixed IPv6 & IPv4\n");
- fd = osmo_sock_init2_multiaddr(AF_UNSPEC, SOCK_STREAM, IPPROTO_SCTP,
- addrv6_rem, addrv6_size, 0,
- addrv4_rem, addrv4_size, listen_port_v4,
- OSMO_SOCK_F_BIND|OSMO_SOCK_F_CONNECT);
- OSMO_ASSERT(fd < 0);
-
- printf("Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND + CONNECT on IPv4\n");
- fd = osmo_sock_init2_multiaddr(AF_UNSPEC, SOCK_STREAM, IPPROTO_SCTP,
- addrv4_rem, addrv4_size, 0,
- addrv4_rem, addrv4_size, listen_port_v4,
- OSMO_SOCK_F_BIND|OSMO_SOCK_F_CONNECT);
- OSMO_ASSERT(fd >= 0);
-
- printf("Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND + CONNECT on IPv6\n");
- fd = osmo_sock_init2_multiaddr(AF_UNSPEC, SOCK_STREAM, IPPROTO_SCTP,
- addrv6_rem, addrv6_size, 0,
- addrv6_rem, addrv6_size, listen_port_v6,
- OSMO_SOCK_F_BIND|OSMO_SOCK_F_CONNECT);
- OSMO_ASSERT(fd >= 0);
-
- close(listen_fd_v4);
- close(listen_fd_v6);
- printf("Done\n");
- return 0;
-}
-
-/* Test API osmo_sock_init2_multiaddr with 1 local/remote address */
-static int test_sockinit2_multiaddr_simple(void)
-{
- const char *addrv4_loc[] = { "0.0.0.0" };
- const char *addrv6_loc[] = { "::" };
- const char *addrv4_rem[] = { "127.0.0.1" };
- const char *addrv6_rem[] = { "::1" };
-
- return test_sockinit2_multiaddr(addrv4_loc, addrv6_loc,
- addrv4_rem, addrv6_rem, 1, 1);
-}
-
-/* Test API osmo_sock_init2_multiaddr with several local/remote address */
-static int test_sockinit2_multiaddr_several(void)
-{
- const char *addrv4_localhost[] = { "127.0.0.1", "127.0.0.2" };
- const char *addrv6_localhost[] = { "::1" };
-
- return test_sockinit2_multiaddr(addrv4_localhost, addrv6_localhost,
- addrv4_localhost, addrv6_localhost, 2, 1);
-}
-
-/* Test API osmo_sock_init2_multiaddr with several local/remote address, using both ipv4+v6 */
-static int test_sockinit2_multiaddr_mixed(void)
-{
- const char *addr_localhost[] = { "127.0.0.1", "127.0.0.2", "::1" };
- size_t addr_size = ARRAY_SIZE(addr_localhost);
-
- int listen_fd, listen_port, fd;
-
- printf("Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND on AF_INET IPv4+v6 fails\n");
- listen_fd = osmo_sock_init2_multiaddr(AF_INET, SOCK_STREAM, IPPROTO_SCTP,
- addr_localhost, addr_size, 0,
- NULL, 0, 0, OSMO_SOCK_F_BIND);
- OSMO_ASSERT(listen_fd < 0);
-
- printf("Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND on AF_INET6 IPv4+v6 fails\n");
- listen_fd = osmo_sock_init2_multiaddr(AF_INET6, SOCK_STREAM, IPPROTO_SCTP,
- addr_localhost, addr_size, 0,
- NULL, 0, 0, OSMO_SOCK_F_BIND);
- OSMO_ASSERT(listen_fd < 0);
-
- printf("Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND on AF_UNSPEC IPv4+v6 succeeds\n");
- listen_fd = osmo_sock_init2_multiaddr(AF_UNSPEC, SOCK_STREAM, IPPROTO_SCTP,
- addr_localhost, addr_size, 0,
- NULL, 0, 0, OSMO_SOCK_F_BIND);
- OSMO_ASSERT(listen_fd >= 0);
-
- listen_port = sock_get_local_port(listen_fd, true);
-
- printf("Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND + CONNECT on IPv4\n");
- fd = osmo_sock_init2_multiaddr(AF_UNSPEC, SOCK_STREAM, IPPROTO_SCTP,
- addr_localhost, addr_size, 0,
- addr_localhost, addr_size, listen_port,
- OSMO_SOCK_F_BIND|OSMO_SOCK_F_CONNECT);
- OSMO_ASSERT(fd >= 0);
- close(fd);
-
- close(listen_fd);
- return 0;
-}
-#endif /* ifdef HAVE_LIBSCTP */
-
const struct log_info_cat default_categories[] = {
};
@@ -335,11 +165,6 @@ int main(int argc, char *argv[])
test_sockinit();
test_sockinit2();
-#ifdef HAVE_LIBSCTP
- test_sockinit2_multiaddr_simple();
- test_sockinit2_multiaddr_several();
- test_sockinit2_multiaddr_mixed();
-#endif /* ifdef HAVE_LIBSCTP */
return EXIT_SUCCESS;
}
diff --git a/tests/socket/socket_test.err b/tests/socket/socket_test.err
index e3d3903c..0f0f8da8 100644
--- a/tests/socket/socket_test.err
+++ b/tests/socket/socket_test.err
@@ -2,11 +2,3 @@ invalid: both bind and connect flags set: 0.0.0.0:0
invalid: you have to specify either BIND or CONNECT flags
Unable to find a common protocol (IPv4 or IPv6) for local host: 127.0.0.1 and remote host: ::1.
Unable to find a common protocol (IPv4 or IPv6) for local host: ::1 and remote host: 127.0.0.1.
-invalid: you have to specify either BIND or CONNECT flags
-Invalid v4 vs v6 in local vs remote addresses
-Invalid v4 vs v6 in local vs remote addresses
-invalid: you have to specify either BIND or CONNECT flags
-Invalid v4 vs v6 in local vs remote addresses
-Invalid v4 vs v6 in local vs remote addresses
-getaddrinfo(::1, 0) failed: Address family for hostname not supported
-getaddrinfo(127.0.0.1, 0) failed: Address family for hostname not supported
diff --git a/tests/socket/socket_test.ok b/tests/socket/socket_test.ok
index 959fa84d..4265be8d 100644
--- a/tests/socket/socket_test.ok
+++ b/tests/socket/socket_test.ok
@@ -9,27 +9,3 @@ Checking osmo_sock_init2(AF_UNSPEC) must fail on mixed IPv4 & IPv6
Checking osmo_sock_init2(AF_UNSPEC) must fail on mixed IPv6 & IPv4
Checking osmo_sock_init2(AF_UNSPEC) BIND + CONNECT on IPv4
Checking osmo_sock_init2(AF_UNSPEC) BIND + CONNECT on IPv6
-Checking osmo_sock_init2_multiaddr() with bind to a random local SCTP IPv4 port
-Checking osmo_sock_init2_multiaddr() with bind to a random local SCTP IPv6 port
-Checking osmo_sock_init2_multiaddr() for OSMO_SOCK_F_NONBLOCK
-Checking osmo_sock_init2_multiaddr() for invalid flags
-Checking osmo_sock_init2_multiaddr() for combined BIND + CONNECT
-Checking osmo_sock_init2_multiaddr(AF_UNSPEC) must fail on mixed IPv4 & IPv6
-Checking osmo_sock_init2_multiaddr(AF_UNSPEC) must fail on mixed IPv6 & IPv4
-Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND + CONNECT on IPv4
-Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND + CONNECT on IPv6
-Done
-Checking osmo_sock_init2_multiaddr() with bind to a random local SCTP IPv4 port
-Checking osmo_sock_init2_multiaddr() with bind to a random local SCTP IPv6 port
-Checking osmo_sock_init2_multiaddr() for OSMO_SOCK_F_NONBLOCK
-Checking osmo_sock_init2_multiaddr() for invalid flags
-Checking osmo_sock_init2_multiaddr() for combined BIND + CONNECT
-Checking osmo_sock_init2_multiaddr(AF_UNSPEC) must fail on mixed IPv4 & IPv6
-Checking osmo_sock_init2_multiaddr(AF_UNSPEC) must fail on mixed IPv6 & IPv4
-Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND + CONNECT on IPv4
-Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND + CONNECT on IPv6
-Done
-Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND on AF_INET IPv4+v6 fails
-Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND on AF_INET6 IPv4+v6 fails
-Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND on AF_UNSPEC IPv4+v6 succeeds
-Checking osmo_sock_init2_multiaddr(AF_UNSPEC) BIND + CONNECT on IPv4
diff --git a/tests/testsuite.at b/tests/testsuite.at
index a4c28f9c..1955800e 100644
--- a/tests/testsuite.at
+++ b/tests/testsuite.at
@@ -313,6 +313,15 @@ touch experr
AT_CHECK([$abs_top_builddir/tests/socket/socket_test], [0], [expout], [experr])
AT_CLEANUP
+AT_SETUP([socket_sctp])
+AT_KEYWORDS([socket_sctp])
+AT_SKIP_IF([! test -e $abs_top_builddir/tests/socket/socket_sctp_test])
+cat $abs_srcdir/socket/socket_sctp_test.ok > expout
+cat $abs_srcdir/socket/socket_sctp_test.err > experr
+touch experr
+AT_CHECK([$abs_top_builddir/tests/socket/socket_sctp_test], [0], [expout], [experr])
+AT_CLEANUP
+
AT_SETUP([osmo-auc-gen])
AT_KEYWORDS([osmo-auc-gen])
cat $abs_srcdir/osmo-auc-gen/osmo-auc-gen_test.ok > expout