aboutsummaryrefslogtreecommitdiff
path: root/src/testing
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2024-11-30 13:36:34 -0500
committerGarrett D'Amore <garrett@damore.org>2024-11-30 13:36:34 -0500
commit02d6b0bb28f6c964477a2362860e37a27d13d8d9 (patch)
treef93ba70eed56b60c61b9a65db73beb5485130156 /src/testing
parentc3196eac2be29a7b90304b4f9f377c03d9e6d6d8 (diff)
downloadnng-02d6b0bb28f6c964477a2362860e37a27d13d8d9.tar.gz
nng-02d6b0bb28f6c964477a2362860e37a27d13d8d9.tar.bz2
nng-02d6b0bb28f6c964477a2362860e37a27d13d8d9.zip
tests: convert TCPv6 transport test to NUTS (and consolidate with v4)
Diffstat (limited to 'src/testing')
-rw-r--r--src/testing/acutest.h2
-rw-r--r--src/testing/marry.c13
-rw-r--r--src/testing/nuts.h8
-rw-r--r--src/testing/util.c34
4 files changed, 51 insertions, 6 deletions
diff --git a/src/testing/acutest.h b/src/testing/acutest.h
index b64f2f1d..e6efb120 100644
--- a/src/testing/acutest.h
+++ b/src/testing/acutest.h
@@ -332,6 +332,8 @@ void acutest_message_(const char* fmt, ...);
void acutest_message_color_(int color, const char* fmt, ...);
void acutest_dump_(const char* title, const void* addr, size_t size);
void acutest_abort_(void) ACUTEST_ATTRIBUTE_(noreturn);
+void ACUTEST_ATTRIBUTE_(format (printf, 3, 4))
+acutest_skip_(const char* file, int line, const char* fmt, ...);
#ifdef __cplusplus
} /* extern "C" */
#endif
diff --git a/src/testing/marry.c b/src/testing/marry.c
index 7441468f..8cc94473 100644
--- a/src/testing/marry.c
+++ b/src/testing/marry.c
@@ -48,16 +48,19 @@ nuts_scratch_addr(const char *scheme, size_t sz, char *addr)
if ((strncmp(scheme, "tcp", 3) == 0) ||
(strncmp(scheme, "tls", 3) == 0) ||
(strncmp(scheme, "udp", 3) == 0)) {
+ const char *ip =
+ strchr(scheme, '6') != NULL ? "[::1]" : "127.0.0.1";
(void) snprintf(
- addr, sz, "%s://127.0.0.1:%u", scheme, nuts_next_port());
+ addr, sz, "%s://%s:%u", scheme, ip, nuts_next_port());
return;
}
if (strncmp(scheme, "ws", 2) == 0) {
- (void) snprintf(addr, sz,
- "%s://127.0.0.1:%u/nuts%04x%04x%04x%04x", scheme,
- nuts_next_port(), nng_random(), nng_random(), nng_random(),
- nng_random());
+ const char *ip =
+ strchr(scheme, '6') != NULL ? "[::1]" : "127.0.0.1";
+ (void) snprintf(addr, sz, "%s://%s:%u/nuts%04x%04x%04x%04x",
+ scheme, ip, nuts_next_port(), nng_random(), nng_random(),
+ nng_random(), nng_random());
return;
}
diff --git a/src/testing/nuts.h b/src/testing/nuts.h
index 0d3d4f7c..5fe193db 100644
--- a/src/testing/nuts.h
+++ b/src/testing/nuts.h
@@ -121,6 +121,14 @@ extern void nuts_tran_huge_msg(const char *scheme, size_t size);
extern void nuts_tran_msg_props(const char *scheme, void (*check)(nng_msg *));
extern void nuts_tran_perf(const char *scheme);
+#define NUTS_SKIP_IF_IPV6_NEEDED_AND_ABSENT(scheme) \
+ do { \
+ if ((strchr(scheme, '6') != NULL) && (!nuts_has_ipv6())) { \
+ NUTS_SKIP("No IPv6 support present"); \
+ return; \
+ } \
+ } while (0)
+
#ifndef NUTS_TRAN_HUGE_MSG_SIZE
#define NUTS_TRAN_HUGE_MSG_SIZE (1U << 20)
#endif
diff --git a/src/testing/util.c b/src/testing/util.c
index 6aabe35f..045aacdf 100644
--- a/src/testing/util.c
+++ b/src/testing/util.c
@@ -9,6 +9,7 @@
//
#include "nng/nng.h"
+#include <stdbool.h>
#define TEST_NO_MAIN
#ifdef _WIN32
@@ -41,7 +42,7 @@
#include <poll.h>
#endif
-#include "nuts.h"
+#include <nuts.h>
uint64_t
nuts_clock(void)
@@ -171,6 +172,25 @@ nuts_sleep(int msec)
#define NUTS_COLOR_GREEN_INTENSIVE_ 4
#define NUTS_COLOR_RED_INTENSIVE_ 5
+bool
+nuts_has_ipv6(void)
+{
+ nng_sockaddr sa;
+ nng_udp *u;
+ int rv;
+
+ sa.s_in6.sa_family = NNG_AF_INET6;
+ sa.s_in6.sa_port = 0;
+ memset(sa.s_in6.sa_addr, 0, 16);
+ sa.s_in6.sa_addr[15] = 1;
+
+ rv = nng_udp_open(&u, &sa);
+ if (rv == 0) {
+ nng_udp_close(u);
+ }
+ return (rv == 0 ? 1 : 0);
+}
+
void
nuts_set_logger(int level)
{
@@ -222,6 +242,7 @@ nuts_tran_conn_refused(const char *scheme)
nng_dialer d = NNG_DIALER_INITIALIZER;
const char *addr;
+ NUTS_SKIP_IF_IPV6_NEEDED_AND_ABSENT(scheme);
NUTS_ADDR(addr, scheme);
NUTS_OPEN(s);
NUTS_FAIL(nng_dial(s, addr, &d, 0), NNG_ECONNREFUSED);
@@ -236,6 +257,7 @@ nuts_tran_dialer_cancel(const char *scheme)
nng_dialer d = NNG_DIALER_INITIALIZER;
const char *addr;
+ NUTS_SKIP_IF_IPV6_NEEDED_AND_ABSENT(scheme);
NUTS_ADDR(addr, scheme);
NUTS_OPEN(s);
NUTS_PASS(nng_dial(s, addr, &d, NNG_FLAG_NONBLOCK));
@@ -251,6 +273,7 @@ nuts_tran_dialer_closed(const char *scheme)
nng_dialer d = NNG_DIALER_INITIALIZER;
const char *addr;
+ NUTS_SKIP_IF_IPV6_NEEDED_AND_ABSENT(scheme);
NUTS_ADDR(addr, scheme);
NUTS_OPEN(s);
NUTS_PASS(nng_dialer_create(&d, s, addr));
@@ -268,6 +291,7 @@ nuts_tran_duplicate_listen(const char *scheme)
nng_listener l2 = NNG_LISTENER_INITIALIZER;
const char *addr;
+ NUTS_SKIP_IF_IPV6_NEEDED_AND_ABSENT(scheme);
NUTS_ADDR(addr, scheme);
NUTS_OPEN(s);
NUTS_PASS(nng_listen(s, addr, &l1, 0));
@@ -284,6 +308,7 @@ nuts_tran_listener_cancel(const char *scheme)
nng_listener l = NNG_LISTENER_INITIALIZER;
const char *addr;
+ NUTS_SKIP_IF_IPV6_NEEDED_AND_ABSENT(scheme);
NUTS_ADDR(addr, scheme);
NUTS_OPEN(s);
NUTS_PASS(nng_listen(s, addr, &l, 0));
@@ -299,6 +324,7 @@ nuts_tran_listener_closed(const char *scheme)
nng_listener l = NNG_LISTENER_INITIALIZER;
const char *addr;
+ NUTS_SKIP_IF_IPV6_NEEDED_AND_ABSENT(scheme);
NUTS_ADDR(addr, scheme);
NUTS_OPEN(s);
NUTS_PASS(nng_listener_create(&l, s, addr));
@@ -318,6 +344,7 @@ nuts_tran_listen_accept(const char *scheme)
nng_dialer d2 = NNG_LISTENER_INITIALIZER;
const char *addr;
+ NUTS_SKIP_IF_IPV6_NEEDED_AND_ABSENT(scheme);
NUTS_ADDR(addr, scheme);
NUTS_OPEN(s1);
NUTS_OPEN(s2);
@@ -345,6 +372,7 @@ nuts_tran_exchange(const char *scheme)
nng_dialer d1 = NNG_LISTENER_INITIALIZER;
const char *addr;
+ NUTS_SKIP_IF_IPV6_NEEDED_AND_ABSENT(scheme);
NUTS_ADDR(addr, scheme);
NUTS_OPEN(s1);
NUTS_OPEN(s2);
@@ -378,6 +406,7 @@ nuts_tran_pipe_id(const char *scheme)
nng_pipe p1;
nng_pipe p2;
+ NUTS_SKIP_IF_IPV6_NEEDED_AND_ABSENT(scheme);
NUTS_ADDR(addr, scheme);
NUTS_OPEN(s1);
NUTS_OPEN(s2);
@@ -419,6 +448,7 @@ nuts_tran_huge_msg(const char *scheme, size_t size)
buf = nng_alloc(size);
+ NUTS_SKIP_IF_IPV6_NEEDED_AND_ABSENT(scheme);
NUTS_ADDR(addr, scheme);
NUTS_OPEN(s1);
NUTS_OPEN(s2);
@@ -460,6 +490,7 @@ nuts_tran_msg_props(const char *scheme, void (*check)(nng_msg *))
const char *addr;
nng_msg *msg;
+ NUTS_SKIP_IF_IPV6_NEEDED_AND_ABSENT(scheme);
NUTS_ADDR(addr, scheme);
NUTS_OPEN(s1);
NUTS_OPEN(s2);
@@ -488,6 +519,7 @@ nuts_tran_perf(const char *scheme)
const char *addr;
nng_msg *msg;
+ NUTS_SKIP_IF_IPV6_NEEDED_AND_ABSENT(scheme);
nuts_set_logger(NNG_LOG_NOTICE);
NUTS_OPEN(s1);
NUTS_OPEN(s2);