test: fix udp-multicast-join tests

The messages must be actually sent to the multicast address.

PR-URL: https://github.com/libuv/libuv/pull/2185
Reviewed-By: Saúl Ibarra Corretgé <saghul@gmail.com>
This commit is contained in:
Santiago Gimeno 2019-02-06 23:05:05 +01:00
parent 958e85fbd8
commit b571851e6e
No known key found for this signature in database
GPG Key ID: F28C3C8DA33C03BE
2 changed files with 41 additions and 15 deletions

View File

@ -101,7 +101,7 @@ TEST_IMPL(udp_multicast_join) {
uv_buf_t buf;
struct sockaddr_in addr;
ASSERT(0 == uv_ip4_addr("127.0.0.1", TEST_PORT, &addr));
ASSERT(0 == uv_ip4_addr("0.0.0.0", TEST_PORT, &addr));
r = uv_udp_init(uv_default_loop(), &server);
ASSERT(r == 0);
@ -124,6 +124,8 @@ TEST_IMPL(udp_multicast_join) {
buf = uv_buf_init("PING", 4);
ASSERT(0 == uv_ip4_addr("239.255.0.1", TEST_PORT, &addr));
/* server sends "PING" */
r = uv_udp_send(&req,
&server,

View File

@ -30,6 +30,19 @@
#define CHECK_HANDLE(handle) \
ASSERT((uv_udp_t*)(handle) == &server || (uv_udp_t*)(handle) == &client)
#if defined(__APPLE__) || \
defined(_AIX) || \
defined(__MVS__) || \
defined(__FreeBSD_kernel__) || \
defined(__NetBSD__) || \
defined(__OpenBSD__)
#define MULTICAST_ADDR "ff02::1%lo0"
#define INTERFACE_ADDR "::1%lo0"
#else
#define MULTICAST_ADDR "ff02::1"
#define INTERFACE_ADDR NULL
#endif
static uv_udp_t server;
static uv_udp_t client;
@ -96,16 +109,35 @@ static void cl_recv_cb(uv_udp_t* handle,
}
static int can_ipv6_external(void) {
uv_interface_address_t* addr;
int supported;
int count;
int i;
if (uv_interface_addresses(&addr, &count))
return 0; /* Assume no IPv6 support on failure. */
supported = 0;
for (i = 0; supported == 0 && i < count; i += 1)
supported = (AF_INET6 == addr[i].address.address6.sin6_family &&
!addr[i].is_internal);
uv_free_interface_addresses(addr, count);
return supported;
}
TEST_IMPL(udp_multicast_join6) {
int r;
uv_udp_send_t req;
uv_buf_t buf;
struct sockaddr_in6 addr;
if (!can_ipv6())
RETURN_SKIP("IPv6 not supported");
if (!can_ipv6_external())
RETURN_SKIP("No external IPv6 interface available");
ASSERT(0 == uv_ip6_addr("::1", TEST_PORT, &addr));
ASSERT(0 == uv_ip6_addr("::", TEST_PORT, &addr));
r = uv_udp_init(uv_default_loop(), &server);
ASSERT(r == 0);
@ -117,17 +149,7 @@ TEST_IMPL(udp_multicast_join6) {
r = uv_udp_bind(&client, (const struct sockaddr*) &addr, 0);
ASSERT(r == 0);
/* join the multicast channel */
#if defined(__APPLE__) || \
defined(_AIX) || \
defined(__MVS__) || \
defined(__FreeBSD_kernel__) || \
defined(__NetBSD__) || \
defined(__OpenBSD__)
r = uv_udp_set_membership(&client, "ff02::1", "::1%lo0", UV_JOIN_GROUP);
#else
r = uv_udp_set_membership(&client, "ff02::1", NULL, UV_JOIN_GROUP);
#endif
r = uv_udp_set_membership(&client, MULTICAST_ADDR, INTERFACE_ADDR, UV_JOIN_GROUP);
if (r == UV_ENODEV) {
MAKE_VALGRIND_HAPPY();
RETURN_SKIP("No ipv6 multicast route");
@ -140,6 +162,8 @@ TEST_IMPL(udp_multicast_join6) {
buf = uv_buf_init("PING", 4);
ASSERT(0 == uv_ip6_addr(MULTICAST_ADDR, TEST_PORT, &addr));
/* server sends "PING" */
r = uv_udp_send(&req,
&server,