Improve GNetworkMonitor test coverage

This commit is contained in:
Matthias Clasen 2012-06-04 05:59:46 -04:00
parent 4ad5210b35
commit 721366d088

View File

@ -151,6 +151,49 @@ assert_signals (GNetworkMonitor *monitor,
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
run_tests (GNetworkMonitor *monitor,
TestAddress *addresses,
@ -160,6 +203,10 @@ run_tests (GNetworkMonitor *monitor,
int i;
gboolean reachable;
GSocketAddress *sockaddr;
CanReachData data;
data.monitor = monitor;
data.loop = g_main_loop_new (NULL, FALSE);
for (i = 0; addresses[i].address; i++)
{
@ -167,6 +214,12 @@ run_tests (GNetworkMonitor *monitor,
reachable = g_network_monitor_can_reach (monitor,
G_SOCKET_CONNECTABLE (sockaddr),
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_assert_cmpint (reachable, ==, should_be_reachable);
if (should_be_reachable)
@ -182,9 +235,12 @@ run_tests (GNetworkMonitor *monitor,
static void
test_default (void)
{
GNetworkMonitor *monitor;
GNetworkMonitor *monitor, *m;
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);
g_assert_no_error (error);