[gnome-keyring] [daemon] Allow running in a test environment.



commit 8864fa25ef39731cfaa820018f5f517bd8e39f4d
Author: Stef Walter <stef memberwebs com>
Date:   Sun Feb 14 00:53:46 2010 +0000

    [daemon] Allow running in a test environment.
    
    Setting the GNOME_KERING_TEST_PATH and GNOME_KEYRING_TEST_SERVICE
    environment variables, set the data directory, and dbus service
    for a gnome-keyring-daemon respectively. Must have been built
    with --enable-tests

 daemon/dbus/gkd-dbus-secrets.c  |   17 +++++++++++++----
 daemon/dbus/gkd-dbus-service.c  |   17 +++++++++++++----
 daemon/dbus/gkd-dbus.c          |    9 ---------
 daemon/pkcs11/gkd-pkcs11-auth.c |    2 +-
 daemon/pkcs11/gkd-pkcs11.c      |   17 ++++++++++++++++-
 tests/gtest-helpers.c           |    4 +---
 6 files changed, 44 insertions(+), 22 deletions(-)
---
diff --git a/daemon/dbus/gkd-dbus-secrets.c b/daemon/dbus/gkd-dbus-secrets.c
index 277e9c5..76cf0ad 100644
--- a/daemon/dbus/gkd-dbus-secrets.c
+++ b/daemon/dbus/gkd-dbus-secrets.c
@@ -71,19 +71,29 @@ gkd_dbus_secrets_startup (void)
 {
 	DBusError error = DBUS_ERROR_INIT;
 	dbus_uint32_t result = 0;
+	const gchar *service = NULL;
+	unsigned int flags = 0;
 	GP11Slot *slot;
 
 	g_return_val_if_fail (dbus_conn, FALSE);
 
+#ifdef WITH_TESTS
+	service = g_getenv ("GNOME_KEYRING_TEST_SERVICE");
+	if (service && service[0])
+		flags = DBUS_NAME_FLAG_ALLOW_REPLACEMENT | DBUS_NAME_FLAG_REPLACE_EXISTING;
+	else
+#endif
+		service = SECRET_SERVICE;
+
 	/* Figure out which slot to use */
 	slot = calculate_secrets_slot ();
 	g_return_val_if_fail (slot, FALSE);
 
 	/* Try and grab our name */
-	result = dbus_bus_request_name (dbus_conn, SECRET_SERVICE, 0, &error);
+	result = dbus_bus_request_name (dbus_conn, service, flags, &error);
 	if (dbus_error_is_set (&error)) {
 		g_message ("couldn't request name '%s' on session bus: %s",
-		           SECRET_SERVICE, error.message);
+		           service, error.message);
 		dbus_error_free (&error);
 
 	} else {
@@ -93,9 +103,8 @@ gkd_dbus_secrets_startup (void)
 		case DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER:
 			break;
 
-		/* We already acquired the service name. Odd */
+		/* We already acquired the service name. */
 		case DBUS_REQUEST_NAME_REPLY_ALREADY_OWNER:
-			g_return_val_if_reached (FALSE);
 			break;
 
 		/* Another daemon is running */
diff --git a/daemon/dbus/gkd-dbus-service.c b/daemon/dbus/gkd-dbus-service.c
index 0455bbb..2719521 100644
--- a/daemon/dbus/gkd-dbus-service.c
+++ b/daemon/dbus/gkd-dbus-service.c
@@ -100,13 +100,23 @@ gkd_dbus_service_init (DBusConnection *conn)
 {
 	dbus_uint32_t res = 0;
 	DBusError derr = { 0 };
+	const gchar *service = NULL;
+	unsigned int flags;
 
 	dbus_error_init (&derr);
 
+#ifdef WITH_TESTS
+	service = g_getenv ("GNOME_KEYRING_TEST_SERVICE");
+	if (service && service[0])
+		flags = DBUS_NAME_FLAG_ALLOW_REPLACEMENT | DBUS_NAME_FLAG_REPLACE_EXISTING;
+	else
+#endif
+		service = GNOME_KEYRING_DAEMON_SERVICE;
+
 	/* Try and grab our name */
-	res = dbus_bus_request_name (conn, GNOME_KEYRING_DAEMON_SERVICE, 0, &derr);
+	res = dbus_bus_request_name (conn, service, flags, &derr);
 	if (dbus_error_is_set (&derr)) {
-		g_message ("couldn't request name on session bus: %s", derr.message);
+		g_message ("couldn't request name '%s' on session bus: %s", service, derr.message);
 		dbus_error_free (&derr);
 		return;
 	}
@@ -115,9 +125,8 @@ gkd_dbus_service_init (DBusConnection *conn)
 	/* We acquired the service name */
 	case DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER:
 		break;
-	/* We already acquired the service name. Odd */
+	/* We already acquired the service name. */
 	case DBUS_REQUEST_NAME_REPLY_ALREADY_OWNER:
-		g_return_if_reached ();
 		break;
 	/* Another daemon is running */
 	case DBUS_REQUEST_NAME_REPLY_IN_QUEUE:
diff --git a/daemon/dbus/gkd-dbus.c b/daemon/dbus/gkd-dbus.c
index a6d0a5f..6b469f8 100644
--- a/daemon/dbus/gkd-dbus.c
+++ b/daemon/dbus/gkd-dbus.c
@@ -64,15 +64,6 @@ gkd_dbus_setup (void)
 	if (dbus_conn)
 		return;
 
-#ifdef WITH_TESTS
-	{
-		/* If running as a test, don't do certain DBUS stuff */
-		const gchar *env = g_getenv ("GNOME_KEYRING_TEST_PATH");
-		if (env && env[0])
-			dbus_do_session = FALSE;
-	}
-#endif
-
 	dbus_error_init (&derr);
 
 	/* Get the dbus bus and hook up */
diff --git a/daemon/pkcs11/gkd-pkcs11-auth.c b/daemon/pkcs11/gkd-pkcs11-auth.c
index a9f519b..b4d639f 100644
--- a/daemon/pkcs11/gkd-pkcs11-auth.c
+++ b/daemon/pkcs11/gkd-pkcs11-auth.c
@@ -688,7 +688,7 @@ auth_C_Initialize (CK_VOID_PTR init_args)
 			return CKR_ARGUMENTS_BAD;
 		}
 
-		if (!(args->flags & CKF_LIBRARY_CANT_CREATE_OS_THREADS)) {
+		if (args->flags & CKF_LIBRARY_CANT_CREATE_OS_THREADS) {
 			g_message ("must be able to create our own threads");
 			return CKR_NEED_TO_CREATE_THREADS;
 		}
diff --git a/daemon/pkcs11/gkd-pkcs11.c b/daemon/pkcs11/gkd-pkcs11.c
index 2475cf3..1e97169 100644
--- a/daemon/pkcs11/gkd-pkcs11.c
+++ b/daemon/pkcs11/gkd-pkcs11.c
@@ -36,6 +36,8 @@
 
 #include "ssh-agent/gkd-ssh-agent.h"
 
+#include <string.h>
+
 /* The top level of our internal PKCS#11 module stack */
 static CK_FUNCTION_LIST_PTR pkcs11_roof = NULL;
 static CK_FUNCTION_LIST_PTR pkcs11_base = NULL;
@@ -64,6 +66,7 @@ gkd_pkcs11_initialize (void)
 	CK_FUNCTION_LIST_PTR secret_store;
 	CK_FUNCTION_LIST_PTR ssh_store;
 	CK_FUNCTION_LIST_PTR user_store;
+	CK_C_INITIALIZE_ARGS init_args;
 	gboolean ret;
 	CK_RV rv;
 
@@ -93,8 +96,20 @@ gkd_pkcs11_initialize (void)
 	gkd_pkcs11_auth_chain_functions (pkcs11_base);
 	pkcs11_roof = gkd_pkcs11_auth_get_functions ();
 
+	memset (&init_args, 0, sizeof (init_args));
+	init_args.flags = CKF_OS_LOCKING_OK;
+
+#if WITH_TESTS
+	{
+		const gchar *path = g_getenv ("GNOME_KEYRING_TEST_PATH");
+		if (path && path[0])
+			init_args.pReserved = g_strdup_printf ("directory=\"%s\"", path);
+	}
+#endif
+
 	/* Initialize the whole caboodle */
-	rv = (pkcs11_roof->C_Initialize) (NULL);
+	rv = (pkcs11_roof->C_Initialize) (&init_args);
+	g_free (init_args.pReserved);
 
 	if (rv != CKR_OK) {
 		g_warning ("couldn't initialize internal PKCS#11 stack (code: %d)", (gint)rv);
diff --git a/tests/gtest-helpers.c b/tests/gtest-helpers.c
index dd032f6..d8164fb 100644
--- a/tests/gtest-helpers.c
+++ b/tests/gtest-helpers.c
@@ -250,9 +250,7 @@ main (int argc, char* argv[])
 	g_thread_init (NULL);
 
 	test_path = getenv ("GNOME_KEYRING_TEST_PATH");
-	if (test_path) {
-		setenv ("GNOME_KEYRING_OUTSIDE_TEST", "TRUE", 1);
-	} else {
+	if (!test_path) {
 		test_path = "/tmp/test-gnome-keyring";
 		setenv ("GNOME_KEYRING_TEST_PATH", test_path, 1);
 		g_mkdir_with_parents (test_path, 0777);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]