mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-03-03 14:42:10 +01:00
Improve GNetworkMonitor test coverage
This commit is contained in:
parent
4ad5210b35
commit
721366d088
@ -106,8 +106,8 @@ GInetAddressMask *ip4_default, *ip6_default;
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
notify_handler (GObject *object,
|
notify_handler (GObject *object,
|
||||||
GParamSpec *pspec,
|
GParamSpec *pspec,
|
||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
gboolean *emitted = user_data;
|
gboolean *emitted = user_data;
|
||||||
|
|
||||||
@ -116,8 +116,8 @@ notify_handler (GObject *object,
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
network_changed_handler (GNetworkMonitor *monitor,
|
network_changed_handler (GNetworkMonitor *monitor,
|
||||||
gboolean available,
|
gboolean available,
|
||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
gboolean *emitted = user_data;
|
gboolean *emitted = user_data;
|
||||||
|
|
||||||
@ -126,19 +126,19 @@ network_changed_handler (GNetworkMonitor *monitor,
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
assert_signals (GNetworkMonitor *monitor,
|
assert_signals (GNetworkMonitor *monitor,
|
||||||
gboolean should_emit_notify,
|
gboolean should_emit_notify,
|
||||||
gboolean should_emit_network_changed,
|
gboolean should_emit_network_changed,
|
||||||
gboolean expected_network_available)
|
gboolean expected_network_available)
|
||||||
{
|
{
|
||||||
gboolean emitted_notify = FALSE, emitted_network_changed = FALSE;
|
gboolean emitted_notify = FALSE, emitted_network_changed = FALSE;
|
||||||
guint h1, h2;
|
guint h1, h2;
|
||||||
|
|
||||||
h1 = g_signal_connect (monitor, "notify::network-available",
|
h1 = g_signal_connect (monitor, "notify::network-available",
|
||||||
G_CALLBACK (notify_handler),
|
G_CALLBACK (notify_handler),
|
||||||
&emitted_notify);
|
&emitted_notify);
|
||||||
h2 = g_signal_connect (monitor, "network-changed",
|
h2 = g_signal_connect (monitor, "network-changed",
|
||||||
G_CALLBACK (network_changed_handler),
|
G_CALLBACK (network_changed_handler),
|
||||||
&emitted_network_changed);
|
&emitted_network_changed);
|
||||||
|
|
||||||
g_main_context_iteration (NULL, FALSE);
|
g_main_context_iteration (NULL, FALSE);
|
||||||
|
|
||||||
@ -151,40 +151,96 @@ assert_signals (GNetworkMonitor *monitor,
|
|||||||
g_assert (g_network_monitor_get_network_available (monitor) == expected_network_available);
|
g_assert (g_network_monitor_get_network_available (monitor) == expected_network_available);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
GNetworkMonitor *monitor;
|
||||||
|
GMainLoop *loop;
|
||||||
|
GSocketAddress *sockaddr;
|
||||||
|
gboolean should_be_reachable;
|
||||||
|
} CanReachData;
|
||||||
|
|
||||||
|
static void
|
||||||
|
reach_cb (GObject *source,
|
||||||
|
GAsyncResult *res,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
GError *error = NULL;
|
||||||
|
gboolean reachable;
|
||||||
|
CanReachData *data = user_data;
|
||||||
|
|
||||||
|
reachable = g_network_monitor_can_reach_finish (data->monitor, res, &error);
|
||||||
|
|
||||||
|
if (data->should_be_reachable)
|
||||||
|
g_assert_no_error (error);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
g_assert (error != NULL);
|
||||||
|
g_clear_error (&error);
|
||||||
|
}
|
||||||
|
g_assert (reachable == data->should_be_reachable);
|
||||||
|
|
||||||
|
g_main_loop_quit (data->loop);
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
test_reach_async (gpointer user_data)
|
||||||
|
{
|
||||||
|
CanReachData *data = user_data;
|
||||||
|
|
||||||
|
g_network_monitor_can_reach_async (data->monitor,
|
||||||
|
G_SOCKET_CONNECTABLE (data->sockaddr),
|
||||||
|
NULL,
|
||||||
|
reach_cb,
|
||||||
|
data);
|
||||||
|
return G_SOURCE_REMOVE;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
run_tests (GNetworkMonitor *monitor,
|
run_tests (GNetworkMonitor *monitor,
|
||||||
TestAddress *addresses,
|
TestAddress *addresses,
|
||||||
gboolean should_be_reachable)
|
gboolean should_be_reachable)
|
||||||
{
|
{
|
||||||
GError *error = NULL;
|
GError *error = NULL;
|
||||||
int i;
|
int i;
|
||||||
gboolean reachable;
|
gboolean reachable;
|
||||||
GSocketAddress *sockaddr;
|
GSocketAddress *sockaddr;
|
||||||
|
CanReachData data;
|
||||||
|
|
||||||
|
data.monitor = monitor;
|
||||||
|
data.loop = g_main_loop_new (NULL, FALSE);
|
||||||
|
|
||||||
for (i = 0; addresses[i].address; i++)
|
for (i = 0; addresses[i].address; i++)
|
||||||
{
|
{
|
||||||
sockaddr = g_inet_socket_address_new (addresses[i].address, 0);
|
sockaddr = g_inet_socket_address_new (addresses[i].address, 0);
|
||||||
reachable = g_network_monitor_can_reach (monitor,
|
reachable = g_network_monitor_can_reach (monitor,
|
||||||
G_SOCKET_CONNECTABLE (sockaddr),
|
G_SOCKET_CONNECTABLE (sockaddr),
|
||||||
NULL, &error);
|
NULL, &error);
|
||||||
|
data.sockaddr = sockaddr;
|
||||||
|
data.should_be_reachable = should_be_reachable;
|
||||||
|
|
||||||
|
g_idle_add (test_reach_async, &data);
|
||||||
|
g_main_loop_run (data.loop);
|
||||||
|
|
||||||
g_object_unref (sockaddr);
|
g_object_unref (sockaddr);
|
||||||
g_assert_cmpint (reachable, ==, should_be_reachable);
|
g_assert_cmpint (reachable, ==, should_be_reachable);
|
||||||
if (should_be_reachable)
|
if (should_be_reachable)
|
||||||
g_assert_no_error (error);
|
g_assert_no_error (error);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
g_assert (error != NULL);
|
g_assert (error != NULL);
|
||||||
g_clear_error (&error);
|
g_clear_error (&error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
test_default (void)
|
test_default (void)
|
||||||
{
|
{
|
||||||
GNetworkMonitor *monitor;
|
GNetworkMonitor *monitor, *m;
|
||||||
GError *error = NULL;
|
GError *error = NULL;
|
||||||
|
|
||||||
|
m = g_network_monitor_get_default ();
|
||||||
|
g_assert (G_IS_NETWORK_MONITOR (m));
|
||||||
|
|
||||||
monitor = g_initable_new (G_TYPE_NETWORK_MONITOR_BASE, NULL, &error, NULL);
|
monitor = g_initable_new (G_TYPE_NETWORK_MONITOR_BASE, NULL, &error, NULL);
|
||||||
g_assert_no_error (error);
|
g_assert_no_error (error);
|
||||||
|
|
||||||
@ -212,10 +268,10 @@ test_remove_default (void)
|
|||||||
assert_signals (monitor, FALSE, FALSE, TRUE);
|
assert_signals (monitor, FALSE, FALSE, TRUE);
|
||||||
|
|
||||||
g_network_monitor_base_remove_network (G_NETWORK_MONITOR_BASE (monitor),
|
g_network_monitor_base_remove_network (G_NETWORK_MONITOR_BASE (monitor),
|
||||||
ip4_default);
|
ip4_default);
|
||||||
assert_signals (monitor, FALSE, TRUE, TRUE);
|
assert_signals (monitor, FALSE, TRUE, TRUE);
|
||||||
g_network_monitor_base_remove_network (G_NETWORK_MONITOR_BASE (monitor),
|
g_network_monitor_base_remove_network (G_NETWORK_MONITOR_BASE (monitor),
|
||||||
ip6_default);
|
ip6_default);
|
||||||
assert_signals (monitor, TRUE, TRUE, FALSE);
|
assert_signals (monitor, TRUE, TRUE, FALSE);
|
||||||
|
|
||||||
/* Now nothing should be reachable */
|
/* Now nothing should be reachable */
|
||||||
@ -240,16 +296,16 @@ test_add_networks (void)
|
|||||||
assert_signals (monitor, FALSE, FALSE, TRUE);
|
assert_signals (monitor, FALSE, FALSE, TRUE);
|
||||||
|
|
||||||
g_network_monitor_base_remove_network (G_NETWORK_MONITOR_BASE (monitor),
|
g_network_monitor_base_remove_network (G_NETWORK_MONITOR_BASE (monitor),
|
||||||
ip4_default);
|
ip4_default);
|
||||||
assert_signals (monitor, FALSE, TRUE, TRUE);
|
assert_signals (monitor, FALSE, TRUE, TRUE);
|
||||||
g_network_monitor_base_remove_network (G_NETWORK_MONITOR_BASE (monitor),
|
g_network_monitor_base_remove_network (G_NETWORK_MONITOR_BASE (monitor),
|
||||||
ip6_default);
|
ip6_default);
|
||||||
assert_signals (monitor, TRUE, TRUE, FALSE);
|
assert_signals (monitor, TRUE, TRUE, FALSE);
|
||||||
|
|
||||||
/* Now add the masks one by one */
|
/* Now add the masks one by one */
|
||||||
|
|
||||||
g_network_monitor_base_add_network (G_NETWORK_MONITOR_BASE (monitor),
|
g_network_monitor_base_add_network (G_NETWORK_MONITOR_BASE (monitor),
|
||||||
net127.mask);
|
net127.mask);
|
||||||
assert_signals (monitor, FALSE, TRUE, FALSE);
|
assert_signals (monitor, FALSE, TRUE, FALSE);
|
||||||
|
|
||||||
run_tests (monitor, net127.addresses, TRUE);
|
run_tests (monitor, net127.addresses, TRUE);
|
||||||
@ -260,7 +316,7 @@ test_add_networks (void)
|
|||||||
run_tests (monitor, unmatched, FALSE);
|
run_tests (monitor, unmatched, FALSE);
|
||||||
|
|
||||||
g_network_monitor_base_add_network (G_NETWORK_MONITOR_BASE (monitor),
|
g_network_monitor_base_add_network (G_NETWORK_MONITOR_BASE (monitor),
|
||||||
net10.mask);
|
net10.mask);
|
||||||
assert_signals (monitor, FALSE, TRUE, FALSE);
|
assert_signals (monitor, FALSE, TRUE, FALSE);
|
||||||
run_tests (monitor, net127.addresses, TRUE);
|
run_tests (monitor, net127.addresses, TRUE);
|
||||||
run_tests (monitor, net10.addresses, TRUE);
|
run_tests (monitor, net10.addresses, TRUE);
|
||||||
@ -270,7 +326,7 @@ test_add_networks (void)
|
|||||||
run_tests (monitor, unmatched, FALSE);
|
run_tests (monitor, unmatched, FALSE);
|
||||||
|
|
||||||
g_network_monitor_base_add_network (G_NETWORK_MONITOR_BASE (monitor),
|
g_network_monitor_base_add_network (G_NETWORK_MONITOR_BASE (monitor),
|
||||||
net192.mask);
|
net192.mask);
|
||||||
assert_signals (monitor, FALSE, TRUE, FALSE);
|
assert_signals (monitor, FALSE, TRUE, FALSE);
|
||||||
run_tests (monitor, net127.addresses, TRUE);
|
run_tests (monitor, net127.addresses, TRUE);
|
||||||
run_tests (monitor, net10.addresses, TRUE);
|
run_tests (monitor, net10.addresses, TRUE);
|
||||||
@ -280,7 +336,7 @@ test_add_networks (void)
|
|||||||
run_tests (monitor, unmatched, FALSE);
|
run_tests (monitor, unmatched, FALSE);
|
||||||
|
|
||||||
g_network_monitor_base_add_network (G_NETWORK_MONITOR_BASE (monitor),
|
g_network_monitor_base_add_network (G_NETWORK_MONITOR_BASE (monitor),
|
||||||
netlocal6.mask);
|
netlocal6.mask);
|
||||||
assert_signals (monitor, FALSE, TRUE, FALSE);
|
assert_signals (monitor, FALSE, TRUE, FALSE);
|
||||||
run_tests (monitor, net127.addresses, TRUE);
|
run_tests (monitor, net127.addresses, TRUE);
|
||||||
run_tests (monitor, net10.addresses, TRUE);
|
run_tests (monitor, net10.addresses, TRUE);
|
||||||
@ -290,7 +346,7 @@ test_add_networks (void)
|
|||||||
run_tests (monitor, unmatched, FALSE);
|
run_tests (monitor, unmatched, FALSE);
|
||||||
|
|
||||||
g_network_monitor_base_add_network (G_NETWORK_MONITOR_BASE (monitor),
|
g_network_monitor_base_add_network (G_NETWORK_MONITOR_BASE (monitor),
|
||||||
netfe80.mask);
|
netfe80.mask);
|
||||||
assert_signals (monitor, FALSE, TRUE, FALSE);
|
assert_signals (monitor, FALSE, TRUE, FALSE);
|
||||||
run_tests (monitor, net127.addresses, TRUE);
|
run_tests (monitor, net127.addresses, TRUE);
|
||||||
run_tests (monitor, net10.addresses, TRUE);
|
run_tests (monitor, net10.addresses, TRUE);
|
||||||
@ -313,27 +369,27 @@ test_remove_networks (void)
|
|||||||
assert_signals (monitor, FALSE, FALSE, TRUE);
|
assert_signals (monitor, FALSE, FALSE, TRUE);
|
||||||
|
|
||||||
g_network_monitor_base_remove_network (G_NETWORK_MONITOR_BASE (monitor),
|
g_network_monitor_base_remove_network (G_NETWORK_MONITOR_BASE (monitor),
|
||||||
ip4_default);
|
ip4_default);
|
||||||
assert_signals (monitor, FALSE, TRUE, TRUE);
|
assert_signals (monitor, FALSE, TRUE, TRUE);
|
||||||
g_network_monitor_base_remove_network (G_NETWORK_MONITOR_BASE (monitor),
|
g_network_monitor_base_remove_network (G_NETWORK_MONITOR_BASE (monitor),
|
||||||
ip6_default);
|
ip6_default);
|
||||||
assert_signals (monitor, TRUE, TRUE, FALSE);
|
assert_signals (monitor, TRUE, TRUE, FALSE);
|
||||||
|
|
||||||
/* First add them */
|
/* First add them */
|
||||||
g_network_monitor_base_add_network (G_NETWORK_MONITOR_BASE (monitor),
|
g_network_monitor_base_add_network (G_NETWORK_MONITOR_BASE (monitor),
|
||||||
net127.mask);
|
net127.mask);
|
||||||
assert_signals (monitor, FALSE, TRUE, FALSE);
|
assert_signals (monitor, FALSE, TRUE, FALSE);
|
||||||
g_network_monitor_base_add_network (G_NETWORK_MONITOR_BASE (monitor),
|
g_network_monitor_base_add_network (G_NETWORK_MONITOR_BASE (monitor),
|
||||||
net10.mask);
|
net10.mask);
|
||||||
assert_signals (monitor, FALSE, TRUE, FALSE);
|
assert_signals (monitor, FALSE, TRUE, FALSE);
|
||||||
g_network_monitor_base_add_network (G_NETWORK_MONITOR_BASE (monitor),
|
g_network_monitor_base_add_network (G_NETWORK_MONITOR_BASE (monitor),
|
||||||
net192.mask);
|
net192.mask);
|
||||||
assert_signals (monitor, FALSE, TRUE, FALSE);
|
assert_signals (monitor, FALSE, TRUE, FALSE);
|
||||||
g_network_monitor_base_add_network (G_NETWORK_MONITOR_BASE (monitor),
|
g_network_monitor_base_add_network (G_NETWORK_MONITOR_BASE (monitor),
|
||||||
netlocal6.mask);
|
netlocal6.mask);
|
||||||
assert_signals (monitor, FALSE, TRUE, FALSE);
|
assert_signals (monitor, FALSE, TRUE, FALSE);
|
||||||
g_network_monitor_base_add_network (G_NETWORK_MONITOR_BASE (monitor),
|
g_network_monitor_base_add_network (G_NETWORK_MONITOR_BASE (monitor),
|
||||||
netfe80.mask);
|
netfe80.mask);
|
||||||
assert_signals (monitor, FALSE, TRUE, FALSE);
|
assert_signals (monitor, FALSE, TRUE, FALSE);
|
||||||
|
|
||||||
run_tests (monitor, net127.addresses, TRUE);
|
run_tests (monitor, net127.addresses, TRUE);
|
||||||
@ -345,7 +401,7 @@ test_remove_networks (void)
|
|||||||
|
|
||||||
/* Now remove them one by one */
|
/* Now remove them one by one */
|
||||||
g_network_monitor_base_remove_network (G_NETWORK_MONITOR_BASE (monitor),
|
g_network_monitor_base_remove_network (G_NETWORK_MONITOR_BASE (monitor),
|
||||||
net127.mask);
|
net127.mask);
|
||||||
assert_signals (monitor, FALSE, TRUE, FALSE);
|
assert_signals (monitor, FALSE, TRUE, FALSE);
|
||||||
run_tests (monitor, net127.addresses, FALSE);
|
run_tests (monitor, net127.addresses, FALSE);
|
||||||
run_tests (monitor, net10.addresses, TRUE);
|
run_tests (monitor, net10.addresses, TRUE);
|
||||||
@ -355,7 +411,7 @@ test_remove_networks (void)
|
|||||||
run_tests (monitor, unmatched, FALSE);
|
run_tests (monitor, unmatched, FALSE);
|
||||||
|
|
||||||
g_network_monitor_base_remove_network (G_NETWORK_MONITOR_BASE (monitor),
|
g_network_monitor_base_remove_network (G_NETWORK_MONITOR_BASE (monitor),
|
||||||
net10.mask);
|
net10.mask);
|
||||||
assert_signals (monitor, FALSE, TRUE, FALSE);
|
assert_signals (monitor, FALSE, TRUE, FALSE);
|
||||||
run_tests (monitor, net127.addresses, FALSE);
|
run_tests (monitor, net127.addresses, FALSE);
|
||||||
run_tests (monitor, net10.addresses, FALSE);
|
run_tests (monitor, net10.addresses, FALSE);
|
||||||
@ -365,7 +421,7 @@ test_remove_networks (void)
|
|||||||
run_tests (monitor, unmatched, FALSE);
|
run_tests (monitor, unmatched, FALSE);
|
||||||
|
|
||||||
g_network_monitor_base_remove_network (G_NETWORK_MONITOR_BASE (monitor),
|
g_network_monitor_base_remove_network (G_NETWORK_MONITOR_BASE (monitor),
|
||||||
net192.mask);
|
net192.mask);
|
||||||
assert_signals (monitor, FALSE, TRUE, FALSE);
|
assert_signals (monitor, FALSE, TRUE, FALSE);
|
||||||
run_tests (monitor, net127.addresses, FALSE);
|
run_tests (monitor, net127.addresses, FALSE);
|
||||||
run_tests (monitor, net10.addresses, FALSE);
|
run_tests (monitor, net10.addresses, FALSE);
|
||||||
@ -375,7 +431,7 @@ test_remove_networks (void)
|
|||||||
run_tests (monitor, unmatched, FALSE);
|
run_tests (monitor, unmatched, FALSE);
|
||||||
|
|
||||||
g_network_monitor_base_remove_network (G_NETWORK_MONITOR_BASE (monitor),
|
g_network_monitor_base_remove_network (G_NETWORK_MONITOR_BASE (monitor),
|
||||||
netlocal6.mask);
|
netlocal6.mask);
|
||||||
assert_signals (monitor, FALSE, TRUE, FALSE);
|
assert_signals (monitor, FALSE, TRUE, FALSE);
|
||||||
run_tests (monitor, net127.addresses, FALSE);
|
run_tests (monitor, net127.addresses, FALSE);
|
||||||
run_tests (monitor, net10.addresses, FALSE);
|
run_tests (monitor, net10.addresses, FALSE);
|
||||||
@ -385,7 +441,7 @@ test_remove_networks (void)
|
|||||||
run_tests (monitor, unmatched, FALSE);
|
run_tests (monitor, unmatched, FALSE);
|
||||||
|
|
||||||
g_network_monitor_base_remove_network (G_NETWORK_MONITOR_BASE (monitor),
|
g_network_monitor_base_remove_network (G_NETWORK_MONITOR_BASE (monitor),
|
||||||
netfe80.mask);
|
netfe80.mask);
|
||||||
assert_signals (monitor, FALSE, TRUE, FALSE);
|
assert_signals (monitor, FALSE, TRUE, FALSE);
|
||||||
run_tests (monitor, net127.addresses, FALSE);
|
run_tests (monitor, net127.addresses, FALSE);
|
||||||
run_tests (monitor, net10.addresses, FALSE);
|
run_tests (monitor, net10.addresses, FALSE);
|
||||||
@ -411,16 +467,16 @@ init_test (TestMask *test)
|
|||||||
{
|
{
|
||||||
test->addresses[i].address = g_inet_address_new_from_string (test->addresses[i].string);
|
test->addresses[i].address = g_inet_address_new_from_string (test->addresses[i].string);
|
||||||
if (strchr (test->addresses[i].string, ':'))
|
if (strchr (test->addresses[i].string, ':'))
|
||||||
g_assert_cmpint (g_inet_address_get_family (test->addresses[i].address), ==, G_SOCKET_FAMILY_IPV6);
|
g_assert_cmpint (g_inet_address_get_family (test->addresses[i].address), ==, G_SOCKET_FAMILY_IPV6);
|
||||||
else
|
else
|
||||||
g_assert_cmpint (g_inet_address_get_family (test->addresses[i].address), ==, G_SOCKET_FAMILY_IPV4);
|
g_assert_cmpint (g_inet_address_get_family (test->addresses[i].address), ==, G_SOCKET_FAMILY_IPV4);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
watch_network_changed (GNetworkMonitor *monitor,
|
watch_network_changed (GNetworkMonitor *monitor,
|
||||||
gboolean available,
|
gboolean available,
|
||||||
gpointer user_data)
|
gpointer user_data)
|
||||||
{
|
{
|
||||||
g_print ("Network is %s\n", available ? "up" : "down");
|
g_print ("Network is %s\n", available ? "up" : "down");
|
||||||
}
|
}
|
||||||
@ -434,7 +490,7 @@ do_watch_network (void)
|
|||||||
g_print ("Monitoring via %s\n", g_type_name_from_instance ((GTypeInstance *) monitor));
|
g_print ("Monitoring via %s\n", g_type_name_from_instance ((GTypeInstance *) monitor));
|
||||||
|
|
||||||
g_signal_connect (monitor, "network-changed",
|
g_signal_connect (monitor, "network-changed",
|
||||||
G_CALLBACK (watch_network_changed), NULL);
|
G_CALLBACK (watch_network_changed), NULL);
|
||||||
watch_network_changed (monitor, g_network_monitor_get_network_available (monitor), NULL);
|
watch_network_changed (monitor, g_network_monitor_get_network_available (monitor), NULL);
|
||||||
|
|
||||||
loop = g_main_loop_new (NULL, FALSE);
|
loop = g_main_loop_new (NULL, FALSE);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user