You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
187 lines
5.9 KiB
187 lines
5.9 KiB
7 years ago
|
From 49ef73f7193242eac07de27c2e853d9e805162ec Mon Sep 17 00:00:00 2001
|
||
|
From: Paul Howarth <paul@city-fan.org>
|
||
|
Date: Wed, 3 May 2017 11:57:23 +0100
|
||
|
Subject: [PATCH] Add --enable-tests=nonetwork option
|
||
|
|
||
|
This disables API tests that involve resolving/connecting to external
|
||
|
network services such as Google, which may not be possible in some
|
||
|
build environments.
|
||
|
|
||
|
Tested using systemd-nspawn --private-network
|
||
|
---
|
||
|
config.h.in | 3 +++
|
||
|
configure.in | 5 ++++-
|
||
|
tests/api/inet.c | 6 ++++++
|
||
|
tests/api/netaddr.c | 6 ++++++
|
||
|
4 files changed, 19 insertions(+), 1 deletion(-)
|
||
|
|
||
|
diff --git a/config.h.in b/config.h.in
|
||
|
index a38734a..229c9db 100644
|
||
|
--- a/config.h.in
|
||
|
+++ b/config.h.in
|
||
|
@@ -1068,6 +1068,9 @@
|
||
|
/* Define if ncursesw support, if available, should be used. */
|
||
|
#undef PR_USE_NCURSESW
|
||
|
|
||
|
+/* Define if non-local network tests are enabled. */
|
||
|
+#undef PR_USE_NETWORK_TESTS
|
||
|
+
|
||
|
/* Define if using nonblocking open of log files. */
|
||
|
#undef PR_USE_NONBLOCKING_LOG_OPEN
|
||
|
|
||
|
diff --git a/configure.in b/configure.in
|
||
|
index 1e39c37..dba39ba 100644
|
||
|
--- a/configure.in
|
||
|
+++ b/configure.in
|
||
|
@@ -985,7 +985,7 @@ AC_ARG_ENABLE(tests,
|
||
|
[--enable-tests],
|
||
|
[enable unit tests (default=no)])
|
||
|
],
|
||
|
- [ if test x"$enableval" = x"yes" ; then
|
||
|
+ [ if test x"$enableval" = x"yes" || test x"$enableval" = x"nonetwork" ; then
|
||
|
AC_CHECK_HEADERS(check.h)
|
||
|
|
||
|
AC_CHECK_LIB(check, tcase_create,
|
||
|
@@ -997,6 +997,9 @@ AC_ARG_ENABLE(tests,
|
||
|
AC_MSG_ERROR([libcheck support, required for tests, not present -- aborting])
|
||
|
]
|
||
|
)
|
||
|
+ if test x"$enableval" != x"nonetwork" ; then
|
||
|
+ AC_DEFINE(PR_USE_NETWORK_TESTS, 1, [Define if non-local network tests are enabled.])
|
||
|
+ fi
|
||
|
fi
|
||
|
])
|
||
|
|
||
|
diff -up a/configure b/configure
|
||
|
--- a/configure
|
||
|
+++ b/configure
|
||
|
@@ -20423,7 +20423,7 @@ fi
|
||
|
ENABLE_TESTS="\"\""
|
||
|
# Check whether --enable-tests was given.
|
||
|
if test "${enable_tests+set}" = set; then
|
||
|
- enableval=$enable_tests; if test x"$enableval" = x"yes" ; then
|
||
|
+ enableval=$enable_tests; if test x"$enableval" = x"yes" || test x"$enableval" = x"nonetwork" ; then
|
||
|
|
||
|
for ac_header in check.h
|
||
|
do
|
||
|
@@ -20648,6 +20648,13 @@ echo "$as_me: error: libcheck support, r
|
||
|
|
||
|
fi
|
||
|
|
||
|
+ if test x"$enableval" != x"nonetwork" ; then
|
||
|
+
|
||
|
+cat >>confdefs.h <<\_ACEOF
|
||
|
+#define PR_USE_NETWORK_TESTS 1
|
||
|
+_ACEOF
|
||
|
+
|
||
|
+ fi
|
||
|
fi
|
||
|
|
||
|
fi
|
||
|
diff --git a/tests/api/inet.c b/tests/api/inet.c
|
||
|
index 03c4781..c111629 100644
|
||
|
--- a/tests/api/inet.c
|
||
|
+++ b/tests/api/inet.c
|
||
|
@@ -522,6 +522,7 @@ START_TEST (inet_connect_ipv4_test) {
|
||
|
fail_unless(errno == ECONNREFUSED, "Expected ECONNREFUSED (%d), got %s (%d)",
|
||
|
ECONNREFUSED, strerror(errno), errno);
|
||
|
|
||
|
+#if defined(PR_USE_NETWORK_TESTS)
|
||
|
/* Try connecting to Google's DNS server. */
|
||
|
|
||
|
addr = pr_netaddr_get_addr(p, "8.8.8.8", NULL);
|
||
|
@@ -551,6 +552,7 @@ START_TEST (inet_connect_ipv4_test) {
|
||
|
fail_unless(errno == EISCONN, "Expected EISCONN (%d), got %s (%d)",
|
||
|
EISCONN, strerror(errno), errno);
|
||
|
pr_inet_close(p, conn);
|
||
|
+#endif
|
||
|
}
|
||
|
END_TEST
|
||
|
|
||
|
@@ -579,6 +581,7 @@ START_TEST (inet_connect_ipv6_test) {
|
||
|
"Expected ECONNREFUSED (%d), ENETUNREACH (%d), or EADDRNOTAVAIL (%d), got %s (%d)",
|
||
|
ECONNREFUSED, ENETUNREACH, EADDRNOTAVAIL, strerror(errno), errno);
|
||
|
|
||
|
+#if defined(PR_USE_NETWORK_TESTS)
|
||
|
/* Try connecting to Google's DNS server. */
|
||
|
|
||
|
addr = pr_netaddr_get_addr(p, "2001:4860:4860::8888", NULL);
|
||
|
@@ -614,6 +617,7 @@ START_TEST (inet_connect_ipv6_test) {
|
||
|
fail_unless(errno == EISCONN || errno == EHOSTUNREACH || errno == ENETUNREACH || errno == EADDRNOTAVAIL,
|
||
|
"Expected EISCONN (%d) or EHOSTUNREACH (%d) or ENETUNREACH (%d) or EADDRNOTAVAIL (%d), got %s (%d)", EISCONN, EHOSTUNREACH, ENETUNREACH, EADDRNOTAVAIL, strerror(errno), errno);
|
||
|
pr_inet_close(p, conn);
|
||
|
+#endif
|
||
|
|
||
|
pr_inet_set_default_family(p, AF_INET);
|
||
|
|
||
|
@@ -649,6 +653,7 @@ START_TEST (inet_connect_nowait_test) {
|
||
|
res = pr_inet_connect_nowait(p, conn, addr, 180);
|
||
|
fail_unless(res != -1, "Connected to 127.0.0.1#180 unexpectedly");
|
||
|
|
||
|
+#if defined(PR_USE_NETWORK_TESTS)
|
||
|
/* Try connecting to Google's DNS server. */
|
||
|
|
||
|
addr = pr_netaddr_get_addr(p, "8.8.8.8", NULL);
|
||
|
@@ -664,6 +669,7 @@ START_TEST (inet_connect_nowait_test) {
|
||
|
}
|
||
|
|
||
|
pr_inet_close(p, conn);
|
||
|
+#endif
|
||
|
|
||
|
/* Restore the default family to AF_INET, for other tests. */
|
||
|
pr_inet_set_default_family(p, AF_INET);
|
||
|
diff --git a/tests/api/netaddr.c b/tests/api/netaddr.c
|
||
|
index 80d3327..124dc39 100644
|
||
|
--- a/tests/api/netaddr.c
|
||
|
+++ b/tests/api/netaddr.c
|
||
|
@@ -146,6 +146,7 @@ START_TEST (netaddr_get_addr_test) {
|
||
|
fail_unless(res->na_family == AF_INET, "Expected family %d, got %d",
|
||
|
AF_INET, res->na_family);
|
||
|
|
||
|
+#if defined(PR_USE_NETWORK_TESTS)
|
||
|
/* Google: the Dial Tone of the Internet. */
|
||
|
name = "www.google.com";
|
||
|
|
||
|
@@ -161,6 +162,7 @@ START_TEST (netaddr_get_addr_test) {
|
||
|
strerror(errno));
|
||
|
fail_unless(res->na_family == AF_INET, "Expected family %d, got %d",
|
||
|
AF_INET, res->na_family);
|
||
|
+#endif
|
||
|
|
||
|
name = "127.0.0.1";
|
||
|
|
||
|
@@ -903,6 +905,7 @@ START_TEST (netaddr_get_dnsstr_list_test) {
|
||
|
|
||
|
pr_netaddr_clear_cache();
|
||
|
|
||
|
+#if defined(PR_USE_NETWORK_TESTS)
|
||
|
addr = pr_netaddr_get_addr(p, "www.google.com", &addrs);
|
||
|
fail_unless(addr != NULL, "Failed to resolve 'www.google.com': %s",
|
||
|
strerror(errno));
|
||
|
@@ -921,6 +924,7 @@ START_TEST (netaddr_get_dnsstr_list_test) {
|
||
|
/* Ideally we would check that res->nelts > 0, BUT this turns out to
|
||
|
* a fragile test condition, dependent on DNS vagaries.
|
||
|
*/
|
||
|
+#endif
|
||
|
|
||
|
pr_netaddr_set_reverse_dns(reverse_dns);
|
||
|
}
|
||
|
@@ -1082,6 +1086,7 @@ START_TEST (netaddr_is_loopback_test) {
|
||
|
fail_unless(errno == EINVAL, "Expected EINVAL (%d), got %s (%d)", EINVAL,
|
||
|
strerror(errno), errno);
|
||
|
|
||
|
+#if defined(PR_USE_NETWORK_TESTS)
|
||
|
name = "www.google.com";
|
||
|
addr = pr_netaddr_get_addr(p, name, NULL);
|
||
|
fail_unless(addr != NULL, "Failed to resolve '%s': %s", name,
|
||
|
@@ -1089,6 +1094,7 @@ START_TEST (netaddr_is_loopback_test) {
|
||
|
|
||
|
res = pr_netaddr_is_loopback(addr);
|
||
|
fail_unless(res == FALSE, "Expected FALSE, got %d", res);
|
||
|
+#endif
|
||
|
|
||
|
name = "127.0.0.1";
|
||
|
addr = pr_netaddr_get_addr(p, name, NULL);
|
||
|
--
|
||
|
2.9.3
|