Blame gck/test-gck-uri.c

Packit b00eeb
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
Packit b00eeb
/* test-gck-uri.c: Test routines for PKCS#11 URIs
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 "gck/gck.h"
Packit b00eeb
#include "gck/gck-private.h"
Packit b00eeb
#include "gck/gck-test.h"
Packit b00eeb
Packit b00eeb
#include <glib.h>
Packit b00eeb
Packit b00eeb
#include <errno.h>
Packit b00eeb
#include <string.h>
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_parse (void)
Packit b00eeb
{
Packit b00eeb
	GError *error = NULL;
Packit b00eeb
	GckUriData *uri_data;
Packit b00eeb
Packit b00eeb
	uri_data = gck_uri_parse ("pkcs11:", GCK_URI_FOR_MODULE, &error);
Packit b00eeb
	g_assert (uri_data != NULL);
Packit b00eeb
	g_assert_no_error (error);
Packit b00eeb
Packit b00eeb
	g_assert (uri_data->attributes == NULL);
Packit b00eeb
	g_assert (uri_data->token_info == NULL);
Packit b00eeb
Packit b00eeb
	g_assert (uri_data->module_info != NULL);
Packit b00eeb
	g_assert (uri_data->module_info->library_description == NULL);
Packit b00eeb
	g_assert (uri_data->module_info->manufacturer_id == NULL);
Packit b00eeb
Packit b00eeb
	gck_uri_data_free (uri_data);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_parse_bad_scheme (void)
Packit b00eeb
{
Packit b00eeb
	GError *error = NULL;
Packit b00eeb
	GckUriData *uri_data;
Packit b00eeb
Packit b00eeb
	uri_data = gck_uri_parse ("http:\\example.com\test", GCK_URI_FOR_ANY, &error);
Packit b00eeb
	g_assert (uri_data == NULL);
Packit b00eeb
	g_assert_error (error, GCK_URI_ERROR, GCK_URI_BAD_PREFIX);
Packit b00eeb
	g_error_free (error);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_parse_with_label (void)
Packit b00eeb
{
Packit b00eeb
	GError *error = NULL;
Packit b00eeb
	GckUriData *uri_data;
Packit b00eeb
	gchar *value;
Packit b00eeb
Packit b00eeb
	uri_data = gck_uri_parse ("pkcs11:object=Test%20Label", GCK_URI_FOR_ANY, &error);
Packit b00eeb
	g_assert (uri_data != NULL);
Packit b00eeb
	g_assert (uri_data->attributes != NULL);
Packit b00eeb
Packit b00eeb
	if (!gck_attributes_find_string (uri_data->attributes, CKA_LABEL, &value))
Packit b00eeb
		g_assert_not_reached ();
Packit b00eeb
Packit b00eeb
	g_assert_cmpstr (value, ==, "Test Label");
Packit b00eeb
	g_free (value);
Packit b00eeb
Packit b00eeb
	gck_uri_data_free (uri_data);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_parse_with_label_and_klass (void)
Packit b00eeb
{
Packit b00eeb
	GError *error = NULL;
Packit b00eeb
	GckUriData *uri_data;
Packit b00eeb
	gchar *value;
Packit b00eeb
	gulong klass;
Packit b00eeb
Packit b00eeb
	uri_data = gck_uri_parse ("pkcs11:object=Test%20Label;objecttype=cert", GCK_URI_FOR_ANY, &error);
Packit b00eeb
	g_assert (uri_data);
Packit b00eeb
	g_assert (uri_data->attributes);
Packit b00eeb
Packit b00eeb
	if (!gck_attributes_find_string (uri_data->attributes, CKA_LABEL, &value))
Packit b00eeb
		g_assert_not_reached ();
Packit b00eeb
Packit b00eeb
	if (!gck_attributes_find_ulong (uri_data->attributes, CKA_CLASS, &klass))
Packit b00eeb
		g_assert_not_reached ();
Packit b00eeb
Packit b00eeb
	g_assert_cmpstr (value, ==, "Test Label");
Packit b00eeb
	g_assert (klass == CKO_CERTIFICATE);
Packit b00eeb
	g_free (value);
Packit b00eeb
Packit b00eeb
	gck_uri_data_free (uri_data);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_parse_with_id (void)
Packit b00eeb
{
Packit b00eeb
	GError *error = NULL;
Packit b00eeb
	const GckAttribute *attr;
Packit b00eeb
	GckUriData *uri_data;
Packit b00eeb
Packit b00eeb
	uri_data = gck_uri_parse ("pkcs11:id=%54%45%53%54%00", GCK_URI_FOR_OBJECT, &error);
Packit b00eeb
	g_assert (uri_data != NULL);
Packit b00eeb
	g_assert (uri_data->attributes != NULL);
Packit b00eeb
Packit b00eeb
	attr = gck_attributes_find (uri_data->attributes, CKA_ID);
Packit b00eeb
	g_assert (attr);
Packit b00eeb
	g_assert (attr->value);
Packit b00eeb
	g_assert (attr->length == 5);
Packit b00eeb
	g_assert (memcmp (attr->value, "TEST", 5) == 0);
Packit b00eeb
Packit b00eeb
	gck_uri_data_free (uri_data);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_parse_with_bad_string_encoding (void)
Packit b00eeb
{
Packit b00eeb
	GError *error = NULL;
Packit b00eeb
	GckUriData *uri_data;
Packit b00eeb
Packit b00eeb
	uri_data = gck_uri_parse ("pkcs11:object=Test%", GCK_URI_FOR_OBJECT, &error);
Packit b00eeb
	g_assert (uri_data == NULL);
Packit b00eeb
	g_assert_error (error, GCK_URI_ERROR, GCK_URI_BAD_ENCODING);
Packit b00eeb
	g_error_free (error);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_parse_with_bad_binary_encoding (void)
Packit b00eeb
{
Packit b00eeb
	GError *error = NULL;
Packit b00eeb
	GckUriData *uri_data;
Packit b00eeb
	uri_data = gck_uri_parse ("pkcs11:id=%%", GCK_URI_FOR_ANY, &error);
Packit b00eeb
	g_assert (!uri_data);
Packit b00eeb
	g_assert_error (error, GCK_URI_ERROR, GCK_URI_BAD_ENCODING);
Packit b00eeb
	g_error_free (error);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_parse_with_token (void)
Packit b00eeb
{
Packit b00eeb
	GError *error = NULL;
Packit b00eeb
	GckUriData *uri_data = NULL;
Packit b00eeb
Packit b00eeb
	uri_data = gck_uri_parse ("pkcs11:token=Token%20Label;serial=3333;model=Deluxe;manufacturer=Me",
Packit b00eeb
	                          GCK_URI_FOR_TOKEN, &error);
Packit b00eeb
Packit b00eeb
	g_assert (uri_data);
Packit b00eeb
	g_assert (uri_data->token_info);
Packit b00eeb
	g_assert_cmpstr (uri_data->token_info->label, ==, "Token Label");
Packit b00eeb
	g_assert_cmpstr (uri_data->token_info->serial_number, ==, "3333");
Packit b00eeb
	g_assert_cmpstr (uri_data->token_info->model, ==, "Deluxe");
Packit b00eeb
	g_assert_cmpstr (uri_data->token_info->manufacturer_id, ==, "Me");
Packit b00eeb
	gck_uri_data_free (uri_data);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_parse_with_token_bad_encoding (void)
Packit b00eeb
{
Packit b00eeb
	GError *error = NULL;
Packit b00eeb
	GckUriData *uri_data;
Packit b00eeb
Packit b00eeb
	uri_data = gck_uri_parse ("pkcs11:token=Token%", GCK_URI_FOR_TOKEN, &error);
Packit b00eeb
	g_assert (!uri_data);
Packit b00eeb
	g_assert_error (error, GCK_URI_ERROR, GCK_URI_BAD_ENCODING);
Packit b00eeb
	g_error_free (error);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_parse_with_bad_syntax (void)
Packit b00eeb
{
Packit b00eeb
	GError *error = NULL;
Packit b00eeb
	GckUriData *uri_data;
Packit b00eeb
Packit b00eeb
	uri_data = gck_uri_parse ("pkcs11:token", GCK_URI_FOR_ANY, &error);
Packit b00eeb
	g_assert (uri_data == NULL);
Packit b00eeb
	g_assert (g_error_matches (error, GCK_URI_ERROR, GCK_URI_BAD_SYNTAX));
Packit b00eeb
	g_error_free (error);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_parse_with_library (void)
Packit b00eeb
{
Packit b00eeb
	GError *error = NULL;
Packit b00eeb
	GckUriData *uri_data = NULL;
Packit b00eeb
Packit b00eeb
	uri_data = gck_uri_parse ("pkcs11:library-description=The%20Library;library-manufacturer=Me",
Packit b00eeb
	                          GCK_URI_FOR_MODULE, &error);
Packit b00eeb
Packit b00eeb
	g_assert (uri_data);
Packit b00eeb
	g_assert (uri_data->module_info);
Packit b00eeb
	g_assert_cmpstr (uri_data->module_info->manufacturer_id, ==, "Me");
Packit b00eeb
	g_assert_cmpstr (uri_data->module_info->library_description, ==, "The Library");
Packit b00eeb
	gck_uri_data_free (uri_data);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_parse_with_library_bad_encoding (void)
Packit b00eeb
{
Packit b00eeb
	GError *error = NULL;
Packit b00eeb
	GckUriData *uri_data;
Packit b00eeb
Packit b00eeb
	uri_data = gck_uri_parse ("pkcs11:library-description=Library%", GCK_URI_FOR_MODULE, &error);
Packit b00eeb
	g_assert (!uri_data);
Packit b00eeb
	g_assert_error (error, GCK_URI_ERROR, GCK_URI_BAD_ENCODING);
Packit b00eeb
	g_error_free (error);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_build_empty (void)
Packit b00eeb
{
Packit b00eeb
	GckUriData uri_data;
Packit b00eeb
	gchar *uri;
Packit b00eeb
Packit b00eeb
	memset (&uri_data, 0, sizeof (uri_data));
Packit b00eeb
	uri = gck_uri_build (&uri_data, 0);
Packit b00eeb
	g_assert_cmpstr (uri, ==, "pkcs11:");
Packit b00eeb
	g_free (uri);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_build_with_token_info (void)
Packit b00eeb
{
Packit b00eeb
	gchar *uri = NULL;
Packit b00eeb
	GckUriData uri_data;
Packit b00eeb
	GckUriData *check;
Packit b00eeb
Packit b00eeb
	memset (&uri_data, 0, sizeof (uri_data));
Packit b00eeb
	uri_data.token_info = g_new0 (GckTokenInfo, 1);
Packit b00eeb
	uri_data.token_info->label = g_strdup ("The Label");
Packit b00eeb
	uri_data.token_info->serial_number = g_strdup ("44444");
Packit b00eeb
	uri_data.token_info->manufacturer_id = g_strdup ("Me");
Packit b00eeb
	uri_data.token_info->model = g_strdup ("Deluxe");
Packit b00eeb
Packit b00eeb
	uri = gck_uri_build (&uri_data, GCK_URI_FOR_TOKEN);
Packit b00eeb
	g_assert (uri);
Packit b00eeb
Packit b00eeb
	check = gck_uri_parse (uri, GCK_URI_FOR_TOKEN, NULL);
Packit b00eeb
	g_assert (check);
Packit b00eeb
	g_assert (check->token_info);
Packit b00eeb
Packit b00eeb
	g_assert (_gck_token_info_match (uri_data.token_info, check->token_info));
Packit b00eeb
Packit b00eeb
	gck_token_info_free (uri_data.token_info);
Packit b00eeb
	gck_uri_data_free (check);
Packit b00eeb
Packit b00eeb
	g_assert (g_str_has_prefix (uri, "pkcs11:"));
Packit b00eeb
	g_assert (strstr (uri, "token=The%20Label"));
Packit b00eeb
	g_assert (strstr (uri, "serial=44444"));
Packit b00eeb
	g_assert (strstr (uri, "manufacturer=Me"));
Packit b00eeb
	g_assert (strstr (uri, "model=Deluxe"));
Packit b00eeb
Packit b00eeb
	g_free (uri);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_build_with_token_null_info (void)
Packit b00eeb
{
Packit b00eeb
	gchar *uri = NULL;
Packit b00eeb
	GckUriData uri_data;
Packit b00eeb
Packit b00eeb
	memset (&uri_data, 0, sizeof (uri_data));
Packit b00eeb
	uri_data.token_info = g_new0 (GckTokenInfo, 1);
Packit b00eeb
	uri_data.token_info->label = g_strdup ("The Label");
Packit b00eeb
Packit b00eeb
	uri = gck_uri_build (&uri_data, GCK_URI_FOR_TOKEN);
Packit b00eeb
	g_assert (uri);
Packit b00eeb
Packit b00eeb
	g_assert (g_str_has_prefix (uri, "pkcs11:"));
Packit b00eeb
	g_assert (strstr (uri, "token=The%20Label"));
Packit b00eeb
	g_assert (!strstr (uri, "serial="));
Packit b00eeb
Packit b00eeb
	gck_token_info_free (uri_data.token_info);
Packit b00eeb
	g_free (uri);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_build_with_token_empty_info (void)
Packit b00eeb
{
Packit b00eeb
	gchar *uri = NULL;
Packit b00eeb
	GckUriData uri_data;
Packit b00eeb
Packit b00eeb
	memset (&uri_data, 0, sizeof (uri_data));
Packit b00eeb
	uri_data.token_info = g_new0 (GckTokenInfo, 1);
Packit b00eeb
	uri_data.token_info->label = g_strdup ("The Label");
Packit b00eeb
	uri_data.token_info->serial_number = g_strdup ("");
Packit b00eeb
Packit b00eeb
	uri = gck_uri_build (&uri_data, GCK_URI_FOR_TOKEN);
Packit b00eeb
	g_assert (uri);
Packit b00eeb
Packit b00eeb
	g_assert (g_str_has_prefix (uri, "pkcs11:"));
Packit b00eeb
	g_assert (strstr (uri, "token=The%20Label"));
Packit b00eeb
	g_assert (strstr (uri, "serial="));
Packit b00eeb
Packit b00eeb
	gck_token_info_free (uri_data.token_info);
Packit b00eeb
	g_free (uri);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_build_with_attributes (void)
Packit b00eeb
{
Packit b00eeb
	GckBuilder builder = GCK_BUILDER_INIT;
Packit b00eeb
	gchar *uri = NULL;
Packit b00eeb
	GckUriData uri_data;
Packit b00eeb
	GckUriData *check;
Packit b00eeb
	gchar *string;
Packit b00eeb
	gulong value;
Packit b00eeb
	const GckAttribute *attr;
Packit b00eeb
Packit b00eeb
	memset (&uri_data, 0, sizeof (uri_data));
Packit b00eeb
	gck_builder_add_string (&builder, CKA_LABEL, "The Label");
Packit b00eeb
	gck_builder_add_ulong (&builder, CKA_CLASS, CKO_DATA);
Packit b00eeb
	gck_builder_add_data (&builder, CKA_ID, (const guchar *)"TEST", 5);
Packit b00eeb
	uri_data.attributes = gck_attributes_ref_sink (gck_builder_end (&builder));
Packit b00eeb
Packit b00eeb
	uri = gck_uri_build (&uri_data, GCK_URI_FOR_OBJECT);
Packit b00eeb
	g_assert (uri);
Packit b00eeb
Packit b00eeb
	gck_attributes_unref (uri_data.attributes);
Packit b00eeb
Packit b00eeb
	check = gck_uri_parse (uri, GCK_URI_FOR_ANY, NULL);
Packit b00eeb
	g_assert (check);
Packit b00eeb
	g_assert (check->attributes);
Packit b00eeb
Packit b00eeb
	if (!gck_attributes_find_string (check->attributes, CKA_LABEL, &string))
Packit b00eeb
		g_assert_not_reached ();
Packit b00eeb
	g_assert_cmpstr (string, ==, "The Label");
Packit b00eeb
	g_free (string);
Packit b00eeb
Packit b00eeb
	if (!gck_attributes_find_ulong (check->attributes, CKA_CLASS, &value))
Packit b00eeb
		g_assert_not_reached ();
Packit b00eeb
	g_assert (value == CKO_DATA);
Packit b00eeb
Packit b00eeb
	attr = gck_attributes_find (check->attributes, CKA_ID);
Packit b00eeb
	g_assert (attr);
Packit b00eeb
	g_assert (attr->length == 5);
Packit b00eeb
	g_assert (memcmp (attr->value, "TEST", 5) == 0);
Packit b00eeb
Packit b00eeb
	gck_uri_data_free (check);
Packit b00eeb
Packit b00eeb
	g_assert (g_str_has_prefix (uri, "pkcs11:"));
Packit b00eeb
	g_assert (strstr (uri, "object=The%20Label"));
Packit b00eeb
	g_assert (strstr (uri, "object-type=data") || strstr (uri, "type=data"));
Packit b00eeb
	g_assert (strstr (uri, "id=%54%45%53%54%00") || strstr (uri, "id=TEST%00"));
Packit b00eeb
Packit b00eeb
	g_free (uri);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_parse_private_key (void)
Packit b00eeb
{
Packit b00eeb
	GckUriData *uri_data;
Packit b00eeb
	GError *error = NULL;
Packit b00eeb
	gulong klass;
Packit b00eeb
Packit b00eeb
	uri_data = gck_uri_parse ("pkcs11:objecttype=private", GCK_URI_FOR_OBJECT, &error);
Packit b00eeb
	g_assert (uri_data);
Packit b00eeb
	g_assert_no_error (error);
Packit b00eeb
Packit b00eeb
	g_assert (uri_data->attributes);
Packit b00eeb
	if (!gck_attributes_find_ulong (uri_data->attributes, CKA_CLASS, &klass))
Packit b00eeb
		g_assert_not_reached ();
Packit b00eeb
	gck_assert_cmpulong (klass, ==, CKO_PRIVATE_KEY);
Packit b00eeb
Packit b00eeb
	gck_uri_data_free (uri_data);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_parse_secret_key (void)
Packit b00eeb
{
Packit b00eeb
	GckUriData *uri_data;
Packit b00eeb
	GError *error = NULL;
Packit b00eeb
	gulong klass;
Packit b00eeb
Packit b00eeb
	uri_data = gck_uri_parse ("pkcs11:objecttype=secretkey", GCK_URI_FOR_OBJECT, &error);
Packit b00eeb
	g_assert (uri_data);
Packit b00eeb
	g_assert_no_error (error);
Packit b00eeb
Packit b00eeb
	g_assert (uri_data->attributes);
Packit b00eeb
	if (!gck_attributes_find_ulong (uri_data->attributes, CKA_CLASS, &klass))
Packit b00eeb
		g_assert_not_reached ();
Packit b00eeb
	gck_assert_cmpulong (klass, ==, CKO_SECRET_KEY);
Packit b00eeb
Packit b00eeb
	gck_uri_data_free (uri_data);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_parse_unknown_objecttype (void)
Packit b00eeb
{
Packit b00eeb
	GckUriData *uri_data;
Packit b00eeb
	GError *error = NULL;
Packit b00eeb
	gulong klass;
Packit b00eeb
Packit b00eeb
	uri_data = gck_uri_parse ("pkcs11:objecttype=unknown", GCK_URI_FOR_OBJECT, &error);
Packit b00eeb
	g_assert (uri_data);
Packit b00eeb
	g_assert_no_error (error);
Packit b00eeb
Packit b00eeb
	g_assert (uri_data->attributes);
Packit b00eeb
	g_assert (uri_data->any_unrecognized == TRUE);
Packit b00eeb
	if (gck_attributes_find_ulong (uri_data->attributes, CKA_CLASS, &klass))
Packit b00eeb
		g_assert_not_reached ();
Packit b00eeb
Packit b00eeb
	gck_uri_data_free (uri_data);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_build_objecttype_cert (void)
Packit b00eeb
{
Packit b00eeb
	GckBuilder builder = GCK_BUILDER_INIT;
Packit b00eeb
	GckUriData *uri_data;
Packit b00eeb
	gchar *uri;
Packit b00eeb
Packit b00eeb
	uri_data = gck_uri_data_new ();
Packit b00eeb
	gck_builder_add_ulong (&builder, CKA_CLASS, CKO_CERTIFICATE);
Packit b00eeb
	uri_data->attributes = gck_attributes_ref_sink (gck_builder_end (&builder));
Packit b00eeb
Packit b00eeb
	uri = gck_uri_build (uri_data, GCK_URI_FOR_OBJECT);
Packit b00eeb
	g_assert (uri);
Packit b00eeb
	g_assert (strstr (uri, "object-type=cert") || strstr (uri, "type=cert"));
Packit b00eeb
Packit b00eeb
	gck_uri_data_free (uri_data);
Packit b00eeb
	g_free (uri);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_build_objecttype_private (void)
Packit b00eeb
{
Packit b00eeb
	GckBuilder builder = GCK_BUILDER_INIT;
Packit b00eeb
	GckUriData *uri_data;
Packit b00eeb
	gchar *uri;
Packit b00eeb
Packit b00eeb
	uri_data = gck_uri_data_new ();
Packit b00eeb
	gck_builder_add_ulong (&builder, CKA_CLASS, CKO_PRIVATE_KEY);
Packit b00eeb
	uri_data->attributes = gck_attributes_ref_sink (gck_builder_end (&builder));
Packit b00eeb
Packit b00eeb
	uri = gck_uri_build (uri_data, GCK_URI_FOR_OBJECT);
Packit b00eeb
	g_assert (uri);
Packit b00eeb
	g_assert (strstr (uri, "object-type=private") || strstr (uri, "type=private"));
Packit b00eeb
Packit b00eeb
	gck_uri_data_free (uri_data);
Packit b00eeb
	g_free (uri);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_build_objecttype_public (void)
Packit b00eeb
{
Packit b00eeb
	GckBuilder builder = GCK_BUILDER_INIT;
Packit b00eeb
	GckUriData *uri_data;
Packit b00eeb
	gchar *uri;
Packit b00eeb
Packit b00eeb
	uri_data = gck_uri_data_new ();
Packit b00eeb
	gck_builder_add_ulong (&builder, CKA_CLASS, CKO_PUBLIC_KEY);
Packit b00eeb
	uri_data->attributes = gck_attributes_ref_sink (gck_builder_end (&builder));
Packit b00eeb
Packit b00eeb
	uri = gck_uri_build (uri_data, GCK_URI_FOR_OBJECT);
Packit b00eeb
	g_assert (uri);
Packit b00eeb
	g_assert (strstr (uri, "object-type=public") || strstr (uri, "type=public"));
Packit b00eeb
Packit b00eeb
	gck_uri_data_free (uri_data);
Packit b00eeb
	g_free (uri);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_build_objecttype_secret (void)
Packit b00eeb
{
Packit b00eeb
	GckBuilder builder = GCK_BUILDER_INIT;
Packit b00eeb
	GckUriData *uri_data;
Packit b00eeb
	gchar *uri;
Packit b00eeb
Packit b00eeb
	uri_data = gck_uri_data_new ();
Packit b00eeb
	gck_builder_add_ulong (&builder, CKA_CLASS, CKO_SECRET_KEY);
Packit b00eeb
	uri_data->attributes = gck_attributes_ref_sink (gck_builder_end (&builder));
Packit b00eeb
Packit b00eeb
	uri = gck_uri_build (uri_data, GCK_URI_FOR_OBJECT);
Packit b00eeb
	g_assert (uri);
Packit b00eeb
	g_assert (strstr (uri, "object-type=secret-key") || strstr (uri, "type=secret-key"));
Packit b00eeb
Packit b00eeb
	gck_uri_data_free (uri_data);
Packit b00eeb
	g_free (uri);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
test_build_with_library (void)
Packit b00eeb
{
Packit b00eeb
	GckUriData *uri_data;
Packit b00eeb
	gchar *uri;
Packit b00eeb
Packit b00eeb
	uri_data = gck_uri_data_new ();
Packit b00eeb
	uri_data->module_info = g_new0 (GckModuleInfo, 1);
Packit b00eeb
	uri_data->module_info->library_description = g_strdup ("The Description");
Packit b00eeb
Packit b00eeb
	uri = gck_uri_build (uri_data, GCK_URI_FOR_MODULE);
Packit b00eeb
	g_assert (uri);
Packit b00eeb
	g_assert (strstr (uri, "library-description=The%20Description"));
Packit b00eeb
Packit b00eeb
	gck_uri_data_free (uri_data);
Packit b00eeb
	g_free (uri);
Packit b00eeb
}
Packit b00eeb
Packit b00eeb
Packit b00eeb
static void
Packit b00eeb
null_log_handler (const gchar *log_domain, GLogLevelFlags log_level,
Packit b00eeb
                  const gchar *message, gpointer user_data)
Packit b00eeb
{
Packit b00eeb
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
	/* Suppress these messages in tests */
Packit b00eeb
	g_log_set_handler (G_LOG_DOMAIN, G_LOG_LEVEL_MESSAGE | G_LOG_LEVEL_INFO | G_LOG_LEVEL_DEBUG,
Packit b00eeb
	                   null_log_handler, NULL);
Packit b00eeb
Packit b00eeb
	g_test_add_func ("/gck/uri/parse", test_parse);
Packit b00eeb
	g_test_add_func ("/gck/uri/parse_bad_scheme", test_parse_bad_scheme);
Packit b00eeb
	g_test_add_func ("/gck/uri/parse_with_label", test_parse_with_label);
Packit b00eeb
	g_test_add_func ("/gck/uri/parse_with_label_and_klass", test_parse_with_label_and_klass);
Packit b00eeb
	g_test_add_func ("/gck/uri/parse_with_id", test_parse_with_id);
Packit b00eeb
	g_test_add_func ("/gck/uri/parse_with_bad_string_encoding", test_parse_with_bad_string_encoding);
Packit b00eeb
	g_test_add_func ("/gck/uri/parse_with_bad_binary_encoding", test_parse_with_bad_binary_encoding);
Packit b00eeb
	g_test_add_func ("/gck/uri/parse_with_token", test_parse_with_token);
Packit b00eeb
	g_test_add_func ("/gck/uri/parse_with_token_bad_encoding", test_parse_with_token_bad_encoding);
Packit b00eeb
	g_test_add_func ("/gck/uri/parse_with_bad_syntax", test_parse_with_bad_syntax);
Packit b00eeb
	g_test_add_func ("/gck/uri/parse_with_library", test_parse_with_library);
Packit b00eeb
	g_test_add_func ("/gck/uri/parse_with_library_bad_encoding", test_parse_with_library_bad_encoding);
Packit b00eeb
	g_test_add_func ("/gck/uri/build_empty", test_build_empty);
Packit b00eeb
	g_test_add_func ("/gck/uri/build_with_token_info", test_build_with_token_info);
Packit b00eeb
	g_test_add_func ("/gck/uri/build_with_token_null_info", test_build_with_token_null_info);
Packit b00eeb
	g_test_add_func ("/gck/uri/build_with_token_empty_info", test_build_with_token_empty_info);
Packit b00eeb
	g_test_add_func ("/gck/uri/build_with_attributes", test_build_with_attributes);
Packit b00eeb
	g_test_add_func ("/gck/uri/parse_private_key", test_parse_private_key);
Packit b00eeb
	g_test_add_func ("/gck/uri/parse_secret_key", test_parse_secret_key);
Packit b00eeb
	g_test_add_func ("/gck/uri/parse_unknown_objecttype", test_parse_unknown_objecttype);
Packit b00eeb
	g_test_add_func ("/gck/uri/build_objecttype_cert", test_build_objecttype_cert);
Packit b00eeb
	g_test_add_func ("/gck/uri/build_objecttype_private", test_build_objecttype_private);
Packit b00eeb
	g_test_add_func ("/gck/uri/build_objecttype_public", test_build_objecttype_public);
Packit b00eeb
	g_test_add_func ("/gck/uri/build_objecttype_secret", test_build_objecttype_secret);
Packit b00eeb
	g_test_add_func ("/gck/uri/build_with_library", test_build_with_library);
Packit b00eeb
Packit b00eeb
	return g_test_run ();
Packit b00eeb
}