Update and fix queryIdentities method and add test case for it
authorJussi Laako <jussi.laako@linux.intel.com>
Thu, 23 May 2013 15:13:35 +0000 (18:13 +0300)
committerJussi Laako <jussi.laako@linux.intel.com>
Fri, 31 May 2013 09:27:44 +0000 (12:27 +0300)
libsignon-glib/interfaces/com.google.code.AccountsSSO.gSingleSignOn.AuthService.xml
libsignon-glib/signon-auth-service.c
libsignon-glib/signon-auth-service.h
tests/check_signon.c

index 7d854563c0d524ac173f025625b22fba474d92f0..9fc893c5a4516cdb1e2a4542f0e15d4243cf9602 100644 (file)
@@ -19,8 +19,9 @@
       <arg name="method" type="s" direction="in"/>
     </method>
     <method name="queryIdentities">
-      <arg name="identities" type="aa{sv}" direction="out"/>
       <arg name="filter" type="a{sv}" direction="in"/>
+      <arg name="applicationContext" type="s" direction="in"/>
+      <arg name="identities" type="aa{sv}" direction="out"/>
     </method>
     <method name="clear">
       <arg type="b" direction="out"/>
index 599080cd99b5dae7ad9609e96b65de80a5893050..bfa171dec759c19927d43f986a9663d9f4d35fa5 100644 (file)
@@ -276,7 +276,7 @@ auth_query_identities_cb (GObject *object, GAsyncResult *res,
     GError *error = NULL;
     GVariantIter iter;
     GVariant *identity_var;
-    IdentityList *identity_list;
+    SignonIdentityList *identity_list = NULL;
 
     g_return_if_fail (data != NULL);
 
@@ -285,14 +285,16 @@ auth_query_identities_cb (GObject *object, GAsyncResult *res,
                                                    res,
                                                    &error);
 
-    identity_list = g_list_alloc ();
-    g_variant_iter_init (&iter, value);
-    while (g_variant_iter_next (&iter, "@a{sv}", &identity_var))
+    if (value && !error)
     {
-        identity_list = 
-            g_list_append (identity_list,
-                           signon_identity_info_new_from_variant (identity_var));
-        g_variant_unref (identity_var);
+        g_variant_iter_init (&iter, value);
+        while (g_variant_iter_next (&iter, "@a{sv}", &identity_var))
+        {
+            identity_list = 
+                g_list_append (identity_list,
+                               signon_identity_info_new_from_variant (identity_var));
+            g_variant_unref (identity_var);
+        }
     }
     (data->cb)
         (data->service, identity_list, error, data->userdata);
@@ -315,12 +317,14 @@ auth_query_identities_cb (GObject *object, GAsyncResult *res,
  * signon_auth_service_query_identities:
  * @auth_service: the #SignonAuthService.
  * @filter: filter variant dictionary based on #GHashTable.
+ * @application_context: application security context, can be %NULL.
  * @cb: (scope async): callback to be invoked.
  * @user_data: user data.
  */
 void
 signon_auth_service_query_identities (SignonAuthService *auth_service,
-                                      IdentityFilter *filter,
+                                      SignonIdentityFilter *filter,
+                                      const gchar *application_context,
                                       SignonQueryIdentitiesCb cb,
                                       gpointer user_data)
 {
@@ -352,8 +356,12 @@ signon_auth_service_query_identities (SignonAuthService *auth_service,
     }
     filter_var = g_variant_builder_end (&builder);
 
+    if (!application_context)
+        application_context = "";
+
     sso_auth_service_call_query_identities (priv->proxy,
                                             filter_var,
+                                            application_context,
                                             priv->cancellable,
                                             auth_query_identities_cb,
                                             cb_data);
index 47a061bf65301d6d2784ef598e43d02989b3fbfa..8c68aad953b3e29613dfe58e5e86ab005a8a679b 100644 (file)
@@ -74,11 +74,11 @@ typedef void (*SignonQueryMechanismCb) (SignonAuthService *auth_service,
                                         const GError *error,
                                         gpointer user_data);
 
-typedef GList IdentityList;
-typedef GHashTable IdentityFilter;
+typedef GList SignonIdentityList;
+typedef GHashTable SignonIdentityFilter;
 
 typedef void (*SignonQueryIdentitiesCb) (SignonAuthService *auth_service,
-                                         IdentityList *identities,
+                                         SignonIdentityList *identities,
                                          const GError *error,
                                          gpointer user_data);
 
@@ -94,7 +94,8 @@ void signon_auth_service_query_mechanisms (SignonAuthService *auth_service,
                                            gpointer user_data);
 
 void signon_auth_service_query_identities (SignonAuthService *auth_service,
-                                           IdentityFilter *filter,
+                                           SignonIdentityFilter *filter,
+                                           const gchar *application_context,
                                            SignonQueryIdentitiesCb cb,
                                            gpointer user_data);
 
index 6df9cf71238586d46a66e9ac055309ce81be42eb..dc11236bb34f961f5f416ec2e5cf1887eea52f66 100644 (file)
@@ -1332,6 +1332,53 @@ START_TEST(test_unregistered_auth_session)
 }
 END_TEST
 
+void free_identity_info_cb (gpointer data)
+{
+    SignonIdentityInfo *info;
+
+    signon_identity_info_free (info);
+}
+
+void query_identities_cb (SignonAuthService *auth_service,
+    SignonIdentityList *identity_list, const GError *error, gpointer user_data)
+{
+    SignonIdentityList *iter = identity_list;
+
+    while (iter && !error)
+    {
+        SignonIdentityInfo *info = (SignonIdentityInfo *) iter->data;
+        const gchar *caption = signon_identity_info_get_caption (info);
+
+        g_print ("\tid=%d caption='%s'\n",
+                 signon_identity_info_get_id (info),
+                 caption);
+
+        fail_unless (g_strcmp0 (caption, "MI-6") == 0,
+                     "Wrong caption in identity");
+
+        iter = g_list_next (iter);
+    }
+    g_list_free_full (identity_list, free_identity_info_cb);
+
+    fail_unless (error == NULL, "There should be no error in callback");
+    _stop_mainloop ();
+}
+
+START_TEST(test_query_identities)
+{
+    g_debug("%s", G_STRFUNC);
+
+    SignonAuthService *asrv = signon_auth_service_new ();
+
+    signon_auth_service_query_identities (asrv, NULL, NULL, query_identities_cb, NULL);
+
+    g_timeout_add_seconds (5, test_quit_main_loop_cb, main_loop);
+    _run_mainloop ();
+
+    g_object_unref (asrv);
+}
+END_TEST
+
 static void
 test_regression_unref_process_cb (SignonAuthSession *self,
                                   GHashTable *reply,
@@ -1435,6 +1482,8 @@ signon_suite(void)
     tcase_add_test (tc_core, test_remove_identity);
     tcase_add_test (tc_core, test_info_identity);
 
+    tcase_add_test (tc_core, test_query_identities);
+
     tcase_add_test (tc_core, test_signout_identity);
     tcase_add_test (tc_core, test_unregistered_identity);
     tcase_add_test (tc_core, test_unregistered_auth_session);