Skip to content

Commit

Permalink
websocket tests: more resilience against EADDRINUSE
Browse files Browse the repository at this point in the history
  • Loading branch information
gdamore committed Dec 31, 2024
1 parent 292e0a6 commit e6b354f
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 27 deletions.
45 changes: 26 additions & 19 deletions src/sp/transport/ws/ws_test.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,19 +14,21 @@
static void
test_ws_url_path_filters(void)
{
nng_socket s1;
nng_socket s2;
char addr[NNG_MAXADDRLEN];
nng_socket s1;
nng_socket s2;
nng_listener l;
char addr[NNG_MAXADDRLEN];
int port;

NUTS_OPEN(s1);
NUTS_OPEN(s2);

nuts_scratch_addr("ws", sizeof(addr), addr);
NUTS_PASS(nng_listen(s1, addr, NULL, 0));
snprintf(addr, sizeof(addr), "ws://127.0.0.1:0/ws-url-path-filters");
NUTS_PASS(nng_listen(s1, addr, &l, 0));
NUTS_PASS(nng_listener_get_int(l, NNG_OPT_TCP_BOUND_PORT, &port));

// Now try we just remove the last character for now.
// This will make the path different.
addr[strlen(addr) - 1] = '\0';
snprintf(
addr, sizeof(addr), "ws://127.0.0.1:%d/some-other-location", port);
NUTS_FAIL(nng_dial(s2, addr, NULL, 0), NNG_ECONNREFUSED);

NUTS_CLOSE(s1);
Expand Down Expand Up @@ -114,19 +116,19 @@ test_wild_card_host(void)
static void
test_empty_host(void)
{
nng_socket s1;
nng_socket s2;
char addr[NNG_MAXADDRLEN];
uint16_t port;
nng_socket s1;
nng_socket s2;
nng_listener l;
char addr[NNG_MAXADDRLEN];
int port;

NUTS_OPEN(s1);
NUTS_OPEN(s2);

port = nuts_next_port();

// we use ws4 to ensure 127.0.0.1 binding
snprintf(addr, sizeof(addr), "ws4://:%u/test", port);
NUTS_PASS(nng_listen(s1, addr, NULL, 0));
snprintf(addr, sizeof(addr), "ws4://:0/test");
NUTS_PASS(nng_listen(s1, addr, &l, 0));
NUTS_PASS(nng_listener_get_int(l, NNG_OPT_TCP_BOUND_PORT, &port));
nng_msleep(100);

snprintf(addr, sizeof(addr), "ws://127.0.0.1:%u/test", port);
Expand All @@ -147,23 +149,28 @@ test_ws_recv_max(void)
nng_dialer d;
size_t sz;
char *addr;
char url[256];
int port;

memset(msg, 0, sizeof(msg)); // required to silence valgrind

NUTS_ADDR(addr, "ws");
addr = "ws://127.0.0.1:%d/ws_recv_max";
snprintf(url, sizeof(url), addr, 0);
NUTS_OPEN(s0);
NUTS_PASS(nng_socket_set_ms(s0, NNG_OPT_RECVTIMEO, 100));
NUTS_PASS(nng_socket_set_size(s0, NNG_OPT_RECVMAXSZ, 200));
NUTS_PASS(nng_listener_create(&l, s0, addr));
NUTS_PASS(nng_listener_create(&l, s0, url));
NUTS_PASS(nng_socket_get_size(s0, NNG_OPT_RECVMAXSZ, &sz));
NUTS_TRUE(sz == 200);
NUTS_PASS(nng_listener_set_size(l, NNG_OPT_RECVMAXSZ, 100));
NUTS_PASS(nng_listener_get_size(l, NNG_OPT_RECVMAXSZ, &sz));
NUTS_TRUE(sz == 100);
NUTS_PASS(nng_listener_start(l, 0));
NUTS_PASS(nng_listener_get_int(l, NNG_OPT_TCP_BOUND_PORT, &port));

NUTS_OPEN(s1);
NUTS_PASS(nng_dial(s1, addr, &d, 0));
snprintf(url, sizeof(url), addr, port);
NUTS_PASS(nng_dial(s1, url, &d, 0));
NUTS_PASS(nng_dialer_set_size(d, NNG_OPT_RECVMAXSZ, 256));
NUTS_PASS(nng_dialer_get_size(d, NNG_OPT_RECVMAXSZ, &sz));
NUTS_PASS(nng_send(s1, msg, 95, 0));
Expand Down
20 changes: 12 additions & 8 deletions src/supplemental/websocket/wssfile_test.c
Original file line number Diff line number Diff line change
Expand Up @@ -68,20 +68,21 @@ init_listener_wss_file(nng_listener l)
static void
test_invalid_verify(void)
{
uint16_t port = nuts_next_port();
nng_socket s1;
nng_socket s2;
nng_listener l;
nng_dialer d;
char addr[40];
int port;

(void) snprintf(addr, sizeof(addr), "wss4://:%u/test", port);
(void) snprintf(addr, sizeof(addr), "wss4://:0/test");

NUTS_PASS(nng_pair_open(&s1));
NUTS_PASS(nng_pair_open(&s2));
NUTS_PASS(nng_listener_create(&l, s1, addr));
init_listener_wss_file(l);
NUTS_PASS(nng_listener_start(l, 0));
NUTS_PASS(nng_listener_get_int(l, NNG_OPT_TCP_BOUND_PORT, &port));

nng_msleep(100);

Expand Down Expand Up @@ -115,7 +116,7 @@ test_no_verify(void)
nng_msg *msg;
nng_pipe p;
bool b;
uint16_t port;
int port;

NUTS_ENABLE_LOG(NNG_LOG_DEBUG);
NUTS_PASS(nng_pair_open(&s1));
Expand All @@ -124,10 +125,11 @@ test_no_verify(void)
NUTS_PASS(nng_socket_set_ms(s2, NNG_OPT_RECVTIMEO, 5000));

port = nuts_next_port();
(void) snprintf(addr, sizeof(addr), "wss4://:%u/test", port);
(void) snprintf(addr, sizeof(addr), "wss4://:0/test");
NUTS_PASS(nng_listener_create(&l, s1, addr));
init_listener_wss_file(l);
NUTS_PASS(nng_listener_start(l, 0));
NUTS_PASS(nng_listener_get_int(l, NNG_OPT_TCP_BOUND_PORT, &port));

nng_msleep(100);
snprintf(addr, sizeof(addr), "wss://127.0.0.1:%u/test", port);
Expand Down Expand Up @@ -166,17 +168,18 @@ test_verify_works(void)
nng_msg *msg;
nng_pipe p;
bool b;
uint16_t port;
int port;

NUTS_PASS(nng_pair_open(&s1));
NUTS_PASS(nng_pair_open(&s2));
NUTS_PASS(nng_socket_set_ms(s1, NNG_OPT_SENDTIMEO, 5000));
NUTS_PASS(nng_socket_set_ms(s2, NNG_OPT_RECVTIMEO, 5000));
port = nuts_next_port();
(void) snprintf(addr, sizeof(addr), "wss4://:%u/test", port);
(void) snprintf(addr, sizeof(addr), "wss4://:0/test");
NUTS_PASS(nng_listener_create(&l, s1, addr));
init_listener_wss_file(l);
NUTS_PASS(nng_listener_start(l, 0));
NUTS_PASS(nng_listener_get_int(l, NNG_OPT_TCP_BOUND_PORT, &port));

// It can take a bit for the listener to start up in clouds.
nng_msleep(200);
Expand Down Expand Up @@ -218,15 +221,15 @@ test_cert_file_not_present(void)
static void
test_tls_config(void)
{
uint16_t port = nuts_next_port();
nng_socket s1;
nng_socket s2;
nng_listener l;
nng_dialer d;
char addr[40];
nng_tls_config *cfg;
int port;

(void) snprintf(addr, sizeof(addr), "wss4://:%u/test", port);
(void) snprintf(addr, sizeof(addr), "wss4://:0/test");

NUTS_PASS(nng_pair_open(&s1));
NUTS_PASS(nng_pair_open(&s2));
Expand All @@ -237,6 +240,7 @@ test_tls_config(void)

init_listener_wss_file(l);
NUTS_PASS(nng_listener_start(l, 0));
NUTS_PASS(nng_listener_get_int(l, NNG_OPT_TCP_BOUND_PORT, &port));

// make sure we cannot change the auth mode while running

Expand Down

0 comments on commit e6b354f

Please sign in to comment.