summaryrefslogtreecommitdiff
path: root/gck/tests/test-gck-object.c
diff options
context:
space:
mode:
Diffstat (limited to 'gck/tests/test-gck-object.c')
-rw-r--r--gck/tests/test-gck-object.c419
1 files changed, 0 insertions, 419 deletions
diff --git a/gck/tests/test-gck-object.c b/gck/tests/test-gck-object.c
deleted file mode 100644
index f1026201..00000000
--- a/gck/tests/test-gck-object.c
+++ /dev/null
@@ -1,419 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/* test-gck-object.c - the GObject PKCS#11 wrapper library
-
- Copyright (C) 2011 Collabora Ltd.
-
- The Gnome Keyring Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The Gnome Keyring Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the Gnome Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA.
-
- Author: Stef Walter <stefw@collabora.co.uk>
-*/
-
-#include "config.h"
-
-#include "gck/gck.h"
-#include "gck/gck-mock.h"
-#include "gck/gck-test.h"
-
-#include "egg/egg-testing.h"
-
-#include <glib.h>
-
-#include <errno.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-typedef struct {
- GckModule *module;
- GckSlot *slot;
- GckSession *session;
- GckObject *object;
-} Test;
-
-static void
-setup (Test *test, gconstpointer unused)
-{
- GError *err = NULL;
- GList *slots;
-
- /* Successful load */
- test->module = gck_module_initialize (BUILDDIR "/.libs/libmock-test-module.so", NULL, &err);
- g_assert_no_error (err);
- g_assert (GCK_IS_MODULE (test->module));
-
- slots = gck_module_get_slots (test->module, TRUE);
- g_assert (slots != NULL);
-
- test->slot = GCK_SLOT (slots->data);
- g_object_ref (test->slot);
- gck_list_unref_free (slots);
-
- test->session = gck_slot_open_session (test->slot, 0, NULL, &err);
- g_assert_no_error (err);
- g_assert (GCK_IS_SESSION (test->session));
-
- /* Our module always exports a token object with this */
- test->object = gck_object_from_handle (test->session, 2);
- g_assert (test->object != NULL);
-}
-
-static void
-teardown (Test *test, gconstpointer unused)
-{
- g_object_unref (test->object);
- g_object_unref (test->session);
- g_object_unref (test->slot);
- g_object_unref (test->module);
-}
-
-static void
-test_object_props (Test *test, gconstpointer unused)
-{
- GckSession *sess;
- GckModule *mod;
- CK_OBJECT_HANDLE handle;
- g_object_get (test->object, "session", &sess, "module", &mod, "handle", &handle, NULL);
- g_assert (test->session == sess);
- g_object_unref (sess);
- g_assert (test->module == mod);
- g_object_unref (mod);
- g_assert (handle == 2);
-}
-
-static void
-test_object_equals_hash (Test *test, gconstpointer unused)
-{
- GckSlot *other_slot;
- GckSession *other_session;
- GckObject *other_object;
- GObject *obj;
- GError *err = NULL;
- guint hash;
-
- hash = gck_object_hash (test->object);
- g_assert (hash != 0);
-
- g_assert (gck_object_equal (test->object, test->object));
-
- other_slot = g_object_new (GCK_TYPE_SLOT, "module", test->module, "handle", GCK_MOCK_SLOT_TWO_ID, NULL);
- other_session = gck_slot_open_session (other_slot, 0, NULL, &err);
- g_assert_no_error (err);
- g_assert (GCK_IS_SESSION (other_session));
- other_object = gck_object_from_handle (other_session, gck_object_get_handle (test->object));
- g_assert (!gck_object_equal (test->object, other_object));
- g_object_unref (other_slot);
- g_object_unref (other_session);
- g_object_unref (other_object);
-
- obj = g_object_new (G_TYPE_OBJECT, NULL);
- g_assert (!gck_object_equal (test->object, obj));
- g_object_unref (obj);
-
- other_object = gck_object_from_handle (test->session, 383838);
- g_assert (!gck_object_equal (test->object, other_object));
- g_object_unref (other_object);
-
- other_object = gck_object_from_handle (test->session, gck_object_get_handle (test->object));
- g_assert (gck_object_equal (test->object, other_object));
- g_object_unref (other_object);
-}
-
-static void
-fetch_async_result (GObject *source, GAsyncResult *result, gpointer user_data)
-{
- *((GAsyncResult**)user_data) = result;
- g_object_ref (result);
- egg_test_wait_stop ();
-}
-
-static void
-test_create_object (Test *test, gconstpointer unused)
-{
- GAsyncResult *result = NULL;
- GckAttributes *attrs;
- GckObject *object;
- CK_OBJECT_HANDLE last_handle;
- GError *err = NULL;
-
- attrs = gck_attributes_new ();
- gck_attributes_add_ulong (attrs, CKA_CLASS, CKO_DATA);
- gck_attributes_add_string (attrs, CKA_LABEL, "TEST LABEL");
- gck_attributes_add_boolean (attrs, CKA_TOKEN, CK_FALSE);
- gck_attributes_add_data (attrs, CKA_VALUE, (const guchar *)"BLAH", 4);
-
- object = gck_session_create_object (test->session, attrs, NULL, &err);
- g_assert (GCK_IS_OBJECT (object));
- g_assert_no_error (err);
-
- last_handle = gck_object_get_handle (object);
- g_object_unref (object);
-
- /* Using async */
- gck_session_create_object_async (test->session, attrs, NULL, fetch_async_result, &result);
- egg_test_wait_until (500);
- g_assert (result != NULL);
-
- object = gck_session_create_object_finish (test->session, result, &err);
- g_object_unref (result);
- g_assert_no_error (err);
- g_assert (GCK_IS_OBJECT (object));
-
- g_assert (last_handle != gck_object_get_handle (object));
- g_object_unref (object);
-
- gck_attributes_unref (attrs);
-}
-
-static void
-test_destroy_object (Test *test, gconstpointer unused)
-{
- GAsyncResult *result = NULL;
- GckAttributes *attrs;
- GckObject *object;
- GError *err = NULL;
- gboolean ret;
-
- attrs = gck_attributes_new ();
- gck_attributes_add_ulong (attrs, CKA_CLASS, CKO_DATA);
- gck_attributes_add_string (attrs, CKA_LABEL, "TEST OBJECT");
- gck_attributes_add_boolean (attrs, CKA_TOKEN, CK_TRUE);
-
- /* Using simple */
- object = gck_session_create_object (test->session, attrs, NULL, &err);
- g_assert_no_error (err);
- g_assert (GCK_IS_OBJECT (object));
-
- ret = gck_object_destroy (object, NULL, &err);
- g_assert_no_error (err);
- g_assert (ret);
- g_object_unref (object);
-
- /* Using async */
- object = gck_session_create_object (test->session, attrs, NULL, &err);
- g_assert_no_error (err);
- g_assert (GCK_IS_OBJECT (object));
-
- /* Using async */
- gck_object_destroy_async (object, NULL, fetch_async_result, &result);
- egg_test_wait_until (500);
- g_assert (result != NULL);
-
- ret = gck_object_destroy_finish (object, result, &err);
- g_object_unref (result);
- g_assert_no_error (err);
- g_assert (ret);
- g_object_unref (object);
-}
-
-static void
-test_get_attributes (Test *test, gconstpointer unused)
-{
- GAsyncResult *result = NULL;
- GckAttributes *attrs;
- gulong attr_types[2];
- GError *err = NULL;
- gulong klass;
- gchar *value = NULL;
-
- attr_types[0] = CKA_CLASS;
- attr_types[1] = CKA_LABEL;
-
- /* Simple */
- attrs = gck_object_get (test->object, NULL, &err, CKA_CLASS, CKA_LABEL, GCK_INVALID);
- g_assert_no_error (err);
- if (attrs != NULL) {
- g_assert (gck_attributes_find_ulong (attrs, CKA_CLASS, &klass) && klass == CKO_DATA);
- g_assert (gck_attributes_find_string (attrs, CKA_LABEL, &value) && strcmp (value, "TEST LABEL") == 0);
- g_free (value); value = NULL;
- }
- gck_attributes_unref (attrs);
-
- /* Full */
- attrs = gck_object_get_full (test->object, attr_types, G_N_ELEMENTS (attr_types), NULL, &err);
- g_assert_no_error (err);
- g_assert (attrs);
- g_assert (gck_attributes_find_ulong (attrs, CKA_CLASS, &klass) && klass == CKO_DATA);
- g_assert (gck_attributes_find_string (attrs, CKA_LABEL, &value) && strcmp (value, "TEST LABEL") == 0);
- g_free (value); value = NULL;
- gck_attributes_unref (attrs);
-
- /* Async */
- gck_object_get_async (test->object, attr_types, G_N_ELEMENTS (attr_types), NULL, fetch_async_result, &result);
- egg_test_wait_until (500);
- g_assert (result != NULL);
-
- attrs = gck_object_get_finish (test->object, result, &err);
- g_object_unref (result);
- g_assert_no_error (err);
- g_assert (attrs);
- g_assert (gck_attributes_find_ulong (attrs, CKA_CLASS, &klass) && klass == CKO_DATA);
- g_assert (gck_attributes_find_string (attrs, CKA_LABEL, &value) && strcmp (value, "TEST LABEL") == 0);
- g_free (value); value = NULL;
- gck_attributes_unref (attrs);
-}
-
-static void
-test_get_data_attribute (Test *test, gconstpointer unused)
-{
- GAsyncResult *result = NULL;
- CK_OBJECT_CLASS_PTR klass;
- gsize n_data;
- GError *err = NULL;
-
- /* Simple */
- klass = (gulong *)gck_object_get_data (test->object, CKA_CLASS, NULL, &n_data, &err);
- g_assert_no_error (err);
- g_assert (klass);
- g_assert (n_data == sizeof (CK_OBJECT_CLASS));
- g_assert (*klass == CKO_DATA);
- g_free (klass);
-
- /* Full */
- klass = (gulong *)gck_object_get_data_full (test->object, CKA_CLASS, NULL, NULL, &n_data, &err);
- g_assert_no_error (err);
- g_assert (klass);
- g_assert (n_data == sizeof (CK_OBJECT_CLASS));
- g_assert (*klass == CKO_DATA);
- g_free (klass);
-
- /* Async */
- gck_object_get_data_async (test->object, CKA_CLASS, NULL, NULL, fetch_async_result, &result);
- egg_test_wait_until (500);
- g_assert (result != NULL);
-
- klass = (gulong *)gck_object_get_data_finish (test->object, result, &n_data, &err);
- g_object_unref (result);
- g_assert_no_error (err);
- g_assert (klass);
- g_assert (n_data == sizeof (CK_OBJECT_CLASS));
- g_assert (*klass == CKO_DATA);
- g_free (klass);
-
-}
-
-static void
-test_set_attributes (Test *test, gconstpointer unused)
-{
- GAsyncResult *result = NULL;
- GckAttributes *attrs, *templ;
- GError *err = NULL;
- gulong klass;
- gchar *value = NULL;
- gboolean ret;
-
- templ = gck_attributes_new ();
- gck_attributes_add_ulong (templ, CKA_CLASS, 6);
- gck_attributes_add_string (templ, CKA_LABEL, "CHANGE TWO");
-
- /* Full */
- ret = gck_object_set (test->object, templ, NULL, &err);
- gck_attributes_unref (templ);
- g_assert_no_error (err);
- g_assert (ret);
- attrs = gck_object_get (test->object, NULL, &err, CKA_CLASS, CKA_LABEL, GCK_INVALID);
- g_assert (gck_attributes_find_ulong (attrs, CKA_CLASS, &klass) && klass == 6);
- g_assert (gck_attributes_find_string (attrs, CKA_LABEL, &value) && strcmp (value, "CHANGE TWO") == 0);
- g_free (value); value = NULL;
- gck_attributes_unref (attrs);
-
- templ = gck_attributes_new ();
- gck_attributes_add_ulong (templ, CKA_CLASS, 7);
- gck_attributes_add_string (templ, CKA_LABEL, "CHANGE THREE");
-
- /* Async */
- gck_object_set_async (test->object, templ, NULL, fetch_async_result, &result);
- egg_test_wait_until (500);
- g_assert (result != NULL);
-
- ret = gck_object_set_finish (test->object, result, &err);
- g_object_unref (result);
- g_assert_no_error (err);
- g_assert (ret);
- attrs = gck_object_get (test->object, NULL, &err, CKA_CLASS, CKA_LABEL, GCK_INVALID);
- g_assert (gck_attributes_find_ulong (attrs, CKA_CLASS, &klass) && klass == 7);
- g_assert (gck_attributes_find_string (attrs, CKA_LABEL, &value) && strcmp (value, "CHANGE THREE") == 0);
- g_free (value); value = NULL;
- gck_attributes_unref (attrs);
-}
-
-static void
-test_find_objects (Test *test, gconstpointer unused)
-{
- GAsyncResult *result = NULL;
- GckAttributes *templ, *attrs;
- GList *objects;
- GckObject *testobj;
- GError *err = NULL;
-
- attrs = gck_attributes_new ();
- gck_attributes_add_ulong (attrs, CKA_CLASS, CKO_DATA);
- gck_attributes_add_string (attrs, CKA_LABEL, "UNIQUE LABEL");
- testobj = gck_session_create_object (test->session, attrs, NULL, &err);
- gck_attributes_unref (attrs);
- g_object_unref (testobj);
-
- attrs = gck_attributes_new ();
- gck_attributes_add_ulong (attrs, CKA_CLASS, CKO_DATA);
- gck_attributes_add_string (attrs, CKA_LABEL, "OTHER LABEL");
- testobj = gck_session_create_object (test->session, attrs, NULL, &err);
- gck_attributes_unref (attrs);
- g_object_unref (testobj);
-
- /* Simple, "TEST LABEL" */
- attrs = gck_attributes_new ();
- gck_attributes_add_string (attrs, CKA_LABEL, "UNIQUE LABEL");
- objects = gck_session_find_objects (test->session, attrs, NULL, &err);
- g_assert_no_error (err);
- g_assert (g_list_length (objects) == 1);
- gck_list_unref_free (objects);
- gck_attributes_unref (attrs);
-
- /* Full, All */
- templ = gck_attributes_new ();
- objects = gck_session_find_objects (test->session, templ, NULL, &err);
- g_assert_no_error (err);
- g_assert (g_list_length (objects) > 1);
- gck_list_unref_free (objects);
-
- /* Async, None */
- gck_attributes_add_string (templ, CKA_LABEL, "blah blah");
- gck_session_find_objects_async (test->session, templ, NULL, fetch_async_result, &result);
- egg_test_wait_until (500);
- g_assert (result != NULL);
-
- objects = gck_session_find_objects_finish (test->session, result, &err);
- g_object_unref (result);
- g_assert (objects == NULL);
- gck_list_unref_free (objects);
-}
-
-int
-main (int argc, char **argv)
-{
- g_type_init ();
- g_test_init (&argc, &argv, NULL);
-
- g_test_add ("/gck/object/object_props", Test, NULL, setup, test_object_props, teardown);
- g_test_add ("/gck/object/object_equals_hash", Test, NULL, setup, test_object_equals_hash, teardown);
- g_test_add ("/gck/object/create_object", Test, NULL, setup, test_create_object, teardown);
- g_test_add ("/gck/object/destroy_object", Test, NULL, setup, test_destroy_object, teardown);
- g_test_add ("/gck/object/get_attributes", Test, NULL, setup, test_get_attributes, teardown);
- g_test_add ("/gck/object/get_data_attribute", Test, NULL, setup, test_get_data_attribute, teardown);
- g_test_add ("/gck/object/set_attributes", Test, NULL, setup, test_set_attributes, teardown);
- g_test_add ("/gck/object/find_objects", Test, NULL, setup, test_find_objects, teardown);
-
- return egg_tests_run_in_thread_with_loop ();
-}