mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager
synced 2024-10-06 16:21:50 +00:00
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:
parent
fe264a2d01
commit
48ad586209
|
@ -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 ();
|
||||
}
|
||||
|
|
|
@ -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 ();
|
||||
|
||||
|
|
Loading…
Reference in a new issue