summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Winship <danw@gnome.org>2014-07-31 09:24:45 -0400
committerDan Winship <danw@gnome.org>2014-08-01 10:15:23 -0400
commit2630869683a98ef036ff2237731beeee0bcf0ba9 (patch)
tree6bdfc8eb6ebe636f1f70d4b54f34e13b0b33aa18
parent121d4e93d5c31746b70602a38b9f7c5aff9b2326 (diff)
downloadNetworkManager-danw/testfixes.tar.gz
libnm-glib: add tests of NMClient:manager-running and NMRemoteSettings:service-runningdanw/testfixes
Test that the code to track whether NetworkManager is running works correctly.
-rw-r--r--libnm-glib/tests/test-nm-client.c68
-rw-r--r--libnm-glib/tests/test-remote-settings-client.c86
2 files changed, 154 insertions, 0 deletions
diff --git a/libnm-glib/tests/test-nm-client.c b/libnm-glib/tests/test-nm-client.c
index dc6126451b..eebf8358c7 100644
--- a/libnm-glib/tests/test-nm-client.c
+++ b/libnm-glib/tests/test-nm-client.c
@@ -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 ();
}
diff --git a/libnm-glib/tests/test-remote-settings-client.c b/libnm-glib/tests/test-remote-settings-client.c
index 54006cacb2..b0927bb2f1 100644
--- a/libnm-glib/tests/test-remote-settings-client.c
+++ b/libnm-glib/tests/test-remote-settings-client.c
@@ -322,6 +322,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)
{
@@ -342,10 +424,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 ();