Blame gck/test-gck-attributes.c

Packit b00eeb
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
Packit b00eeb
/* test-gck-attributes.c - the GObject PKCS#11 wrapper library
Packit b00eeb
Packit b00eeb
   Copyright (C) 2011 Collabora Ltd.
Packit b00eeb
Packit b00eeb
   The Gnome Keyring Library is free software; you can redistribute it and/or
Packit b00eeb
   modify it under the terms of the GNU Library General Public License as
Packit b00eeb
   published by the Free Software Foundation; either version 2 of the
Packit b00eeb
   License, or (at your option) any later version.
Packit b00eeb
Packit b00eeb
   The Gnome Keyring Library is distributed in the hope that it will be useful,
Packit b00eeb
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit b00eeb
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit b00eeb
   Library General Public License for more details.
Packit b00eeb
Packit b00eeb
   You should have received a copy of the GNU Library General Public
Packit b00eeb
   License along with the Gnome Library; see the file COPYING.LIB.  If not,
Packit b00eeb
   see <http://www.gnu.org/licenses/>.
Packit b00eeb
Packit b00eeb
   Author: Stef Walter <stefw@collabora.co.uk>
Packit b00eeb
*/
Packit b00eeb
Packit b00eeb
#include "config.h"
Packit b00eeb
Packit b00eeb
#include <glib.h>
Packit b00eeb
#include <string.h>
Packit b00eeb
Packit b00eeb
#include "egg/egg-secure-memory.h"
Packit b00eeb
Packit b00eeb
#include "gck/gck.h"
Packit b00eeb
#include "gck/gck-test.h"
Packit b00eeb
Packit b00eeb
EGG_SECURE_DECLARE (test_gck_attributes);
Packit b00eeb
Packit b00eeb
#define ATTR_TYPE 55
Packit b00eeb
#define ATTR_DATA (const guchar *)"TEST DATA"
Packit b00eeb
#define N_ATTR_DATA ((gsize)9)
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_init_memory (void)
Packit b00eeb
{
Packit b00eeb
	GckAttribute attr;
Packit b00eeb
Packit b00eeb
	g_assert (sizeof (attr) == sizeof (CK_ATTRIBUTE));
Packit b00eeb
Packit b00eeb
	gck_attribute_init (&attr, ATTR_TYPE, (const guchar *)ATTR_DATA, N_ATTR_DATA);
Packit b00eeb
	g_assert (attr.type == ATTR_TYPE);
Packit b00eeb
	g_assert (attr.length == N_ATTR_DATA);
Packit b00eeb
	g_assert (memcmp (attr.value, ATTR_DATA, attr.length) == 0);
Packit b00eeb
Packit b00eeb
	gck_attribute_clear (&attr);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_init_boolean (void)
Packit b00eeb
{
Packit b00eeb
	GckAttribute attr;
Packit b00eeb
Packit b00eeb
	gck_attribute_init_boolean (&attr, ATTR_TYPE, TRUE);
Packit b00eeb
	g_assert (attr.type == ATTR_TYPE);
Packit b00eeb
	g_assert (attr.length == sizeof (CK_BBOOL));
Packit b00eeb
	g_assert (*((CK_BBOOL*)attr.value) == CK_TRUE);
Packit b00eeb
Packit b00eeb
	gck_attribute_clear (&attr);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_init_date (void)
Packit b00eeb
{
Packit b00eeb
	GckAttribute attr;
Packit b00eeb
	CK_DATE ck_date;
Packit b00eeb
	GDate *date;
Packit b00eeb
Packit b00eeb
	date = g_date_new_dmy(05, 06, 1960);
Packit b00eeb
	memcpy (ck_date.year, "1960", 4);
Packit b00eeb
	memcpy (ck_date.month, "06", 2);
Packit b00eeb
	memcpy (ck_date.day, "05", 2);
Packit b00eeb
	gck_attribute_init_date (&attr, ATTR_TYPE, date);
Packit b00eeb
	g_date_free (date);
Packit b00eeb
	g_assert (attr.type == ATTR_TYPE);
Packit b00eeb
	g_assert (attr.length == sizeof (CK_DATE));
Packit b00eeb
	g_assert (memcmp (attr.value, &ck_date, attr.length) == 0);
Packit b00eeb
Packit b00eeb
	gck_attribute_clear (&attr);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_init_ulong (void)
Packit b00eeb
{
Packit b00eeb
	GckAttribute attr;
Packit b00eeb
Packit b00eeb
	gck_attribute_init_ulong (&attr, ATTR_TYPE, 88);
Packit b00eeb
	g_assert (attr.type == ATTR_TYPE);
Packit b00eeb
	g_assert (attr.length == sizeof (CK_ULONG));
Packit b00eeb
	g_assert (*((CK_ULONG*)attr.value) == 88);
Packit b00eeb
Packit b00eeb
	gck_attribute_clear (&attr);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_init_string (void)
Packit b00eeb
{
Packit b00eeb
	GckAttribute attr;
Packit b00eeb
Packit b00eeb
	gck_attribute_init_string (&attr, ATTR_TYPE, "a test string");
Packit b00eeb
	g_assert (attr.type == ATTR_TYPE);
Packit b00eeb
	g_assert (attr.length == strlen ("a test string"));
Packit b00eeb
	g_assert (memcmp (attr.value, "a test string", attr.length) == 0);
Packit b00eeb
Packit b00eeb
	gck_attribute_clear (&attr);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_init_invalid (void)
Packit b00eeb
{
Packit b00eeb
	GckAttribute attr;
Packit b00eeb
Packit b00eeb
	gck_attribute_init_invalid (&attr, ATTR_TYPE);
Packit b00eeb
	g_assert (attr.type == ATTR_TYPE);
Packit b00eeb
	g_assert (attr.length == (gulong)-1);
Packit b00eeb
	g_assert (attr.value == NULL);
Packit b00eeb
Packit b00eeb
	g_assert (gck_attribute_is_invalid (&attr));
Packit b00eeb
	gck_attribute_clear (&attr);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_init_empty (void)
Packit b00eeb
{
Packit b00eeb
	GckAttribute attr;
Packit b00eeb
Packit b00eeb
	gck_attribute_init_empty (&attr, ATTR_TYPE);
Packit b00eeb
	g_assert (attr.type == ATTR_TYPE);
Packit b00eeb
	g_assert (attr.length == 0);
Packit b00eeb
	g_assert (attr.value == NULL);
Packit b00eeb
Packit b00eeb
	gck_attribute_clear (&attr);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_new_memory (void)
Packit b00eeb
{
Packit b00eeb
	GckAttribute *attr;
Packit b00eeb
Packit b00eeb
	attr = gck_attribute_new (ATTR_TYPE, ATTR_DATA, N_ATTR_DATA);
Packit b00eeb
	g_assert (attr->type == ATTR_TYPE);
Packit b00eeb
	g_assert (attr->length == N_ATTR_DATA);
Packit b00eeb
	g_assert (memcmp (attr->value, ATTR_DATA, attr->length) == 0);
Packit b00eeb
Packit b00eeb
	gck_attribute_free (attr);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_new_boolean (void)
Packit b00eeb
{
Packit b00eeb
	GckAttribute *attr;
Packit b00eeb
Packit b00eeb
	attr = gck_attribute_new_boolean (ATTR_TYPE, TRUE);
Packit b00eeb
	g_assert (attr->type == ATTR_TYPE);
Packit b00eeb
	g_assert (attr->length == sizeof (CK_BBOOL));
Packit b00eeb
	g_assert (*((CK_BBOOL*)attr->value) == CK_TRUE);
Packit b00eeb
Packit b00eeb
	gck_attribute_free (attr);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_new_date (void)
Packit b00eeb
{
Packit b00eeb
	GckAttribute *attr;
Packit b00eeb
	CK_DATE ck_date;
Packit b00eeb
	GDate *date;
Packit b00eeb
Packit b00eeb
	date = g_date_new_dmy(05, 06, 1800);
Packit b00eeb
	memcpy (ck_date.year, "1800", 4);
Packit b00eeb
	memcpy (ck_date.month, "06", 2);
Packit b00eeb
	memcpy (ck_date.day, "05", 2);
Packit b00eeb
	attr = gck_attribute_new_date (ATTR_TYPE, date);
Packit b00eeb
	g_date_free (date);
Packit b00eeb
	g_assert (attr->type == ATTR_TYPE);
Packit b00eeb
	g_assert (attr->length == sizeof (CK_DATE));
Packit b00eeb
	g_assert (memcmp (attr->value, &ck_date, attr->length) == 0);
Packit b00eeb
Packit b00eeb
	gck_attribute_free (attr);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_new_ulong (void)
Packit b00eeb
{
Packit b00eeb
	GckAttribute *attr;
Packit b00eeb
Packit b00eeb
	attr = gck_attribute_new_ulong (ATTR_TYPE, 88);
Packit b00eeb
	g_assert (attr->type == ATTR_TYPE);
Packit b00eeb
	g_assert (attr->length == sizeof (CK_ULONG));
Packit b00eeb
	g_assert (*((CK_ULONG*)attr->value) == 88);
Packit b00eeb
Packit b00eeb
	gck_attribute_free (attr);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_new_string (void)
Packit b00eeb
{
Packit b00eeb
	GckAttribute *attr;
Packit b00eeb
Packit b00eeb
	attr = gck_attribute_new_string (ATTR_TYPE, "a test string");
Packit b00eeb
	g_assert (attr->type == ATTR_TYPE);
Packit b00eeb
	g_assert (attr->length == strlen ("a test string"));
Packit b00eeb
	g_assert (memcmp (attr->value, "a test string", attr->length) == 0);
Packit b00eeb
Packit b00eeb
	gck_attribute_free (attr);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_new_invalid (void)
Packit b00eeb
{
Packit b00eeb
	GckAttribute *attr;
Packit b00eeb
Packit b00eeb
	attr = gck_attribute_new_invalid (ATTR_TYPE);
Packit b00eeb
	g_assert (attr->type == ATTR_TYPE);
Packit b00eeb
	g_assert (attr->length == (gulong)-1);
Packit b00eeb
	g_assert (attr->value == NULL);
Packit b00eeb
Packit b00eeb
	g_assert (gck_attribute_is_invalid (attr));
Packit b00eeb
Packit b00eeb
	gck_attribute_free (attr);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_new_empty (void)
Packit b00eeb
{
Packit b00eeb
	GckAttribute *attr;
Packit b00eeb
Packit b00eeb
	attr = gck_attribute_new_empty (ATTR_TYPE);
Packit b00eeb
	g_assert (attr->type == ATTR_TYPE);
Packit b00eeb
	g_assert (attr->length == 0);
Packit b00eeb
	g_assert (attr->value == NULL);
Packit b00eeb
Packit b00eeb
	gck_attribute_free (attr);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_get_boolean (void)
Packit b00eeb
{
Packit b00eeb
	GckAttribute *attr;
Packit b00eeb
Packit b00eeb
	attr = gck_attribute_new_boolean (ATTR_TYPE, TRUE);
Packit b00eeb
	g_assert (gck_attribute_get_boolean (attr) == TRUE);
Packit b00eeb
	gck_attribute_free (attr);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_get_date (void)
Packit b00eeb
{
Packit b00eeb
	GckAttribute *attr;
Packit b00eeb
	CK_DATE ck_date;
Packit b00eeb
	GDate date, date2;
Packit b00eeb
Packit b00eeb
	g_date_set_dmy(&date, 05, 06, 1800);
Packit b00eeb
	memcpy (ck_date.year, "1800", 4);
Packit b00eeb
	memcpy (ck_date.month, "06", 2);
Packit b00eeb
	memcpy (ck_date.day, "05", 2);
Packit b00eeb
	attr = gck_attribute_new_date (ATTR_TYPE, &date);
Packit b00eeb
	gck_attribute_get_date (attr, &date2);
Packit b00eeb
	g_assert (g_date_compare (&date, &date2) == 0);
Packit b00eeb
	gck_attribute_free (attr);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_get_ulong (void)
Packit b00eeb
{
Packit b00eeb
	GckAttribute *attr;
Packit b00eeb
Packit b00eeb
	attr = gck_attribute_new_ulong (ATTR_TYPE, 88);
Packit b00eeb
	g_assert (gck_attribute_get_ulong (attr) == 88);
Packit b00eeb
	gck_attribute_free (attr);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_get_string (void)
Packit b00eeb
{
Packit b00eeb
	GckAttribute *attr;
Packit b00eeb
	gchar *value;
Packit b00eeb
Packit b00eeb
	attr = gck_attribute_new_string (ATTR_TYPE, "a test string");
Packit b00eeb
	value = gck_attribute_get_string (attr);
Packit b00eeb
	g_assert (strcmp ("a test string", value) == 0);
Packit b00eeb
	g_free (value);
Packit b00eeb
	gck_attribute_free (attr);
Packit b00eeb
Packit b00eeb
	/* Should be able to store null strings */
Packit b00eeb
	attr = gck_attribute_new_string (ATTR_TYPE, NULL);
Packit b00eeb
	value = gck_attribute_get_string (attr);
Packit b00eeb
	g_assert (value == NULL);
Packit b00eeb
	gck_attribute_free (attr);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_dup_attribute (void)
Packit b00eeb
{
Packit b00eeb
	GckAttribute attr, *dup;
Packit b00eeb
Packit b00eeb
	gck_attribute_init_ulong (&attr, ATTR_TYPE, 88);
Packit b00eeb
	dup = gck_attribute_dup (&attr);
Packit b00eeb
	gck_attribute_clear (&attr);
Packit b00eeb
	g_assert (gck_attribute_get_ulong (dup) == 88);
Packit b00eeb
	g_assert (dup->type == ATTR_TYPE);
Packit b00eeb
	gck_attribute_free (dup);
Packit b00eeb
Packit b00eeb
	/* Should be able to dup null */
Packit b00eeb
	dup = gck_attribute_dup (NULL);
Packit b00eeb
	g_assert (dup == NULL);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_copy_attribute (void)
Packit b00eeb
{
Packit b00eeb
	GckAttribute attr, copy;
Packit b00eeb
Packit b00eeb
	gck_attribute_init_ulong (&attr, ATTR_TYPE, 88);
Packit b00eeb
	gck_attribute_init_copy (&copy, &attr);
Packit b00eeb
	gck_attribute_clear (&attr);
Packit b00eeb
	g_assert (gck_attribute_get_ulong (&copy) == 88);
Packit b00eeb
	g_assert (copy.type == ATTR_TYPE);
Packit b00eeb
	gck_attribute_clear (©);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
builder_add_fixtures (GckBuilder *builder,
Packit b00eeb
                      guint seed)
Packit b00eeb
{
Packit b00eeb
	GDate *date = g_date_new_dmy (11 + seed, 12, 2008);
Packit b00eeb
	gck_builder_add_boolean (builder, 0UL, (TRUE + seed) % 2);
Packit b00eeb
	gck_builder_add_ulong (builder, 101UL, 888 + seed);
Packit b00eeb
	gck_builder_add_string (builder, 202UL, "string");
Packit b00eeb
	gck_builder_add_date (builder, 303UL, date);
Packit b00eeb
	g_date_free (date);
Packit b00eeb
	gck_builder_add_data (builder, 404UL, (const guchar *)ATTR_DATA, N_ATTR_DATA);
Packit b00eeb
	gck_builder_add_invalid (builder, 505UL);
Packit b00eeb
	gck_builder_add_empty (builder, 606UL);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_builder_blank (void)
Packit b00eeb
{
Packit b00eeb
	GckBuilder builder;
Packit b00eeb
Packit b00eeb
	gck_builder_init (&builder);
Packit b00eeb
	g_assert (gck_builder_find (&builder, 88) == NULL);
Packit b00eeb
	gck_builder_clear (&builder);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_build_data (void)
Packit b00eeb
{
Packit b00eeb
	GckBuilder builder = GCK_BUILDER_INIT;
Packit b00eeb
	GckAttributes *attrs;
Packit b00eeb
	const GckAttribute *attr;
Packit b00eeb
Packit b00eeb
	gck_builder_add_data (&builder, ATTR_TYPE, (const guchar *)"Hello", 5);
Packit b00eeb
	attr = gck_builder_find (&builder, ATTR_TYPE);
Packit b00eeb
	g_assert (attr->type == ATTR_TYPE);
Packit b00eeb
	g_assert (attr->length == 5);
Packit b00eeb
	g_assert (memcmp (attr->value, "Hello", attr->length) == 0);
Packit b00eeb
Packit b00eeb
	gck_builder_set_data (&builder, ATTR_TYPE, (const guchar *)ATTR_DATA, N_ATTR_DATA);
Packit b00eeb
	g_assert (attr->type == ATTR_TYPE);
Packit b00eeb
	g_assert (attr->length == N_ATTR_DATA);
Packit b00eeb
	g_assert (memcmp (attr->value, ATTR_DATA, attr->length) == 0);
Packit b00eeb
Packit b00eeb
	attrs = gck_builder_end (&builder);
Packit b00eeb
	attr = gck_attributes_at (attrs, 0);
Packit b00eeb
	g_assert (attr->type == ATTR_TYPE);
Packit b00eeb
	g_assert (attr->length == N_ATTR_DATA);
Packit b00eeb
	g_assert (memcmp (attr->value, ATTR_DATA, attr->length) == 0);
Packit b00eeb
Packit b00eeb
	gck_attributes_unref (attrs);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_build_data_invalid (void)
Packit b00eeb
{
Packit b00eeb
	GckBuilder builder = GCK_BUILDER_INIT;
Packit b00eeb
	GckAttributes *attrs;
Packit b00eeb
	const GckAttribute *attr;
Packit b00eeb
Packit b00eeb
	gck_builder_add_data (&builder, ATTR_TYPE, NULL, GCK_INVALID);
Packit b00eeb
	attrs = gck_builder_end (&builder);
Packit b00eeb
	attr = gck_attributes_at (attrs, 0);
Packit b00eeb
Packit b00eeb
	g_assert (attr->type == ATTR_TYPE);
Packit b00eeb
	g_assert (gck_attribute_is_invalid (attr));
Packit b00eeb
Packit b00eeb
	gck_attributes_unref (attrs);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_build_data_secure (void)
Packit b00eeb
{
Packit b00eeb
	GckBuilder builder = GCK_BUILDER_INIT;
Packit b00eeb
	GckAttributes *attrs;
Packit b00eeb
	const GckAttribute *attr;
Packit b00eeb
	guchar *memory;
Packit b00eeb
Packit b00eeb
	memory = egg_secure_strdup ("password");
Packit b00eeb
	gck_builder_add_data (&builder, ATTR_TYPE, memory, 8);
Packit b00eeb
	attrs = gck_builder_end (&builder);
Packit b00eeb
	attr = gck_attributes_at (attrs, 0);
Packit b00eeb
Packit b00eeb
	g_assert (attr->type == ATTR_TYPE);
Packit b00eeb
	g_assert (attr->length == 8);
Packit b00eeb
	g_assert (memcmp (attr->value, "password", attr->length) == 0);
Packit b00eeb
	g_assert (egg_secure_check (attr->value) == TRUE);
Packit b00eeb
Packit b00eeb
	egg_secure_free (memory);
Packit b00eeb
	gck_attributes_unref (attrs);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_build_take (void)
Packit b00eeb
{
Packit b00eeb
	GckBuilder builder = GCK_BUILDER_INIT;
Packit b00eeb
	GckAttributes *attrs;
Packit b00eeb
	const GckAttribute *attr;
Packit b00eeb
	guchar *memory;
Packit b00eeb
Packit b00eeb
	memory = g_memdup (ATTR_DATA, N_ATTR_DATA);
Packit b00eeb
	gck_builder_take_data (&builder, ATTR_TYPE, memory, N_ATTR_DATA);
Packit b00eeb
	attrs = gck_builder_end (&builder);
Packit b00eeb
Packit b00eeb
	attr = gck_attributes_at (attrs, 0);
Packit b00eeb
Packit b00eeb
	g_assert (attr->type == ATTR_TYPE);
Packit b00eeb
	g_assert (attr->length == N_ATTR_DATA);
Packit b00eeb
	g_assert (memcmp (attr->value, ATTR_DATA, attr->length) == 0);
Packit b00eeb
Packit b00eeb
	gck_attributes_unref (attrs);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_build_take_invalid (void)
Packit b00eeb
{
Packit b00eeb
	GckBuilder builder = GCK_BUILDER_INIT;
Packit b00eeb
	GckAttributes *attrs;
Packit b00eeb
	const GckAttribute *attr;
Packit b00eeb
	gpointer memory;
Packit b00eeb
Packit b00eeb
	/* This memory should be freed */
Packit b00eeb
	memory = g_strdup ("BLAH");
Packit b00eeb
	gck_builder_take_data (&builder, ATTR_TYPE, memory, GCK_INVALID);
Packit b00eeb
Packit b00eeb
	/* This memory should be freed */
Packit b00eeb
	memory = egg_secure_strdup ("BLAH");
Packit b00eeb
	gck_builder_take_data (&builder, ATTR_TYPE, memory, GCK_INVALID);
Packit b00eeb
Packit b00eeb
	attrs = gck_builder_end (&builder);
Packit b00eeb
	attr = gck_attributes_at (attrs, 0);
Packit b00eeb
Packit b00eeb
	g_assert (attr->type == ATTR_TYPE);
Packit b00eeb
	g_assert (gck_attribute_is_invalid (attr));
Packit b00eeb
Packit b00eeb
	gck_attributes_unref (attrs);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_build_take_secure (void)
Packit b00eeb
{
Packit b00eeb
	GckBuilder builder = GCK_BUILDER_INIT;
Packit b00eeb
	GckAttributes *attrs;
Packit b00eeb
	const GckAttribute *attr;
Packit b00eeb
	guchar *memory;
Packit b00eeb
Packit b00eeb
	memory = egg_secure_strdup ("password");
Packit b00eeb
	gck_builder_take_data (&builder, ATTR_TYPE, memory, 8);
Packit b00eeb
	attrs = gck_builder_end (&builder);
Packit b00eeb
	attr = gck_attributes_at (attrs, 0);
Packit b00eeb
Packit b00eeb
	g_assert (attr->type == ATTR_TYPE);
Packit b00eeb
	g_assert (attr->length == 8);
Packit b00eeb
	g_assert (memcmp (attr->value, "password", attr->length) == 0);
Packit b00eeb
	g_assert (egg_secure_check (attr->value) == TRUE);
Packit b00eeb
Packit b00eeb
	gck_attributes_unref (attrs);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_value_to_boolean (void)
Packit b00eeb
{
Packit b00eeb
	CK_BBOOL data = CK_TRUE;
Packit b00eeb
	gboolean result = FALSE;
Packit b00eeb
Packit b00eeb
	if (!gck_value_to_boolean (&data, sizeof (data), &result))
Packit b00eeb
		g_assert_not_reached ();
Packit b00eeb
Packit b00eeb
	g_assert (result == TRUE);
Packit b00eeb
Packit b00eeb
	if (!gck_value_to_boolean (&data, sizeof (data), NULL))
Packit b00eeb
		g_assert_not_reached ();
Packit b00eeb
Packit b00eeb
	/* Should fail */
Packit b00eeb
	if (gck_value_to_boolean (&data, 0, NULL))
Packit b00eeb
		g_assert_not_reached ();
Packit b00eeb
	if (gck_value_to_boolean (&data, 2, NULL))
Packit b00eeb
		g_assert_not_reached ();
Packit b00eeb
	if (gck_value_to_boolean (&data, (CK_ULONG)-1, NULL))
Packit b00eeb
		g_assert_not_reached ();
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_value_to_ulong (void)
Packit b00eeb
{
Packit b00eeb
	CK_ULONG data = 34343;
Packit b00eeb
	gulong result = 0;
Packit b00eeb
Packit b00eeb
	if (!gck_value_to_ulong ((const guchar *)&data, sizeof (data), &result))
Packit b00eeb
		g_assert_not_reached ();
Packit b00eeb
Packit b00eeb
	g_assert (result == 34343);
Packit b00eeb
Packit b00eeb
	if (!gck_value_to_ulong ((const guchar *)&data, sizeof (data), NULL))
Packit b00eeb
		g_assert_not_reached ();
Packit b00eeb
Packit b00eeb
	/* Should fail */
Packit b00eeb
	if (gck_value_to_ulong ((const guchar *)&data, 0, NULL))
Packit b00eeb
		g_assert_not_reached ();
Packit b00eeb
	if (gck_value_to_ulong ((const guchar *)&data, 2, NULL))
Packit b00eeb
		g_assert_not_reached ();
Packit b00eeb
	if (gck_value_to_ulong ((const guchar *)&data, (CK_ULONG)-1, NULL))
Packit b00eeb
		g_assert_not_reached ();
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_build_boolean (void)
Packit b00eeb
{
Packit b00eeb
	GckBuilder builder = GCK_BUILDER_INIT;
Packit b00eeb
	GckAttributes *attrs;
Packit b00eeb
	const GckAttribute *attr;
Packit b00eeb
	gboolean value;
Packit b00eeb
Packit b00eeb
	g_assert (gck_builder_find_boolean (&builder, 5, &value) == FALSE);
Packit b00eeb
Packit b00eeb
	gck_builder_add_boolean (&builder, ATTR_TYPE, FALSE);
Packit b00eeb
Packit b00eeb
	gck_builder_set_invalid (&builder, 5);
Packit b00eeb
	g_assert (gck_builder_find_boolean (&builder, 5, &value) == FALSE);
Packit b00eeb
	gck_builder_set_boolean (&builder, 5, TRUE);
Packit b00eeb
Packit b00eeb
	attr = gck_builder_find (&builder, ATTR_TYPE);
Packit b00eeb
	g_assert (attr != NULL);
Packit b00eeb
	g_assert (attr->type == ATTR_TYPE);
Packit b00eeb
	g_assert (attr->length == sizeof (CK_BBOOL));
Packit b00eeb
	g_assert (*((CK_BBOOL*)attr->value) == CK_FALSE);
Packit b00eeb
	if (!gck_builder_find_boolean (&builder, ATTR_TYPE, &value))
Packit b00eeb
		g_assert_not_reached ();
Packit b00eeb
	g_assert (value == FALSE);
Packit b00eeb
Packit b00eeb
	gck_builder_set_boolean (&builder, ATTR_TYPE, TRUE);
Packit b00eeb
	g_assert (attr->type == ATTR_TYPE);
Packit b00eeb
	g_assert (attr->length == sizeof (CK_BBOOL));
Packit b00eeb
	g_assert (*((CK_BBOOL*)attr->value) == CK_TRUE);
Packit b00eeb
	if (!gck_builder_find_boolean (&builder, ATTR_TYPE, &value))
Packit b00eeb
		g_assert_not_reached ();
Packit b00eeb
	g_assert (value == TRUE);
Packit b00eeb
Packit b00eeb
	if (!gck_builder_find_boolean (&builder, 5, &value))
Packit b00eeb
		g_assert_not_reached ();
Packit b00eeb
	g_assert (value == TRUE);
Packit b00eeb
Packit b00eeb
	attrs = gck_builder_end (&builder);
Packit b00eeb
	attr = gck_attributes_at (attrs, 0);
Packit b00eeb
	g_assert (attr != NULL);
Packit b00eeb
Packit b00eeb
	g_assert (attr->type == ATTR_TYPE);
Packit b00eeb
	g_assert (attr->length == sizeof (CK_BBOOL));
Packit b00eeb
	g_assert (*((CK_BBOOL*)attr->value) == CK_TRUE);
Packit b00eeb
Packit b00eeb
	if (!gck_attributes_find_boolean (attrs, ATTR_TYPE, &value))
Packit b00eeb
		g_assert_not_reached ();
Packit b00eeb
	g_assert (value == TRUE);
Packit b00eeb
Packit b00eeb
	g_assert (gck_attribute_get_boolean (attr) == TRUE);
Packit b00eeb
Packit b00eeb
	g_assert_cmpuint (gck_attributes_count (attrs), ==, 2);
Packit b00eeb
	gck_attributes_unref (attrs);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_build_date (void)
Packit b00eeb
{
Packit b00eeb
	GckBuilder builder = GCK_BUILDER_INIT;
Packit b00eeb
	GckAttributes *attrs;
Packit b00eeb
	const GckAttribute *attr;
Packit b00eeb
	CK_DATE ck_date;
Packit b00eeb
	GDate *date, date2;
Packit b00eeb
Packit b00eeb
	g_assert (gck_builder_find_date (&builder, 5, &date2) == FALSE);
Packit b00eeb
Packit b00eeb
	date = g_date_new_dmy(8, 8, 1960);
Packit b00eeb
	memcpy (ck_date.year, "1960", 4);
Packit b00eeb
	memcpy (ck_date.month, "08", 2);
Packit b00eeb
	memcpy (ck_date.day, "08", 2);
Packit b00eeb
Packit b00eeb
	gck_builder_add_date (&builder, ATTR_TYPE, date);
Packit b00eeb
Packit b00eeb
	gck_builder_set_invalid (&builder, 5);
Packit b00eeb
	g_assert (gck_builder_find_date (&builder, 5, &date2) == FALSE);
Packit b00eeb
	attr = gck_builder_find (&builder, 5);
Packit b00eeb
	gck_attribute_get_date (attr, &date2);
Packit b00eeb
	g_assert_cmpint (date2.day, ==, 0);
Packit b00eeb
	g_assert_cmpint (date2.month, ==, 0);
Packit b00eeb
	g_assert_cmpint (date2.year, ==, 0);
Packit b00eeb
Packit b00eeb
	gck_builder_set_date (&builder, 5, date);
Packit b00eeb
Packit b00eeb
	attr = gck_builder_find (&builder, ATTR_TYPE);
Packit b00eeb
	g_assert (attr != NULL);
Packit b00eeb
	g_assert (attr->type == ATTR_TYPE);
Packit b00eeb
	g_assert (attr->length == sizeof (CK_DATE));
Packit b00eeb
	g_assert (memcmp (attr->value, &ck_date, attr->length) == 0);
Packit b00eeb
	if (!gck_builder_find_date (&builder, ATTR_TYPE, &date2))
Packit b00eeb
		g_assert_not_reached ();
Packit b00eeb
	g_assert (g_date_compare (date, &date2) == 0);
Packit b00eeb
Packit b00eeb
	if (!gck_builder_find_date (&builder, 5, &date2))
Packit b00eeb
		g_assert_not_reached ();
Packit b00eeb
	g_assert (g_date_compare (date, &date2) == 0);
Packit b00eeb
Packit b00eeb
	g_date_free (date);
Packit b00eeb
Packit b00eeb
	date = g_date_new_dmy(05, 06, 1960);
Packit b00eeb
	memcpy (ck_date.year, "1960", 4);
Packit b00eeb
	memcpy (ck_date.month, "06", 2);
Packit b00eeb
	memcpy (ck_date.day, "05", 2);
Packit b00eeb
	gck_builder_set_date (&builder, ATTR_TYPE, date);
Packit b00eeb
	g_assert (attr->type == ATTR_TYPE);
Packit b00eeb
	g_assert (attr->length == sizeof (CK_DATE));
Packit b00eeb
	g_assert (memcmp (attr->value, &ck_date, attr->length) == 0);
Packit b00eeb
	if (!gck_builder_find_date (&builder, ATTR_TYPE, &date2))
Packit b00eeb
		g_assert_not_reached ();
Packit b00eeb
	g_assert (g_date_compare (date, &date2) == 0);
Packit b00eeb
Packit b00eeb
	attrs = gck_builder_end (&builder);
Packit b00eeb
	attr = gck_attributes_at (attrs, 0);
Packit b00eeb
	g_assert (attr != NULL);
Packit b00eeb
	g_assert (attr->type == ATTR_TYPE);
Packit b00eeb
	g_assert (attr->length == sizeof (CK_DATE));
Packit b00eeb
	g_assert (memcmp (attr->value, &ck_date, attr->length) == 0);
Packit b00eeb
Packit b00eeb
	gck_attribute_get_date (attr, &date2);
Packit b00eeb
	g_assert (g_date_compare (date, &date2) == 0);
Packit b00eeb
Packit b00eeb
	g_date_free (date);
Packit b00eeb
Packit b00eeb
	g_assert_cmpuint (gck_attributes_count (attrs), ==, 2);
Packit b00eeb
	gck_attributes_unref (attrs);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_build_ulong (void)
Packit b00eeb
{
Packit b00eeb
	GckBuilder builder = GCK_BUILDER_INIT;
Packit b00eeb
	GckAttributes *attrs;
Packit b00eeb
	const GckAttribute *attr;
Packit b00eeb
	gulong value;
Packit b00eeb
Packit b00eeb
	g_assert (gck_builder_find_ulong (&builder, 5, &value) == FALSE);
Packit b00eeb
Packit b00eeb
	gck_builder_add_ulong (&builder, ATTR_TYPE, 99);
Packit b00eeb
Packit b00eeb
	gck_builder_set_invalid (&builder, 5);
Packit b00eeb
	g_assert (gck_builder_find_ulong (&builder, 5, &value) == FALSE);
Packit b00eeb
	gck_builder_set_ulong (&builder, 5, 292);
Packit b00eeb
Packit b00eeb
	attr = gck_builder_find (&builder, ATTR_TYPE);
Packit b00eeb
	g_assert (attr != NULL);
Packit b00eeb
	g_assert (attr->type == ATTR_TYPE);
Packit b00eeb
	g_assert (attr->length == sizeof (CK_ULONG));
Packit b00eeb
	g_assert (*((CK_ULONG*)attr->value) == 99);
Packit b00eeb
	if (!gck_builder_find_ulong (&builder, ATTR_TYPE, &value))
Packit b00eeb
		g_assert_not_reached ();
Packit b00eeb
	g_assert (value == 99);
Packit b00eeb
Packit b00eeb
	gck_builder_set_ulong (&builder, ATTR_TYPE, 88);
Packit b00eeb
	g_assert (attr->type == ATTR_TYPE);
Packit b00eeb
	g_assert (attr->length == sizeof (CK_ULONG));
Packit b00eeb
	g_assert (*((CK_ULONG*)attr->value) == 88);
Packit b00eeb
	if (!gck_builder_find_ulong (&builder, ATTR_TYPE, &value))
Packit b00eeb
		g_assert_not_reached ();
Packit b00eeb
	g_assert (value == 88);
Packit b00eeb
Packit b00eeb
	if (!gck_builder_find_ulong (&builder, 5, &value))
Packit b00eeb
		g_assert_not_reached ();
Packit b00eeb
	g_assert (value == 292);
Packit b00eeb
Packit b00eeb
	attrs = gck_builder_end (&builder);
Packit b00eeb
	attr = gck_attributes_at (attrs, 0);
Packit b00eeb
	g_assert (attr != NULL);
Packit b00eeb
	g_assert (attr->type == ATTR_TYPE);
Packit b00eeb
	g_assert (attr->length == sizeof (CK_ULONG));
Packit b00eeb
	g_assert (*((CK_ULONG*)attr->value) == 88);
Packit b00eeb
Packit b00eeb
	if (!gck_attributes_find_ulong (attrs, ATTR_TYPE, &value))
Packit b00eeb
		g_assert_not_reached ();
Packit b00eeb
	g_assert (value == 88);
Packit b00eeb
	g_assert (gck_attribute_get_ulong (attr) == 88);
Packit b00eeb
Packit b00eeb
	g_assert_cmpuint (gck_attributes_count (attrs), ==, 2);
Packit b00eeb
	gck_attributes_unref (attrs);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_build_string (void)
Packit b00eeb
{
Packit b00eeb
	GckBuilder builder = GCK_BUILDER_INIT;
Packit b00eeb
	GckAttributes *attrs;
Packit b00eeb
	const GckAttribute *attr;
Packit b00eeb
	gchar *value;
Packit b00eeb
Packit b00eeb
	g_assert (gck_builder_find_string (&builder, 5, &value) == FALSE);
Packit b00eeb
Packit b00eeb
	gck_builder_add_string (&builder, ATTR_TYPE, "My my");
Packit b00eeb
Packit b00eeb
	gck_builder_set_invalid (&builder, 5);
Packit b00eeb
	g_assert (gck_builder_find_string (&builder, 5, &value) == FALSE);
Packit b00eeb
	gck_builder_set_string (&builder, 5, "Hello");
Packit b00eeb
Packit b00eeb
	attr = gck_builder_find (&builder, ATTR_TYPE);
Packit b00eeb
	g_assert (attr != NULL);
Packit b00eeb
	g_assert (attr->type == ATTR_TYPE);
Packit b00eeb
	g_assert (attr->length == strlen ("My my"));
Packit b00eeb
	g_assert (memcmp (attr->value, "My my", attr->length) == 0);
Packit b00eeb
Packit b00eeb
	if (!gck_builder_find_string (&builder, 5, &value))
Packit b00eeb
		g_assert_not_reached ();
Packit b00eeb
	g_assert_cmpstr (value, ==, "Hello");
Packit b00eeb
	g_free (value);
Packit b00eeb
Packit b00eeb
	gck_builder_set_string (&builder, ATTR_TYPE, "a test string");
Packit b00eeb
	g_assert (attr->type == ATTR_TYPE);
Packit b00eeb
	g_assert (attr->length == strlen ("a test string"));
Packit b00eeb
	g_assert (memcmp (attr->value, "a test string", attr->length) == 0);
Packit b00eeb
Packit b00eeb
	attrs = gck_builder_end (&builder);
Packit b00eeb
	attr = gck_attributes_at (attrs, 0);
Packit b00eeb
	g_assert (attr != NULL);
Packit b00eeb
Packit b00eeb
	g_assert (attr->type == ATTR_TYPE);
Packit b00eeb
	g_assert (attr->length == strlen ("a test string"));
Packit b00eeb
	g_assert (memcmp (attr->value, "a test string", attr->length) == 0);
Packit b00eeb
Packit b00eeb
	if (!gck_attributes_find_string (attrs, ATTR_TYPE, &value))
Packit b00eeb
		g_assert_not_reached ();
Packit b00eeb
	g_assert_cmpstr ("a test string", ==, value);
Packit b00eeb
	g_free (value);
Packit b00eeb
Packit b00eeb
	value = gck_attribute_get_string (attr);
Packit b00eeb
	g_assert_cmpstr ("a test string", ==, value);
Packit b00eeb
	g_free (value);
Packit b00eeb
Packit b00eeb
	g_assert_cmpuint (gck_attributes_count (attrs), ==, 2);
Packit b00eeb
	gck_attributes_unref (attrs);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_build_string_null (void)
Packit b00eeb
{
Packit b00eeb
	GckBuilder builder = GCK_BUILDER_INIT;
Packit b00eeb
	GckAttributes *attrs;
Packit b00eeb
	const GckAttribute *attr;
Packit b00eeb
	gchar *value;
Packit b00eeb
Packit b00eeb
	gck_builder_add_string (&builder, ATTR_TYPE, NULL);
Packit b00eeb
Packit b00eeb
	g_assert (gck_builder_find_string (&builder, ATTR_TYPE, &value) == FALSE);
Packit b00eeb
Packit b00eeb
	attrs = gck_builder_end (&builder);
Packit b00eeb
	attr = gck_attributes_at (attrs, 0);
Packit b00eeb
	g_assert (attr->value == NULL);
Packit b00eeb
	g_assert (attr->length == 0);
Packit b00eeb
Packit b00eeb
	value = gck_attribute_get_string (attr);
Packit b00eeb
	g_assert (value == NULL);
Packit b00eeb
Packit b00eeb
	gck_attributes_unref (attrs);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_build_invalid (void)
Packit b00eeb
{
Packit b00eeb
	GckBuilder builder = GCK_BUILDER_INIT;
Packit b00eeb
	GckAttributes *attrs;
Packit b00eeb
	const GckAttribute *attr;
Packit b00eeb
Packit b00eeb
	gck_builder_add_invalid (&builder, ATTR_TYPE);
Packit b00eeb
	gck_builder_set_invalid (&builder, ATTR_TYPE);
Packit b00eeb
	gck_builder_set_invalid (&builder, 5);
Packit b00eeb
Packit b00eeb
	attrs = gck_builder_end (&builder);
Packit b00eeb
	attr = gck_attributes_at (attrs, 0);
Packit b00eeb
	g_assert (attr->type == ATTR_TYPE);
Packit b00eeb
	g_assert (attr->length == (gulong)-1);
Packit b00eeb
	g_assert (attr->value == NULL);
Packit b00eeb
Packit b00eeb
	g_assert (gck_attribute_is_invalid (attr));
Packit b00eeb
Packit b00eeb
	g_assert_cmpuint (gck_attributes_count (attrs), ==, 2);
Packit b00eeb
	gck_attributes_unref (attrs);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_build_empty (void)
Packit b00eeb
{
Packit b00eeb
	GckBuilder builder = GCK_BUILDER_INIT;
Packit b00eeb
	GckAttributes *attrs;
Packit b00eeb
	const GckAttribute *attr;
Packit b00eeb
Packit b00eeb
	gck_builder_add_empty (&builder, ATTR_TYPE);
Packit b00eeb
	gck_builder_set_empty (&builder, ATTR_TYPE);
Packit b00eeb
	gck_builder_set_empty (&builder, 5);
Packit b00eeb
Packit b00eeb
	attr = gck_builder_find (&builder, 5);
Packit b00eeb
	g_assert (attr->type == 5);
Packit b00eeb
	g_assert (attr->length == 0);
Packit b00eeb
	g_assert (attr->value == NULL);
Packit b00eeb
Packit b00eeb
	attrs = gck_builder_end (&builder);
Packit b00eeb
	attr = gck_attributes_at (attrs, 0);
Packit b00eeb
	g_assert (attr->type == ATTR_TYPE);
Packit b00eeb
	g_assert (attr->length == 0);
Packit b00eeb
	g_assert (attr->value == NULL);
Packit b00eeb
Packit b00eeb
	g_assert_cmpuint (gck_attributes_count (attrs), ==, 2);
Packit b00eeb
	gck_attributes_unref (attrs);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_builder_secure (void)
Packit b00eeb
{
Packit b00eeb
	GckAttributes *attrs;
Packit b00eeb
	GckBuilder builder;
Packit b00eeb
	const GckAttribute *attr;
Packit b00eeb
Packit b00eeb
	gck_builder_init_full (&builder, GCK_BUILDER_SECURE_MEMORY);
Packit b00eeb
Packit b00eeb
	gck_builder_add_boolean (&builder, 88, TRUE);
Packit b00eeb
	attrs = gck_builder_end (&builder);
Packit b00eeb
	attr = gck_attributes_at (attrs, 0);
Packit b00eeb
Packit b00eeb
	g_assert (egg_secure_check (attr->value));
Packit b00eeb
Packit b00eeb
	gck_attributes_unref (attrs);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_builder_copy (void)
Packit b00eeb
{
Packit b00eeb
	GckBuilder builder = GCK_BUILDER_INIT;
Packit b00eeb
	GckAttributes *attrs;
Packit b00eeb
	GckBuilder *copy;
Packit b00eeb
	const GckAttribute *attr;
Packit b00eeb
Packit b00eeb
	gck_builder_add_ulong (&builder, ATTR_TYPE, 88);
Packit b00eeb
	copy = gck_builder_copy (&builder);
Packit b00eeb
	gck_builder_clear (&builder);
Packit b00eeb
Packit b00eeb
	attrs = gck_builder_end (copy);
Packit b00eeb
	gck_builder_unref (copy);
Packit b00eeb
Packit b00eeb
	attr = gck_attributes_at (attrs, 0);
Packit b00eeb
	g_assert (gck_attribute_get_ulong (attr) == 88);
Packit b00eeb
	g_assert (attr->type == ATTR_TYPE);
Packit b00eeb
Packit b00eeb
	/* Should be able to copy null */
Packit b00eeb
	copy = gck_builder_copy (NULL);
Packit b00eeb
	g_assert (copy == NULL);
Packit b00eeb
Packit b00eeb
	gck_attributes_unref (attrs);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_builder_refs (void)
Packit b00eeb
{
Packit b00eeb
	GckBuilder *builder, *two;
Packit b00eeb
	gulong check;
Packit b00eeb
Packit b00eeb
	builder = gck_builder_new (GCK_BUILDER_NONE);
Packit b00eeb
	gck_builder_add_ulong (builder, 88, 99);
Packit b00eeb
Packit b00eeb
	two = gck_builder_ref (builder);
Packit b00eeb
Packit b00eeb
	g_assert (builder == two);
Packit b00eeb
Packit b00eeb
	if (!gck_builder_find_ulong (builder, 88, &check))
Packit b00eeb
		g_assert_not_reached ();
Packit b00eeb
	g_assert (check == 99);
Packit b00eeb
Packit b00eeb
	gck_builder_unref (builder);
Packit b00eeb
Packit b00eeb
	if (!gck_builder_find_ulong (two, 88, &check))
Packit b00eeb
		g_assert_not_reached ();
Packit b00eeb
	g_assert (check == 99);
Packit b00eeb
Packit b00eeb
	gck_builder_unref (two);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_builder_boxed (void)
Packit b00eeb
{
Packit b00eeb
	GckBuilder *builder, *two;
Packit b00eeb
	gulong check;
Packit b00eeb
Packit b00eeb
	builder = gck_builder_new (GCK_BUILDER_NONE);
Packit b00eeb
	gck_builder_add_ulong (builder, 88, 99);
Packit b00eeb
Packit b00eeb
	two = g_boxed_copy (GCK_TYPE_BUILDER, builder);
Packit b00eeb
Packit b00eeb
	g_assert (builder == two);
Packit b00eeb
Packit b00eeb
	if (!gck_builder_find_ulong (builder, 88, &check))
Packit b00eeb
		g_assert_not_reached ();
Packit b00eeb
	g_assert (check == 99);
Packit b00eeb
Packit b00eeb
	g_boxed_free (GCK_TYPE_BUILDER, builder);
Packit b00eeb
Packit b00eeb
	if (!gck_builder_find_ulong (two, 88, &check))
Packit b00eeb
		g_assert_not_reached ();
Packit b00eeb
	g_assert (check == 99);
Packit b00eeb
Packit b00eeb
	gck_builder_unref (two);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_builder_add_attr (void)
Packit b00eeb
{
Packit b00eeb
	GckBuilder bone = GCK_BUILDER_INIT;
Packit b00eeb
	GckBuilder btwo = GCK_BUILDER_INIT;
Packit b00eeb
	const GckAttribute *aone, *atwo;
Packit b00eeb
	GckAttributes *aones, *atwos;
Packit b00eeb
	gchar *value;
Packit b00eeb
Packit b00eeb
	gck_builder_add_string (&bone, ATTR_TYPE, "blah");
Packit b00eeb
	aones = gck_builder_end (&bone);
Packit b00eeb
	aone = gck_attributes_at (aones, 0);
Packit b00eeb
Packit b00eeb
	gck_builder_add_all (&btwo, aones);
Packit b00eeb
	atwos = gck_builder_end (&btwo);
Packit b00eeb
	atwo = gck_attributes_at (atwos, 0);
Packit b00eeb
Packit b00eeb
	/* Should be equal, and also share the values */
Packit b00eeb
	gck_attribute_equal (aone, atwo);
Packit b00eeb
	g_assert (aone->value == atwo->value);
Packit b00eeb
Packit b00eeb
	gck_attributes_unref (aones);
Packit b00eeb
Packit b00eeb
	value = gck_attribute_get_string (atwo);
Packit b00eeb
	g_assert_cmpstr (value, ==, "blah");
Packit b00eeb
	g_free (value);
Packit b00eeb
Packit b00eeb
	gck_attributes_unref (atwos);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_attribute_hash (void)
Packit b00eeb
{
Packit b00eeb
	guchar *data = (guchar *)"extra attribute";
Packit b00eeb
	GckAttribute one = { CKA_LABEL, (guchar *)"yay", 3 };
Packit b00eeb
	GckAttribute null = { CKA_LABEL, (guchar *)NULL, 3 };
Packit b00eeb
	GckAttribute zero = { CKA_LABEL, (guchar *)NULL, 0 };
Packit b00eeb
	GckAttribute two = { CKA_VALUE, (guchar *)"yay", 3 };
Packit b00eeb
	GckAttribute other = { CKA_VALUE, data, 5 };
Packit b00eeb
	GckAttribute overflow = { CKA_VALUE, data, 5 };
Packit b00eeb
	GckAttribute content = { CKA_VALUE, (guchar *)"conte", 5 };
Packit b00eeb
	guint hash;
Packit b00eeb
Packit b00eeb
	hash = gck_attribute_hash (&one);
Packit b00eeb
	g_assert_cmpuint (hash, !=, 0);
Packit b00eeb
Packit b00eeb
	g_assert_cmpuint (gck_attribute_hash (&one), ==, hash);
Packit b00eeb
	g_assert_cmpuint (gck_attribute_hash (&two), !=, hash);
Packit b00eeb
	g_assert_cmpuint (gck_attribute_hash (&other), !=, hash);
Packit b00eeb
	g_assert_cmpuint (gck_attribute_hash (&overflow), !=, hash);
Packit b00eeb
	g_assert_cmpuint (gck_attribute_hash (&null), !=, hash);
Packit b00eeb
	g_assert_cmpuint (gck_attribute_hash (&zero), !=, hash);
Packit b00eeb
	g_assert_cmpuint (gck_attribute_hash (&content), !=, hash);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_attributes_refs (void)
Packit b00eeb
{
Packit b00eeb
	GckBuilder builder = GCK_BUILDER_INIT;
Packit b00eeb
	GckAttributes *attrs;
Packit b00eeb
Packit b00eeb
	attrs = gck_builder_end (&builder);
Packit b00eeb
	g_assert (attrs != NULL);
Packit b00eeb
	g_assert (gck_attributes_count (attrs) == 0);
Packit b00eeb
Packit b00eeb
	g_assert (gck_attributes_ref (attrs) == attrs);
Packit b00eeb
	gck_attributes_unref (attrs);
Packit b00eeb
Packit b00eeb
	gck_attributes_unref (attrs);
Packit b00eeb
Packit b00eeb
	/* Can unref NULL */
Packit b00eeb
	gck_attributes_unref (NULL);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_attributes_contents (GckAttributes *attrs,
Packit b00eeb
                          gboolean extras,
Packit b00eeb
                          gint count)
Packit b00eeb
{
Packit b00eeb
	const GckAttribute *attr;
Packit b00eeb
	gchar *value;
Packit b00eeb
	GDate date, *check;
Packit b00eeb
Packit b00eeb
	g_assert (attrs != NULL);
Packit b00eeb
	if (count < 0)
Packit b00eeb
		count = extras ? 7 : 5;
Packit b00eeb
	g_assert_cmpuint (gck_attributes_count (attrs), ==, count);
Packit b00eeb
Packit b00eeb
	attr = gck_attributes_at (attrs, 0);
Packit b00eeb
	g_assert (attr->type == 0);
Packit b00eeb
	g_assert (gck_attribute_get_boolean (attr) == TRUE);
Packit b00eeb
Packit b00eeb
	attr = gck_attributes_at (attrs, 1);
Packit b00eeb
	g_assert (attr->type == 101);
Packit b00eeb
	gck_assert_cmpulong (gck_attribute_get_ulong (attr), ==, 888);
Packit b00eeb
Packit b00eeb
	attr = gck_attributes_at (attrs, 2);
Packit b00eeb
	g_assert (attr->type == 202);
Packit b00eeb
	value = gck_attribute_get_string (attr);
Packit b00eeb
	g_assert (strcmp (value, "string") == 0);
Packit b00eeb
	g_free (value);
Packit b00eeb
Packit b00eeb
	attr = gck_attributes_at (attrs, 3);
Packit b00eeb
	g_assert (attr->type == 303);
Packit b00eeb
	check = g_date_new_dmy (11, 12, 2008);
Packit b00eeb
	gck_attribute_get_date (attr, &date);
Packit b00eeb
	g_assert (g_date_compare (&date, check) == 0);
Packit b00eeb
	g_date_free (check);
Packit b00eeb
Packit b00eeb
	attr = gck_attributes_at (attrs, 4);
Packit b00eeb
	g_assert (attr->type == 404);
Packit b00eeb
	g_assert (attr->length == N_ATTR_DATA);
Packit b00eeb
	g_assert (memcmp (attr->value, ATTR_DATA, N_ATTR_DATA) == 0);
Packit b00eeb
Packit b00eeb
	if (!extras)
Packit b00eeb
		return;
Packit b00eeb
Packit b00eeb
	attr = gck_attributes_at (attrs, 5);
Packit b00eeb
	g_assert (attr->type == 505);
Packit b00eeb
	g_assert (attr->length == (gulong)-1);
Packit b00eeb
	g_assert (attr->value == NULL);
Packit b00eeb
	g_assert (gck_attribute_is_invalid (attr));
Packit b00eeb
Packit b00eeb
	attr = gck_attributes_at (attrs, 6);
Packit b00eeb
	g_assert (attr->type == 606);
Packit b00eeb
	g_assert (attr->length == 0);
Packit b00eeb
	g_assert (attr->value == NULL);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_attributes_new_empty (void)
Packit b00eeb
{
Packit b00eeb
	GckAttributes *attrs;
Packit b00eeb
	const GckAttribute *attr;
Packit b00eeb
Packit b00eeb
	attrs = gck_attributes_new_empty (GCK_INVALID);
Packit b00eeb
	g_assert_cmpuint (gck_attributes_count (attrs), ==, 0);
Packit b00eeb
	gck_attributes_unref (attrs);
Packit b00eeb
Packit b00eeb
	attrs = gck_attributes_new_empty (CKA_ID, CKA_LABEL, GCK_INVALID);
Packit b00eeb
	g_assert_cmpuint (gck_attributes_count (attrs), ==, 2);
Packit b00eeb
	attr = gck_attributes_at (attrs, 0);
Packit b00eeb
	g_assert (attr->type == CKA_ID);
Packit b00eeb
	g_assert (attr->length == 0);
Packit b00eeb
	g_assert (attr->value == NULL);
Packit b00eeb
	attr = gck_attributes_at (attrs, 1);
Packit b00eeb
	g_assert (attr->type == CKA_LABEL);
Packit b00eeb
	g_assert (attr->length == 0);
Packit b00eeb
	g_assert (attr->value == NULL);
Packit b00eeb
	gck_attributes_unref (attrs);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_attributes_empty (void)
Packit b00eeb
{
Packit b00eeb
	GckBuilder builder = GCK_BUILDER_INIT;
Packit b00eeb
	GckAttributes *attrs;
Packit b00eeb
	const GckAttribute *attr;
Packit b00eeb
	guint i;
Packit b00eeb
Packit b00eeb
	gck_builder_add_empty (&builder, 101UL);
Packit b00eeb
	gck_builder_add_empty (&builder, 202UL);
Packit b00eeb
	gck_builder_add_empty (&builder, 303UL);
Packit b00eeb
	gck_builder_add_empty (&builder, 404UL);
Packit b00eeb
	attrs = gck_builder_end (&builder);
Packit b00eeb
Packit b00eeb
	g_assert_cmpuint (gck_attributes_count (attrs), ==, 4);
Packit b00eeb
	for (i = 0; i < gck_attributes_count (attrs); ++i) {
Packit b00eeb
		attr = gck_attributes_at (attrs, i);
Packit b00eeb
		g_assert (attr->type == ((i + 1) * 100) + i + 1);
Packit b00eeb
		g_assert (attr->value == NULL);
Packit b00eeb
		g_assert (attr->length == 0);
Packit b00eeb
	}
Packit b00eeb
Packit b00eeb
	gck_attributes_unref (attrs);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_builder_add_from (void)
Packit b00eeb
{
Packit b00eeb
	GckBuilder builder = GCK_BUILDER_INIT;
Packit b00eeb
	GckBuilder two = GCK_BUILDER_INIT;
Packit b00eeb
	GckAttributes *attrs;
Packit b00eeb
	guint i;
Packit b00eeb
Packit b00eeb
	builder_add_fixtures (&builder, 0);
Packit b00eeb
	attrs = gck_builder_end (&builder);
Packit b00eeb
Packit b00eeb
	for (i = 0; i < gck_attributes_count (attrs); i++)
Packit b00eeb
		gck_builder_add_attribute (&two, gck_attributes_at (attrs, i));
Packit b00eeb
Packit b00eeb
	gck_attributes_unref (attrs);
Packit b00eeb
	attrs = gck_builder_end (&two);
Packit b00eeb
Packit b00eeb
	test_attributes_contents (attrs, TRUE, -1);
Packit b00eeb
	gck_attributes_unref (attrs);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_builder_add_all (void)
Packit b00eeb
{
Packit b00eeb
	GckBuilder builder = GCK_BUILDER_INIT;
Packit b00eeb
	GckBuilder two = GCK_BUILDER_INIT;
Packit b00eeb
	GckAttributes *attrs;
Packit b00eeb
Packit b00eeb
	builder_add_fixtures (&builder, 0);
Packit b00eeb
	attrs = gck_builder_end (&builder);
Packit b00eeb
Packit b00eeb
	gck_builder_add_all (&two, attrs);
Packit b00eeb
	gck_attributes_unref (attrs);
Packit b00eeb
	attrs = gck_builder_end (&two);
Packit b00eeb
Packit b00eeb
	test_attributes_contents (attrs, TRUE, -1);
Packit b00eeb
	gck_attributes_unref (attrs);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_builder_set_all (void)
Packit b00eeb
{
Packit b00eeb
	GckBuilder builder = GCK_BUILDER_INIT;
Packit b00eeb
	GckBuilder two = GCK_BUILDER_INIT;
Packit b00eeb
	GckAttributes *attrs;
Packit b00eeb
Packit b00eeb
	builder_add_fixtures (&builder, 5);
Packit b00eeb
	builder_add_fixtures (&two, 0);
Packit b00eeb
	attrs = gck_builder_end (&two);
Packit b00eeb
	gck_builder_set_all (&builder, attrs);
Packit b00eeb
	gck_attributes_unref (attrs);
Packit b00eeb
	attrs = gck_builder_end (&builder);
Packit b00eeb
Packit b00eeb
	test_attributes_contents (attrs, TRUE, -1);
Packit b00eeb
	gck_attributes_unref (attrs);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_builder_set_blank (void)
Packit b00eeb
{
Packit b00eeb
	GckBuilder builder;
Packit b00eeb
	gboolean value;
Packit b00eeb
Packit b00eeb
	gck_builder_init (&builder);
Packit b00eeb
	gck_builder_set_boolean (&builder, 5, TRUE);
Packit b00eeb
	if (!gck_builder_find_boolean (&builder, 5, &value))
Packit b00eeb
		g_assert_not_reached ();
Packit b00eeb
	g_assert (value == TRUE);
Packit b00eeb
	gck_builder_clear (&builder);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_builder_add_only (void)
Packit b00eeb
{
Packit b00eeb
	GckBuilder builder = GCK_BUILDER_INIT;
Packit b00eeb
	GckBuilder two = GCK_BUILDER_INIT;
Packit b00eeb
	GckAttributes *attrs;
Packit b00eeb
Packit b00eeb
	builder_add_fixtures (&builder, 0);
Packit b00eeb
	attrs = gck_builder_end (&builder);
Packit b00eeb
Packit b00eeb
	gck_builder_add_only (&two, attrs, 0UL, 202UL, 404UL, 606UL, GCK_INVALID);
Packit b00eeb
	gck_attributes_unref (attrs);
Packit b00eeb
	attrs = gck_builder_end (&two);
Packit b00eeb
Packit b00eeb
	g_assert (gck_attributes_find (attrs, 0UL) != NULL);
Packit b00eeb
	g_assert (gck_attributes_find (attrs, 202UL) != NULL);
Packit b00eeb
	g_assert (gck_attributes_find (attrs, 404UL) != NULL);
Packit b00eeb
	g_assert (gck_attributes_find (attrs, 606UL) != NULL);
Packit b00eeb
Packit b00eeb
	g_assert (gck_attributes_find (attrs, 101UL) == NULL);
Packit b00eeb
	g_assert (gck_attributes_find (attrs, 303UL) == NULL);
Packit b00eeb
	g_assert (gck_attributes_find (attrs, 505UL) == NULL);
Packit b00eeb
Packit b00eeb
	gck_attributes_unref (attrs);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_builder_add_except (void)
Packit b00eeb
{
Packit b00eeb
	GckBuilder builder = GCK_BUILDER_INIT;
Packit b00eeb
	GckBuilder two = GCK_BUILDER_INIT;
Packit b00eeb
	GckAttributes *attrs;
Packit b00eeb
Packit b00eeb
	builder_add_fixtures (&builder, 0);
Packit b00eeb
	attrs = gck_builder_end (&builder);
Packit b00eeb
Packit b00eeb
	gck_builder_add_except (&two, attrs, 0UL, 202UL, 404UL, 606UL, GCK_INVALID);
Packit b00eeb
	gck_attributes_unref (attrs);
Packit b00eeb
	attrs = gck_builder_end (&two);
Packit b00eeb
Packit b00eeb
	g_assert (gck_attributes_find (attrs, 0UL) == NULL);
Packit b00eeb
	g_assert (gck_attributes_find (attrs, 202UL) == NULL);
Packit b00eeb
	g_assert (gck_attributes_find (attrs, 404UL) == NULL);
Packit b00eeb
	g_assert (gck_attributes_find (attrs, 606UL) == NULL);
Packit b00eeb
Packit b00eeb
	g_assert (gck_attributes_find (attrs, 101UL) != NULL);
Packit b00eeb
	g_assert (gck_attributes_find (attrs, 303UL) != NULL);
Packit b00eeb
	g_assert (gck_attributes_find (attrs, 505UL) != NULL);
Packit b00eeb
Packit b00eeb
	gck_attributes_unref (attrs);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_builder_add_only_and_except (void)
Packit b00eeb
{
Packit b00eeb
	GckBuilder builder = GCK_BUILDER_INIT;
Packit b00eeb
	GckBuilder two = GCK_BUILDER_INIT;
Packit b00eeb
	GckAttributes *attrs;
Packit b00eeb
Packit b00eeb
	builder_add_fixtures (&builder, 0);
Packit b00eeb
	attrs = gck_builder_end (&builder);
Packit b00eeb
Packit b00eeb
	gck_builder_add_only (&two, attrs, 0UL, 101UL, 202UL, 303UL, GCK_INVALID);
Packit b00eeb
	gck_builder_add_except (&two, attrs, 0UL, 101UL, 202UL, 303UL, GCK_INVALID);
Packit b00eeb
	gck_attributes_unref (attrs);
Packit b00eeb
	attrs = gck_builder_end (&two);
Packit b00eeb
Packit b00eeb
	test_attributes_contents (attrs, TRUE, -1);
Packit b00eeb
	gck_attributes_unref (attrs);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_find_attributes (void)
Packit b00eeb
{
Packit b00eeb
	GckBuilder builder = GCK_BUILDER_INIT;
Packit b00eeb
	GDate check, *date = g_date_new_dmy (13, 12, 2008);
Packit b00eeb
	GckAttributes *attrs;
Packit b00eeb
	const GckAttribute *attr;
Packit b00eeb
	gboolean bvalue, ret;
Packit b00eeb
	gulong uvalue;
Packit b00eeb
	gchar *svalue;
Packit b00eeb
Packit b00eeb
	gck_builder_add_boolean (&builder, 0UL, TRUE);
Packit b00eeb
	gck_builder_add_ulong (&builder, 101UL, 888UL);
Packit b00eeb
	gck_builder_add_string (&builder, 202UL, "string");
Packit b00eeb
	gck_builder_add_date (&builder, 303UL, date);
Packit b00eeb
	gck_builder_add_data (&builder, 404UL, (const guchar *)ATTR_DATA, N_ATTR_DATA);
Packit b00eeb
	attrs = gck_builder_end (&builder);
Packit b00eeb
Packit b00eeb
	attr = gck_attributes_find (attrs, 404);
Packit b00eeb
	g_assert (attr != NULL);
Packit b00eeb
	g_assert (attr->length == N_ATTR_DATA);
Packit b00eeb
	g_assert (memcmp (attr->value, ATTR_DATA, N_ATTR_DATA) == 0);
Packit b00eeb
Packit b00eeb
	ret = gck_attributes_find_boolean (attrs, 0UL, &bvalue);
Packit b00eeb
	g_assert (ret == TRUE);
Packit b00eeb
	g_assert (bvalue == TRUE);
Packit b00eeb
Packit b00eeb
	ret = gck_attributes_find_ulong (attrs, 101UL, &uvalue);
Packit b00eeb
	g_assert (ret == TRUE);
Packit b00eeb
	g_assert (uvalue == 888);
Packit b00eeb
Packit b00eeb
	ret = gck_attributes_find_string (attrs, 202UL, &svalue);
Packit b00eeb
	g_assert (ret == TRUE);
Packit b00eeb
	g_assert (svalue != NULL);
Packit b00eeb
	g_assert (strcmp (svalue, "string") == 0);
Packit b00eeb
	g_free (svalue);
Packit b00eeb
Packit b00eeb
	ret = gck_attributes_find_date (attrs, 303UL, &check);
Packit b00eeb
	g_assert (ret == TRUE);
Packit b00eeb
	g_assert (g_date_compare (date, &check) == 0);
Packit b00eeb
Packit b00eeb
	gck_attributes_unref (attrs);
Packit b00eeb
	g_date_free (date);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
int
Packit b00eeb
main (int argc, char **argv)
Packit b00eeb
{
Packit b00eeb
	g_test_init (&argc, &argv, NULL);
Packit b00eeb
Packit b00eeb
	g_test_add_func ("/gck/value/to_boolean", test_value_to_boolean);
Packit b00eeb
	g_test_add_func ("/gck/value/to_ulong", test_value_to_ulong);
Packit b00eeb
	g_test_add_func ("/gck/attribute/init_memory", test_init_memory);
Packit b00eeb
	g_test_add_func ("/gck/attribute/init_boolean", test_init_boolean);
Packit b00eeb
	g_test_add_func ("/gck/attribute/init_date", test_init_date);
Packit b00eeb
	g_test_add_func ("/gck/attribute/init_ulong", test_init_ulong);
Packit b00eeb
	g_test_add_func ("/gck/attribute/init_string", test_init_string);
Packit b00eeb
	g_test_add_func ("/gck/attribute/init_invalid", test_init_invalid);
Packit b00eeb
	g_test_add_func ("/gck/attribute/init_empty", test_init_empty);
Packit b00eeb
	g_test_add_func ("/gck/attribute/new_memory", test_new_memory);
Packit b00eeb
	g_test_add_func ("/gck/attribute/new_boolean", test_new_boolean);
Packit b00eeb
	g_test_add_func ("/gck/attribute/new_date", test_new_date);
Packit b00eeb
	g_test_add_func ("/gck/attribute/new_ulong", test_new_ulong);
Packit b00eeb
	g_test_add_func ("/gck/attribute/new_string", test_new_string);
Packit b00eeb
	g_test_add_func ("/gck/attribute/new_invalid", test_new_invalid);
Packit b00eeb
	g_test_add_func ("/gck/attribute/new_empty", test_new_empty);
Packit b00eeb
	g_test_add_func ("/gck/attribute/get_boolean", test_get_boolean);
Packit b00eeb
	g_test_add_func ("/gck/attribute/get_date", test_get_date);
Packit b00eeb
	g_test_add_func ("/gck/attribute/get_ulong", test_get_ulong);
Packit b00eeb
	g_test_add_func ("/gck/attribute/get_string", test_get_string);
Packit b00eeb
	g_test_add_func ("/gck/attribute/dup_attribute", test_dup_attribute);
Packit b00eeb
	g_test_add_func ("/gck/attribute/copy_attribute", test_copy_attribute);
Packit b00eeb
	g_test_add_func ("/gck/attribute/hash", test_attribute_hash);
Packit b00eeb
	g_test_add_func ("/gck/builder/blank", test_builder_blank);
Packit b00eeb
	g_test_add_func ("/gck/builder/data", test_build_data);
Packit b00eeb
	g_test_add_func ("/gck/builder/data-invalid", test_build_data_invalid);
Packit b00eeb
	g_test_add_func ("/gck/builder/data-secure", test_build_data_secure);
Packit b00eeb
	g_test_add_func ("/gck/builder/take", test_build_take);
Packit b00eeb
	g_test_add_func ("/gck/builder/take-invalid", test_build_take_invalid);
Packit b00eeb
	g_test_add_func ("/gck/builder/take-secure", test_build_take_secure);
Packit b00eeb
	g_test_add_func ("/gck/builder/boolean", test_build_boolean);
Packit b00eeb
	g_test_add_func ("/gck/builder/date", test_build_date);
Packit b00eeb
	g_test_add_func ("/gck/builder/ulong", test_build_ulong);
Packit b00eeb
	g_test_add_func ("/gck/builder/string", test_build_string);
Packit b00eeb
	g_test_add_func ("/gck/builder/string-null", test_build_string_null);
Packit b00eeb
	g_test_add_func ("/gck/builder/invalid", test_build_invalid);
Packit b00eeb
	g_test_add_func ("/gck/builder/empty", test_build_empty);
Packit b00eeb
	g_test_add_func ("/gck/builder/secure", test_builder_secure);
Packit b00eeb
	g_test_add_func ("/gck/builder/copy", test_builder_copy);
Packit b00eeb
	g_test_add_func ("/gck/builder/refs", test_builder_refs);
Packit b00eeb
	g_test_add_func ("/gck/builder/boxed", test_builder_boxed);
Packit b00eeb
	g_test_add_func ("/gck/builder/add-attr", test_builder_add_attr);
Packit b00eeb
	g_test_add_func ("/gck/builder/add-all", test_builder_add_all);
Packit b00eeb
	g_test_add_func ("/gck/builder/add-from", test_builder_add_from);
Packit b00eeb
	g_test_add_func ("/gck/builder/add-only", test_builder_add_only);
Packit b00eeb
	g_test_add_func ("/gck/builder/add-except", test_builder_add_except);
Packit b00eeb
	g_test_add_func ("/gck/builder/add-only-and-except", test_builder_add_only_and_except);
Packit b00eeb
	g_test_add_func ("/gck/builder/set-all", test_builder_set_all);
Packit b00eeb
	g_test_add_func ("/gck/builder/set-blank", test_builder_set_blank);
Packit b00eeb
	g_test_add_func ("/gck/attributes/refs", test_attributes_refs);
Packit b00eeb
	g_test_add_func ("/gck/attributes/new-empty", test_attributes_new_empty);
Packit b00eeb
	g_test_add_func ("/gck/attributes/empty", test_attributes_empty);
Packit b00eeb
	g_test_add_func ("/gck/attributes/find_attributes", test_find_attributes);
Packit b00eeb
Packit b00eeb
	return g_test_run ();
Packit b00eeb
}