telepathy-mission-control: Mock accounts service plugin: receive settings from MC as GVariant

Simon McVittie smcv at kemper.freedesktop.org
Wed Feb 13 06:23:50 PST 2013


Module: telepathy-mission-control
Branch: master
Commit: 8ffb3f507c35af24fac0b4fb28438d4af7fb298c
URL:    http://cgit.freedesktop.org/telepathy/telepathy-mission-control/commit/?id=8ffb3f507c35af24fac0b4fb28438d4af7fb298c

Author: Simon McVittie <simon.mcvittie at collabora.co.uk>
Date:   Mon Sep 10 19:12:10 2012 +0100

Mock accounts service plugin: receive settings from MC as GVariant

---

 tests/twisted/account-manager/update-parameters.py |   14 ++-
 tests/twisted/dbus-account-plugin.c                |  132 ++++++++++----------
 2 files changed, 73 insertions(+), 73 deletions(-)

diff --git a/tests/twisted/account-manager/update-parameters.py b/tests/twisted/account-manager/update-parameters.py
index 5665623..a7ec6a0 100644
--- a/tests/twisted/account-manager/update-parameters.py
+++ b/tests/twisted/account-manager/update-parameters.py
@@ -250,14 +250,18 @@ def test(q, bus, mc, **kwargs):
 
     cache_dir = os.environ['XDG_CACHE_HOME']
 
-    # fd.o #28557: when the "file" has been updated, the account parameter
-    # has its two backslashes doubled to 4 (because of the .desktop encoding),
-    # but they are not doubled again.
-    assertEquals(r'\\\\',
+    # Now that we're using GVariant-based storage, the backslashes aren't
+    # escaped.
+    assertEquals(r'\\',
             kwargs['fake_accounts_service'].accounts
             [account.object_path[len(cs.ACCOUNT_PATH_PREFIX):]]
-            [3]     # parameters of unknown type
+            [2]     # parameters of known type
             ['account'])
+    assertEquals(None,
+            kwargs['fake_accounts_service'].accounts
+            [account.object_path[len(cs.ACCOUNT_PATH_PREFIX):]]
+            [3]     # parameters of unknown type
+            .get('account', None))
 
 if __name__ == '__main__':
     exec_test(test, {}, pass_kwargs=True)
diff --git a/tests/twisted/dbus-account-plugin.c b/tests/twisted/dbus-account-plugin.c
index c2bcf06..59a52a3 100644
--- a/tests/twisted/dbus-account-plugin.c
+++ b/tests/twisted/dbus-account-plugin.c
@@ -35,18 +35,6 @@
 #define TEST_DBUS_ACCOUNT_PLUGIN_PATH   TESTSLASH "DBusAccountPlugin"
 #define TEST_DBUS_ACCOUNT_PLUGIN_IFACE  TESTDOT   "DBusAccountPlugin"
 
-/* for now, the concepts of parameter/attribute flags are local to this
- * plugin */
-
-typedef enum {
-    ATTRIBUTE_FLAG_NONE = 0
-} AttributeFlag;
-
-typedef enum {
-    PARAMETER_FLAG_NONE = 0,
-    PARAMETER_FLAG_SECRET = 1
-} ParameterFlag;
-
 typedef struct {
     gchar *path;
     /* string => GVariant */
@@ -488,15 +476,15 @@ test_dbus_account_plugin_get (const McpAccountStorage *storage,
       while (g_hash_table_iter_next (&iter, &k, &v))
         {
           gchar *param_foo;
-          guint32 flags;
+          McpParameterFlags flags;
 
           param_foo = g_strdup_printf ("param-%s", (const gchar *) k);
           mcp_account_manager_set_value (am, account_name, param_foo, v);
 
-          flags = GPOINTER_TO_UINT (g_hash_table_lookup (account->parameter_flags,
-                k));
+          flags = GPOINTER_TO_UINT (g_hash_table_lookup (
+                account->parameter_flags, k));
 
-          if (flags & PARAMETER_FLAG_SECRET)
+          if (flags & MCP_PARAMETER_FLAG_SECRET)
             mcp_account_manager_parameter_make_secret (am, account_name,
                 param_foo);
 
@@ -519,7 +507,7 @@ test_dbus_account_plugin_get (const McpAccountStorage *storage,
           flags = GPOINTER_TO_UINT (g_hash_table_lookup (account->parameter_flags,
                 k));
 
-          if (flags & PARAMETER_FLAG_SECRET)
+          if (flags & MCP_PARAMETER_FLAG_SECRET)
             mcp_account_manager_parameter_make_secret (am, account_name,
                 param_foo);
 
@@ -543,7 +531,7 @@ test_dbus_account_plugin_get (const McpAccountStorage *storage,
           "GetParameter",
           g_variant_new_parsed ("(%o, %s)", account->path, key + 6), NULL);
 
-      if (flags & PARAMETER_FLAG_SECRET)
+      if (flags & MCP_PARAMETER_FLAG_SECRET)
         mcp_account_manager_parameter_make_secret (am, account_name, key);
 
       if (v != NULL)
@@ -596,76 +584,82 @@ test_dbus_account_plugin_set (const McpAccountStorage *storage,
     const gchar *key,
     const gchar *value)
 {
+  /* Now that we implement set_attribute and set_parameter, this no longer
+   * needs a real implementation. */
+  return FALSE;
+}
+
+static gboolean
+test_dbus_account_plugin_set_attribute (McpAccountStorage *storage,
+    McpAccountManager *am,
+    const gchar *account_name,
+    const gchar *attribute,
+    GVariant *value,
+    McpAttributeFlags flags)
+{
   TestDBusAccountPlugin *self = TEST_DBUS_ACCOUNT_PLUGIN (storage);
   Account *account = lookup_account (self, account_name);
 
   g_return_val_if_fail (account_name != NULL, FALSE);
-  g_return_val_if_fail (key != NULL, FALSE);
+  g_return_val_if_fail (attribute != NULL, FALSE);
   /* for deletions, MC would call delete() instead */
   g_return_val_if_fail (value != NULL, FALSE);
 
-  DEBUG ("%s of %s", key, account_name);
+  DEBUG ("%s of %s", attribute, account_name);
 
   if (!self->active || account == NULL ||
       (account->flags & UNCOMMITTED_DELETION))
     return FALSE;
 
-  if (g_str_has_prefix (key, "param-"))
-    {
-      guint32 flags = PARAMETER_FLAG_NONE;
+  g_hash_table_insert (account->attributes, g_strdup (attribute),
+      g_variant_ref (value));
+  g_hash_table_insert (account->attribute_flags, g_strdup (attribute),
+      GUINT_TO_POINTER (flags));
+  g_hash_table_add (account->uncommitted_attributes, g_strdup (attribute));
 
-      if (mcp_account_manager_parameter_is_secret (am, account_name, key))
-        {
-          flags |= PARAMETER_FLAG_SECRET;
-        }
+  g_dbus_connection_emit_signal (self->bus, NULL,
+      TEST_DBUS_ACCOUNT_PLUGIN_PATH, TEST_DBUS_ACCOUNT_PLUGIN_IFACE,
+      "DeferringSetAttribute",
+      g_variant_new_parsed ("(%o, %s, %v)", account->path, attribute, value),
+      NULL);
 
-      g_hash_table_remove (account->parameters, key + 6);
-      g_hash_table_insert (account->untyped_parameters, g_strdup (key + 6),
-          g_strdup (value));
-      g_hash_table_insert (account->parameter_flags, g_strdup (key + 6),
-          GUINT_TO_POINTER (flags));
-      g_hash_table_add (account->uncommitted_parameters, g_strdup (key + 6));
+  return TRUE;
+}
 
-      g_dbus_connection_emit_signal (self->bus, NULL,
-          TEST_DBUS_ACCOUNT_PLUGIN_PATH, TEST_DBUS_ACCOUNT_PLUGIN_IFACE,
-          "DeferringSetParameterUntyped",
-          g_variant_new_parsed ("(%o, %s, %s)", account->path, key, value), NULL);
-    }
-  else
-    {
-      GValue gvalue = G_VALUE_INIT;
-      GError *error = NULL;
-      GVariant *variant;
+static gboolean
+test_dbus_account_plugin_set_parameter (McpAccountStorage *storage,
+    McpAccountManager *am,
+    const gchar *account_name,
+    const gchar *parameter,
+    GVariant *value,
+    McpParameterFlags flags)
+{
+  TestDBusAccountPlugin *self = TEST_DBUS_ACCOUNT_PLUGIN (storage);
+  Account *account = lookup_account (self, account_name);
 
-      if (!mcp_account_manager_init_value_for_attribute (am, &gvalue, key))
-        {
-          g_warning ("Cannot store unknown attribute %s", key);
-          return FALSE;
-        }
+  g_return_val_if_fail (account_name != NULL, FALSE);
+  g_return_val_if_fail (parameter != NULL, FALSE);
+  /* for deletions, MC would call delete() instead */
+  g_return_val_if_fail (value != NULL, FALSE);
 
-      if (!mcp_account_manager_unescape_value_from_keyfile (am, value,
-            &gvalue, &error))
-        {
-          g_warning ("MC gave me a attribute it couldn't unescape: %s: %s",
-              key, error->message);
-          g_clear_error (&error);
-          return FALSE;
-        }
+  DEBUG ("%s of %s", parameter, account_name);
 
-      variant = g_variant_ref_sink (dbus_g_value_build_g_variant (&gvalue));
+  if (!self->active || account == NULL ||
+      (account->flags & UNCOMMITTED_DELETION))
+    return FALSE;
 
-      g_hash_table_insert (account->attributes, g_strdup (key),
-          g_variant_ref (variant));
-      g_hash_table_remove (account->attribute_flags, key);
-      g_hash_table_add (account->uncommitted_attributes, g_strdup (key));
-      g_value_unset (&gvalue);
+  g_hash_table_remove (account->untyped_parameters, parameter);
+  g_hash_table_insert (account->parameters, g_strdup (parameter),
+      g_variant_ref (value));
+  g_hash_table_insert (account->parameter_flags, g_strdup (parameter),
+      GUINT_TO_POINTER (flags));
+  g_hash_table_add (account->uncommitted_parameters, g_strdup (parameter));
 
-      g_dbus_connection_emit_signal (self->bus, NULL,
-          TEST_DBUS_ACCOUNT_PLUGIN_PATH, TEST_DBUS_ACCOUNT_PLUGIN_IFACE,
-          "DeferringSetAttribute",
-          g_variant_new_parsed ("(%o, %s, %v)", account->path, key, variant), NULL);
-      g_variant_unref (variant);
-    }
+  g_dbus_connection_emit_signal (self->bus, NULL,
+      TEST_DBUS_ACCOUNT_PLUGIN_PATH, TEST_DBUS_ACCOUNT_PLUGIN_IFACE,
+      "DeferringSetParameter",
+      g_variant_new_parsed ("(%o, %s, %v)", account->path, parameter, value),
+      NULL);
 
   return TRUE;
 }
@@ -1083,6 +1077,8 @@ account_storage_iface_init (McpAccountStorageIface *iface)
 
   iface->get = test_dbus_account_plugin_get;
   iface->set = test_dbus_account_plugin_set;
+  iface->set_attribute = test_dbus_account_plugin_set_attribute;
+  iface->set_parameter = test_dbus_account_plugin_set_parameter;
   iface->list = test_dbus_account_plugin_list;
   iface->ready = test_dbus_account_plugin_ready;
   iface->delete = test_dbus_account_plugin_delete;



More information about the telepathy-commits mailing list