summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon McVittie <simon.mcvittie@collabora.co.uk>2019-10-29 08:37:22 +0000
committerSimon McVittie <simon.mcvittie@collabora.co.uk>2019-10-29 08:37:22 +0000
commit4e8d058828be0bd5fe2c68f54a6b3b0cdb33032e (patch)
tree01d38d7127f89c94c52df618eb40fd84588614bb
parent714f9f92b77bf2552ffe85aa0f4cb92f4727ba90 (diff)
parent6fb38c3f25e8e859812e25fe88fad752a68133b3 (diff)
downloadglib-4e8d058828be0bd5fe2c68f54a6b3b0cdb33032e.tar.gz
Merge branch '1912-gdbus-peer-test' into 'master'
tests: Isolate directories in gdbus-peer test Closes #1912 See merge request GNOME/glib!1192
-rw-r--r--gio/gdbusauthmechanismsha1.c26
-rw-r--r--gio/tests/gdbus-peer.c47
2 files changed, 54 insertions, 19 deletions
diff --git a/gio/gdbusauthmechanismsha1.c b/gio/gdbusauthmechanismsha1.c
index 553bcdc32..2754d3c2b 100644
--- a/gio/gdbusauthmechanismsha1.c
+++ b/gio/gdbusauthmechanismsha1.c
@@ -48,6 +48,7 @@ struct _GDBusAuthMechanismSha1Private
gboolean is_client;
gboolean is_server;
GDBusAuthMechanismState state;
+ gchar *reject_reason; /* non-NULL iff (state == G_DBUS_AUTH_MECHANISM_STATE_REJECTED) */
/* used on the client side */
gchar *to_send;
@@ -101,6 +102,7 @@ _g_dbus_auth_mechanism_sha1_finalize (GObject *object)
{
GDBusAuthMechanismSha1 *mechanism = G_DBUS_AUTH_MECHANISM_SHA1 (object);
+ g_free (mechanism->priv->reject_reason);
g_free (mechanism->priv->to_send);
g_free (mechanism->priv->cookie);
@@ -290,7 +292,7 @@ ensure_keyring_directory (GError **error)
goto out;
}
- if (g_mkdir (path, 0700) != 0)
+ if (g_mkdir_with_parents (path, 0700) != 0)
{
int errsv = errno;
g_set_error (error,
@@ -963,7 +965,8 @@ mechanism_server_data_receive (GDBusAuthMechanism *mechanism,
tokens = g_strsplit (data, " ", 0);
if (g_strv_length (tokens) != 2)
{
- g_warning ("Malformed data '%s'", data);
+ g_free (m->priv->reject_reason);
+ m->priv->reject_reason = g_strdup_printf ("Malformed data '%s'", data);
m->priv->state = G_DBUS_AUTH_MECHANISM_STATE_REJECTED;
goto out;
}
@@ -979,6 +982,8 @@ mechanism_server_data_receive (GDBusAuthMechanism *mechanism,
}
else
{
+ g_free (m->priv->reject_reason);
+ m->priv->reject_reason = g_strdup_printf ("SHA-1 mismatch");
m->priv->state = G_DBUS_AUTH_MECHANISM_STATE_REJECTED;
}
@@ -1014,7 +1019,8 @@ mechanism_server_data_send (GDBusAuthMechanism *mechanism,
&m->priv->cookie,
&error))
{
- g_warning ("Error adding entry to keyring: %s", error->message);
+ g_free (m->priv->reject_reason);
+ m->priv->reject_reason = g_strdup_printf ("Error adding entry to keyring: %s", error->message);
g_error_free (error);
m->priv->state = G_DBUS_AUTH_MECHANISM_STATE_REJECTED;
goto out;
@@ -1042,10 +1048,7 @@ mechanism_server_get_reject_reason (GDBusAuthMechanism *mechanism)
g_return_val_if_fail (m->priv->is_server && !m->priv->is_client, NULL);
g_return_val_if_fail (m->priv->state == G_DBUS_AUTH_MECHANISM_STATE_REJECTED, NULL);
- /* can never end up here because we are never in the REJECTED state */
- g_assert_not_reached ();
-
- return NULL;
+ return g_strdup (m->priv->reject_reason);
}
static void
@@ -1128,7 +1131,8 @@ mechanism_client_data_receive (GDBusAuthMechanism *mechanism,
tokens = g_strsplit (data, " ", 0);
if (g_strv_length (tokens) != 3)
{
- g_warning ("Malformed data '%s'", data);
+ g_free (m->priv->reject_reason);
+ m->priv->reject_reason = g_strdup_printf ("Malformed data '%s'", data);
m->priv->state = G_DBUS_AUTH_MECHANISM_STATE_REJECTED;
goto out;
}
@@ -1137,7 +1141,8 @@ mechanism_client_data_receive (GDBusAuthMechanism *mechanism,
cookie_id = g_ascii_strtoll (tokens[1], &endp, 10);
if (*endp != '\0')
{
- g_warning ("Malformed cookie_id '%s'", tokens[1]);
+ g_free (m->priv->reject_reason);
+ m->priv->reject_reason = g_strdup_printf ("Malformed cookie_id '%s'", tokens[1]);
m->priv->state = G_DBUS_AUTH_MECHANISM_STATE_REJECTED;
goto out;
}
@@ -1147,7 +1152,8 @@ mechanism_client_data_receive (GDBusAuthMechanism *mechanism,
cookie = keyring_lookup_entry (cookie_context, cookie_id, &error);
if (cookie == NULL)
{
- g_warning ("Problems looking up entry in keyring: %s", error->message);
+ g_free (m->priv->reject_reason);
+ m->priv->reject_reason = g_strdup_printf ("Problems looking up entry in keyring: %s", error->message);
g_error_free (error);
m->priv->state = G_DBUS_AUTH_MECHANISM_STATE_REJECTED;
goto out;
diff --git a/gio/tests/gdbus-peer.c b/gio/tests/gdbus-peer.c
index a3260a6e0..dc4176cf2 100644
--- a/gio/tests/gdbus-peer.c
+++ b/gio/tests/gdbus-peer.c
@@ -1033,6 +1033,9 @@ do_test_peer (void)
static void
test_peer (void)
{
+ test_guid = g_dbus_generate_guid ();
+ loop = g_main_loop_new (NULL, FALSE);
+
/* Run this test multiple times using different address formats to ensure
* they all work.
*/
@@ -1049,6 +1052,9 @@ test_peer (void)
do_test_peer ();
teardown_test_address ();
#endif
+
+ g_main_loop_unref (loop);
+ g_free (test_guid);
}
/* ---------------------------------------------------------------------------------------------------- */
@@ -1064,6 +1070,9 @@ test_peer_signals (void)
g_test_bug ("https://gitlab.gnome.org/GNOME/glib/issues/1620");
+ test_guid = g_dbus_generate_guid ();
+ loop = g_main_loop_new (NULL, FALSE);
+
setup_test_address ();
memset (&data, '\0', sizeof (PeerData));
data.current_connections = g_ptr_array_new_with_free_func (g_object_unref);
@@ -1119,6 +1128,9 @@ test_peer_signals (void)
g_thread_join (service_thread);
teardown_test_address ();
+
+ g_main_loop_unref (loop);
+ g_free (test_guid);
}
/* ---------------------------------------------------------------------------------------------------- */
@@ -1260,6 +1272,9 @@ delayed_message_processing (void)
GThread *service_thread;
guint n;
+ test_guid = g_dbus_generate_guid ();
+ loop = g_main_loop_new (NULL, FALSE);
+
setup_test_address ();
data = g_new0 (DmpData, 1);
@@ -1307,6 +1322,9 @@ delayed_message_processing (void)
g_thread_join (service_thread);
dmp_data_free (data);
teardown_test_address ();
+
+ g_main_loop_unref (loop);
+ g_free (test_guid);
}
/* ---------------------------------------------------------------------------------------------------- */
@@ -1405,6 +1423,9 @@ test_nonce_tcp (void)
gboolean res;
const gchar *address;
+ test_guid = g_dbus_generate_guid ();
+ loop = g_main_loop_new (NULL, FALSE);
+
memset (&data, '\0', sizeof (PeerData));
data.current_connections = g_ptr_array_new_with_free_func (g_object_unref);
@@ -1512,6 +1533,9 @@ test_nonce_tcp (void)
g_thread_join (service_thread);
g_ptr_array_unref (data.current_connections);
+
+ g_main_loop_unref (loop);
+ g_free (test_guid);
}
static void
@@ -1596,6 +1620,9 @@ test_tcp_anonymous (void)
GDBusConnection *connection;
GError *error;
+ test_guid = g_dbus_generate_guid ();
+ loop = g_main_loop_new (NULL, FALSE);
+
seen_connection = FALSE;
service_thread = g_thread_new ("tcp-anon-service",
tcp_anonymous_service_thread_func,
@@ -1623,6 +1650,9 @@ test_tcp_anonymous (void)
server = NULL;
g_thread_join (service_thread);
+
+ g_main_loop_unref (loop);
+ g_free (test_guid);
}
/* ---------------------------------------------------------------------------------------------------- */
@@ -1767,6 +1797,9 @@ codegen_test_peer (void)
GVariant *value;
const gchar *s;
+ test_guid = g_dbus_generate_guid ();
+ loop = g_main_loop_new (NULL, FALSE);
+
setup_test_address ();
/* bring up a server - we run the server in a different thread to avoid deadlocks */
@@ -1874,6 +1907,9 @@ codegen_test_peer (void)
g_thread_join (service_thread);
teardown_test_address ();
+
+ g_main_loop_unref (loop);
+ g_free (test_guid);
}
/* ---------------------------------------------------------------------------------------------------- */
@@ -1886,17 +1922,12 @@ main (int argc,
gint ret;
GDBusNodeInfo *introspection_data = NULL;
- g_test_init (&argc, &argv, NULL);
+ g_test_init (&argc, &argv, G_TEST_OPTION_ISOLATE_DIRS, NULL);
introspection_data = g_dbus_node_info_new_for_xml (test_interface_introspection_xml, NULL);
g_assert (introspection_data != NULL);
test_interface_introspection_data = introspection_data->interfaces[0];
- test_guid = g_dbus_generate_guid ();
-
- /* all the tests rely on a shared main loop */
- loop = g_main_loop_new (NULL, FALSE);
-
g_test_add_func ("/gdbus/peer-to-peer", test_peer);
g_test_add_func ("/gdbus/peer-to-peer/signals", test_peer_signals);
g_test_add_func ("/gdbus/delayed-message-processing", delayed_message_processing);
@@ -1906,10 +1937,8 @@ main (int argc,
g_test_add_func ("/gdbus/credentials", test_credentials);
g_test_add_func ("/gdbus/codegen-peer-to-peer", codegen_test_peer);
- ret = g_test_run();
+ ret = g_test_run ();
- g_main_loop_unref (loop);
- g_free (test_guid);
g_dbus_node_info_unref (introspection_data);
return ret;