|
Packit Service |
f02b19 |
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
|
|
Packit Service |
f02b19 |
/* test-gck-enumerator.c - the GObject PKCS#11 wrapper library
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
Copyright (C) 2011 Collabora Ltd.
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
The Gnome Keyring Library is free software; you can redistribute it and/or
|
|
Packit Service |
f02b19 |
modify it under the terms of the GNU Library General Public License as
|
|
Packit Service |
f02b19 |
published by the Free Software Foundation; either version 2 of the
|
|
Packit Service |
f02b19 |
License, or (at your option) any later version.
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
The Gnome Keyring Library is distributed in the hope that it will be useful,
|
|
Packit Service |
f02b19 |
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit Service |
f02b19 |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit Service |
f02b19 |
Library General Public License for more details.
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
You should have received a copy of the GNU Library General Public
|
|
Packit Service |
f02b19 |
License along with the Gnome Library; see the file COPYING.LIB. If not,
|
|
Packit Service |
f02b19 |
see <http://www.gnu.org/licenses/>.
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
Author: Stef Walter <stefw@collabora.co.uk>
|
|
Packit Service |
f02b19 |
*/
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
#include "config.h"
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
#include "gck/gck.h"
|
|
Packit Service |
f02b19 |
#include "gck/gck-mock.h"
|
|
Packit Service |
f02b19 |
#include "gck/gck-private.h"
|
|
Packit Service |
f02b19 |
#include "gck/gck-test.h"
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
#include "egg/egg-testing.h"
|
|
Packit Service |
f02b19 |
#include "egg/mock-interaction.h"
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
#include <glib.h>
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
#include <errno.h>
|
|
Packit Service |
f02b19 |
#include <stdlib.h>
|
|
Packit Service |
f02b19 |
#include <stdio.h>
|
|
Packit Service |
f02b19 |
#include <string.h>
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
typedef struct {
|
|
Packit Service |
f02b19 |
GList *modules;
|
|
Packit Service |
f02b19 |
GckModule *module;
|
|
Packit Service |
f02b19 |
} Test;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static void
|
|
Packit Service |
f02b19 |
setup (Test *test, gconstpointer unused)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
GError *err = NULL;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
/* Successful load */
|
|
Packit Service |
f02b19 |
test->module = gck_module_initialize (BUILDDIR "/.libs/libmock-test-module.so", NULL, &err;;
|
|
Packit Service |
f02b19 |
g_assert_no_error (err);
|
|
Packit Service |
f02b19 |
g_assert (GCK_IS_MODULE (test->module));
|
|
Packit Service |
f02b19 |
g_object_add_weak_pointer (G_OBJECT (test->module), (gpointer *)&test->module);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
test->modules = g_list_append (NULL, g_object_ref (test->module));
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static void
|
|
Packit Service |
f02b19 |
teardown (Test *test, gconstpointer unused)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
gck_list_unref_free (test->modules);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_object_unref (test->module);
|
|
Packit Service |
f02b19 |
g_assert (test->module == NULL);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_thread_pool_stop_unused_threads ();
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static void
|
|
Packit Service |
f02b19 |
test_create (Test *test, gconstpointer unused)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
GckUriData *uri_data;
|
|
Packit Service |
f02b19 |
GType object_type;
|
|
Packit Service |
f02b19 |
GckEnumerator *en;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
uri_data = gck_uri_data_new ();
|
|
Packit Service |
f02b19 |
en = _gck_enumerator_new_for_modules (test->modules, 0, uri_data);
|
|
Packit Service |
f02b19 |
g_assert (GCK_IS_ENUMERATOR (en));
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_object_get (en, "object-type", &object_type, NULL);
|
|
Packit Service |
f02b19 |
g_assert (object_type == GCK_TYPE_OBJECT);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_object_unref (en);
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static void
|
|
Packit Service |
f02b19 |
test_create_slots (Test *test, gconstpointer unused)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
GckUriData *uri_data;
|
|
Packit Service |
f02b19 |
GckEnumerator *en;
|
|
Packit Service |
f02b19 |
GList *slots;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
uri_data = gck_uri_data_new ();
|
|
Packit Service |
f02b19 |
slots = gck_module_get_slots (test->module, FALSE);
|
|
Packit Service |
f02b19 |
en = _gck_enumerator_new_for_slots (slots, 0, uri_data);
|
|
Packit Service |
f02b19 |
g_assert (GCK_IS_ENUMERATOR (en));
|
|
Packit Service |
f02b19 |
g_object_unref (en);
|
|
Packit Service |
f02b19 |
gck_list_unref_free (slots);
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static void
|
|
Packit Service |
f02b19 |
test_next (Test *test, gconstpointer unused)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
GckUriData *uri_data;
|
|
Packit Service |
f02b19 |
GError *error = NULL;
|
|
Packit Service |
f02b19 |
GckEnumerator *en;
|
|
Packit Service |
f02b19 |
GckObject *obj;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
uri_data = gck_uri_data_new ();
|
|
Packit Service |
f02b19 |
en = _gck_enumerator_new_for_modules (test->modules, 0, uri_data);
|
|
Packit Service |
f02b19 |
g_assert (GCK_IS_ENUMERATOR (en));
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
obj = gck_enumerator_next (en, NULL, &error);
|
|
Packit Service |
f02b19 |
g_assert (GCK_IS_OBJECT (obj));
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_object_unref (obj);
|
|
Packit Service |
f02b19 |
g_object_unref (en);
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static void
|
|
Packit Service |
f02b19 |
test_next_slots (Test *test, gconstpointer unused)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
GckUriData *uri_data;
|
|
Packit Service |
f02b19 |
GError *error = NULL;
|
|
Packit Service |
f02b19 |
GList *slots = NULL;
|
|
Packit Service |
f02b19 |
GckEnumerator *en;
|
|
Packit Service |
f02b19 |
GckObject *obj;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
uri_data = gck_uri_data_new ();
|
|
Packit Service |
f02b19 |
slots = gck_module_get_slots (test->module, FALSE);
|
|
Packit Service |
f02b19 |
en = _gck_enumerator_new_for_slots (slots, 0, uri_data);
|
|
Packit Service |
f02b19 |
g_assert (GCK_IS_ENUMERATOR (en));
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
obj = gck_enumerator_next (en, NULL, &error);
|
|
Packit Service |
f02b19 |
g_assert (GCK_IS_OBJECT (obj));
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_object_unref (obj);
|
|
Packit Service |
f02b19 |
g_object_unref (en);
|
|
Packit Service |
f02b19 |
gck_list_unref_free (slots);
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static void
|
|
Packit Service |
f02b19 |
test_next_and_resume (Test *test, gconstpointer unused)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
GckUriData *uri_data;
|
|
Packit Service |
f02b19 |
GError *error = NULL;
|
|
Packit Service |
f02b19 |
GckEnumerator *en;
|
|
Packit Service |
f02b19 |
GckObject *obj, *obj2;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
uri_data = gck_uri_data_new ();
|
|
Packit Service |
f02b19 |
en = _gck_enumerator_new_for_modules (test->modules, 0, uri_data);
|
|
Packit Service |
f02b19 |
g_assert (GCK_IS_ENUMERATOR (en));
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
obj = gck_enumerator_next (en, NULL, &error);
|
|
Packit Service |
f02b19 |
g_assert_no_error (error);
|
|
Packit Service |
f02b19 |
g_assert (GCK_IS_OBJECT (obj));
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
obj2 = gck_enumerator_next (en, NULL, &error);
|
|
Packit Service |
f02b19 |
g_assert_no_error (error);
|
|
Packit Service |
f02b19 |
g_assert (GCK_IS_OBJECT (obj2));
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_assert (!gck_object_equal (obj, obj2));
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_object_unref (obj);
|
|
Packit Service |
f02b19 |
g_object_unref (obj2);
|
|
Packit Service |
f02b19 |
g_object_unref (en);
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static void
|
|
Packit Service |
f02b19 |
test_next_n (Test *test, gconstpointer unused)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
GckUriData *uri_data;
|
|
Packit Service |
f02b19 |
GError *error = NULL;
|
|
Packit Service |
f02b19 |
GckEnumerator *en;
|
|
Packit Service |
f02b19 |
GList *objects, *l;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
uri_data = gck_uri_data_new ();
|
|
Packit Service |
f02b19 |
en = _gck_enumerator_new_for_modules (test->modules, 0, uri_data);
|
|
Packit Service |
f02b19 |
g_assert (GCK_IS_ENUMERATOR (en));
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
objects = gck_enumerator_next_n (en, -1, NULL, &error);
|
|
Packit Service |
f02b19 |
g_assert_no_error (error);
|
|
Packit Service |
f02b19 |
g_assert_cmpint (g_list_length (objects), ==, 5);
|
|
Packit Service |
f02b19 |
for (l = objects; l; l = g_list_next (l))
|
|
Packit Service |
f02b19 |
g_assert (GCK_IS_OBJECT (l->data));
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
gck_list_unref_free (objects);
|
|
Packit Service |
f02b19 |
g_object_unref (en);
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static void
|
|
Packit Service |
f02b19 |
fetch_async_result (GObject *source, GAsyncResult *result, gpointer user_data)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
*((GAsyncResult**)user_data) = result;
|
|
Packit Service |
f02b19 |
g_object_ref (result);
|
|
Packit Service |
f02b19 |
egg_test_wait_stop ();
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static void
|
|
Packit Service |
f02b19 |
test_next_async (Test *test, gconstpointer unused)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
GckUriData *uri_data;
|
|
Packit Service |
f02b19 |
GAsyncResult *result = NULL;
|
|
Packit Service |
f02b19 |
GError *error = NULL;
|
|
Packit Service |
f02b19 |
GckEnumerator *en;
|
|
Packit Service |
f02b19 |
GList *objects, *l;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
uri_data = gck_uri_data_new ();
|
|
Packit Service |
f02b19 |
en = _gck_enumerator_new_for_modules (test->modules, 0, uri_data);
|
|
Packit Service |
f02b19 |
g_assert (GCK_IS_ENUMERATOR (en));
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
gck_enumerator_next_async (en, -1, NULL, fetch_async_result, &result);
|
|
Packit Service |
f02b19 |
egg_test_wait_until (500);
|
|
Packit Service |
f02b19 |
g_assert (result);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
objects = gck_enumerator_next_finish (en, result, &error);
|
|
Packit Service |
f02b19 |
g_assert_no_error (error);
|
|
Packit Service |
f02b19 |
g_assert_cmpint (g_list_length (objects), ==, 5);
|
|
Packit Service |
f02b19 |
for (l = objects; l; l = g_list_next (l))
|
|
Packit Service |
f02b19 |
g_assert (GCK_IS_OBJECT (l->data));
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_object_unref (result);
|
|
Packit Service |
f02b19 |
gck_list_unref_free (objects);
|
|
Packit Service |
f02b19 |
g_object_unref (en);
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static void
|
|
Packit Service |
f02b19 |
test_enumerate_session (Test *test,
|
|
Packit Service |
f02b19 |
gconstpointer unused)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
GckBuilder builder = GCK_BUILDER_INIT;
|
|
Packit Service |
f02b19 |
GckEnumerator *en;
|
|
Packit Service |
f02b19 |
GError *error = NULL;
|
|
Packit Service |
f02b19 |
GckSession *session;
|
|
Packit Service |
f02b19 |
GckObject *obj;
|
|
Packit Service |
f02b19 |
GList *slots;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
slots = gck_module_get_slots (test->module, FALSE);
|
|
Packit Service |
f02b19 |
g_assert (slots != NULL && GCK_IS_SLOT (slots->data));
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
session = gck_session_open (slots->data, 0, NULL, NULL, &error);
|
|
Packit Service |
f02b19 |
g_assert_no_error (error);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
en = gck_session_enumerate_objects (session, gck_builder_end (&builder));
|
|
Packit Service |
f02b19 |
g_assert (GCK_IS_ENUMERATOR (en));
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
obj = gck_enumerator_next (en, NULL, &error);
|
|
Packit Service |
f02b19 |
g_assert (GCK_IS_OBJECT (obj));
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_object_unref (obj);
|
|
Packit Service |
f02b19 |
g_object_unref (en);
|
|
Packit Service |
f02b19 |
g_object_unref (session);
|
|
Packit Service |
f02b19 |
gck_list_unref_free (slots);
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static void
|
|
Packit Service |
f02b19 |
test_attribute_match (Test *test, gconstpointer unused)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
GckBuilder builder = GCK_BUILDER_INIT;
|
|
Packit Service |
f02b19 |
GckUriData *uri_data;
|
|
Packit Service |
f02b19 |
GError *error = NULL;
|
|
Packit Service |
f02b19 |
GckEnumerator *en;
|
|
Packit Service |
f02b19 |
GList *objects;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
uri_data = gck_uri_data_new ();
|
|
Packit Service |
f02b19 |
gck_builder_add_string (&builder, CKA_LABEL, "Private Capitalize Key");
|
|
Packit Service |
f02b19 |
uri_data->attributes = gck_attributes_ref_sink (gck_builder_end (&builder));
|
|
Packit Service |
f02b19 |
en = _gck_enumerator_new_for_modules (test->modules, 0, uri_data);
|
|
Packit Service |
f02b19 |
g_assert (GCK_IS_ENUMERATOR (en));
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
objects = gck_enumerator_next_n (en, -1, NULL, &error);
|
|
Packit Service |
f02b19 |
g_assert_no_error (error);
|
|
Packit Service |
f02b19 |
g_assert_cmpint (g_list_length (objects), ==, 1);
|
|
Packit Service |
f02b19 |
g_assert (GCK_IS_OBJECT (objects->data));
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
gck_list_unref_free (objects);
|
|
Packit Service |
f02b19 |
g_object_unref (en);
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static void
|
|
Packit Service |
f02b19 |
test_authenticate_interaction (Test *test,
|
|
Packit Service |
f02b19 |
gconstpointer unused)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
GTlsInteraction *interaction;
|
|
Packit Service |
f02b19 |
GTlsInteraction *check;
|
|
Packit Service |
f02b19 |
GckUriData *uri_data;
|
|
Packit Service |
f02b19 |
GError *error = NULL;
|
|
Packit Service |
f02b19 |
GckEnumerator *en;
|
|
Packit Service |
f02b19 |
GckObject *obj;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
uri_data = gck_uri_data_new ();
|
|
Packit Service |
f02b19 |
en = _gck_enumerator_new_for_modules (test->modules, GCK_SESSION_LOGIN_USER, uri_data);
|
|
Packit Service |
f02b19 |
g_assert (GCK_IS_ENUMERATOR (en));
|
|
Packit Service |
f02b19 |
g_object_add_weak_pointer (G_OBJECT (en), (gpointer *)&en);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
interaction = mock_interaction_new ("booo");
|
|
Packit Service |
f02b19 |
g_object_add_weak_pointer (G_OBJECT (interaction), (gpointer *)&interaction);
|
|
Packit Service |
f02b19 |
g_object_set (en, "interaction", interaction, NULL);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
check = NULL;
|
|
Packit Service |
f02b19 |
g_object_get (en, "interaction", &check, NULL);
|
|
Packit Service |
f02b19 |
g_assert (interaction == check);
|
|
Packit Service |
f02b19 |
g_object_unref (interaction);
|
|
Packit Service |
f02b19 |
g_object_unref (check);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
obj = gck_enumerator_next (en, NULL, &error);
|
|
Packit Service |
f02b19 |
g_assert (GCK_IS_OBJECT (obj));
|
|
Packit Service |
f02b19 |
g_object_add_weak_pointer (G_OBJECT (obj), (gpointer *)&obj);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_object_unref (obj);
|
|
Packit Service |
f02b19 |
g_object_unref (en);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_assert (en == NULL);
|
|
Packit Service |
f02b19 |
g_assert (obj == NULL);
|
|
Packit Service |
f02b19 |
g_assert (interaction == NULL);
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static gboolean
|
|
Packit Service |
f02b19 |
on_authenticate_token (GckModule *module,
|
|
Packit Service |
f02b19 |
GckSlot *slot,
|
|
Packit Service |
f02b19 |
gchar *label,
|
|
Packit Service |
f02b19 |
gchar **password,
|
|
Packit Service |
f02b19 |
gpointer unused)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
g_assert (unused == GUINT_TO_POINTER (35));
|
|
Packit Service |
f02b19 |
g_assert (password != NULL);
|
|
Packit Service |
f02b19 |
g_assert (*password == NULL);
|
|
Packit Service |
f02b19 |
g_assert (GCK_IS_MODULE (module));
|
|
Packit Service |
f02b19 |
g_assert (GCK_IS_SLOT (slot));
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
*password = g_strdup ("booo");
|
|
Packit Service |
f02b19 |
return TRUE;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static void
|
|
Packit Service |
f02b19 |
test_authenticate_compat (Test *test,
|
|
Packit Service |
f02b19 |
gconstpointer unused)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
GckUriData *uri_data;
|
|
Packit Service |
f02b19 |
GError *error = NULL;
|
|
Packit Service |
f02b19 |
GckEnumerator *en;
|
|
Packit Service |
f02b19 |
GckObject *obj;
|
|
Packit Service |
f02b19 |
gulong sig;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
sig = g_signal_connect (test->modules->data, "authenticate-slot",
|
|
Packit Service |
f02b19 |
G_CALLBACK (on_authenticate_token), GUINT_TO_POINTER (35));
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
uri_data = gck_uri_data_new ();
|
|
Packit Service |
f02b19 |
en = _gck_enumerator_new_for_modules (test->modules, GCK_SESSION_LOGIN_USER, uri_data);
|
|
Packit Service |
f02b19 |
g_assert (GCK_IS_ENUMERATOR (en));
|
|
Packit Service |
f02b19 |
g_object_add_weak_pointer (G_OBJECT (en), (gpointer *)&en);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
obj = gck_enumerator_next (en, NULL, &error);
|
|
Packit Service |
f02b19 |
g_assert (GCK_IS_OBJECT (obj));
|
|
Packit Service |
f02b19 |
g_object_add_weak_pointer (G_OBJECT (obj), (gpointer *)&obj);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_object_unref (obj);
|
|
Packit Service |
f02b19 |
g_object_unref (en);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_signal_handler_disconnect (test->modules->data, sig);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_assert (obj == NULL);
|
|
Packit Service |
f02b19 |
g_assert (en == NULL);
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static void
|
|
Packit Service |
f02b19 |
test_token_match (Test *test, gconstpointer unused)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
GckUriData *uri_data;
|
|
Packit Service |
f02b19 |
GError *error = NULL;
|
|
Packit Service |
f02b19 |
GckEnumerator *en;
|
|
Packit Service |
f02b19 |
GList *objects;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
uri_data = gck_uri_data_new ();
|
|
Packit Service |
f02b19 |
uri_data->token_info = g_new0 (GckTokenInfo, 1);
|
|
Packit Service |
f02b19 |
uri_data->token_info->label = g_strdup ("Invalid token name");
|
|
Packit Service |
f02b19 |
en = _gck_enumerator_new_for_modules (test->modules, 0, uri_data);
|
|
Packit Service |
f02b19 |
g_assert (GCK_IS_ENUMERATOR (en));
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
objects = gck_enumerator_next_n (en, -1, NULL, &error);
|
|
Packit Service |
f02b19 |
g_assert_cmpint (g_list_length (objects), ==, 0);
|
|
Packit Service |
f02b19 |
g_assert (error == NULL);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
gck_list_unref_free (objects);
|
|
Packit Service |
f02b19 |
g_object_unref (en);
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
enum {
|
|
Packit Service |
f02b19 |
PROP_0,
|
|
Packit Service |
f02b19 |
PROP_ATTRIBUTES,
|
|
Packit Service |
f02b19 |
};
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static const gulong mock_attribute_types[] = {
|
|
Packit Service |
f02b19 |
CKA_CLASS,
|
|
Packit Service |
f02b19 |
CKA_ID,
|
|
Packit Service |
f02b19 |
CKA_LABEL,
|
|
Packit Service |
f02b19 |
};
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
typedef struct {
|
|
Packit Service |
f02b19 |
GckObject parent;
|
|
Packit Service |
f02b19 |
GckAttributes *attrs;
|
|
Packit Service |
f02b19 |
} MockObject;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
typedef struct {
|
|
Packit Service |
f02b19 |
GckObjectClass parent;
|
|
Packit Service |
f02b19 |
} MockObjectClass;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
GType mock_object_get_type (void) G_GNUC_CONST;
|
|
Packit Service |
f02b19 |
static void mock_object_cache_init (GckObjectCacheIface *iface);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
#define MOCK_TYPE_OBJECT (mock_object_get_type())
|
|
Packit Service |
f02b19 |
#define MOCK_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), MOCK_TYPE_OBJECT, MockObject))
|
|
Packit Service |
f02b19 |
#define MOCK_IS_OBJECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), MOCK_TYPE_OBJECT))
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
G_DEFINE_TYPE_WITH_CODE (MockObject, mock_object, GCK_TYPE_OBJECT,
|
|
Packit Service |
f02b19 |
G_IMPLEMENT_INTERFACE (GCK_TYPE_OBJECT_CACHE,
|
|
Packit Service |
f02b19 |
mock_object_cache_init);
|
|
Packit Service |
f02b19 |
);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static void
|
|
Packit Service |
f02b19 |
mock_object_init (MockObject *self)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static void
|
|
Packit Service |
f02b19 |
mock_object_get_property (GObject *obj,
|
|
Packit Service |
f02b19 |
guint prop_id,
|
|
Packit Service |
f02b19 |
GValue *value,
|
|
Packit Service |
f02b19 |
GParamSpec *pspec)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
MockObject *self = (MockObject *)obj;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
switch (prop_id) {
|
|
Packit Service |
f02b19 |
case PROP_ATTRIBUTES:
|
|
Packit Service |
f02b19 |
g_value_set_boxed (value, self->attrs);
|
|
Packit Service |
f02b19 |
break;
|
|
Packit Service |
f02b19 |
default:
|
|
Packit Service |
f02b19 |
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, prop_id, pspec);
|
|
Packit Service |
f02b19 |
break;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static void
|
|
Packit Service |
f02b19 |
mock_object_set_property (GObject *obj,
|
|
Packit Service |
f02b19 |
guint prop_id,
|
|
Packit Service |
f02b19 |
const GValue *value,
|
|
Packit Service |
f02b19 |
GParamSpec *pspec)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
MockObject *self = (MockObject *)obj;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
switch (prop_id) {
|
|
Packit Service |
f02b19 |
case PROP_ATTRIBUTES:
|
|
Packit Service |
f02b19 |
g_assert (self->attrs == NULL);
|
|
Packit Service |
f02b19 |
self->attrs = g_value_dup_boxed (value);
|
|
Packit Service |
f02b19 |
g_assert (self->attrs != NULL);
|
|
Packit Service |
f02b19 |
break;
|
|
Packit Service |
f02b19 |
default:
|
|
Packit Service |
f02b19 |
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, prop_id, pspec);
|
|
Packit Service |
f02b19 |
break;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static void
|
|
Packit Service |
f02b19 |
mock_object_finalize (GObject *obj)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
MockObject *self = (MockObject *)obj;
|
|
Packit Service |
f02b19 |
gck_attributes_unref (self->attrs);
|
|
Packit Service |
f02b19 |
G_OBJECT_CLASS (mock_object_parent_class)->finalize (obj);
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static void
|
|
Packit Service |
f02b19 |
mock_object_class_init (MockObjectClass *klass)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
gobject_class->get_property = mock_object_get_property;
|
|
Packit Service |
f02b19 |
gobject_class->set_property = mock_object_set_property;
|
|
Packit Service |
f02b19 |
gobject_class->finalize = mock_object_finalize;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_object_class_override_property (gobject_class, PROP_ATTRIBUTES, "attributes");
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static void
|
|
Packit Service |
f02b19 |
mock_object_fill (GckObjectCache *object,
|
|
Packit Service |
f02b19 |
GckAttributes *attrs)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
GckBuilder builder = GCK_BUILDER_INIT;
|
|
Packit Service |
f02b19 |
MockObject *self = MOCK_OBJECT (object);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
gck_builder_add_all (&builder, self->attrs);
|
|
Packit Service |
f02b19 |
gck_builder_set_all (&builder, attrs);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
gck_attributes_unref (self->attrs);
|
|
Packit Service |
f02b19 |
self->attrs = gck_attributes_ref_sink (gck_builder_end (&builder));
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static void
|
|
Packit Service |
f02b19 |
mock_object_cache_init (GckObjectCacheIface *iface)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
iface->default_types = mock_attribute_types;
|
|
Packit Service |
f02b19 |
iface->n_default_types = G_N_ELEMENTS (mock_attribute_types);
|
|
Packit Service |
f02b19 |
iface->fill = mock_object_fill;
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static void
|
|
Packit Service |
f02b19 |
test_attribute_get (Test *test,
|
|
Packit Service |
f02b19 |
gconstpointer unused)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
GckUriData *uri_data;
|
|
Packit Service |
f02b19 |
GError *error = NULL;
|
|
Packit Service |
f02b19 |
GckEnumerator *en;
|
|
Packit Service |
f02b19 |
GList *objects, *l;
|
|
Packit Service |
f02b19 |
MockObject *mock;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
uri_data = gck_uri_data_new ();
|
|
Packit Service |
f02b19 |
en = _gck_enumerator_new_for_modules (test->modules, 0, uri_data);
|
|
Packit Service |
f02b19 |
g_object_set (en, "object-type", mock_object_get_type (), NULL);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
objects = gck_enumerator_next_n (en, -1, NULL, &error);
|
|
Packit Service |
f02b19 |
g_assert_no_error (error);
|
|
Packit Service |
f02b19 |
g_assert_cmpint (g_list_length (objects), ==, 5);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
for (l = objects; l != NULL; l = g_list_next (l)) {
|
|
Packit Service |
f02b19 |
mock = l->data;
|
|
Packit Service |
f02b19 |
g_assert (G_TYPE_CHECK_INSTANCE_TYPE (mock, mock_object_get_type ()));
|
|
Packit Service |
f02b19 |
g_assert (mock->attrs != NULL);
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
gck_list_unref_free (objects);
|
|
Packit Service |
f02b19 |
g_object_unref (en);
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static void
|
|
Packit Service |
f02b19 |
test_attribute_get_one_at_a_time (Test *test,
|
|
Packit Service |
f02b19 |
gconstpointer unused)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
GckUriData *uri_data;
|
|
Packit Service |
f02b19 |
GError *error = NULL;
|
|
Packit Service |
f02b19 |
GckEnumerator *en;
|
|
Packit Service |
f02b19 |
MockObject *mock;
|
|
Packit Service |
f02b19 |
GckObject *object;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
uri_data = gck_uri_data_new ();
|
|
Packit Service |
f02b19 |
en = _gck_enumerator_new_for_modules (test->modules, 0, uri_data);
|
|
Packit Service |
f02b19 |
g_object_set (en, "object-type", mock_object_get_type (), NULL);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
for (;;) {
|
|
Packit Service |
f02b19 |
object = gck_enumerator_next (en, NULL, &error);
|
|
Packit Service |
f02b19 |
g_assert_no_error (error);
|
|
Packit Service |
f02b19 |
if (object == NULL)
|
|
Packit Service |
f02b19 |
break;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_assert (G_TYPE_CHECK_INSTANCE_TYPE (object, mock_object_get_type ()));
|
|
Packit Service |
f02b19 |
mock = (MockObject *)object;
|
|
Packit Service |
f02b19 |
g_assert (mock->attrs != NULL);
|
|
Packit Service |
f02b19 |
g_object_unref (object);
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_object_unref (en);
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
static void
|
|
Packit Service |
f02b19 |
test_chained (Test *test,
|
|
Packit Service |
f02b19 |
gconstpointer unused)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
GckBuilder builder = GCK_BUILDER_INIT;
|
|
Packit Service |
f02b19 |
GckEnumerator *one;
|
|
Packit Service |
f02b19 |
GckEnumerator *two;
|
|
Packit Service |
f02b19 |
GckEnumerator *three;
|
|
Packit Service |
f02b19 |
GckUriData *uri_data;
|
|
Packit Service |
f02b19 |
GError *error = NULL;
|
|
Packit Service |
f02b19 |
GList *objects;
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
uri_data = gck_uri_data_new ();
|
|
Packit Service |
f02b19 |
gck_builder_add_ulong (&builder, CKA_CLASS, CKO_PUBLIC_KEY);
|
|
Packit Service |
f02b19 |
uri_data->attributes = gck_attributes_ref_sink (gck_builder_end (&builder));
|
|
Packit Service |
f02b19 |
one = _gck_enumerator_new_for_modules (test->modules, 0, uri_data);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
uri_data = gck_uri_data_new ();
|
|
Packit Service |
f02b19 |
gck_builder_add_ulong (&builder, CKA_CLASS, CKO_PRIVATE_KEY);
|
|
Packit Service |
f02b19 |
uri_data->attributes = gck_attributes_ref_sink (gck_builder_end (&builder));
|
|
Packit Service |
f02b19 |
two = _gck_enumerator_new_for_modules (test->modules, 0, uri_data);
|
|
Packit Service |
f02b19 |
gck_enumerator_set_chained (one, two);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
uri_data = gck_uri_data_new ();
|
|
Packit Service |
f02b19 |
gck_builder_add_ulong (&builder, CKA_CLASS, CKO_DATA);
|
|
Packit Service |
f02b19 |
uri_data->attributes = gck_attributes_ref_sink (gck_builder_end (&builder));
|
|
Packit Service |
f02b19 |
three = _gck_enumerator_new_for_modules (test->modules, 0, uri_data);
|
|
Packit Service |
f02b19 |
gck_enumerator_set_chained (two, three);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_object_unref (two);
|
|
Packit Service |
f02b19 |
g_object_unref (three);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
objects = gck_enumerator_next_n (one, -1, NULL, &error);
|
|
Packit Service |
f02b19 |
g_assert_no_error (error);
|
|
Packit Service |
f02b19 |
g_assert_cmpint (g_list_length (objects), ==, 5);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
gck_list_unref_free (objects);
|
|
Packit Service |
f02b19 |
g_object_unref (one);
|
|
Packit Service |
f02b19 |
}
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
int
|
|
Packit Service |
f02b19 |
main (int argc, char **argv)
|
|
Packit Service |
f02b19 |
{
|
|
Packit Service |
f02b19 |
g_test_init (&argc, &argv, NULL);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_set_prgname ("test-gck-enumerator");
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
g_test_add ("/gck/enumerator/create", Test, NULL, setup, test_create, teardown);
|
|
Packit Service |
f02b19 |
g_test_add ("/gck/enumerator/create_slots", Test, NULL, setup, test_create_slots, teardown);
|
|
Packit Service |
f02b19 |
g_test_add ("/gck/enumerator/next", Test, NULL, setup, test_next, teardown);
|
|
Packit Service |
f02b19 |
g_test_add ("/gck/enumerator/next_slots", Test, NULL, setup, test_next_slots, teardown);
|
|
Packit Service |
f02b19 |
g_test_add ("/gck/enumerator/next_and_resume", Test, NULL, setup, test_next_and_resume, teardown);
|
|
Packit Service |
f02b19 |
g_test_add ("/gck/enumerator/next_n", Test, NULL, setup, test_next_n, teardown);
|
|
Packit Service |
f02b19 |
g_test_add ("/gck/enumerator/next_async", Test, NULL, setup, test_next_async, teardown);
|
|
Packit Service |
f02b19 |
g_test_add ("/gck/enumerator/session", Test, NULL, setup, test_enumerate_session, teardown);
|
|
Packit Service |
f02b19 |
g_test_add ("/gck/enumerator/authenticate-interaction", Test, NULL, setup, test_authenticate_interaction, teardown);
|
|
Packit Service |
f02b19 |
g_test_add ("/gck/enumerator/authenticate-compat", Test, NULL, setup, test_authenticate_compat, teardown);
|
|
Packit Service |
f02b19 |
g_test_add ("/gck/enumerator/attribute_match", Test, NULL, setup, test_attribute_match, teardown);
|
|
Packit Service |
f02b19 |
g_test_add ("/gck/enumerator/token_match", Test, NULL, setup, test_token_match, teardown);
|
|
Packit Service |
f02b19 |
g_test_add ("/gck/enumerator/attribute_get", Test, NULL, setup, test_attribute_get, teardown);
|
|
Packit Service |
f02b19 |
g_test_add ("/gck/enumerator/attribute_get_one_at_a_time", Test, NULL, setup, test_attribute_get_one_at_a_time, teardown);
|
|
Packit Service |
f02b19 |
g_test_add ("/gck/enumerator/chained", Test, NULL, setup, test_chained, teardown);
|
|
Packit Service |
f02b19 |
|
|
Packit Service |
f02b19 |
return egg_tests_run_with_loop ();
|
|
Packit Service |
f02b19 |
}
|