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:
parent
958e85fbd8
commit
b571851e6e
@ -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,
|
||||
|
||||
@ -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,
|
||||
|
||||
Loading…
Reference in New Issue
Block a user