[libsecret] Move secret_service_get_secrets() to secret_item_load_secrets()
- From: Stefan Walter <stefw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libsecret] Move secret_service_get_secrets() to secret_item_load_secrets()
- Date: Thu, 5 Jul 2012 21:34:27 +0000 (UTC)
commit 012ed7d620e3736d99648267828d8bded5cdae6f
Author: Stef Walter <stefw gnome org>
Date: Thu Jul 5 17:11:58 2012 +0200
Move secret_service_get_secrets() to secret_item_load_secrets()
* And cache the secrets on the items instead of returning
them in a GHashtable
docs/reference/libsecret/libsecret-sections.txt | 6 +-
library/secret-item.c | 231 +++++++++++++++++++++++
library/secret-item.h | 12 ++
library/secret-methods.c | 228 ----------------------
library/secret-paths.c | 4 +-
library/secret-service.h | 15 --
library/tests/test-item.c | 115 +++++++++++
library/tests/test-methods.c | 113 -----------
8 files changed, 363 insertions(+), 361 deletions(-)
---
diff --git a/docs/reference/libsecret/libsecret-sections.txt b/docs/reference/libsecret/libsecret-sections.txt
index 1a53da5..cd014ef 100644
--- a/docs/reference/libsecret/libsecret-sections.txt
+++ b/docs/reference/libsecret/libsecret-sections.txt
@@ -65,6 +65,9 @@ secret_item_get_secret
secret_item_load_secret
secret_item_load_secret_finish
secret_item_load_secret_sync
+secret_item_load_secrets
+secret_item_load_secrets_finish
+secret_item_load_secrets_sync
secret_item_set_secret
secret_item_set_secret_finish
secret_item_set_secret_sync
@@ -186,9 +189,6 @@ secret_service_ensure_collections_sync
secret_service_search
secret_service_search_finish
secret_service_search_sync
-secret_service_get_secrets
-secret_service_get_secrets_finish
-secret_service_get_secrets_sync
secret_service_lock
secret_service_lock_finish
secret_service_lock_sync
diff --git a/library/secret-item.c b/library/secret-item.c
index 011b3f9..3c5d876 100644
--- a/library/secret-item.c
+++ b/library/secret-item.c
@@ -1357,6 +1357,237 @@ secret_item_load_secret_sync (SecretItem *self,
}
typedef struct {
+ SecretService *service;
+ GCancellable *cancellable;
+ GVariant *in;
+ GHashTable *items;
+} LoadsClosure;
+
+static void
+loads_closure_free (gpointer data)
+{
+ LoadsClosure *loads = data;
+ if (loads->in)
+ g_variant_unref (loads->in);
+ if (loads->service)
+ g_object_unref (loads->service);
+ g_clear_object (&loads->cancellable);
+ g_slice_free (LoadsClosure, loads);
+}
+
+static void
+on_get_secrets_complete (GObject *source,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ GSimpleAsyncResult *async = G_SIMPLE_ASYNC_RESULT (user_data);
+ LoadsClosure *loads = g_simple_async_result_get_op_res_gpointer (async);
+ GHashTable *with_paths;
+ GError *error = NULL;
+ GHashTableIter iter;
+ const gchar *path;
+ SecretValue *value;
+ SecretItem *item;
+ GVariant *retval;
+
+ retval = g_dbus_proxy_call_finish (G_DBUS_PROXY (source), result, &error);
+ if (retval != NULL) {
+ with_paths = _secret_service_decode_get_secrets_all (loads->service, retval);
+ g_return_if_fail (with_paths != NULL);
+
+ g_hash_table_iter_init (&iter, with_paths);
+ while (g_hash_table_iter_next (&iter, (gpointer *)&path, (gpointer *)&value)) {
+ item = g_hash_table_lookup (loads->items, path);
+ if (item != NULL)
+ _secret_item_set_cached_secret (item, value);
+ }
+
+ g_hash_table_unref (with_paths);
+ g_variant_unref (retval);
+ }
+
+ if (error != NULL)
+ g_simple_async_result_take_error (async, error);
+
+ g_simple_async_result_complete (async);
+ g_object_unref (async);
+}
+
+static void
+on_loads_secrets_session (GObject *source,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ GSimpleAsyncResult *async = G_SIMPLE_ASYNC_RESULT (user_data);
+ LoadsClosure *loads = g_simple_async_result_get_op_res_gpointer (async);
+ GError *error = NULL;
+ const gchar *session;
+
+ session = secret_service_ensure_session_finish (SECRET_SERVICE (source),
+ result, &error);
+ if (error != NULL) {
+ g_simple_async_result_take_error (async, error);
+ g_simple_async_result_complete (async);
+
+ } else {
+ g_dbus_proxy_call (G_DBUS_PROXY (source), "GetSecrets",
+ g_variant_new ("(@aoo)", loads->in, session),
+ G_DBUS_CALL_FLAGS_NO_AUTO_START, -1,
+ loads->cancellable, on_get_secrets_complete,
+ g_object_ref (async));
+ }
+
+ g_object_unref (async);
+}
+
+/**
+ * secret_item_load_secrets:
+ * @items: (element-type Secret.Item): the items to retrieve secrets for
+ * @cancellable: optional cancellation object
+ * @callback: called when the operation completes
+ * @user_data: data to pass to the callback
+ *
+ * Load the secret values for an secret items stored in the service.
+ *
+ * The @items must all have the same SecretItem::service property.
+ *
+ * This function returns immediately and completes asynchronously.
+ */
+void
+secret_item_load_secrets (GList *items,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ GSimpleAsyncResult *async;
+ LoadsClosure *loads;
+ GPtrArray *paths;
+ const gchar *path;
+ GList *l;
+
+ g_return_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable));
+
+ for (l = items; l != NULL; l = g_list_next (l))
+ g_return_if_fail (SECRET_IS_ITEM (l->data));
+
+ async = g_simple_async_result_new (NULL, callback, user_data,
+ secret_item_load_secrets);
+ loads = g_slice_new0 (LoadsClosure);
+ loads->cancellable = cancellable ? g_object_ref (cancellable) : NULL;
+ loads->items = g_hash_table_new_full (g_str_hash, g_str_equal,
+ g_free, g_object_unref);
+
+ paths = g_ptr_array_new ();
+ for (l = items; l != NULL; l = g_list_next (l)) {
+ if (secret_item_get_locked (l->data))
+ continue;
+
+ if (loads->service == NULL) {
+ loads->service = secret_item_get_service (l->data);
+ if (loads->service)
+ g_object_ref (loads->service);
+ }
+
+ path = g_dbus_proxy_get_object_path (l->data);
+ g_hash_table_insert (loads->items, g_strdup (path), g_object_ref (l->data));
+ g_ptr_array_add (paths, (gpointer)path);
+ }
+
+ loads->in = g_variant_new_objv ((const gchar * const *)paths->pdata, paths->len);
+ g_variant_ref_sink (loads->in);
+
+ g_ptr_array_free (paths, TRUE);
+ g_simple_async_result_set_op_res_gpointer (async, loads, loads_closure_free);
+
+ if (loads->service) {
+ secret_service_ensure_session (loads->service, cancellable,
+ on_loads_secrets_session,
+ g_object_ref (async));
+ } else {
+ g_simple_async_result_complete_in_idle (async);
+ }
+
+ g_object_unref (async);
+}
+
+/**
+ * secret_item_load_secrets_finish:
+ * @result: asynchronous result passed to callback
+ * @error: location to place an error on failure
+ *
+ * Complete asynchronous operation to load the secret values for
+ * secret items stored in the service.
+ *
+ * Items that are locked will not have their secrets loaded.
+ *
+ * Returns: whether the operation succeded or not
+ */
+gboolean
+secret_item_load_secrets_finish (GAsyncResult *result,
+ GError **error)
+{
+ GSimpleAsyncResult *async;
+
+ g_return_val_if_fail (g_simple_async_result_is_valid (result, NULL,
+ secret_item_load_secrets), FALSE);
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ async = G_SIMPLE_ASYNC_RESULT (result);
+ if (g_simple_async_result_propagate_error (async, error))
+ return FALSE;
+
+ return TRUE;
+}
+
+/**
+ * secret_item_load_secrets_sync:
+ * @items: (element-type Secret.Item): the items to retrieve secrets for
+ * @cancellable: optional cancellation object
+ * @error: location to place an error on failure
+ *
+ * Load the secret values for an secret items stored in the service.
+ *
+ * The @items must all have the same SecretItem::service property.
+ *
+ * This method may block indefinitely and should not be used in user interface
+ * threads.
+ *
+ * Items that are locked will not have their secrets loaded.
+ *
+ * Returns: whether the operation succeded or not
+ */
+gboolean
+secret_item_load_secrets_sync (GList *items,
+ GCancellable *cancellable,
+ GError **error)
+{
+ SecretSync *sync;
+ gboolean ret;
+ GList *l;
+
+ for (l = items; l != NULL; l = g_list_next (l))
+ g_return_val_if_fail (SECRET_IS_ITEM (l->data), FALSE);
+
+ g_return_val_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable), FALSE);
+ g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+
+ sync = _secret_sync_new ();
+ g_main_context_push_thread_default (sync->context);
+
+ secret_item_load_secrets (items, cancellable,
+ _secret_sync_on_result, sync);
+
+ g_main_loop_run (sync->loop);
+
+ ret = secret_item_load_secrets_finish (sync->result, error);
+
+ g_main_context_pop_thread_default (sync->context);
+ _secret_sync_free (sync);
+
+ return ret;
+}
+
+typedef struct {
GCancellable *cancellable;
SecretValue *value;
} SetClosure;
diff --git a/library/secret-item.h b/library/secret-item.h
index 1733f39..ffcbe5c 100644
--- a/library/secret-item.h
+++ b/library/secret-item.h
@@ -128,6 +128,18 @@ gboolean secret_item_load_secret_sync (SecretItem *self,
GCancellable *cancellable,
GError **error);
+void secret_item_load_secrets (GList *items,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+
+gboolean secret_item_load_secrets_finish (GAsyncResult *result,
+ GError **error);
+
+gboolean secret_item_load_secrets_sync (GList *items,
+ GCancellable *cancellable,
+ GError **error);
+
void secret_item_set_secret (SecretItem *self,
SecretValue *value,
GCancellable *cancellable,
diff --git a/library/secret-methods.c b/library/secret-methods.c
index 91405c4..7b2ed16 100644
--- a/library/secret-methods.c
+++ b/library/secret-methods.c
@@ -321,69 +321,6 @@ secret_service_search_sync (SecretService *self,
return ret;
}
-typedef struct {
- GCancellable *cancellable;
- GVariant *in;
- GVariant *out;
- GHashTable *items;
-} GetClosure;
-
-static void
-get_closure_free (gpointer data)
-{
- GetClosure *closure = data;
- if (closure->in)
- g_variant_unref (closure->in);
- if (closure->out)
- g_variant_unref (closure->out);
- g_clear_object (&closure->cancellable);
- g_slice_free (GetClosure, closure);
-}
-
-static void
-on_get_secrets_complete (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- GSimpleAsyncResult *res = G_SIMPLE_ASYNC_RESULT (user_data);
- GetClosure *closure = g_simple_async_result_get_op_res_gpointer (res);
- GError *error = NULL;
-
- closure->out = g_dbus_proxy_call_finish (G_DBUS_PROXY (source), result, &error);
- if (error != NULL)
- g_simple_async_result_take_error (res, error);
- g_simple_async_result_complete (res);
-
- g_object_unref (res);
-}
-
-static void
-on_get_secrets_session (GObject *source,
- GAsyncResult *result,
- gpointer user_data)
-{
- GSimpleAsyncResult *res = G_SIMPLE_ASYNC_RESULT (user_data);
- GetClosure *closure = g_simple_async_result_get_op_res_gpointer (res);
- GError *error = NULL;
- const gchar *session;
-
- session = secret_service_ensure_session_finish (SECRET_SERVICE (source),
- result, &error);
- if (error != NULL) {
- g_simple_async_result_take_error (res, error);
- g_simple_async_result_complete (res);
- } else {
- g_dbus_proxy_call (G_DBUS_PROXY (source), "GetSecrets",
- g_variant_new ("(@aoo)", closure->in, session),
- G_DBUS_CALL_FLAGS_NO_AUTO_START, -1,
- closure->cancellable, on_get_secrets_complete,
- g_object_ref (res));
- }
-
- g_object_unref (res);
-}
-
-
SecretValue *
_secret_service_decode_get_secrets_first (SecretService *self,
GVariant *out)
@@ -429,171 +366,6 @@ _secret_service_decode_get_secrets_all (SecretService *self,
return values;
}
-/**
- * secret_service_get_secrets:
- * @self: the secret service
- * @items: (element-type Secret.Item): the items to retrieve secrets for
- * @cancellable: optional cancellation object
- * @callback: called when the operation completes
- * @user_data: data to pass to the callback
- *
- * Get the secret values for an secret items stored in the service.
- *
- * This method takes a list of #SecretItem proxy objects. If you only have the
- * D-Bus object paths of the items, use secret_service_get_secrets_for_paths()
- * instead.
- *
- * This function returns immediately and completes asynchronously.
- */
-void
-secret_service_get_secrets (SecretService *self,
- GList *items,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GSimpleAsyncResult *res;
- GetClosure *closure;
- GPtrArray *paths;
- const gchar *path;
- GList *l;
-
- g_return_if_fail (SECRET_IS_SERVICE (self));
- g_return_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable));
-
- res = g_simple_async_result_new (G_OBJECT (self), callback, user_data,
- secret_service_get_secrets);
- closure = g_slice_new0 (GetClosure);
- closure->cancellable = cancellable ? g_object_ref (cancellable) : NULL;
- closure->items = g_hash_table_new_full (g_str_hash, g_str_equal,
- g_free, g_object_unref);
-
- paths = g_ptr_array_new ();
- for (l = items; l != NULL; l = g_list_next (l)) {
- path = g_dbus_proxy_get_object_path (l->data);
- g_hash_table_insert (closure->items, g_strdup (path), g_object_ref (l->data));
- g_ptr_array_add (paths, (gpointer)path);
- }
-
- closure->in = g_variant_new_objv ((const gchar * const *)paths->pdata, paths->len);
- g_variant_ref_sink (closure->in);
-
- g_ptr_array_free (paths, TRUE);
- g_simple_async_result_set_op_res_gpointer (res, closure, get_closure_free);
-
- secret_service_ensure_session (self, cancellable,
- on_get_secrets_session,
- g_object_ref (res));
-
- g_object_unref (res);
-}
-
-/**
- * secret_service_get_secrets_finish:
- * @self: the secret service
- * @result: asynchronous result passed to callback
- * @error: location to place an error on failure
- *
- * Complete asynchronous operation to get the secret values for an
- * secret items stored in the service.
- *
- * Items that are locked will not be included the results.
- *
- * Returns: (transfer full): a newly allocated hash table of #SecretItem keys
- * to #SecretValue values.
- */
-GHashTable *
-secret_service_get_secrets_finish (SecretService *self,
- GAsyncResult *result,
- GError **error)
-{
- GSimpleAsyncResult *res;
- GetClosure *closure;
- GHashTable *with_paths;
- GHashTable *with_items;
- GHashTableIter iter;
- const gchar *path;
- SecretValue *value;
- SecretItem *item;
-
- g_return_val_if_fail (SECRET_IS_SERVICE (self), NULL);
- g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (self),
- secret_service_get_secrets), NULL);
- g_return_val_if_fail (error == NULL || *error == NULL, NULL);
-
- res = G_SIMPLE_ASYNC_RESULT (result);
- if (g_simple_async_result_propagate_error (res, error))
- return NULL;
-
- closure = g_simple_async_result_get_op_res_gpointer (res);
- with_paths = _secret_service_decode_get_secrets_all (self, closure->out);
- g_return_val_if_fail (with_paths != NULL, NULL);
-
- with_items = g_hash_table_new_full (g_direct_hash, g_direct_equal,
- g_object_unref, secret_value_unref);
-
- g_hash_table_iter_init (&iter, with_paths);
- while (g_hash_table_iter_next (&iter, (gpointer *)&path, (gpointer *)&value)) {
- item = g_hash_table_lookup (closure->items, path);
- if (item != NULL)
- g_hash_table_insert (with_items, g_object_ref (item),
- secret_value_ref (value));
- }
-
- g_hash_table_unref (with_paths);
- return with_items;
-}
-
-/**
- * secret_service_get_secrets_sync:
- * @self: the secret service
- * @items: (element-type Secret.Item): the items to retrieve secrets for
- * @cancellable: optional cancellation object
- * @error: location to place an error on failure
- *
- * Get the secret values for an secret items stored in the service.
- *
- * This method takes a list of #SecretItem proxy objects. If you only have the
- * D-Bus object paths of the items, use secret_service_get_secrets_for_paths_sync()
- * instead.
- *
- * This method may block indefinitely and should not be used in user interface
- * threads.
- *
- * Items that are locked will not be included the results.
- *
- * Returns: (transfer full): a newly allocated hash table of #SecretItem keys
- * to #SecretValue values.
- */
-GHashTable *
-secret_service_get_secrets_sync (SecretService *self,
- GList *items,
- GCancellable *cancellable,
- GError **error)
-{
- SecretSync *sync;
- GHashTable *secrets;
-
- g_return_val_if_fail (SECRET_IS_SERVICE (self), NULL);
- g_return_val_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable), NULL);
- g_return_val_if_fail (error == NULL || *error == NULL, NULL);
-
- sync = _secret_sync_new ();
- g_main_context_push_thread_default (sync->context);
-
- secret_service_get_secrets (self, items, cancellable,
- _secret_sync_on_result, sync);
-
- g_main_loop_run (sync->loop);
-
- secrets = secret_service_get_secrets_finish (self, sync->result, error);
-
- g_main_context_pop_thread_default (sync->context);
- _secret_sync_free (sync);
-
- return secrets;
-}
-
typedef struct {
GCancellable *cancellable;
SecretPrompt *prompt;
diff --git a/library/secret-paths.c b/library/secret-paths.c
index 6919d87..976def6 100644
--- a/library/secret-paths.c
+++ b/library/secret-paths.c
@@ -445,7 +445,7 @@ secret_service_get_secret_for_path_sync (SecretService *self,
* Get the secret values for an secret items stored in the service.
*
* The items are represented by their D-Bus object paths. If you already have
- * #SecretItem proxy objects, use use secret_service_get_secrets() to more simply
+ * #SecretItem proxy objects, use use secret_item_load_secrets() to more simply
* get their secret values.
*
* This function returns immediately and completes asynchronously.
@@ -524,7 +524,7 @@ secret_service_get_secrets_for_paths_finish (SecretService *self,
* Get the secret values for an secret items stored in the service.
*
* The items are represented by their D-Bus object paths. If you already have
- * #SecretItem proxy objects, use use secret_service_get_secrets_sync() to more
+ * #SecretItem proxy objects, use use secret_item_load_secrets_sync() to more
* simply get their secret values.
*
* This method may block indefinitely and should not be used in user interface
diff --git a/library/secret-service.h b/library/secret-service.h
index a29bd47..b3afcae 100644
--- a/library/secret-service.h
+++ b/library/secret-service.h
@@ -162,21 +162,6 @@ gboolean secret_service_search_sync (SecretService
GList **locked,
GError **error);
-void secret_service_get_secrets (SecretService *self,
- GList *items,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data);
-
-GHashTable * secret_service_get_secrets_finish (SecretService *self,
- GAsyncResult *result,
- GError **error);
-
-GHashTable * secret_service_get_secrets_sync (SecretService *self,
- GList *items,
- GCancellable *cancellable,
- GError **error);
-
void secret_service_lock (SecretService *self,
GList *objects,
GCancellable *cancellable,
diff --git a/library/tests/test-item.c b/library/tests/test-item.c
index a627cd9..bf29584 100644
--- a/library/tests/test-item.c
+++ b/library/tests/test-item.c
@@ -625,6 +625,119 @@ test_set_secret_sync (Test *test,
}
static void
+test_secrets_sync (Test *test,
+ gconstpointer used)
+{
+ const gchar *path_item_one = "/org/freedesktop/secrets/collection/english/1";
+ const gchar *path_item_two = "/org/freedesktop/secrets/collection/english/2";
+ const gchar *path_item_three = "/org/freedesktop/secrets/collection/spanish/10";
+
+ SecretValue *value;
+ GError *error = NULL;
+ const gchar *password;
+ SecretItem *item_one, *item_two, *item_three;
+ GList *items = NULL;
+ gboolean ret;
+ gsize length;
+
+ item_one = secret_item_new_sync (test->service, path_item_one, SECRET_ITEM_NONE, NULL, &error);
+ item_two = secret_item_new_sync (test->service, path_item_two, SECRET_ITEM_NONE, NULL, &error);
+ item_three = secret_item_new_sync (test->service, path_item_three, SECRET_ITEM_NONE, NULL, &error);
+
+ items = g_list_append (items, item_one);
+ items = g_list_append (items, item_two);
+ items = g_list_append (items, item_three);
+
+ ret = secret_item_load_secrets_sync (items, NULL, &error);
+ g_assert_no_error (error);
+ g_assert (ret == TRUE);
+
+ value = secret_item_get_secret (item_one);
+ g_assert (value != NULL);
+ password = secret_value_get (value, &length);
+ g_assert_cmpuint (length, ==, 3);
+ g_assert_cmpstr (password, ==, "111");
+ secret_value_unref (value);
+
+ value = secret_item_get_secret (item_two);
+ g_assert (value != NULL);
+ password = secret_value_get (value, &length);
+ g_assert_cmpuint (length, ==, 3);
+ g_assert_cmpstr (password, ==, "222");
+ secret_value_unref (value);
+
+ value = secret_item_get_secret (item_three);
+ g_assert (value == NULL);
+
+ g_list_free_full (items, g_object_unref);
+}
+
+static void
+test_secrets_async (Test *test,
+ gconstpointer used)
+{
+ const gchar *path_item_one = "/org/freedesktop/secrets/collection/english/1";
+ const gchar *path_item_two = "/org/freedesktop/secrets/collection/english/2";
+ const gchar *path_item_three = "/org/freedesktop/secrets/collection/spanish/10";
+
+ SecretValue *value;
+ GError *error = NULL;
+ const gchar *password;
+ GAsyncResult *result = NULL;
+ SecretItem *item_one, *item_two, *item_three;
+ GList *items = NULL;
+ gsize length;
+ gboolean ret;
+
+ item_one = secret_item_new_sync (test->service, path_item_one, SECRET_ITEM_NONE, NULL, &error);
+ g_assert_no_error (error);
+
+ item_two = secret_item_new_sync (test->service, path_item_two, SECRET_ITEM_NONE, NULL, &error);
+ g_assert_no_error (error);
+
+ item_three = secret_item_new_sync (test->service, path_item_three, SECRET_ITEM_NONE, NULL, &error);
+ g_assert_no_error (error);
+
+
+ items = g_list_append (items, item_one);
+ items = g_list_append (items, item_two);
+ items = g_list_append (items, item_three);
+
+ secret_item_load_secrets (items, NULL,
+ on_async_result, &result);
+ g_assert (result == NULL);
+
+ egg_test_wait ();
+
+ ret = secret_item_load_secrets_finish (result, &error);
+ g_assert_no_error (error);
+ g_object_unref (result);
+ g_assert (ret == TRUE);
+
+ value = secret_item_get_secret (item_one);
+ g_assert (value != NULL);
+ password = secret_value_get (value, &length);
+ g_assert_cmpuint (length, ==, 3);
+ g_assert_cmpstr (password, ==, "111");
+ secret_value_unref (value);
+
+ value = secret_item_get_secret (item_two);
+ g_assert (value != NULL);
+ password = secret_value_get (value, &length);
+ g_assert_cmpuint (length, ==, 3);
+ g_assert_cmpstr (password, ==, "222");
+ secret_value_unref (value);
+
+ value = secret_item_get_secret (item_three);
+ g_assert (value == NULL);
+
+ g_object_unref (item_one);
+ g_object_unref (item_two);
+ g_object_unref (item_three);
+ g_list_free (items);
+}
+
+static void
test_delete_sync (Test *test,
gconstpointer unused)
{
@@ -699,6 +812,8 @@ main (int argc, char **argv)
g_test_add ("/item/load-secret-sync", Test, "mock-service-normal.py", setup, test_load_secret_sync, teardown);
g_test_add ("/item/load-secret-async", Test, "mock-service-normal.py", setup, test_load_secret_async, teardown);
g_test_add ("/item/set-secret-sync", Test, "mock-service-normal.py", setup, test_set_secret_sync, teardown);
+ g_test_add ("/item/secrets-sync", Test, "mock-service-normal.py", setup, test_secrets_sync, teardown);
+ g_test_add ("/item/secrets-async", Test, "mock-service-normal.py", setup, test_secrets_async, teardown);
g_test_add ("/item/delete-sync", Test, "mock-service-normal.py", setup, test_delete_sync, teardown);
g_test_add ("/item/delete-async", Test, "mock-service-normal.py", setup, test_delete_async, teardown);
diff --git a/library/tests/test-methods.c b/library/tests/test-methods.c
index 09de317..b52ab58 100644
--- a/library/tests/test-methods.c
+++ b/library/tests/test-methods.c
@@ -258,116 +258,6 @@ test_search_nulls (Test *test,
}
static void
-test_secrets_sync (Test *test,
- gconstpointer used)
-{
- const gchar *path_item_one = "/org/freedesktop/secrets/collection/english/1";
- const gchar *path_item_two = "/org/freedesktop/secrets/collection/english/2";
- const gchar *path_item_three = "/org/freedesktop/secrets/collection/spanish/10";
-
- SecretValue *value;
- GHashTable *values;
- GError *error = NULL;
- const gchar *password;
- SecretItem *item_one, *item_two, *item_three;
- GList *items = NULL;
- gsize length;
-
- item_one = secret_item_new_sync (test->service, path_item_one, SECRET_ITEM_NONE, NULL, &error);
- item_two = secret_item_new_sync (test->service, path_item_two, SECRET_ITEM_NONE, NULL, &error);
- item_three = secret_item_new_sync (test->service, path_item_three, SECRET_ITEM_NONE, NULL, &error);
-
- items = g_list_append (items, item_one);
- items = g_list_append (items, item_two);
- items = g_list_append (items, item_three);
-
- values = secret_service_get_secrets_sync (test->service, items, NULL, &error);
- g_list_free_full (items, g_object_unref);
- g_assert_no_error (error);
-
- g_assert (values != NULL);
- g_assert_cmpuint (g_hash_table_size (values), ==, 2);
-
- value = g_hash_table_lookup (values, item_one);
- g_assert (value != NULL);
- password = secret_value_get (value, &length);
- g_assert_cmpuint (length, ==, 3);
- g_assert_cmpstr (password, ==, "111");
-
- value = g_hash_table_lookup (values, item_two);
- g_assert (value != NULL);
- password = secret_value_get (value, &length);
- g_assert_cmpuint (length, ==, 3);
- g_assert_cmpstr (password, ==, "222");
-
- g_hash_table_unref (values);
-}
-
-static void
-test_secrets_async (Test *test,
- gconstpointer used)
-{
- const gchar *path_item_one = "/org/freedesktop/secrets/collection/english/1";
- const gchar *path_item_two = "/org/freedesktop/secrets/collection/english/2";
- const gchar *path_item_three = "/org/freedesktop/secrets/collection/spanish/10";
-
- SecretValue *value;
- GHashTable *values;
- GError *error = NULL;
- const gchar *password;
- GAsyncResult *result = NULL;
- SecretItem *item_one, *item_two, *item_three;
- GList *items = NULL;
- gsize length;
-
- item_one = secret_item_new_sync (test->service, path_item_one, SECRET_ITEM_NONE, NULL, &error);
- g_assert_no_error (error);
-
- item_two = secret_item_new_sync (test->service, path_item_two, SECRET_ITEM_NONE, NULL, &error);
- g_assert_no_error (error);
-
- item_three = secret_item_new_sync (test->service, path_item_three, SECRET_ITEM_NONE, NULL, &error);
- g_assert_no_error (error);
-
-
- items = g_list_append (items, item_one);
- items = g_list_append (items, item_two);
- items = g_list_append (items, item_three);
-
- secret_service_get_secrets (test->service, items, NULL,
- on_complete_get_result, &result);
- g_assert (result == NULL);
- g_list_free (items);
-
- egg_test_wait ();
-
- values = secret_service_get_secrets_finish (test->service, result, &error);
- g_assert_no_error (error);
- g_object_unref (result);
-
- g_assert (values != NULL);
- g_assert_cmpuint (g_hash_table_size (values), ==, 2);
-
- value = g_hash_table_lookup (values, item_one);
- g_assert (value != NULL);
- password = secret_value_get (value, &length);
- g_assert_cmpuint (length, ==, 3);
- g_assert_cmpstr (password, ==, "111");
-
- value = g_hash_table_lookup (values, item_two);
- g_assert (value != NULL);
- password = secret_value_get (value, &length);
- g_assert_cmpuint (length, ==, 3);
- g_assert_cmpstr (password, ==, "222");
-
- g_hash_table_unref (values);
-
- g_object_unref (item_one);
- g_object_unref (item_two);
- g_object_unref (item_three);
-}
-
-static void
test_lock_sync (Test *test,
gconstpointer used)
{
@@ -938,9 +828,6 @@ main (int argc, char **argv)
g_test_add ("/service/search-async", Test, "mock-service-normal.py", setup, test_search_async, teardown);
g_test_add ("/service/search-nulls", Test, "mock-service-normal.py", setup, test_search_nulls, teardown);
- g_test_add ("/service/secrets-sync", Test, "mock-service-normal.py", setup, test_secrets_sync, teardown);
- g_test_add ("/service/secrets-async", Test, "mock-service-normal.py", setup, test_secrets_async, teardown);
-
g_test_add ("/service/lock-sync", Test, "mock-service-lock.py", setup, test_lock_sync, teardown);
g_test_add ("/service/unlock-sync", Test, "mock-service-lock.py", setup, test_unlock_sync, teardown);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]