mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-06-27 14:44:52 +02:00
tests: Skip GSocket tests if setting up a server fails
There are various reasons why setting up a server might fail; it reliably fails on AWS with IPv6 addresses (are we binding to the right address?). Since we’re trying to test GSocket as a client, skip tests where that happens. Signed-off-by: Philip Withnall <withnall@endlessm.com> https://bugzilla.gnome.org/show_bug.cgi?id=795234
This commit is contained in:
parent
d990f86911
commit
6751424bbe
@ -108,14 +108,14 @@ echo_server_thread (gpointer user_data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static IPTestData *
|
static IPTestData *
|
||||||
create_server_full (GSocketFamily family,
|
create_server_full (GSocketFamily family,
|
||||||
GSocketType socket_type,
|
GSocketType socket_type,
|
||||||
GThreadFunc server_thread,
|
GThreadFunc server_thread,
|
||||||
gboolean v4mapped)
|
gboolean v4mapped,
|
||||||
|
GError **error)
|
||||||
{
|
{
|
||||||
IPTestData *data;
|
IPTestData *data;
|
||||||
GSocket *server;
|
GSocket *server;
|
||||||
GError *error = NULL;
|
|
||||||
GSocketAddress *addr;
|
GSocketAddress *addr;
|
||||||
GInetAddress *iaddr;
|
GInetAddress *iaddr;
|
||||||
|
|
||||||
@ -125,8 +125,9 @@ create_server_full (GSocketFamily family,
|
|||||||
data->server = server = g_socket_new (family,
|
data->server = server = g_socket_new (family,
|
||||||
socket_type,
|
socket_type,
|
||||||
G_SOCKET_PROTOCOL_DEFAULT,
|
G_SOCKET_PROTOCOL_DEFAULT,
|
||||||
&error);
|
error);
|
||||||
g_assert_no_error (error);
|
if (server == NULL)
|
||||||
|
goto error;
|
||||||
|
|
||||||
g_assert_cmpint (g_socket_get_family (server), ==, family);
|
g_assert_cmpint (g_socket_get_family (server), ==, family);
|
||||||
g_assert_cmpint (g_socket_get_socket_type (server), ==, socket_type);
|
g_assert_cmpint (g_socket_get_socket_type (server), ==, socket_type);
|
||||||
@ -138,12 +139,8 @@ create_server_full (GSocketFamily family,
|
|||||||
if (v4mapped)
|
if (v4mapped)
|
||||||
{
|
{
|
||||||
g_socket_set_option (data->server, IPPROTO_IPV6, IPV6_V6ONLY, FALSE, NULL);
|
g_socket_set_option (data->server, IPPROTO_IPV6, IPV6_V6ONLY, FALSE, NULL);
|
||||||
if (! g_socket_speaks_ipv4 (data->server))
|
if (!g_socket_speaks_ipv4 (data->server))
|
||||||
{
|
goto error;
|
||||||
g_object_unref (data->server);
|
|
||||||
g_slice_free (IPTestData, data);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -155,19 +152,23 @@ create_server_full (GSocketFamily family,
|
|||||||
g_object_unref (iaddr);
|
g_object_unref (iaddr);
|
||||||
|
|
||||||
g_assert_cmpint (g_inet_socket_address_get_port (G_INET_SOCKET_ADDRESS (addr)), ==, 0);
|
g_assert_cmpint (g_inet_socket_address_get_port (G_INET_SOCKET_ADDRESS (addr)), ==, 0);
|
||||||
g_socket_bind (server, addr, TRUE, &error);
|
if (!g_socket_bind (server, addr, TRUE, error))
|
||||||
g_assert_no_error (error);
|
{
|
||||||
|
g_object_unref (addr);
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
g_object_unref (addr);
|
g_object_unref (addr);
|
||||||
|
|
||||||
addr = g_socket_get_local_address (server, &error);
|
addr = g_socket_get_local_address (server, error);
|
||||||
g_assert_no_error (error);
|
if (addr == NULL)
|
||||||
|
goto error;
|
||||||
g_assert_cmpint (g_inet_socket_address_get_port (G_INET_SOCKET_ADDRESS (addr)), !=, 0);
|
g_assert_cmpint (g_inet_socket_address_get_port (G_INET_SOCKET_ADDRESS (addr)), !=, 0);
|
||||||
g_object_unref (addr);
|
g_object_unref (addr);
|
||||||
|
|
||||||
if (socket_type == G_SOCKET_TYPE_STREAM)
|
if (socket_type == G_SOCKET_TYPE_STREAM)
|
||||||
{
|
{
|
||||||
g_socket_listen (server, &error);
|
if (!g_socket_listen (server, error))
|
||||||
g_assert_no_error (error);
|
goto error;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -177,14 +178,21 @@ create_server_full (GSocketFamily family,
|
|||||||
data->thread = g_thread_new ("server", server_thread, data);
|
data->thread = g_thread_new ("server", server_thread, data);
|
||||||
|
|
||||||
return data;
|
return data;
|
||||||
|
|
||||||
|
error:
|
||||||
|
g_clear_object (&data->server);
|
||||||
|
g_slice_free (IPTestData, data);
|
||||||
|
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static IPTestData *
|
static IPTestData *
|
||||||
create_server (GSocketFamily family,
|
create_server (GSocketFamily family,
|
||||||
GThreadFunc server_thread,
|
GThreadFunc server_thread,
|
||||||
gboolean v4mapped)
|
gboolean v4mapped,
|
||||||
|
GError **error)
|
||||||
{
|
{
|
||||||
return create_server_full (family, G_SOCKET_TYPE_STREAM, server_thread, v4mapped);
|
return create_server_full (family, G_SOCKET_TYPE_STREAM, server_thread, v4mapped, error);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const gchar *testbuf = "0123456789abcdef";
|
static const gchar *testbuf = "0123456789abcdef";
|
||||||
@ -325,7 +333,16 @@ test_ip_async (GSocketFamily family)
|
|||||||
gssize len;
|
gssize len;
|
||||||
gchar buf[128];
|
gchar buf[128];
|
||||||
|
|
||||||
data = create_server (family, echo_server_thread, FALSE);
|
data = create_server (family, echo_server_thread, FALSE, &error);
|
||||||
|
if (error != NULL)
|
||||||
|
{
|
||||||
|
gchar *message = g_strdup_printf ("Failed to create server: %s", error->message);
|
||||||
|
g_test_skip (message);
|
||||||
|
g_free (message);
|
||||||
|
g_clear_error (&error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
addr = g_socket_get_local_address (data->server, &error);
|
addr = g_socket_get_local_address (data->server, &error);
|
||||||
g_assert_no_error (error);
|
g_assert_no_error (error);
|
||||||
|
|
||||||
@ -428,7 +445,16 @@ test_ip_sync (GSocketFamily family)
|
|||||||
gssize len;
|
gssize len;
|
||||||
gchar buf[128];
|
gchar buf[128];
|
||||||
|
|
||||||
data = create_server (family, echo_server_thread, FALSE);
|
data = create_server (family, echo_server_thread, FALSE, &error);
|
||||||
|
if (error != NULL)
|
||||||
|
{
|
||||||
|
gchar *message = g_strdup_printf ("Failed to create server: %s", error->message);
|
||||||
|
g_test_skip (message);
|
||||||
|
g_free (message);
|
||||||
|
g_clear_error (&error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
addr = g_socket_get_local_address (data->server, &error);
|
addr = g_socket_get_local_address (data->server, &error);
|
||||||
g_assert_no_error (error);
|
g_assert_no_error (error);
|
||||||
|
|
||||||
@ -559,7 +585,15 @@ test_ip_sync_dgram (GSocketFamily family)
|
|||||||
gchar buf[128];
|
gchar buf[128];
|
||||||
|
|
||||||
data = create_server_full (family, G_SOCKET_TYPE_DATAGRAM,
|
data = create_server_full (family, G_SOCKET_TYPE_DATAGRAM,
|
||||||
echo_server_dgram_thread, FALSE);
|
echo_server_dgram_thread, FALSE, &error);
|
||||||
|
if (error != NULL)
|
||||||
|
{
|
||||||
|
gchar *message = g_strdup_printf ("Failed to create server: %s", error->message);
|
||||||
|
g_test_skip (message);
|
||||||
|
g_free (message);
|
||||||
|
g_clear_error (&error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
dest_addr = g_socket_get_local_address (data->server, &error);
|
dest_addr = g_socket_get_local_address (data->server, &error);
|
||||||
|
|
||||||
@ -912,7 +946,16 @@ test_close_graceful (void)
|
|||||||
gssize len;
|
gssize len;
|
||||||
gchar buf[128];
|
gchar buf[128];
|
||||||
|
|
||||||
data = create_server (family, graceful_server_thread, FALSE);
|
data = create_server (family, graceful_server_thread, FALSE, &error);
|
||||||
|
if (error != NULL)
|
||||||
|
{
|
||||||
|
gchar *message = g_strdup_printf ("Failed to create server: %s", error->message);
|
||||||
|
g_test_skip (message);
|
||||||
|
g_free (message);
|
||||||
|
g_clear_error (&error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
addr = g_socket_get_local_address (data->server, &error);
|
addr = g_socket_get_local_address (data->server, &error);
|
||||||
g_assert_no_error (error);
|
g_assert_no_error (error);
|
||||||
|
|
||||||
@ -1013,11 +1056,13 @@ test_ipv6_v4mapped (void)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
data = create_server (G_SOCKET_FAMILY_IPV6, v4mapped_server_thread, TRUE);
|
data = create_server (G_SOCKET_FAMILY_IPV6, v4mapped_server_thread, TRUE, &error);
|
||||||
|
if (error != NULL)
|
||||||
if (data == NULL)
|
|
||||||
{
|
{
|
||||||
g_test_message ("Test not run: not supported by the OS");
|
gchar *message = g_strdup_printf ("Failed to create server: %s", error->message);
|
||||||
|
g_test_skip (message);
|
||||||
|
g_free (message);
|
||||||
|
g_clear_error (&error);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1066,7 +1111,16 @@ test_timed_wait (void)
|
|||||||
gint64 start_time;
|
gint64 start_time;
|
||||||
gint poll_duration;
|
gint poll_duration;
|
||||||
|
|
||||||
data = create_server (G_SOCKET_FAMILY_IPV4, echo_server_thread, FALSE);
|
data = create_server (G_SOCKET_FAMILY_IPV4, echo_server_thread, FALSE, &error);
|
||||||
|
if (error != NULL)
|
||||||
|
{
|
||||||
|
gchar *message = g_strdup_printf ("Failed to create server: %s", error->message);
|
||||||
|
g_test_skip (message);
|
||||||
|
g_free (message);
|
||||||
|
g_clear_error (&error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
addr = g_socket_get_local_address (data->server, &error);
|
addr = g_socket_get_local_address (data->server, &error);
|
||||||
g_assert_no_error (error);
|
g_assert_no_error (error);
|
||||||
|
|
||||||
@ -1144,7 +1198,16 @@ test_fd_reuse (void)
|
|||||||
|
|
||||||
g_test_bug ("741707");
|
g_test_bug ("741707");
|
||||||
|
|
||||||
data = create_server (G_SOCKET_FAMILY_IPV4, echo_server_thread, FALSE);
|
data = create_server (G_SOCKET_FAMILY_IPV4, echo_server_thread, FALSE, &error);
|
||||||
|
if (error != NULL)
|
||||||
|
{
|
||||||
|
gchar *message = g_strdup_printf ("Failed to create server: %s", error->message);
|
||||||
|
g_test_skip (message);
|
||||||
|
g_free (message);
|
||||||
|
g_clear_error (&error);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
addr = g_socket_get_local_address (data->server, &error);
|
addr = g_socket_get_local_address (data->server, &error);
|
||||||
g_assert_no_error (error);
|
g_assert_no_error (error);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user