libnm-glib: add tests of NMClient:manager-running and NMRemoteSettings:service-running

Test that the code to track whether NetworkManager is running works
correctly.
This commit is contained in:
Dan Winship 2014-07-31 09:24:45 -04:00
parent fe264a2d01
commit 48ad586209
2 changed files with 154 additions and 0 deletions

View file

@ -807,6 +807,73 @@ test_devices_array (void)
g_clear_pointer (&sinfo, nm_test_service_cleanup);
}
static void
manager_running_changed (GObject *client,
GParamSpec *pspec,
gpointer user_data)
{
int *running_changed = user_data;
(*running_changed)++;
g_main_loop_quit (loop);
}
static void
test_client_manager_running (void)
{
NMClient *client1, *client2;
guint quit_id;
int running_changed = 0;
GError *error = NULL;
client1 = test_client_new ();
g_assert (!nm_client_get_manager_running (client1));
g_assert_cmpstr (nm_client_get_version (client1), ==, NULL);
g_assert (!nm_client_networking_get_enabled (client1));
/* This will have no effect, but it shouldn't cause any warnings either. */
nm_client_networking_set_enabled (client1, TRUE);
g_assert (!nm_client_networking_get_enabled (client1));
/* OTOH, this should result in an error */
nm_client_set_logging (client1, "DEFAULT", "INFO", &error);
g_assert_error (error, NM_CLIENT_ERROR, NM_CLIENT_ERROR_MANAGER_NOT_RUNNING);
g_clear_error (&error);
/* Now start the test service. */
sinfo = nm_test_service_init ();
client2 = test_client_new ();
/* client2 should know that NM is running, but the previously-created
* client1 hasn't gotten the news yet.
*/
g_assert (!nm_client_get_manager_running (client1));
g_assert (nm_client_get_manager_running (client2));
g_signal_connect (client1, "notify::" NM_CLIENT_MANAGER_RUNNING,
G_CALLBACK (manager_running_changed), &running_changed);
quit_id = g_timeout_add_seconds (5, loop_quit, loop);
g_main_loop_run (loop);
g_assert_cmpint (running_changed, ==, 1);
g_assert (nm_client_get_manager_running (client1));
g_source_remove (quit_id);
/* And kill it */
g_clear_pointer (&sinfo, nm_test_service_cleanup);
g_assert (nm_client_get_manager_running (client1));
quit_id = g_timeout_add_seconds (5, loop_quit, loop);
g_main_loop_run (loop);
g_assert_cmpint (running_changed, ==, 2);
g_assert (!nm_client_get_manager_running (client1));
g_source_remove (quit_id);
g_object_unref (client1);
g_object_unref (client2);
}
/*******************************************************************/
int
@ -824,6 +891,7 @@ main (int argc, char **argv)
g_test_add_func ("/libnm-glib/wifi-ap-added-removed", test_wifi_ap_added_removed);
g_test_add_func ("/libnm-glib/wimax-nsp-added-removed", test_wimax_nsp_added_removed);
g_test_add_func ("/libnm-glib/devices-array", test_devices_array);
g_test_add_func ("/libnm-glib/client-manager-running", test_client_manager_running);
return g_test_run ();
}

View file

@ -334,6 +334,88 @@ test_remove_connection (void)
/*******************************************************************/
static GMainLoop *loop;
static gboolean
loop_quit (gpointer user_data)
{
g_main_loop_quit (loop);
return G_SOURCE_REMOVE;
}
static void
settings_service_running_changed (GObject *client,
GParamSpec *pspec,
gpointer user_data)
{
int *running_changed = user_data;
(*running_changed)++;
g_main_loop_quit (loop);
}
static void
test_service_running (void)
{
NMRemoteSettings *settings2;
guint quit_id;
int running_changed = 0;
gboolean running;
loop = g_main_loop_new (NULL, FALSE);
g_object_get (G_OBJECT (settings),
NM_REMOTE_SETTINGS_SERVICE_RUNNING, &running,
NULL);
g_assert (running == TRUE);
/* Now kill the test service. */
nm_test_service_cleanup (sinfo);
settings2 = nm_remote_settings_new (bus);
/* settings2 should know that NM is running, but the previously-created
* settings hasn't gotten the news yet.
*/
g_object_get (G_OBJECT (settings2),
NM_REMOTE_SETTINGS_SERVICE_RUNNING, &running,
NULL);
g_assert (running == FALSE);
g_object_get (G_OBJECT (settings),
NM_REMOTE_SETTINGS_SERVICE_RUNNING, &running,
NULL);
g_assert (running == TRUE);
g_signal_connect (settings, "notify::" NM_REMOTE_SETTINGS_SERVICE_RUNNING,
G_CALLBACK (settings_service_running_changed), &running_changed);
quit_id = g_timeout_add_seconds (5, loop_quit, loop);
g_main_loop_run (loop);
g_assert_cmpint (running_changed, ==, 1);
g_source_remove (quit_id);
g_object_get (G_OBJECT (settings2),
NM_REMOTE_SETTINGS_SERVICE_RUNNING, &running,
NULL);
g_assert (running == FALSE);
/* Now restart it */
sinfo = nm_test_service_init ();
quit_id = g_timeout_add_seconds (5, loop_quit, loop);
g_main_loop_run (loop);
g_assert_cmpint (running_changed, ==, 2);
g_source_remove (quit_id);
g_object_get (G_OBJECT (settings2),
NM_REMOTE_SETTINGS_SERVICE_RUNNING, &running,
NULL);
g_assert (running == TRUE);
g_object_unref (settings2);
}
/*******************************************************************/
int
main (int argc, char **argv)
{
@ -354,10 +436,14 @@ main (int argc, char **argv)
settings = nm_remote_settings_new (bus);
g_assert (settings != NULL);
/* FIXME: these tests assume that they get run in order, but g_test_run()
* does not actually guarantee that!
*/
g_test_add_func ("/remote_settings/add_connection", test_add_connection);
g_test_add_func ("/remote_settings/make_invisible", test_make_invisible);
g_test_add_func ("/remote_settings/make_visible", test_make_visible);
g_test_add_func ("/remote_settings/remove_connection", test_remove_connection);
g_test_add_func ("/remote_settings/service_running", test_service_running);
ret = g_test_run ();