[libgnome-keyring] Allow predictable testing by setting up a test path and service.
- From: Stefan Walter <stefw src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [libgnome-keyring] Allow predictable testing by setting up a test path and service.
- Date: Sun, 14 Feb 2010 04:09:11 +0000 (UTC)
commit b65653a552588bdd1c839272822fba44e988f1f0
Author: Stefan Walter <stef ws local>
Date: Sun Feb 14 04:06:31 2010 +0000
Allow predictable testing by setting up a test path and service.
Tell the daemon which path to use for data, control sockets, and
dbus service, during testing.
configure.in | 3 ++
library/gkr-misc.c | 11 +++++++
library/gkr-misc.h | 2 +
library/gkr-operation.c | 6 ++--
library/gkr-session.c | 5 ++-
library/gnome-keyring.c | 50 +++++++++++++++++-----------------
library/tests/test-memory.c | 8 +++---
tests/gtest-helpers.c | 64 +++++++++++++++++++++++++++++++++++++------
8 files changed, 106 insertions(+), 43 deletions(-)
---
diff --git a/configure.in b/configure.in
index 084e1d5..1391a93 100644
--- a/configure.in
+++ b/configure.in
@@ -193,6 +193,9 @@ fi
AM_CONDITIONAL(WITH_TESTS, test "$enable_tests" = "yes")
+AC_PATH_PROG(GNOME_KEYRING_DAEMON_PATH, gnome-keyring-daemon, "gnome-keyring-daemon")
+AC_DEFINE_UNQUOTED(GNOME_KEYRING_DAEMON_PATH, "$GNOME_KEYRING_DAEMON_PATH", [Path to gnome-keyring-daemon])
+
# ----------------------------------------------------------------------
AC_SUBST(LIBRARY_CFLAGS)
diff --git a/library/gkr-misc.c b/library/gkr-misc.c
index 0c0f276..8de5921 100644
--- a/library/gkr-misc.c
+++ b/library/gkr-misc.c
@@ -29,6 +29,17 @@
#include <stdlib.h>
#include <string.h>
+const gchar*
+gkr_service_name (void)
+{
+#ifdef WITH_TESTS
+ const gchar *service = g_getenv ("GNOME_KEYRING_TEST_SERVICE");
+ if (service && service[0])
+ return service;
+#endif
+ return SECRETS_SERVICE;
+}
+
static void
encode_object_identifier (GString *string, const gchar* name, gssize length)
{
diff --git a/library/gkr-misc.h b/library/gkr-misc.h
index 97efda4..195c0d4 100644
--- a/library/gkr-misc.h
+++ b/library/gkr-misc.h
@@ -26,6 +26,8 @@
#include <glib.h>
+const gchar* gkr_service_name (void);
+
gchar* gkr_encode_keyring_name (const gchar *keyring);
gchar* gkr_encode_keyring_item_id (const gchar *keyring,
diff --git a/library/gkr-operation.c b/library/gkr-operation.c
index ebc93d6..b03152d 100644
--- a/library/gkr-operation.c
+++ b/library/gkr-operation.c
@@ -231,7 +231,7 @@ on_name_changed_filter (DBusConnection *connection, DBusMessage *message, void *
DBUS_TYPE_INVALID)) {
/* See if it's the secret service going away */
- if (object_name && g_str_equal (SECRETS_SERVICE, object_name) &&
+ if (object_name && g_str_equal (gkr_service_name (), object_name) &&
new_owner && g_str_equal ("", new_owner)) {
/* Clear any session, when the service goes away */
@@ -480,7 +480,7 @@ on_prompt_completed (DBusConnection *connection, DBusMessage *message, void *use
DBUS_TYPE_INVALID)) {
/* See if it's the secret service going away */
- if (object_name && g_str_equal (SECRETS_SERVICE, object_name) &&
+ if (object_name && g_str_equal (gkr_service_name (), object_name) &&
new_owner && g_str_equal ("", new_owner)) {
g_message ("Secret service disappeared while waiting for prompt");
@@ -536,7 +536,7 @@ gkr_operation_prompt (GkrOperation *op, const gchar *prompt)
args->op->prompting = TRUE;
dbus_connection_add_filter (op->conn, on_prompt_completed, args, NULL);
- req = dbus_message_new_method_call (SECRETS_SERVICE, prompt,
+ req = dbus_message_new_method_call (gkr_service_name (), prompt,
PROMPT_INTERFACE, "Prompt");
window_id = "";
diff --git a/library/gkr-session.c b/library/gkr-session.c
index f5b4c81..f8ee2dc 100644
--- a/library/gkr-session.c
+++ b/library/gkr-session.c
@@ -23,6 +23,7 @@
#include "config.h"
+#include "gkr-misc.h"
#include "gkr-session.h"
#include "gnome-keyring-private.h"
@@ -198,7 +199,7 @@ session_negotiate_plain (GkrOperation *op)
g_assert (op);
- req = dbus_message_new_method_call (SECRETS_SERVICE, SERVICE_PATH,
+ req = dbus_message_new_method_call (gkr_service_name (), SERVICE_PATH,
SERVICE_INTERFACE, "OpenSession");
dbus_message_iter_init_append (req, &iter);
dbus_message_iter_append_basic (&iter, DBUS_TYPE_STRING, &algorithm);
@@ -325,7 +326,7 @@ session_negotiate_aes (GkrOperation *op)
gcry_mpi_release (base);
if (ret == TRUE) {
- req = dbus_message_new_method_call (SECRETS_SERVICE, SERVICE_PATH,
+ req = dbus_message_new_method_call (gkr_service_name (), SERVICE_PATH,
SERVICE_INTERFACE, "OpenSession");
dbus_message_iter_init_append (req, &iter);
diff --git a/library/gnome-keyring.c b/library/gnome-keyring.c
index e58ef21..21f000e 100644
--- a/library/gnome-keyring.c
+++ b/library/gnome-keyring.c
@@ -70,7 +70,7 @@ prepare_property_get (const gchar *path, const gchar *interface, const gchar *na
if (!interface)
interface = "";
- req = dbus_message_new_method_call (SECRETS_SERVICE, path,
+ req = dbus_message_new_method_call (gkr_service_name (), path,
DBUS_INTERFACE_PROPERTIES, "Get");
dbus_message_append_args (req, DBUS_TYPE_STRING, &interface,
DBUS_TYPE_STRING, &name, DBUS_TYPE_INVALID);
@@ -88,7 +88,7 @@ prepare_property_getall (const gchar *path, const gchar *interface)
if (!interface)
interface = "";
- req = dbus_message_new_method_call (SECRETS_SERVICE, path,
+ req = dbus_message_new_method_call (gkr_service_name (), path,
DBUS_INTERFACE_PROPERTIES, "GetAll");
dbus_message_append_args (req, DBUS_TYPE_STRING, &interface, DBUS_TYPE_INVALID);
@@ -104,7 +104,7 @@ prepare_get_secret (GkrSession *session, const char *path)
g_assert (session);
g_assert (path);
- req = dbus_message_new_method_call (SECRETS_SERVICE, path,
+ req = dbus_message_new_method_call (gkr_service_name (), path,
ITEM_INTERFACE, "GetSecret");
spath = gkr_session_get_path (session);
@@ -121,7 +121,7 @@ prepare_get_secrets (GkrSession *session, char **paths, int n_paths)
g_assert (session);
- req = dbus_message_new_method_call (SECRETS_SERVICE, SERVICE_PATH,
+ req = dbus_message_new_method_call (gkr_service_name (), SERVICE_PATH,
SERVICE_INTERFACE, "GetSecrets");
spath = gkr_session_get_path (session);
@@ -136,7 +136,7 @@ prepare_xlock (const char *action, char **objects, int n_objects)
{
DBusMessage *req;
- req = dbus_message_new_method_call (SECRETS_SERVICE, SERVICE_PATH,
+ req = dbus_message_new_method_call (gkr_service_name (), SERVICE_PATH,
SERVICE_INTERFACE, action);
dbus_message_append_args (req, DBUS_TYPE_ARRAY, DBUS_TYPE_OBJECT_PATH, &objects, n_objects,
@@ -482,7 +482,7 @@ gnome_keyring_is_available (void)
GkrOperation *op;
DBusMessage *req;
- req = dbus_message_new_method_call (SECRETS_SERVICE, SERVICE_PATH,
+ req = dbus_message_new_method_call (gkr_service_name (), SERVICE_PATH,
DBUS_INTERFACE_PEER, "Ping");
op = gkr_operation_new (gkr_callback_empty, GKR_CALLBACK_RES, NULL, NULL);
@@ -549,7 +549,7 @@ gnome_keyring_set_default_keyring (const gchar *keyr
g_return_val_if_fail (callback, NULL);
path = gkr_encode_keyring_name (keyring);
- req = dbus_message_new_method_call (SECRETS_SERVICE, SERVICE_PATH,
+ req = dbus_message_new_method_call (gkr_service_name (), SERVICE_PATH,
SERVICE_INTERFACE, "SetAlias");
string = "default";
@@ -653,7 +653,7 @@ gnome_keyring_get_default_keyring (GnomeKeyringOperationGetStringCallback callb
g_return_val_if_fail (callback, NULL);
- req = dbus_message_new_method_call (SECRETS_SERVICE, SERVICE_PATH,
+ req = dbus_message_new_method_call (gkr_service_name (), SERVICE_PATH,
SERVICE_INTERFACE, "ReadAlias");
string = "default";
@@ -828,7 +828,7 @@ gnome_keyring_lock_all (GnomeKeyringOperationDoneCallback callback,
g_return_val_if_fail (callback, NULL);
- req = dbus_message_new_method_call (SECRETS_SERVICE, SERVICE_PATH,
+ req = dbus_message_new_method_call (gkr_service_name (), SERVICE_PATH,
SERVICE_INTERFACE, "LockService");
op = gkr_operation_new (callback, GKR_CALLBACK_RES, data, destroy_data);
@@ -894,7 +894,7 @@ create_keyring_password_reply (GkrOperation *op, GkrSession *session, gpointer u
DBusMessageIter iter;
DBusMessage *req;
- req = dbus_message_new_method_call (SECRETS_SERVICE, SERVICE_PATH,
+ req = dbus_message_new_method_call (gkr_service_name (), SERVICE_PATH,
"org.gnome.keyring.InternalUnsupportedGuiltRiddenInterface",
"CreateWithMasterPassword");
@@ -980,7 +980,7 @@ gnome_keyring_create (const char *keyring_name,
gkr_session_negotiate (op);
} else {
- req = dbus_message_new_method_call (SECRETS_SERVICE, SERVICE_PATH,
+ req = dbus_message_new_method_call (gkr_service_name (), SERVICE_PATH,
SERVICE_INTERFACE, "CreateCollection");
dbus_message_iter_init_append (req, &iter);
create_keyring_encode_properties (&iter, keyring_name);
@@ -1122,7 +1122,7 @@ unlock_password_reply (GkrOperation *op, GkrSession *session, gpointer user_data
DBusMessage *req;
gchar *path;
- req = dbus_message_new_method_call (SECRETS_SERVICE, SERVICE_PATH,
+ req = dbus_message_new_method_call (gkr_service_name (), SERVICE_PATH,
"org.gnome.keyring.InternalUnsupportedGuiltRiddenInterface",
"UnlockWithMasterPassword");
@@ -1294,7 +1294,7 @@ gnome_keyring_delete (const char *keyring,
g_return_val_if_fail (callback, NULL);
path = gkr_encode_keyring_name (keyring);
- req = dbus_message_new_method_call (SECRETS_SERVICE, path,
+ req = dbus_message_new_method_call (gkr_service_name (), path,
COLLECTION_INTERFACE, "Delete");
op = gkr_operation_new (callback, GKR_CALLBACK_RES, data, destroy_data);
@@ -1349,7 +1349,7 @@ change_password_reply (GkrOperation *op, GkrSession *session, gpointer user_data
DBusMessage *req;
gchar *path;
- req = dbus_message_new_method_call (SECRETS_SERVICE, SERVICE_PATH,
+ req = dbus_message_new_method_call (gkr_service_name (), SERVICE_PATH,
"org.gnome.keyring.InternalUnsupportedGuiltRiddenInterface",
"ChangeWithMasterPassword");
@@ -1463,7 +1463,7 @@ gnome_keyring_change_password (const char *keyr
gkr_session_negotiate (op);
} else {
- req = dbus_message_new_method_call (SECRETS_SERVICE, SERVICE_PATH,
+ req = dbus_message_new_method_call (gkr_service_name (), SERVICE_PATH,
SERVICE_INTERFACE, "ChangeLock");
path = gkr_encode_keyring_name (keyring);
dbus_message_append_args (req, DBUS_TYPE_OBJECT_PATH, &path, DBUS_TYPE_INVALID);
@@ -2206,7 +2206,7 @@ gnome_keyring_find_items (GnomeKeyringItemType type,
g_return_val_if_fail (attributes, NULL);
g_return_val_if_fail (callback, NULL);
- req = dbus_message_new_method_call (SECRETS_SERVICE, SERVICE_PATH,
+ req = dbus_message_new_method_call (gkr_service_name (), SERVICE_PATH,
SERVICE_INTERFACE, "SearchItems");
/* Encode the attribute list */
@@ -2429,7 +2429,7 @@ item_create_prepare (const gchar *path, GnomeKeyringItemType type, const gchar *
DBusMessage *req;
const char *string;
- req = dbus_message_new_method_call (SECRETS_SERVICE, path,
+ req = dbus_message_new_method_call (gkr_service_name (), path,
COLLECTION_INTERFACE, "CreateItem");
dbus_message_iter_init_append (req, iter);
@@ -2701,7 +2701,7 @@ gnome_keyring_item_delete (const char *keyring,
gchar *path;
path = gkr_encode_keyring_item_id (keyring, id);
- req = dbus_message_new_method_call (SECRETS_SERVICE, path,
+ req = dbus_message_new_method_call (gkr_service_name (), path,
ITEM_INTERFACE, "Delete");
op = gkr_operation_new (callback, GKR_CALLBACK_RES, data, destroy_data);
@@ -2904,7 +2904,7 @@ item_get_info_2_reply (GkrOperation *op, GkrSession *session, gpointer data)
g_assert (!args->session);
args->session = gkr_session_ref (session);
- req = dbus_message_new_method_call (SECRETS_SERVICE, args->path, ITEM_INTERFACE, "GetSecret");
+ req = dbus_message_new_method_call (gkr_service_name (), args->path, ITEM_INTERFACE, "GetSecret");
path = gkr_session_get_path (session);
dbus_message_append_args (req, DBUS_TYPE_OBJECT_PATH, &path, DBUS_TYPE_INVALID);
@@ -3057,7 +3057,7 @@ item_set_info_3_reply (GkrOperation *op, GkrSession *session, gpointer user_data
g_assert (args->info->secret);
/* Sending a secret */
- req = dbus_message_new_method_call (SECRETS_SERVICE, args->path,
+ req = dbus_message_new_method_call (gkr_service_name (), args->path,
ITEM_INTERFACE, "SetSecret");
dbus_message_iter_init_append (req, &iter);
@@ -3103,7 +3103,7 @@ item_set_info_1_reply (GkrOperation *op, DBusMessage *reply, gpointer user_data)
return;
/* Next set the type */
- req = dbus_message_new_method_call (SECRETS_SERVICE, args->path,
+ req = dbus_message_new_method_call (gkr_service_name (), args->path,
DBUS_INTERFACE_PROPERTIES, "Set");
dbus_message_iter_init_append (req, &iter);
@@ -3172,7 +3172,7 @@ gnome_keyring_item_set_info (const char *keyring
args->path = gkr_encode_keyring_item_id (keyring, id);
/* First set the label */
- req = dbus_message_new_method_call (SECRETS_SERVICE, args->path,
+ req = dbus_message_new_method_call (gkr_service_name (), args->path,
DBUS_INTERFACE_PROPERTIES, "Set");
dbus_message_iter_init_append (req, &iter);
@@ -3324,7 +3324,7 @@ item_set_attributes_prepare (const gchar *path, GnomeKeyringAttributeList *attrs
DBusMessage *req;
const gchar *string;
- req = dbus_message_new_method_call (SECRETS_SERVICE, path,
+ req = dbus_message_new_method_call (gkr_service_name (), path,
DBUS_INTERFACE_PROPERTIES, "Set");
dbus_message_iter_init_append (req, &iter);
@@ -4308,7 +4308,7 @@ find_unlocked (GkrOperation *op, GnomeKeyringAttributeList *attributes)
DBusMessageIter iter;
DBusMessage *req;
- req = dbus_message_new_method_call (SECRETS_SERVICE, SERVICE_PATH,
+ req = dbus_message_new_method_call (gkr_service_name (), SERVICE_PATH,
SERVICE_INTERFACE, "SearchItems");
/* Encode the attribute list */
@@ -4494,7 +4494,7 @@ delete_password_reply (GkrOperation *op, const char *path, gpointer user_data)
if (path == NULL) {
gkr_operation_complete (op, GNOME_KEYRING_RESULT_NO_MATCH);
} else {
- req = dbus_message_new_method_call (SECRETS_SERVICE, path,
+ req = dbus_message_new_method_call (gkr_service_name (), path,
ITEM_INTERFACE, "Delete");
gkr_operation_request (op, req);
dbus_message_unref (req);
diff --git a/library/tests/test-memory.c b/library/tests/test-memory.c
index 5870333..7cc01b7 100644
--- a/library/tests/test-memory.c
+++ b/library/tests/test-memory.c
@@ -29,19 +29,19 @@
#include "library/gnome-keyring-memory.h"
-#define IS_ZERO ~0
+#define IS_ZERO -1
-static gsize
+static int
find_non_zero (gpointer mem, gsize len)
{
guchar *b, *e;
gsize sz = 0;
for (b = (guchar*)mem, e = ((guchar*)mem) + len; b != e; ++b, ++sz) {
if (*b != 0x00)
- return sz;
+ return (int)sz;
}
- return IS_ZERO;
+ return -1;
}
DEFINE_TEST(alloc_free)
diff --git a/tests/gtest-helpers.c b/tests/gtest-helpers.c
index 422c051..a81034d 100644
--- a/tests/gtest-helpers.c
+++ b/tests/gtest-helpers.c
@@ -23,12 +23,15 @@
/* This file is included into the main .c file for each gtest unit-test program */
+#include "config.h"
+
#include <glib.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
+#include <signal.h>
#include "gtest-helpers.h"
@@ -36,6 +39,7 @@
static GStaticMutex memory_mutex = G_STATIC_MUTEX_INIT;
static const gchar *test_path = NULL;
+static pid_t daemon_pid = 0;
void
egg_memory_lock (void)
@@ -157,21 +161,60 @@ chdir_base_dir (char* argv0)
g_free (dir);
}
+static void
+daemon_start ()
+{
+ GError *err = NULL;
+ gchar *args[3];
+ const gchar *path, *service;
+
+ path = g_getenv ("GNOME_KEYRING_TEST_PATH");
+ if (path && !path[0])
+ path = NULL;
+
+ service = g_getenv ("GNOME_KEYRING_TEST_SERVICE");
+ if (service && !service[0])
+ service = NULL;
+
+ if (!path && !service) {
+ g_mkdir_with_parents ("/tmp/keyring-test/data", 0700);
+ g_setenv ("GNOME_KEYRING_TEST_PATH", "/tmp/keyring-test/data", TRUE);
+ g_setenv ("GNOME_KEYRING_TEST_SERVICE", "org.gnome.keyring.Test", TRUE);
+
+ g_printerr ("Starting gnome-keyring-daemon...\n");
+
+ args[0] = GNOME_KEYRING_DAEMON_PATH;
+ args[1] = "--foreground";
+ args[2] = "--control-directory";
+ args[3] = "/tmp/keyring-test";
+ args[4] = NULL;
+
+ if (!g_spawn_async (NULL, args, NULL, G_SPAWN_LEAVE_DESCRIPTORS_OPEN | G_SPAWN_DO_NOT_REAP_CHILD,
+ NULL, NULL, &daemon_pid, &err)) {
+ g_error ("couldn't start gnome-keyring-daemon for testing: %s",
+ err && err->message ? err->message : "");
+ g_assert_not_reached ();
+ }
+
+ /* Let it startup properly */
+ sleep (2);
+ }
+}
+
+static void
+daemon_stop (void)
+{
+ if (daemon_pid)
+ kill (daemon_pid, SIGTERM);
+ daemon_pid = 0;
+}
+
int
main (int argc, char* argv[])
{
GLogLevelFlags fatal_mask;
int ret;
- test_path = getenv ("GNOME_KEYRING_TEST_PATH");
- if (test_path) {
- setenv ("GNOME_KEYRING_OUTSIDE_TEST", "TRUE", 1);
- } else {
- test_path = "/tmp/test-gnome-keyring";
- setenv ("GNOME_KEYRING_TEST_PATH", test_path, 1);
- g_mkdir_with_parents (test_path, 0777);
- }
-
chdir_base_dir (argv[0]);
g_test_init (&argc, &argv, NULL);
mainloop = g_main_loop_new (NULL, FALSE);
@@ -181,10 +224,13 @@ main (int argc, char* argv[])
g_log_set_always_fatal (fatal_mask);
initialize_tests ();
+ daemon_start ();
start_tests ();
ret = g_test_run ();
stop_tests();
+ daemon_stop();
+
return ret;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]