[gnome-keyring] Move gkr_async code into daemon component



commit 7ee0ec368642c482d5f67e275c54cce815b05b53
Author: Stef Walter <stef memberwebs com>
Date:   Sun May 10 15:43:14 2009 +0000

    Move gkr_async code into daemon component
    
    That's where it's only used. Update tests to new style.
---
 common/Makefile.am                                 |    1 -
 common/tests/Makefile.am                           |    4 +-
 configure.in                                       |    2 +
 daemon/Makefile.am                                 |    7 +-
 daemon/gkr-daemon-dbus.c                           |    3 +-
 daemon/gkr-daemon-io.c                             |   32 +++---
 daemon/gkr-daemon-ops.c                            |    3 +-
 daemon/gkr-daemon.c                                |   12 +-
 daemon/keyrings/tests/Makefile.am                  |    9 +-
 daemon/pkcs11/gkr-pkcs11-auth-ep.c                 |    6 +-
 daemon/pkcs11/gkr-pkcs11-daemon.c                  |   41 ++++----
 daemon/ui/gkr-ask-daemon.c                         |   17 ++--
 daemon/ui/gkr-ask-request.c                        |   24 +++--
 daemon/util/.gitignore                             |    5 +
 daemon/util/Makefile.am                            |   30 +++++
 .../gkr-async.c => daemon/util/gkr-daemon-async.c  |   97 +++++++++--------
 .../gkr-async.h => daemon/util/gkr-daemon-async.h  |   68 ++++++------
 daemon/{ => util}/gkr-daemon-util.c                |   11 +-
 daemon/{ => util}/gkr-daemon-util.h                |    0
 daemon/util/tests/.gitignore                       |    6 +
 daemon/util/tests/Makefile.am                      |   11 ++
 {common => daemon/util}/tests/unit-test-async.c    |  114 +++++++++----------
 tests/test-helpers.c                               |    4 +-
 23 files changed, 279 insertions(+), 228 deletions(-)

diff --git a/common/Makefile.am b/common/Makefile.am
index 569c950..de0a6f3 100644
--- a/common/Makefile.am
+++ b/common/Makefile.am
@@ -19,7 +19,6 @@ libgkr_common_la_CFLAGS = \
 	$(GLIB_CFLAGS)
 
 libgkr_common_la_SOURCES = \
-	gkr-async.c gkr-async.h \
 	gkr-location.c gkr-location.h \
 	gkr-location-watch.c gkr-location-watch.h
 
diff --git a/common/tests/Makefile.am b/common/tests/Makefile.am
index 7df5edd..b2d8574 100644
--- a/common/tests/Makefile.am
+++ b/common/tests/Makefile.am
@@ -1,5 +1,4 @@
 UNIT_AUTO = \
-	unit-test-async.c \
 	unit-test-location.c \
 	unit-test-location-watch.c
 
@@ -10,4 +9,7 @@ UNIT_LIBS =  \
 	$(top_builddir)/egg/libegg-dbus.la \
 	$(top_builddir)/common/libgkr-common.la
 
+UNIT_FLAGS = \
+	-DEXTERNAL_TEST
+
 include $(top_srcdir)/tests/test.make
diff --git a/configure.in b/configure.in
index a0e1e9a..d795e74 100644
--- a/configure.in
+++ b/configure.in
@@ -550,6 +550,8 @@ daemon/keyrings/Makefile
 daemon/keyrings/tests/Makefile
 daemon/pkcs11/Makefile
 daemon/ui/Makefile
+daemon/util/Makefile
+daemon/util/tests/Makefile
 docs/Makefile
 docs/reference/Makefile
 docs/reference/gcr/Makefile
diff --git a/daemon/Makefile.am b/daemon/Makefile.am
index fae4ad0..664f0db 100644
--- a/daemon/Makefile.am
+++ b/daemon/Makefile.am
@@ -1,8 +1,9 @@
 SUBDIRS = \
+	util \
 	ui \
 	keyrings \
 	pkcs11 \
-	data 
+	data
 
 bin_PROGRAMS= \
 	gnome-keyring-daemon
@@ -24,13 +25,13 @@ gnome_keyring_daemon_SOURCES = \
 	gkr-daemon.c gkr-daemon.h \
 	gkr-daemon-dbus.c \
 	gkr-daemon-io.c \
-	gkr-daemon-ops.c \
-	gkr-daemon-util.c gkr-daemon-util.h 
+	gkr-daemon-ops.c
 
 gnome_keyring_daemon_LDADD = \
 	$(top_builddir)/daemon/pkcs11/libgkr-pkcs11.la \
 	$(top_builddir)/daemon/keyrings/libgkr-keyrings.la \
 	$(top_builddir)/daemon/ui/libgkr-ui.la \
+	$(top_builddir)/daemon/util/libgkr-daemon-util.la \
 	$(top_builddir)/library/libgnome-keyring-common.la \
 	$(top_builddir)/pkcs11/plex-layer/libgck-plex-layer.la \
 	$(top_builddir)/pkcs11/roots-store/libgck-roots-store.la \
diff --git a/daemon/gkr-daemon-dbus.c b/daemon/gkr-daemon-dbus.c
index cec4e51..c0d6f7c 100644
--- a/daemon/gkr-daemon-dbus.c
+++ b/daemon/gkr-daemon-dbus.c
@@ -23,7 +23,6 @@
 #include "config.h"
 
 #include "gkr-daemon.h"
-#include "gkr-daemon-util.h"
 
 #include "egg/egg-cleanup.h"
 #include "egg/egg-dbus.h"
@@ -31,6 +30,8 @@
 #include "library/gnome-keyring.h"
 #include "library/gnome-keyring-private.h"
 
+#include "util/gkr-daemon-util.h"
+
 #include <dbus/dbus.h>
 
 #include <string.h>
diff --git a/daemon/gkr-daemon-io.c b/daemon/gkr-daemon-io.c
index beef44a..e499c65 100644
--- a/daemon/gkr-daemon-io.c
+++ b/daemon/gkr-daemon-io.c
@@ -33,9 +33,6 @@
 #include <sys/un.h>
 
 #include "gkr-daemon.h"
-#include "gkr-daemon-util.h"
-
-#include "common/gkr-async.h"
 
 #include "egg/egg-buffer.h"
 #include "egg/egg-cleanup.h"
@@ -50,6 +47,9 @@
 
 #include "ui/gkr-ask-daemon.h"
 
+#include "util/gkr-daemon-async.h"
+#include "util/gkr-daemon-util.h"
+
 #ifndef HAVE_SOCKLEN_T
 #define socklen_t int
 #endif
@@ -65,7 +65,7 @@ typedef enum {
 } GnomeKeyringClientStates;
 
 typedef struct {
-	GkrAsyncWorker *worker;
+	GkrDaemonAsyncWorker *worker;
 	int sock;
 
 	GnomeKeyringApplicationRef *app_ref;
@@ -120,15 +120,15 @@ yield_and_read_all (int fd, guchar *buf, int len)
 	while (len > 0) {
 		
 		/* Is this worker stopping? */
-		if (gkr_async_is_stopping ())
+		if (gkr_daemon_async_is_stopping ())
 			return FALSE;
 			
 		/* Don't block other threads during the read */
-		gkr_async_begin_concurrent ();
+		gkr_daemon_async_begin_concurrent ();
 		
 			res = read (fd, buf, len);
 			
-		gkr_async_end_concurrent ();
+		gkr_daemon_async_end_concurrent ();
 		
 		if (res <= 0) {
 			if (errno == EAGAIN || errno == EINTR)
@@ -155,15 +155,15 @@ yield_and_write_all (int fd, const guchar *buf, int len)
 	while (len > 0) {
 		
 		/* Is this worker stopping? */
-		if (gkr_async_is_stopping ())
+		if (gkr_daemon_async_is_stopping ())
 			return FALSE;
 			
 		/* Don't block other threads during the read */
-		gkr_async_begin_concurrent ();
+		gkr_daemon_async_begin_concurrent ();
 
 			res = write (fd, buf, len);
 			
-		gkr_async_end_concurrent ();
+		gkr_daemon_async_end_concurrent ();
 		
 		if (res <= 0) {
 			if (errno == EAGAIN || errno == EINTR)
@@ -211,11 +211,11 @@ yield_and_read_credentials (int sock, pid_t *pid, uid_t *uid)
 {
 	gboolean ret;
 	
-	gkr_async_begin_concurrent ();
+	gkr_daemon_async_begin_concurrent ();
 	
 		ret = egg_unix_credentials_read (sock, pid, uid) >= 0;
 		
-	gkr_async_end_concurrent ();
+	gkr_daemon_async_end_concurrent ();
 	
 	return ret;
 }
@@ -241,7 +241,7 @@ client_worker_main (gpointer user_data)
 	char *str;
 
 	/* This helps any reads wakeup when this worker is stopping */
-	gkr_async_register_cancel (close_fd, &client->sock);
+	gkr_daemon_async_register_cancel (close_fd, &client->sock);
 	
 	/* 1. First we read and verify the client's user credentials */	
 	debug_print (("GNOME_CLIENT_STATE_CREDENTIALS %p\n", client));
@@ -316,7 +316,7 @@ client_worker_main (gpointer user_data)
 }
 
 static void
-client_worker_done (GkrAsyncWorker *worker, gpointer result, gpointer user_data)
+client_worker_done (GkrDaemonAsyncWorker *worker, gpointer result, gpointer user_data)
 {
 	GnomeKeyringClient *client = (GnomeKeyringClient*)user_data;
 
@@ -349,8 +349,8 @@ client_new (int fd)
 	 */  
 	egg_buffer_init_full (&client->input_buffer, 128, egg_secure_realloc);
 
-	client->worker = gkr_async_worker_start (client_worker_main, 
-	                                         client_worker_done, client);
+	client->worker = gkr_daemon_async_worker_start (client_worker_main,
+	                                                client_worker_done, client);
 	g_assert (client->worker);
 	
 	/* 
diff --git a/daemon/gkr-daemon-ops.c b/daemon/gkr-daemon-ops.c
index 68d6647..4d18fca 100644
--- a/daemon/gkr-daemon-ops.c
+++ b/daemon/gkr-daemon-ops.c
@@ -23,7 +23,6 @@
 #include "config.h"
 
 #include "gkr-daemon.h"
-#include "gkr-daemon-util.h"
 
 #include "common/gkr-location.h"
 
@@ -42,6 +41,8 @@
 #include "ui/gkr-ask-request.h"
 #include "ui/gkr-ask-daemon.h"
 
+#include "util/gkr-daemon-util.h"
+
 #include <unistd.h>
 #include <errno.h>
 #include <stdlib.h>
diff --git a/daemon/gkr-daemon.c b/daemon/gkr-daemon.c
index b70a4fe..39a8c61 100644
--- a/daemon/gkr-daemon.c
+++ b/daemon/gkr-daemon.c
@@ -23,9 +23,6 @@
 #include "config.h"
 
 #include "gkr-daemon.h"
-#include "gkr-daemon-util.h"
-
-#include "common/gkr-async.h"
 
 #include "egg/egg-cleanup.h"
 #include "egg/egg-libgcrypt.h"
@@ -41,6 +38,9 @@
 
 #include "ui/gkr-ask-daemon.h"
 
+#include "util/gkr-daemon-async.h"
+#include "util/gkr-daemon-util.h"
+
 #include <unistd.h>
 #include <fcntl.h>
 #include <errno.h>
@@ -717,7 +717,7 @@ main (int argc, char *argv[])
 	/* Initialize our daemon main loop and threading */
 	loop = g_main_loop_new (NULL, FALSE);
 	ctx = g_main_loop_get_context (loop);
-	gkr_async_workers_init (loop);
+	gkr_daemon_async_workers_init (loop);
 	
 	/* 
 	 * Always initialize the keyring subsystem. This is a necessary
@@ -765,13 +765,13 @@ main (int argc, char *argv[])
 	g_main_loop_run (loop);
 
 	/* Make sure no other threads are running */
-	gkr_async_workers_stop_all ();
+	gkr_daemon_async_workers_stop_all ();
 	
 	/* This wraps everything up in order */
 	egg_cleanup_perform ();
 	
 	/* Final shutdown of anything workers running about */
-	gkr_async_workers_uninit ();
+	gkr_daemon_async_workers_uninit ();
 
 	return 0;
 }
diff --git a/daemon/keyrings/tests/Makefile.am b/daemon/keyrings/tests/Makefile.am
index 16664db..b61a7e7 100644
--- a/daemon/keyrings/tests/Makefile.am
+++ b/daemon/keyrings/tests/Makefile.am
@@ -1,18 +1,15 @@
 
 UNIT_AUTO = \
 	unit-test-keyring-login.c \
-	unit-test-keyring-file.c \
-	$(top_srcdir)/daemon/gkr-daemon-util.c \
-	$(top_srcdir)/daemon/gkr-daemon-util.h
+	unit-test-keyring-file.c
 
 UNIT_PROMPT = \
-	unit-test-login-prompt.c \
-	$(top_srcdir)/daemon/gkr-daemon-util.c \
-	$(top_srcdir)/daemon/gkr-daemon-util.h
+	unit-test-login-prompt.c
 
 UNIT_LIBS =  \
 	$(top_builddir)/daemon/keyrings/libgkr-keyrings.la \
 	$(top_builddir)/daemon/ui/libgkr-ui.la \
+	$(top_builddir)/daemon/util/libgkr-daemon-util.la \
 	$(top_builddir)/library/libgnome-keyring-common.la \
 	$(top_builddir)/common/libgkr-common.la
 
diff --git a/daemon/pkcs11/gkr-pkcs11-auth-ep.c b/daemon/pkcs11/gkr-pkcs11-auth-ep.c
index 62e00e3..b68ad9d 100644
--- a/daemon/pkcs11/gkr-pkcs11-auth-ep.c
+++ b/daemon/pkcs11/gkr-pkcs11-auth-ep.c
@@ -23,7 +23,7 @@
 
 #include "gkr-pkcs11-auth.h"
 
-#include "common/gkr-async.h"
+#include "daemon/util/gkr-daemon-async.h"
 
 #include "pkcs11/pkcs11.h"
 #include "pkcs11/pkcs11g.h"
@@ -47,10 +47,10 @@
 static CK_FUNCTION_LIST_PTR pkcs11_lower = NULL;
 
 #define DAEMON_ENTER() \
-	gkr_async_end_concurrent ()
+	gkr_daemon_async_end_concurrent ()
 
 #define DAEMON_LEAVE() \
-	gkr_async_begin_concurrent ()
+	gkr_daemon_async_begin_concurrent ()
 
 /* --------------------------------------------------------------------------------------
  * HELPERS 
diff --git a/daemon/pkcs11/gkr-pkcs11-daemon.c b/daemon/pkcs11/gkr-pkcs11-daemon.c
index 3b4f1a2..8a213b7 100644
--- a/daemon/pkcs11/gkr-pkcs11-daemon.c
+++ b/daemon/pkcs11/gkr-pkcs11-daemon.c
@@ -31,9 +31,8 @@
 #include "pkcs11/ssh-store/gck-ssh-store.h"
 #include "pkcs11/user-store/gck-user-store.h"
 
-#include "common/gkr-async.h"
-
-#include "daemon/gkr-daemon-util.h"
+#include "daemon/util/gkr-daemon-async.h"
+#include "daemon/util/gkr-daemon-util.h"
 
 #include "egg/egg-cleanup.h"
 
@@ -42,11 +41,11 @@
  * must be concurrent. That is must UNLOCK the demon lock, 
  * perform the call and then relock. 
  * 
- * 	gkr_async_begin_concurrent ();
+ * 	gkr_daemon_async_begin_concurrent ();
  *	
  *		gck_call_xxxx (xxx);
  *	
- *	gkr_async_end_concurrent ();
+ *	gkr_daemon_async_end_concurrent ();
  */
 
 /* The top level of our internal PKCS#11 module stack */
@@ -59,11 +58,11 @@ pkcs11_daemon_cleanup (gpointer unused)
 	
 	g_assert (pkcs11_roof);
 	
-	gkr_async_begin_concurrent ();
+	gkr_daemon_async_begin_concurrent ();
 	
 		rv = (pkcs11_roof->C_Finalize) (NULL);
 	
-	gkr_async_end_concurrent ();
+	gkr_daemon_async_end_concurrent ();
 	
 	if (rv != CKR_OK)
 		g_warning ("couldn't finalize internal PKCS#11 stack (code: %d)", (gint)rv);
@@ -81,7 +80,7 @@ gkr_pkcs11_daemon_initialize (void)
 	CK_RV rv;
 
 	/* Now initialize them all */
-	gkr_async_begin_concurrent ();
+	gkr_daemon_async_begin_concurrent ();
 
 		/* SSH storage */
 		ssh_store = gck_ssh_store_get_functions ();
@@ -108,7 +107,7 @@ gkr_pkcs11_daemon_initialize (void)
 		/* Initialize the whole caboodle */
 		rv = (pkcs11_roof->C_Initialize) (NULL);
 
-	gkr_async_end_concurrent ();
+	gkr_daemon_async_end_concurrent ();
 
 	if (rv != CKR_OK) {
 		g_warning ("couldn't initialize internal PKCS#11 stack (code: %d)", (gint)rv);
@@ -122,22 +121,22 @@ gkr_pkcs11_daemon_initialize (void)
 static void
 pkcs11_rpc_cleanup (gpointer unused)
 {
-	gkr_async_begin_concurrent ();
+	gkr_daemon_async_begin_concurrent ();
 
 		gck_rpc_layer_uninitialize ();
 		
-	gkr_async_end_concurrent ();
+	gkr_daemon_async_end_concurrent ();
 }
 
 static gboolean
 accept_rpc_client (GIOChannel *channel, GIOCondition cond, gpointer unused)
 {
-	gkr_async_begin_concurrent ();
+	gkr_daemon_async_begin_concurrent ();
 
 		if (cond == G_IO_IN)
 			gck_rpc_layer_accept ();
 		
-	gkr_async_end_concurrent ();
+	gkr_daemon_async_end_concurrent ();
 	
 	return TRUE;
 }
@@ -154,11 +153,11 @@ gkr_pkcs11_daemon_setup_pkcs11 (void)
 	base_dir = gkr_daemon_util_get_master_directory ();
 	g_return_val_if_fail (base_dir, FALSE);
 
-	gkr_async_begin_concurrent ();
+	gkr_daemon_async_begin_concurrent ();
 
 		sock = gck_rpc_layer_initialize (base_dir, pkcs11_roof);
 		
-	gkr_async_end_concurrent ();
+	gkr_daemon_async_end_concurrent ();
 	
 	if (sock == -1)
 		return FALSE;
@@ -175,22 +174,22 @@ gkr_pkcs11_daemon_setup_pkcs11 (void)
 static void
 pkcs11_ssh_cleanup (gpointer unused)
 {
-	gkr_async_begin_concurrent ();
+	gkr_daemon_async_begin_concurrent ();
 
 		gck_ssh_agent_uninitialize ();
 		
-	gkr_async_end_concurrent ();
+	gkr_daemon_async_end_concurrent ();
 }
 
 static gboolean
 accept_ssh_client (GIOChannel *channel, GIOCondition cond, gpointer unused)
 {
-	gkr_async_begin_concurrent ();
+	gkr_daemon_async_begin_concurrent ();
 
 		if (cond == G_IO_IN)
 			gck_ssh_agent_accept ();
 		
-	gkr_async_end_concurrent ();
+	gkr_daemon_async_end_concurrent ();
 				
 	return TRUE;
 }
@@ -207,11 +206,11 @@ gkr_pkcs11_daemon_setup_ssh (void)
 	base_dir = gkr_daemon_util_get_master_directory ();
 	g_return_val_if_fail (base_dir, FALSE);
 
-	gkr_async_begin_concurrent ();
+	gkr_daemon_async_begin_concurrent ();
 	
 		sock = gck_ssh_agent_initialize (base_dir, pkcs11_roof);
 		
-	gkr_async_end_concurrent ();
+	gkr_daemon_async_end_concurrent ();
 	
 	if (sock == -1)
 		return FALSE;
diff --git a/daemon/ui/gkr-ask-daemon.c b/daemon/ui/gkr-ask-daemon.c
index 94b09b4..f0bfba3 100644
--- a/daemon/ui/gkr-ask-daemon.c
+++ b/daemon/ui/gkr-ask-daemon.c
@@ -26,9 +26,8 @@
 #include "gkr-ask-daemon.h"
 #include "gkr-ask-request.h"
 
-#include "common/gkr-async.h"
-
-#include "daemon/gkr-daemon-util.h"
+#include "daemon/util/gkr-daemon-async.h"
+#include "daemon/util/gkr-daemon-util.h"
 
 #include "egg/egg-cleanup.h"
 
@@ -36,7 +35,7 @@
 
 static gboolean ask_daemon_inited = FALSE;
 
-static GkrAsyncWait *wait_condition = NULL;
+static GkrDaemonAsyncWait *wait_condition = NULL;
 static GkrAskRequest *current_ask = NULL;
 
 static GkrAskHook ask_daemon_hook = NULL;
@@ -51,7 +50,7 @@ ask_daemon_cleanup (gpointer unused)
 		gkr_ask_request_cancel (current_ask);
 	
 	g_assert (wait_condition);
-	gkr_async_wait_free (wait_condition);
+	gkr_daemon_async_wait_free (wait_condition);
 	wait_condition = NULL;
 	
 	ask_daemon_inited = FALSE;
@@ -64,7 +63,7 @@ ask_daemon_init (void)
 		return;
 	ask_daemon_inited = TRUE;
 	
-	wait_condition = gkr_async_wait_new ();
+	wait_condition = gkr_daemon_async_wait_new ();
 	
 	egg_cleanup_register (ask_daemon_cleanup, NULL);
 }
@@ -138,14 +137,14 @@ gkr_ask_daemon_process (GkrAskRequest* ask)
 	if (gkr_ask_request_check (ask))
 		goto done;
 	
-	if (gkr_async_is_stopping ()) {
+	if (gkr_daemon_async_is_stopping ()) {
 		gkr_ask_request_cancel (ask);
 		goto done;
 	}
 	
 	/* Wait until no other asks are prompting */
 	while (current_ask)
-		gkr_async_wait (wait_condition);
+		gkr_daemon_async_wait (wait_condition);
 
 	/* 
 	 * See if the user already denied this request.
@@ -180,7 +179,7 @@ gkr_ask_daemon_process (GkrAskRequest* ask)
 	current_ask = NULL;
 	
 	g_assert (wait_condition);
-	gkr_async_notify (wait_condition);
+	gkr_daemon_async_notify (wait_condition);
 	
 done:
 	g_assert (gkr_ask_request_is_complete (ask));
diff --git a/daemon/ui/gkr-ask-request.c b/daemon/ui/gkr-ask-request.c
index 7343985..6ee6043 100644
--- a/daemon/ui/gkr-ask-request.c
+++ b/daemon/ui/gkr-ask-request.c
@@ -28,8 +28,10 @@
 #include "gkr-ask-marshal.h"
 #include "gkr-ask-daemon.h"
 
-#include "common/gkr-async.h"
 #include "common/gkr-location.h"
+
+#include "daemon/util/gkr-daemon-async.h"
+
 #include "egg/egg-secure-memory.h"
 
 #include "library/gnome-keyring.h"
@@ -501,16 +503,16 @@ read_until_end (GkrAskRequest *ask)
 	/* Passwords come through this buffer */
 	buf = egg_secure_alloc (128);
 
-	gkr_async_register_cancel (close_fd, &pv->out_fd);
+	gkr_daemon_async_register_cancel (close_fd, &pv->out_fd);
 
 	for (;;) {
 
-		if (gkr_async_is_stopping ())
+		if (gkr_daemon_async_is_stopping ())
 			break;
 
-		gkr_async_begin_concurrent ();
+		gkr_daemon_async_begin_concurrent ();
 			res = read (pv->out_fd, buf, 128);
-		gkr_async_end_concurrent ();
+		gkr_daemon_async_end_concurrent ();
 
 		/* Got an error */
 		if (res < 0) {
@@ -534,7 +536,7 @@ read_until_end (GkrAskRequest *ask)
 	egg_buffer_add_byte (&pv->buffer, 0);
 
 	egg_secure_free (buf);
-	gkr_async_unregister_cancel (close_fd, &pv->out_fd);
+	gkr_daemon_async_unregister_cancel (close_fd, &pv->out_fd);
 	
 	close_fd (&pv->out_fd);
 
@@ -596,16 +598,16 @@ send_all_data (GkrAskRequest *ask, const gchar *buf, gsize len)
 	
 	g_return_val_if_fail (pv->in_fd >= 0, FALSE);
 	
-	gkr_async_register_cancel (close_fd, &pv->in_fd);
+	gkr_daemon_async_register_cancel (close_fd, &pv->in_fd);
 
 	while (len > 0) {
 
-		if (gkr_async_is_stopping ())
+		if (gkr_daemon_async_is_stopping ())
 			break;
 
-		gkr_async_begin_concurrent ();
+		gkr_daemon_async_begin_concurrent ();
 			res = write (pv->in_fd, buf, len);
-		gkr_async_end_concurrent ();
+		gkr_daemon_async_end_concurrent ();
 
 		/* Got an error */
 		if (res < 0) {
@@ -629,7 +631,7 @@ send_all_data (GkrAskRequest *ask, const gchar *buf, gsize len)
 	if (len == 0)
 		ret = TRUE;
 	
-	gkr_async_unregister_cancel (close_fd, &pv->in_fd);
+	gkr_daemon_async_unregister_cancel (close_fd, &pv->in_fd);
 	
 	close_fd (&pv->in_fd);
 	return ret;
diff --git a/daemon/util/.gitignore b/daemon/util/.gitignore
new file mode 100644
index 0000000..60d0f67
--- /dev/null
+++ b/daemon/util/.gitignore
@@ -0,0 +1,5 @@
+.deps
+.libs
+Makefile
+Makefile.in
+
diff --git a/daemon/util/Makefile.am b/daemon/util/Makefile.am
new file mode 100644
index 0000000..0c904d1
--- /dev/null
+++ b/daemon/util/Makefile.am
@@ -0,0 +1,30 @@
+
+noinst_LTLIBRARIES=libgkr-daemon-util.la
+
+INCLUDES=	\
+	-DPREFIX=\""$(prefix)"\" 			\
+	-DBINDIR=\""$(bindir)"\" 			\
+	-DLIBEXECDIR=\""$(libexecdir)"\"		\
+	-DGNOMELOCALEDIR=\""$(datadir)/locale"\"	\
+	-I$(top_srcdir) 				\
+	-I$(top_srcdir)/daemon 				\
+	-I$(top_builddir) 				\
+	$(DAEMON_CFLAGS)				\
+	$(GOBJECT_CFLAGS) 				\
+	$(GLIB_CFLAGS)
+
+libgkr_daemon_util_la_SOURCES = \
+	gkr-daemon-async.c gkr-daemon-async.h \
+	gkr-daemon-util.c gkr-daemon-util.h
+
+libgkr_daemon_util_la_LIBADD = \
+	$(GLIB_LIBS) \
+	$(GOBJECT_LIBS)
+
+if WITH_TESTS
+TESTS_DIR = tests
+else
+TESTS_DIR = 
+endif
+
+SUBDIRS = . $(TESTS_DIR)
diff --git a/common/gkr-async.c b/daemon/util/gkr-daemon-async.c
similarity index 84%
rename from common/gkr-async.c
rename to daemon/util/gkr-daemon-async.c
index 401bbe9..c80886a 100644
--- a/common/gkr-async.c
+++ b/daemon/util/gkr-daemon-async.c
@@ -1,5 +1,5 @@
 /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* gkr-async.c - some daemon async functionality
+/* gkr-daemon-async.c - some daemon async functionality
 
    Copyright (C) 2007, Nate Nielsen
 
@@ -22,7 +22,7 @@
 */
 
 
-#include "gkr-async.h"
+#include "gkr-daemon-async.h"
 
 #include <glib.h>
 
@@ -154,10 +154,13 @@ static GSourceFuncs async_source_functions = {
 };
 
 void
-gkr_async_workers_init (GMainLoop *mainloop)
+gkr_daemon_async_workers_init (GMainLoop *mainloop)
 {
 	GSource *src;
 	
+	if (main_ctx)
+		return;
+
 	g_assert (mainloop);
 	
 	async_mutex = g_mutex_new ();
@@ -186,11 +189,11 @@ gkr_async_workers_init (GMainLoop *mainloop)
 }
 
 void 
-gkr_async_workers_uninit (void)
+gkr_daemon_async_workers_uninit (void)
 {
 	GSource* src;
 	
-	gkr_async_workers_stop_all ();
+	gkr_daemon_async_workers_stop_all ();
 
 	DO_UNLOCK (async_mutex);
 	
@@ -224,11 +227,11 @@ typedef struct _GkrCancelCallback {
 	gpointer user_data;
 } GkrCancelCallback;
  
-struct _GkrAsyncWorker {
+struct _GkrDaemonAsyncWorker {
 	GThread *thread;
 	
 	GThreadFunc func;
-	GkrAsyncWorkerCallback callback;
+	GkrDaemonAsyncWorkerCallback callback;
 	GQueue *cancel_funcs;
 	
 	/* The current status */
@@ -242,7 +245,7 @@ struct _GkrAsyncWorker {
 static gpointer 
 async_worker_thread (gpointer data)
 {
-	GkrAsyncWorker *worker = (GkrAsyncWorker*)data; 	
+	GkrDaemonAsyncWorker *worker = (GkrDaemonAsyncWorker*)data;
 	gpointer result;
 	
 	g_assert (worker);
@@ -281,7 +284,7 @@ async_worker_thread (gpointer data)
 static gboolean
 cleanup_done_thread (gpointer message, gpointer data)
 {
-	GkrAsyncWorker *worker = (GkrAsyncWorker*)message;
+	GkrDaemonAsyncWorker *worker = (GkrDaemonAsyncWorker*)message;
 	GkrCancelCallback *cb;
 	gpointer result;
 
@@ -337,11 +340,11 @@ cleanup_done_threads (void)
 	}
 }
 
-GkrAsyncWorker*    
-gkr_async_worker_start (GThreadFunc func, GkrAsyncWorkerCallback callback, 
-                        gpointer user_data)
+GkrDaemonAsyncWorker*
+gkr_daemon_async_worker_start (GThreadFunc func, GkrDaemonAsyncWorkerCallback callback, 
+                               gpointer user_data)
 {
-	GkrAsyncWorker *worker;
+	GkrDaemonAsyncWorker *worker;
 	GError *err = NULL;
 	
 	ASSERT_IS_MAIN ();	
@@ -354,7 +357,7 @@ gkr_async_worker_start (GThreadFunc func, GkrAsyncWorkerCallback callback,
 		running_workers = g_hash_table_new (g_direct_hash, g_direct_equal);
 	}
 	
-	worker = g_new0 (GkrAsyncWorker, 1);
+	worker = g_new0 (GkrDaemonAsyncWorker, 1);
 	worker->func = func;
 	worker->callback = callback;
 	worker->cancel_funcs = g_queue_new ();
@@ -379,11 +382,11 @@ gkr_async_worker_start (GThreadFunc func, GkrAsyncWorkerCallback callback,
 }
 
 void
-gkr_async_worker_cancel (GkrAsyncWorker *worker)
+gkr_daemon_async_worker_cancel (GkrDaemonAsyncWorker *worker)
 {
 	GkrCancelCallback *cb;
 	
-	g_assert (gkr_async_worker_is_valid (worker));
+	g_assert (gkr_daemon_async_worker_is_valid (worker));
 	g_atomic_int_inc (&worker->cancelled);
 	
 	for (;;) {
@@ -396,25 +399,25 @@ gkr_async_worker_cancel (GkrAsyncWorker *worker)
 }
 
 void
-gkr_async_worker_stop (GkrAsyncWorker *worker)
+gkr_daemon_async_worker_stop (GkrDaemonAsyncWorker *worker)
 {
-	g_assert (gkr_async_worker_is_valid (worker));
+	g_assert (gkr_daemon_async_worker_is_valid (worker));
 	g_assert (worker);
 	ASSERT_IS_MAIN ();
 	
-	gkr_async_worker_cancel (worker);
+	gkr_daemon_async_worker_cancel (worker);
 	
 	while (!g_atomic_int_get (&worker->stopped)) {
 		g_assert (running_workers && g_hash_table_size (running_workers) > 0);
 		cleanup_done_threads ();
-		gkr_async_yield ();
+		gkr_daemon_async_yield ();
 	}
 
 	cleanup_done_threads ();
 }
 
 gboolean
-gkr_async_worker_is_valid (GkrAsyncWorker *worker)
+gkr_daemon_async_worker_is_valid (GkrDaemonAsyncWorker *worker)
 {
 	ASSERT_IS_MAIN ();
 	
@@ -423,7 +426,7 @@ gkr_async_worker_is_valid (GkrAsyncWorker *worker)
 }
 
 guint
-gkr_async_workers_get_n (void)
+gkr_daemon_async_workers_get_n (void)
 {
 	ASSERT_IS_MAIN ();
 	
@@ -435,11 +438,11 @@ gkr_async_workers_get_n (void)
 static void 
 cancel_each_worker (gpointer key, gpointer value, gpointer data)
 {
-	gkr_async_worker_cancel ((GkrAsyncWorker*)key);
+	gkr_daemon_async_worker_cancel ((GkrDaemonAsyncWorker*)key);
 }
 
 void
-gkr_async_workers_stop_all (void)
+gkr_daemon_async_workers_stop_all (void)
 {
 	ASSERT_IS_MAIN ();
 	
@@ -453,7 +456,7 @@ gkr_async_workers_stop_all (void)
 	while (running_workers) {
 		g_assert (g_hash_table_size (running_workers) > 0);
 		cleanup_done_threads ();
-		gkr_async_yield ();
+		gkr_daemon_async_yield ();
 	}
 }
 
@@ -462,13 +465,13 @@ gkr_async_workers_stop_all (void)
  */
 
 gboolean
-gkr_async_yield (void)
+gkr_daemon_async_yield (void)
 {
-	GkrAsyncWorker *worker;
+	GkrDaemonAsyncWorker *worker;
 
 	g_assert (async_mutex);
 	
-	worker = (GkrAsyncWorker*)g_static_private_get (&thread_private);
+	worker = (GkrDaemonAsyncWorker*)g_static_private_get (&thread_private);
 	if (worker && g_atomic_int_get (&worker->cancelled))
 		return FALSE;
 
@@ -484,11 +487,11 @@ gkr_async_yield (void)
 }
 
 gboolean
-gkr_async_is_stopping (void)
+gkr_daemon_async_is_stopping (void)
 {
-	GkrAsyncWorker *worker;
+	GkrDaemonAsyncWorker *worker;
 
-	worker = (GkrAsyncWorker*)g_static_private_get (&thread_private);
+	worker = (GkrDaemonAsyncWorker*)g_static_private_get (&thread_private);
 	if (worker && g_atomic_int_get (&worker->cancelled))
 		return TRUE;
 	
@@ -496,7 +499,7 @@ gkr_async_is_stopping (void)
 }
 
 void
-gkr_async_begin_concurrent (void)
+gkr_daemon_async_begin_concurrent (void)
 {
 	g_assert (async_mutex);
 	
@@ -505,7 +508,7 @@ gkr_async_begin_concurrent (void)
 }
 
 void
-gkr_async_end_concurrent (void)
+gkr_daemon_async_end_concurrent (void)
 {
 	g_assert (async_mutex);
 	
@@ -514,14 +517,14 @@ gkr_async_end_concurrent (void)
 }
 
 void
-gkr_async_register_cancel (GDestroyNotify cancel, gpointer data)
+gkr_daemon_async_register_cancel (GDestroyNotify cancel, gpointer data)
 {
 	GkrCancelCallback *cb;
-	GkrAsyncWorker *worker;
+	GkrDaemonAsyncWorker *worker;
 
 	g_assert (cancel);
 	
-	worker = (GkrAsyncWorker*)g_static_private_get (&thread_private);
+	worker = (GkrDaemonAsyncWorker*)g_static_private_get (&thread_private);
 	
 	/* We don't support cancellation funcs for main thread */	
 	if (!worker)
@@ -541,15 +544,15 @@ match_cancel_func (gconstpointer a, gconstpointer b)
 }
 
 void
-gkr_async_unregister_cancel (GDestroyNotify cancel, gpointer data)
+gkr_daemon_async_unregister_cancel (GDestroyNotify cancel, gpointer data)
 {
 	GkrCancelCallback match;
-	GkrAsyncWorker *worker;
+	GkrDaemonAsyncWorker *worker;
 	GList *l;
 	
 	g_assert (cancel);
 	
-	worker = (GkrAsyncWorker*)g_static_private_get (&thread_private);
+	worker = (GkrDaemonAsyncWorker*)g_static_private_get (&thread_private);
 	
 	/* We don't support cancellation funcs for main thread */	
 	if (!worker)
@@ -569,14 +572,14 @@ gkr_async_unregister_cancel (GDestroyNotify cancel, gpointer data)
  * ASYNC WAITS
  */
  
-GkrAsyncWait* 
-gkr_async_wait_new (void)
+GkrDaemonAsyncWait*
+gkr_daemon_async_wait_new (void)
 {
-	return (GkrAsyncWait*)g_cond_new ();
+	return (GkrDaemonAsyncWait*)g_cond_new ();
 }
 
 void
-gkr_async_wait_free (GkrAsyncWait *wait)
+gkr_daemon_async_wait_free (GkrDaemonAsyncWait *wait)
 {
 	if (!wait)
 		return;
@@ -584,21 +587,21 @@ gkr_async_wait_free (GkrAsyncWait *wait)
 }
 
 void
-gkr_async_wait (GkrAsyncWait *wait)
+gkr_daemon_async_wait (GkrDaemonAsyncWait *wait)
 {
 	g_assert (wait);
 	g_cond_wait ((GCond*)wait, async_mutex);
 }
 
 void
-gkr_async_notify (GkrAsyncWait *wait)
+gkr_daemon_async_notify (GkrDaemonAsyncWait *wait)
 {
 	g_assert (wait);
 	g_cond_signal ((GCond*)wait);
 }
 
 void
-gkr_async_usleep (gulong microseconds)
+gkr_daemon_async_usleep (gulong microseconds)
 {
 	g_assert (async_mutex);
 	
@@ -611,7 +614,7 @@ gkr_async_usleep (gulong microseconds)
 }
 
 void
-gkr_async_sleep (glong seconds)
+gkr_daemon_async_sleep (glong seconds)
 {
 	g_assert (async_mutex);
 	
diff --git a/common/gkr-async.h b/daemon/util/gkr-daemon-async.h
similarity index 56%
rename from common/gkr-async.h
rename to daemon/util/gkr-daemon-async.h
index 6069eba..963ecc0 100644
--- a/common/gkr-async.h
+++ b/daemon/util/gkr-daemon-async.h
@@ -1,5 +1,5 @@
 /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* gkr-async.h - some daemon async functionality
+/* gkr-daemon-async.h - some daemon async functionality
 
    Copyright (C) 2007, Nate Nielsen
 
@@ -30,28 +30,28 @@
  * ASYNC WAIT CONDITIONS
  */
 
-struct _GkrAsyncWait;
-typedef struct _GkrAsyncWait GkrAsyncWait;
+struct _GkrDaemonAsyncWait;
+typedef struct _GkrDaemonAsyncWait GkrDaemonAsyncWait;
 
 /* 
  * Create a new wait condition. Use instead of GCond.
  */
-GkrAsyncWait*      gkr_async_wait_new            (void);
+GkrDaemonAsyncWait*  gkr_daemon_async_wait_new            (void);
 
 /* 
  * Free a wait condition 
  */
-void               gkr_async_wait_free           (GkrAsyncWait *wait);
+void                 gkr_daemon_async_wait_free           (GkrDaemonAsyncWait *wait);
 
 /* 
  * Wait on a condition, this should be done in a loop, as with GCond 
  */
-void               gkr_async_wait                (GkrAsyncWait *wait);
+void                 gkr_daemon_async_wait                (GkrDaemonAsyncWait *wait);
 
 /* 
  * Notify that a condition has been satisfied 
  */
-void               gkr_async_notify              (GkrAsyncWait *wait);
+void                 gkr_daemon_async_notify              (GkrDaemonAsyncWait *wait);
 
 /*
  * Per Async Worker Storage. This is currently exactly the same 
@@ -59,11 +59,11 @@ void               gkr_async_notify              (GkrAsyncWait *wait);
  * API instead.
  */
 
-typedef GPrivate GkrAsyncPrivate;
-#define gkr_async_private_new(x) g_private_new (x)
-#define gkr_async_private_get(x) g_private_get (x)
-#define gkr_async_private_set(x, y) g_private_set (x, y)
-#define gkr_async_private_free(x) 
+typedef GPrivate GkrDaemonAsyncPrivate;
+#define gkr_daemon_async_private_new(x) g_private_new (x)
+#define gkr_daemon_async_private_get(x) g_private_get (x)
+#define gkr_daemon_async_private_set(x, y) g_private_set (x, y)
+#define gkr_daemon_async_private_free(x)
 
 /* -----------------------------------------------------------------------------
  * GENERAL ASYNC CALLS
@@ -73,22 +73,22 @@ typedef GPrivate GkrAsyncPrivate;
  * Yield the current thread (main thread or worker). Returns FALSE
  * if the current thread is supposed to stop. 
  */
-gboolean           gkr_async_yield               (void);
+gboolean           gkr_daemon_async_yield               (void);
 
 /* 
  * Enable concurrent execution of the current thread in the process 
  */
-void               gkr_async_begin_concurrent    (void);
+void               gkr_daemon_async_begin_concurrent    (void);
 
 /* 
  * Put current thread back into cooperative execution 
  */
-void               gkr_async_end_concurrent      (void);
+void               gkr_daemon_async_end_concurrent      (void);
 
 /* 
  * See if current thread is supposed to stop 
  */
-gboolean           gkr_async_is_stopping         (void);
+gboolean           gkr_daemon_async_is_stopping         (void);
 
 /* 
  * Register a cancellation function which is called when the current
@@ -97,75 +97,75 @@ gboolean           gkr_async_is_stopping         (void);
  * 
  * The GDestroyNotify function is run from an arbitary thread.
  */
-void               gkr_async_register_cancel     (GDestroyNotify cancel, gpointer data);
+void               gkr_daemon_async_register_cancel     (GDestroyNotify cancel, gpointer data);
 
 /* 
  * Unregister a cancellation function.
  */
-void               gkr_async_unregister_cancel   (GDestroyNotify cancel, gpointer data);
+void               gkr_daemon_async_unregister_cancel   (GDestroyNotify cancel, gpointer data);
 
 /*
  * The current thread should yield and sleep.
  */
-void               gkr_async_usleep              (gulong microseconds);
+void               gkr_daemon_async_usleep              (gulong microseconds);
 
 /*
  * The current thread should yield and sleep.
  */
-void               gkr_async_sleep               (glong seconds);
+void               gkr_daemon_async_sleep               (glong seconds);
 
 /* -----------------------------------------------------------------------------
  * WORKER THREADS
  */
 
-struct _GkrAsyncWorker;
-typedef struct _GkrAsyncWorker GkrAsyncWorker;
+struct _GkrDaemonAsyncWorker;
+typedef struct _GkrDaemonAsyncWorker GkrDaemonAsyncWorker;
 
-typedef void (*GkrAsyncWorkerCallback) (GkrAsyncWorker *worker, gpointer result, gpointer user_data);
+typedef void (*GkrDaemonAsyncWorkerCallback) (GkrDaemonAsyncWorker *worker, gpointer result, gpointer user_data);
 
 /*
  * Called before using any async functionality or workers.
  */
-void               gkr_async_workers_init        (GMainLoop *mainloop);
+void                   gkr_daemon_async_workers_init        (GMainLoop *mainloop);
 
 /*
  * Called at end of application.
  */
-void               gkr_async_workers_uninit      (void);
+void                   gkr_daemon_async_workers_uninit      (void);
 
 /*
  * Stop all running workers and wait for them to finish.
  */
-void               gkr_async_workers_stop_all    (void);
+void                   gkr_daemon_async_workers_stop_all    (void);
 
 /*
  * Get number of worker threads.
  */
-guint              gkr_async_workers_get_n       (void);
+guint                  gkr_daemon_async_workers_get_n       (void);
 
 /*
  * Start a new worker thread. callback is run when the worker 
  * ends, whether cancelled or not. The returned pointer is 
  * only valid while worker is running.
  */
-GkrAsyncWorker*    gkr_async_worker_start        (GThreadFunc worker,
-                                                  GkrAsyncWorkerCallback callback,
-                                                  gpointer user_data);
+GkrDaemonAsyncWorker*  gkr_daemon_async_worker_start        (GThreadFunc worker,
+                                                             GkrDaemonAsyncWorkerCallback callback,
+                                                             gpointer user_data);
 
 /*
  * Send a notification to a worker thread to stop. 
  */
-void               gkr_async_worker_cancel       (GkrAsyncWorker *worker);
+void                   gkr_daemon_async_worker_cancel       (GkrDaemonAsyncWorker *worker);
 
 /*
  * Send a notification to a worker thread to stop, and wait for 
  * it to finish.
  */
-void               gkr_async_worker_stop         (GkrAsyncWorker *worker);
+void                   gkr_daemon_async_worker_stop         (GkrDaemonAsyncWorker *worker);
 
 /*
  * Check if a given worker pointer is still valid.
  */
-gboolean           gkr_async_worker_is_valid     (GkrAsyncWorker *worker);
+gboolean               gkr_daemon_async_worker_is_valid     (GkrDaemonAsyncWorker *worker);
 
-#endif /* __GKR_ASYNC_H__ */
+#endif /* __GKR_DAEMON_ASYNC_H__ */
diff --git a/daemon/gkr-daemon-util.c b/daemon/util/gkr-daemon-util.c
similarity index 98%
rename from daemon/gkr-daemon-util.c
rename to daemon/util/gkr-daemon-util.c
index 4d2f0bf..d328a0a 100644
--- a/daemon/gkr-daemon-util.c
+++ b/daemon/util/gkr-daemon-util.c
@@ -23,10 +23,9 @@
 
 #include "config.h"
 
+#include "gkr-daemon-async.h"
 #include "gkr-daemon-util.h"
 
-#include "common/gkr-async.h"
-
 #include "egg/egg-cleanup.h"
 
 #include <glib.h>
@@ -53,7 +52,7 @@ G_DEFINE_TYPE (GkrDaemonClient, gkr_daemon_client, G_TYPE_OBJECT);
 
 static guint signals[LAST_SIGNAL] = { 0 };
 
-static GkrAsyncPrivate *current_client = NULL;
+static GkrDaemonAsyncPrivate *current_client = NULL;
 
 /* -----------------------------------------------------------------------------
  * HELPERS
@@ -72,7 +71,7 @@ register_client (GkrDaemonClient *client)
 {
 	g_assert (GKR_IS_DAEMON_CLIENT (client));
 	g_assert (current_client);
-	gkr_async_private_set (current_client, client);
+	gkr_daemon_async_private_set (current_client, client);
 }
 
 /* -----------------------------------------------------------------------------
@@ -165,7 +164,7 @@ gkr_daemon_client_class_init (GkrDaemonClientClass *klass)
 			G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET (GkrDaemonClientClass, disconnected),
 			NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
 	
-	current_client = gkr_async_private_new (unregister_client);
+	current_client = gkr_daemon_async_private_new (unregister_client);
 }
 
 /* -------------------------------------------------------------------------------------
@@ -217,7 +216,7 @@ gkr_daemon_client_get_current (void)
 {
 	if (!current_client)
 		return NULL;
-	return gkr_async_private_get (current_client);
+	return gkr_daemon_async_private_get (current_client);
 }
 
 pid_t
diff --git a/daemon/gkr-daemon-util.h b/daemon/util/gkr-daemon-util.h
similarity index 100%
rename from daemon/gkr-daemon-util.h
rename to daemon/util/gkr-daemon-util.h
diff --git a/daemon/util/tests/.gitignore b/daemon/util/tests/.gitignore
new file mode 100644
index 0000000..7290a08
--- /dev/null
+++ b/daemon/util/tests/.gitignore
@@ -0,0 +1,6 @@
+.deps
+.libs
+Makefile
+Makefile.in
+run-auto-test*
+
diff --git a/daemon/util/tests/Makefile.am b/daemon/util/tests/Makefile.am
new file mode 100644
index 0000000..a2fe165
--- /dev/null
+++ b/daemon/util/tests/Makefile.am
@@ -0,0 +1,11 @@
+UNIT_AUTO = \
+	unit-test-async.c
+
+UNIT_PROMPT = 
+
+UNIT_LIBS =  \
+	$(top_builddir)/egg/libegg.la \
+	$(top_builddir)/egg/libegg-dbus.la \
+	$(top_builddir)/daemon/util/libgkr-daemon-util.la
+
+include $(top_srcdir)/tests/gtest.make
diff --git a/common/tests/unit-test-async.c b/daemon/util/tests/unit-test-async.c
similarity index 55%
rename from common/tests/unit-test-async.c
rename to daemon/util/tests/unit-test-async.c
index 6dc8fe9..9ece465 100644
--- a/common/tests/unit-test-async.c
+++ b/daemon/util/tests/unit-test-async.c
@@ -30,26 +30,18 @@
 
 #include "run-auto-test.h"
 
-#include "common/gkr-async.h"
-
-/* 
- * Each test looks like (on one line):
- *     void unit_test_xxxxx (CuTest* cu)
- * 
- * Each setup looks like (on one line):
- *     void unit_setup_xxxxx (void);
- * 
- * Each teardown looks like (on one line):
- *     void unit_teardown_xxxxx (void);
- * 
- * Tests be run in the order specified here.
- */
+#include "daemon/util/gkr-daemon-async.h"
+
+DEFINE_SETUP(async_init)
+{
+	gkr_daemon_async_workers_init (test_mainloop_get ());
+}
   
 static gboolean 
 cancel_worker (gpointer data)
 {
-	if (gkr_async_worker_is_valid ((GkrAsyncWorker*)data))
-		gkr_async_worker_cancel ((GkrAsyncWorker*)data);
+	if (gkr_daemon_async_worker_is_valid ((GkrDaemonAsyncWorker*)data))
+		gkr_daemon_async_worker_cancel ((GkrDaemonAsyncWorker*)data);
 	/* Don't call again */
 	return FALSE;
 }
@@ -61,7 +53,6 @@ cancel_worker (gpointer data)
 #define SIMPLE_N  5
 
 typedef struct _SimpleParams {
-	CuTest *cu;
 	guint value;
 } SimpleParams;
 
@@ -73,7 +64,7 @@ simple_thread (gpointer data)
 	
 	for (i = 0; i < SIMPLE_N; ++i) {
 		++params->value;
-		gkr_async_usleep (G_USEC_PER_SEC / 5);
+		gkr_daemon_async_usleep (G_USEC_PER_SEC / 5);
 		g_printerr("+");
 	}
 	
@@ -82,29 +73,29 @@ simple_thread (gpointer data)
 }
 
 static void 
-simple_done (GkrAsyncWorker* worker, gpointer result, gpointer user_data)
+simple_done (GkrDaemonAsyncWorker* worker, gpointer result, gpointer user_data)
 {
 	SimpleParams *params = (SimpleParams*)user_data;
-	CuAssert (params->cu, "result didn't get passed through", result == &params->value);
+	/* "result didn't get passed through" */
+	g_assert (result == &params->value);
 	test_mainloop_quit ();
 }
 
-void unit_test_worker_simple (CuTest* cu)
+DEFINE_TEST(worker_simple)
 {
-	GkrAsyncWorker *worker;
+	GkrDaemonAsyncWorker *worker;
 	SimpleParams params;
 	
 	memset (&params, 0, sizeof (params));
-	params.cu = cu;
 	
-	worker = gkr_async_worker_start (simple_thread, simple_done, &params);
-	CuAssertPtrNotNull (cu, worker);
+	worker = gkr_daemon_async_worker_start (simple_thread, simple_done, &params);
+	g_assert (worker != NULL);
 	 	
 	/* Run the main loop */
 	test_mainloop_run (20000);
-	
-	CuAssertIntEquals (cu, 0, gkr_async_workers_get_n ());
-	CuAssertIntEquals (cu, SIMPLE_N, params.value);	 
+
+	g_assert_cmpint (0, ==, gkr_daemon_async_workers_get_n ());
+	g_assert_cmpint (SIMPLE_N, ==, params.value);
 }
 
 /* -----------------------------------------------------------------------------
@@ -112,7 +103,6 @@ void unit_test_worker_simple (CuTest* cu)
  */
  
 typedef struct _CancelParams {
-	CuTest *cu;
 	guint value;
 } CancelParams;
 
@@ -121,10 +111,10 @@ cancel_thread (gpointer data)
 {
 	CancelParams *params = (CancelParams*)data;
 
-	while (!gkr_async_is_stopping ()) {
+	while (!gkr_daemon_async_is_stopping ()) {
 		++params->value;
 		g_printerr("+");
-		gkr_async_usleep (G_USEC_PER_SEC);
+		gkr_daemon_async_usleep (G_USEC_PER_SEC);
 	}
 	
 	g_printerr("!\n");
@@ -132,25 +122,26 @@ cancel_thread (gpointer data)
 }
 
 static void 
-cancel_done (GkrAsyncWorker* worker, gpointer result, gpointer user_data)
+cancel_done (GkrDaemonAsyncWorker* worker, gpointer result, gpointer user_data)
 {
-	CancelParams *params = (CancelParams*)user_data;
-	CuAssert (params->cu, "result didn't get passed through", result == user_data);	
-	CuAssert (params->cu, "completing worker is not valid", gkr_async_worker_is_valid (worker));
+	/* "result didn't get passed through" */
+	g_assert (result == user_data);
+	/* "completing worker is not valid" */
+	g_assert (gkr_daemon_async_worker_is_valid (worker));
 	test_mainloop_quit ();
 }
 
-void unit_test_worker_cancel (CuTest* cu)
+DEFINE_TEST(worker_cancel)
 {
-	GkrAsyncWorker *worker;
+	GkrDaemonAsyncWorker *worker;
 	CancelParams params;
 	
 	memset (&params, 0, sizeof (params));
-	params.cu = cu;
 
-	worker = gkr_async_worker_start (cancel_thread, cancel_done, &params);
-	CuAssertPtrNotNull (cu, worker);
-	CuAssert (cu, "worker just started is not valid", gkr_async_worker_is_valid (worker));
+	worker = gkr_daemon_async_worker_start (cancel_thread, cancel_done, &params);
+	g_assert (worker != NULL);
+	/* "worker just started is not valid" */
+	g_assert (gkr_daemon_async_worker_is_valid (worker));
 
 	/* A less than two seconds later, cancel it */
 	g_timeout_add (1600, cancel_worker, worker);
@@ -159,9 +150,10 @@ void unit_test_worker_cancel (CuTest* cu)
 	test_mainloop_run (20000);
 	
 	/* Two seconds should have elapsed in other thread */
-	CuAssertIntEquals (cu, 2, params.value); 
-	CuAssertIntEquals (cu, 0, gkr_async_workers_get_n ());
-	CuAssert (cu, "worker is still valid after done", !gkr_async_worker_is_valid (worker));
+	g_assert_cmpint (2, ==, params.value);
+	g_assert_cmpint (0, ==, gkr_daemon_async_workers_get_n ());
+	/* "worker is still valid after done" */
+	g_assert (!gkr_daemon_async_worker_is_valid (worker));
 }
 
 /* -----------------------------------------------------------------------------
@@ -169,7 +161,6 @@ void unit_test_worker_cancel (CuTest* cu)
  */
  
 typedef struct _FiveParams {
-	CuTest *cu;
 	guint number;
 	guint value;
 } FiveParams;
@@ -179,19 +170,19 @@ five_thread (gpointer data)
 {
 	FiveParams *params = (FiveParams*)data;
 
-	while (gkr_async_yield ()) {
+	while (gkr_daemon_async_yield ()) {
 		++params->value;
 		g_printerr("%d", params->number);
-		gkr_async_sleep (1);
+		gkr_daemon_async_sleep (1);
 	}
 	
 	g_printerr("!\n");
 	return data;
 }
 
-void unit_test_worker_five (CuTest* cu)
+DEFINE_TEST(worker_five)
 {
-	GkrAsyncWorker *worker;
+	GkrDaemonAsyncWorker *worker;
 	FiveParams params[5];
 	int i;
 	
@@ -199,30 +190,33 @@ void unit_test_worker_five (CuTest* cu)
 	
 	for (i = 0; i < 5; ++i)
 	{
-		params[i].cu = cu;
 		params[i].number = i;
 
 		/* Make the last one cancel the main loop */
-		worker = gkr_async_worker_start (five_thread, NULL, &params[i]);
-		CuAssertPtrNotNull (cu, worker);
-		CuAssert (cu, "worker just started is not valid", gkr_async_worker_is_valid (worker));
+		worker = gkr_daemon_async_worker_start (five_thread, NULL, &params[i]);
+		g_assert (worker != NULL);
+		/* "worker just started is not valid" */
+		g_assert (gkr_daemon_async_worker_is_valid (worker));
 
 		/* Stop each in a little less than i seconds */	
 		g_timeout_add ((1000 * i) - 200, cancel_worker, worker);
 	}
 	
-	CuAssertIntEquals (cu, 5, gkr_async_workers_get_n ());
+	g_assert_cmpint (5, ==, gkr_daemon_async_workers_get_n ());
 	 	
 	/* Run the main loop */
 	test_mainloop_run (1900); 
 
-	CuAssert (cu, "last worker should still be valid 2 seconds later", gkr_async_worker_is_valid (worker));
-	gkr_async_worker_stop (worker);
+	/* "last worker should still be valid 2 seconds later" */
+	g_assert (gkr_daemon_async_worker_is_valid (worker));
+	gkr_daemon_async_worker_stop (worker);
 	
-	CuAssert (cu, "all workers have somehow quit", gkr_async_workers_get_n () > 0);
-	gkr_async_workers_stop_all ();
+	/* "all workers have somehow quit" */
+	g_assert (gkr_daemon_async_workers_get_n () > 0);
+	gkr_daemon_async_workers_stop_all ();
 	
-	CuAssertIntEquals (cu, 0, gkr_async_workers_get_n ());
-	CuAssert (cu, "last worker is still valid after exit", !gkr_async_worker_is_valid (worker));
+	g_assert_cmpint (0, ==, gkr_daemon_async_workers_get_n ());
+	/* "last worker is still valid after exit" */
+	g_assert (!gkr_daemon_async_worker_is_valid (worker));
 }
 
diff --git a/tests/test-helpers.c b/tests/test-helpers.c
index 8043a73..5b971c3 100644
--- a/tests/test-helpers.c
+++ b/tests/test-helpers.c
@@ -29,7 +29,7 @@ void* egg_memory_fallback (void *p, size_t sz)
 }
 
 #ifndef EXTERNAL_TEST
-#include "common/gkr-async.h"
+#include "daemon/util/gkr-daemon-async.h"
 #endif
 
 static GMainLoop *mainloop = NULL;
@@ -110,7 +110,7 @@ main (int argc, char* argv[])
 
 #ifndef EXTERNAL_TEST
 
-	gkr_async_workers_init (mainloop);
+	gkr_daemon_async_workers_init (mainloop);
 	
 #endif
 



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