summary refs log tree commit diff
path: root/src/tests/config/test-config.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/tests/config/test-config.c')
-rw-r--r--src/tests/config/test-config.c87
1 files changed, 86 insertions, 1 deletions
diff --git a/src/tests/config/test-config.c b/src/tests/config/test-config.c
index 8b8028e6..6dad8216 100644
--- a/src/tests/config/test-config.c
+++ b/src/tests/config/test-config.c
@@ -380,7 +380,7 @@ test_config_confdir (void)
 	g_assert_cmpstr (value, ==, "VAL5");
 	g_free (value);
 
-	nm_config_data_log (nm_config_get_data_orig (config), ">>> TEST: ");
+	nm_config_data_log (nm_config_get_data_orig (config), ">>> TEST: ", " ", NULL);
 
 	g_object_unref (config);
 }
@@ -396,6 +396,89 @@ test_config_confdir_parse_error (void)
 	g_clear_error (&error);
 }
 
+/*****************************************************************************/
+
+static void
+_test_signal_config_changed_cb (NMConfig *config,
+                                NMConfigData *config_data,
+                                NMConfigChangeFlags changes,
+                                NMConfigData *old_data,
+                                gpointer user_data)
+{
+	const NMConfigChangeFlags *expected = user_data;
+
+	g_assert (changes);
+	g_assert_cmpint (changes, ==, *expected);
+	g_assert (NM_IS_CONFIG (config));
+	g_assert (NM_IS_CONFIG_DATA (config_data));
+
+	g_assert (config_data == old_data);
+	g_assert (config_data == nm_config_get_data (config));
+}
+
+static void
+_test_signal_config_changed_cb2 (NMConfig *config,
+                                 NMConfigData *config_data,
+                                 NMConfigChangeFlags changes,
+                                 NMConfigData *old_data,
+                                 gpointer user_data)
+{
+	const NMConfigChangeFlags *expected = user_data;
+
+	g_assert (changes);
+	g_assert_cmpint (changes, ==, *expected);
+}
+
+static void
+test_config_signal (void)
+{
+	gs_unref_object NMConfig *config = NULL;
+	NMConfigChangeFlags expected;
+	gs_unref_object NMConfigData *config_data_orig = NULL;
+
+	config = setup_config (NULL, SRCDIR "/NetworkManager.conf", "/no/such/dir", NULL);
+
+	config_data_orig = g_object_ref (nm_config_get_data_orig (config));
+
+	g_signal_connect (G_OBJECT (config),
+	                  NM_CONFIG_SIGNAL_CONFIG_CHANGED,
+	                  G_CALLBACK (_test_signal_config_changed_cb),
+	                  &expected);
+
+	expected = NM_CONFIG_CHANGE_SIGUSR1;
+	g_test_expect_message ("NetworkManager", G_LOG_LEVEL_MESSAGE, "*config: signal SIGUSR1");
+	nm_config_reload (config, SIGUSR1);
+
+	expected = NM_CONFIG_CHANGE_SIGUSR2;
+	g_test_expect_message ("NetworkManager", G_LOG_LEVEL_MESSAGE, "*config: signal SIGUSR2");
+	nm_config_reload (config, SIGUSR2);
+
+	expected = NM_CONFIG_CHANGE_SIGHUP;
+	g_test_expect_message ("NetworkManager", G_LOG_LEVEL_MESSAGE, "*config: signal SIGHUP (no changes from disk)*");
+	nm_config_reload (config, SIGHUP);
+
+
+	/* test with subscribing two signals...
+	 *
+	 * This test exposes glib bug https://bugzilla.redhat.com/show_bug.cgi?id=1260577
+	 * for which we however have a workaround in 'nm-config.c' */
+	g_signal_connect (G_OBJECT (config),
+	                  NM_CONFIG_SIGNAL_CONFIG_CHANGED,
+	                  G_CALLBACK (_test_signal_config_changed_cb2),
+	                  &expected);
+	expected = NM_CONFIG_CHANGE_SIGUSR2;
+	g_test_expect_message ("NetworkManager", G_LOG_LEVEL_MESSAGE, "*config: signal SIGUSR2");
+	nm_config_reload (config, SIGUSR2);
+	g_signal_handlers_disconnect_by_func (config, _test_signal_config_changed_cb2, &expected);
+
+
+	g_signal_handlers_disconnect_by_func (config, _test_signal_config_changed_cb, &expected);
+
+	g_assert (config_data_orig == nm_config_get_data (config));
+}
+
+/*****************************************************************************/
+
 NMTST_DEFINE ();
 
 int
@@ -419,6 +502,8 @@ main (int argc, char **argv)
 	g_test_add_func ("/config/confdir", test_config_confdir);
 	g_test_add_func ("/config/confdir-parse-error", test_config_confdir_parse_error);
 
+	g_test_add_func ("/config/signal", test_config_signal);
+
 	/* This one has to come last, because it leaves its values in
 	 * nm-config.c's global variables, and there's no way to reset
 	 * those to NULL.