Blame gdata/tests/authorization.c

Packit 4b6dd7
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
Packit 4b6dd7
/*
Packit 4b6dd7
 * GData Client
Packit 4b6dd7
 * Copyright (C) Philip Withnall 2011 <philip@tecnocode.co.uk>
Packit 4b6dd7
 *
Packit 4b6dd7
 * GData Client is free software; you can redistribute it and/or
Packit 4b6dd7
 * modify it under the terms of the GNU Lesser General Public
Packit 4b6dd7
 * License as published by the Free Software Foundation; either
Packit 4b6dd7
 * version 2.1 of the License, or (at your option) any later version.
Packit 4b6dd7
 *
Packit 4b6dd7
 * GData Client is distributed in the hope that it will be useful,
Packit 4b6dd7
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 4b6dd7
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit 4b6dd7
 * Lesser General Public License for more details.
Packit 4b6dd7
 *
Packit 4b6dd7
 * You should have received a copy of the GNU Lesser General Public
Packit 4b6dd7
 * License along with GData Client.  If not, see <http://www.gnu.org/licenses/>.
Packit 4b6dd7
 */
Packit 4b6dd7
Packit 4b6dd7
#include <string.h>
Packit 4b6dd7
#include <glib.h>
Packit 4b6dd7
#include <gdata/gdata.h>
Packit 4b6dd7
Packit 4b6dd7
#include "common.h"
Packit 4b6dd7
Packit 4b6dd7
/* Used as common "testing domains" to simplify test code. */
Packit 4b6dd7
static GDataAuthorizationDomain *test_domain1 = NULL;
Packit 4b6dd7
static GDataAuthorizationDomain *test_domain2 = NULL;
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
test_authorization_domain_properties (void)
Packit 4b6dd7
{
Packit 4b6dd7
	GDataAuthorizationDomain *domain;
Packit 4b6dd7
	gchar *service_name, *scope;
Packit 4b6dd7
Packit 4b6dd7
	/* NOTE: It's not expected that client code will normally get hold of GDataAuthorizationDomain instances this way.
Packit 4b6dd7
	 * This is just for testing purposes. */
Packit 4b6dd7
	domain = GDATA_AUTHORIZATION_DOMAIN (g_object_new (GDATA_TYPE_AUTHORIZATION_DOMAIN,
Packit 4b6dd7
	                                                   "service-name", "service-name",
Packit 4b6dd7
	                                                   "scope", "scope",
Packit 4b6dd7
	                                                   NULL));
Packit 4b6dd7
Packit 4b6dd7
	g_assert_cmpstr (gdata_authorization_domain_get_service_name (domain), ==, "service-name");
Packit 4b6dd7
	g_assert_cmpstr (gdata_authorization_domain_get_scope (domain), ==, "scope");
Packit 4b6dd7
Packit 4b6dd7
	g_object_get (domain,
Packit 4b6dd7
	              "service-name", &service_name,
Packit 4b6dd7
	              "scope", &scope,
Packit 4b6dd7
	              NULL);
Packit 4b6dd7
Packit 4b6dd7
	g_assert_cmpstr (service_name, ==, "service-name");
Packit 4b6dd7
	g_assert_cmpstr (scope, ==, "scope");
Packit 4b6dd7
Packit 4b6dd7
	g_free (service_name);
Packit 4b6dd7
	g_free (scope);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/* Simple implementation of GDataAuthorizer for test purposes */
Packit 4b6dd7
#define TYPE_SIMPLE_AUTHORIZER		(simple_authorizer_get_type ())
Packit 4b6dd7
#define SIMPLE_AUTHORIZER(o)		(G_TYPE_CHECK_INSTANCE_CAST ((o), SIMPLE_TYPE_AUTHORIZER, SimpleAuthorizer))
Packit 4b6dd7
#define SIMPLE_AUTHORIZER_CLASS(k)	(G_TYPE_CHECK_CLASS_CAST((k), SIMPLE_TYPE_AUTHORIZER, SimpleAuthorizerClass))
Packit 4b6dd7
#define IS_SIMPLE_AUTHORIZER(o)		(G_TYPE_CHECK_INSTANCE_TYPE ((o), SIMPLE_TYPE_AUTHORIZER))
Packit 4b6dd7
#define IS_SIMPLE_AUTHORIZER_CLASS(k)	(G_TYPE_CHECK_CLASS_TYPE ((k), SIMPLE_TYPE_AUTHORIZER))
Packit 4b6dd7
#define SIMPLE_AUTHORIZER_GET_CLASS(o)	(G_TYPE_INSTANCE_GET_CLASS ((o), SIMPLE_TYPE_AUTHORIZER, SimpleAuthorizerClass))
Packit 4b6dd7
Packit 4b6dd7
typedef struct {
Packit 4b6dd7
	GObject parent;
Packit 4b6dd7
} SimpleAuthorizer;
Packit 4b6dd7
Packit 4b6dd7
typedef struct {
Packit 4b6dd7
	GObjectClass parent;
Packit 4b6dd7
} SimpleAuthorizerClass;
Packit 4b6dd7
Packit 4b6dd7
static GType simple_authorizer_get_type (void) G_GNUC_CONST;
Packit 4b6dd7
static void simple_authorizer_authorizer_init (GDataAuthorizerInterface *iface);
Packit 4b6dd7
Packit 4b6dd7
G_DEFINE_TYPE_WITH_CODE (SimpleAuthorizer, simple_authorizer, G_TYPE_OBJECT,
Packit 4b6dd7
                         G_IMPLEMENT_INTERFACE (GDATA_TYPE_AUTHORIZER, simple_authorizer_authorizer_init))
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
simple_authorizer_class_init (SimpleAuthorizerClass *klass)
Packit 4b6dd7
{
Packit 4b6dd7
	/* Nothing to see here */
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
simple_authorizer_init (SimpleAuthorizer *self)
Packit 4b6dd7
{
Packit 4b6dd7
	/* Nothing to see here */
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
simple_authorizer_process_request (GDataAuthorizer *self, GDataAuthorizationDomain *domain, SoupMessage *message)
Packit 4b6dd7
{
Packit 4b6dd7
	SoupURI *test_uri;
Packit 4b6dd7
Packit 4b6dd7
	/* Check that the domain and message are as expected */
Packit 4b6dd7
	g_assert (domain == NULL || GDATA_IS_AUTHORIZATION_DOMAIN (domain));
Packit 4b6dd7
	if (domain != NULL) {
Packit 4b6dd7
		g_assert_cmpstr (gdata_authorization_domain_get_scope (domain), ==, "scope1");
Packit 4b6dd7
	}
Packit 4b6dd7
Packit 4b6dd7
	g_assert (message != NULL);
Packit 4b6dd7
	g_assert (SOUP_IS_MESSAGE (message));
Packit 4b6dd7
	test_uri = soup_uri_new ("http://example.com/");
Packit 4b6dd7
	g_assert (soup_uri_equal (soup_message_get_uri (message), test_uri) == TRUE);
Packit 4b6dd7
	soup_uri_free (test_uri);
Packit 4b6dd7
Packit 4b6dd7
	/* Check that this is the first time we've touched the message, and if so, flag the message as touched */
Packit 4b6dd7
	if (domain != NULL) {
Packit 4b6dd7
		g_assert (soup_message_headers_get_one (message->request_headers, "process_request") == NULL);
Packit 4b6dd7
		soup_message_headers_append (message->request_headers, "process_request", "1");
Packit 4b6dd7
	} else {
Packit 4b6dd7
		soup_message_headers_append (message->request_headers, "process_request_null", "1");
Packit 4b6dd7
	}
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static gboolean
Packit 4b6dd7
simple_authorizer_is_authorized_for_domain (GDataAuthorizer *self, GDataAuthorizationDomain *domain)
Packit 4b6dd7
{
Packit 4b6dd7
	gboolean is_test_domain1, is_test_domain2;
Packit 4b6dd7
Packit 4b6dd7
	/* Check that the domain is as expected */
Packit 4b6dd7
	g_assert (domain != NULL);
Packit 4b6dd7
	g_assert (GDATA_IS_AUTHORIZATION_DOMAIN (domain));
Packit 4b6dd7
Packit 4b6dd7
	is_test_domain1 = (strcmp (gdata_authorization_domain_get_scope (domain), "scope1") == 0) ? TRUE : FALSE;
Packit 4b6dd7
	is_test_domain2 = (strcmp (gdata_authorization_domain_get_scope (domain), "scope2") == 0) ? TRUE : FALSE;
Packit 4b6dd7
Packit 4b6dd7
	g_assert (is_test_domain1 == TRUE || is_test_domain2 == TRUE);
Packit 4b6dd7
Packit 4b6dd7
	/* Increment the counter on the domain so we know if this function's been called more than once on each domain */
Packit 4b6dd7
	g_object_set_data (G_OBJECT (domain), "counter", GUINT_TO_POINTER (GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (domain), "counter")) + 1));
Packit 4b6dd7
Packit 4b6dd7
	/* Only authorise test_domain1 */
Packit 4b6dd7
	return is_test_domain1;
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
simple_authorizer_authorizer_init (GDataAuthorizerInterface *iface)
Packit 4b6dd7
{
Packit 4b6dd7
	iface->process_request = simple_authorizer_process_request;
Packit 4b6dd7
	iface->is_authorized_for_domain = simple_authorizer_is_authorized_for_domain;
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/* Normal implementation of GDataAuthorizer for test purposes */
Packit 4b6dd7
#define TYPE_NORMAL_AUTHORIZER		(normal_authorizer_get_type ())
Packit 4b6dd7
#define NORMAL_AUTHORIZER(o)		(G_TYPE_CHECK_INSTANCE_CAST ((o), NORMAL_TYPE_AUTHORIZER, NormalAuthorizer))
Packit 4b6dd7
#define NORMAL_AUTHORIZER_CLASS(k)	(G_TYPE_CHECK_CLASS_CAST((k), NORMAL_TYPE_AUTHORIZER, NormalAuthorizerClass))
Packit 4b6dd7
#define IS_NORMAL_AUTHORIZER(o)		(G_TYPE_CHECK_INSTANCE_TYPE ((o), NORMAL_TYPE_AUTHORIZER))
Packit 4b6dd7
#define IS_NORMAL_AUTHORIZER_CLASS(k)	(G_TYPE_CHECK_CLASS_TYPE ((k), NORMAL_TYPE_AUTHORIZER))
Packit 4b6dd7
#define NORMAL_AUTHORIZER_GET_CLASS(o)	(G_TYPE_INSTANCE_GET_CLASS ((o), NORMAL_TYPE_AUTHORIZER, NormalAuthorizerClass))
Packit 4b6dd7
Packit 4b6dd7
typedef struct {
Packit 4b6dd7
	GObject parent;
Packit 4b6dd7
} NormalAuthorizer;
Packit 4b6dd7
Packit 4b6dd7
typedef struct {
Packit 4b6dd7
	GObjectClass parent;
Packit 4b6dd7
} NormalAuthorizerClass;
Packit 4b6dd7
Packit 4b6dd7
static GType normal_authorizer_get_type (void) G_GNUC_CONST;
Packit 4b6dd7
static void normal_authorizer_authorizer_init (GDataAuthorizerInterface *iface);
Packit 4b6dd7
Packit 4b6dd7
G_DEFINE_TYPE_WITH_CODE (NormalAuthorizer, normal_authorizer, G_TYPE_OBJECT,
Packit 4b6dd7
                         G_IMPLEMENT_INTERFACE (GDATA_TYPE_AUTHORIZER, normal_authorizer_authorizer_init))
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
normal_authorizer_class_init (NormalAuthorizerClass *klass)
Packit 4b6dd7
{
Packit 4b6dd7
	/* Nothing to see here */
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
normal_authorizer_init (NormalAuthorizer *self)
Packit 4b6dd7
{
Packit 4b6dd7
	/* Nothing to see here */
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static gboolean
Packit 4b6dd7
normal_authorizer_refresh_authorization (GDataAuthorizer *self, GCancellable *cancellable, GError **error)
Packit 4b6dd7
{
Packit 4b6dd7
	/* Check the inputs */
Packit 4b6dd7
	g_assert (GDATA_IS_AUTHORIZER (self));
Packit 4b6dd7
	g_assert (cancellable == NULL || G_IS_CANCELLABLE (cancellable));
Packit 4b6dd7
	g_assert (error == NULL || *error == NULL);
Packit 4b6dd7
Packit 4b6dd7
	/* Increment the counter on the authorizer so we know if this function's been called more than once */
Packit 4b6dd7
	g_object_set_data (G_OBJECT (self), "counter", GUINT_TO_POINTER (GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (self), "counter")) + 1));
Packit 4b6dd7
Packit 4b6dd7
	/* If we're instructed to set an error, do so (with an arbitrary error code) */
Packit 4b6dd7
	if (g_object_get_data (G_OBJECT (self), "error") != NULL) {
Packit 4b6dd7
		g_set_error_literal (error, GDATA_SERVICE_ERROR, GDATA_SERVICE_ERROR_PROTOCOL_ERROR, "Error message");
Packit 4b6dd7
		return FALSE;
Packit 4b6dd7
	}
Packit 4b6dd7
Packit 4b6dd7
	return TRUE;
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
normal_authorizer_authorizer_init (GDataAuthorizerInterface *iface)
Packit 4b6dd7
{
Packit 4b6dd7
	/* Use the same implementation as SimpleAuthorizer for process_request() and is_authorized_for_domain(). */
Packit 4b6dd7
	iface->process_request = simple_authorizer_process_request;
Packit 4b6dd7
	iface->is_authorized_for_domain = simple_authorizer_is_authorized_for_domain;
Packit 4b6dd7
Packit 4b6dd7
	/* Unlike SimpleAuthorizer, also implement refresh_authorization() (but not the async versions). */
Packit 4b6dd7
	iface->refresh_authorization = normal_authorizer_refresh_authorization;
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/* Complex implementation of GDataAuthorizer for test purposes */
Packit 4b6dd7
#define TYPE_COMPLEX_AUTHORIZER		(complex_authorizer_get_type ())
Packit 4b6dd7
#define COMPLEX_AUTHORIZER(o)		(G_TYPE_CHECK_INSTANCE_CAST ((o), COMPLEX_TYPE_AUTHORIZER, ComplexAuthorizer))
Packit 4b6dd7
#define COMPLEX_AUTHORIZER_CLASS(k)	(G_TYPE_CHECK_CLASS_CAST((k), COMPLEX_TYPE_AUTHORIZER, ComplexAuthorizerClass))
Packit 4b6dd7
#define IS_COMPLEX_AUTHORIZER(o)		(G_TYPE_CHECK_INSTANCE_TYPE ((o), COMPLEX_TYPE_AUTHORIZER))
Packit 4b6dd7
#define IS_COMPLEX_AUTHORIZER_CLASS(k)	(G_TYPE_CHECK_CLASS_TYPE ((k), COMPLEX_TYPE_AUTHORIZER))
Packit 4b6dd7
#define COMPLEX_AUTHORIZER_GET_CLASS(o)	(G_TYPE_INSTANCE_GET_CLASS ((o), COMPLEX_TYPE_AUTHORIZER, ComplexAuthorizerClass))
Packit 4b6dd7
Packit 4b6dd7
typedef struct {
Packit 4b6dd7
	GObject parent;
Packit 4b6dd7
} ComplexAuthorizer;
Packit 4b6dd7
Packit 4b6dd7
typedef struct {
Packit 4b6dd7
	GObjectClass parent;
Packit 4b6dd7
} ComplexAuthorizerClass;
Packit 4b6dd7
Packit 4b6dd7
static GType complex_authorizer_get_type (void) G_GNUC_CONST;
Packit 4b6dd7
static void complex_authorizer_authorizer_init (GDataAuthorizerInterface *iface);
Packit 4b6dd7
Packit 4b6dd7
G_DEFINE_TYPE_WITH_CODE (ComplexAuthorizer, complex_authorizer, G_TYPE_OBJECT,
Packit 4b6dd7
                         G_IMPLEMENT_INTERFACE (GDATA_TYPE_AUTHORIZER, complex_authorizer_authorizer_init))
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
complex_authorizer_class_init (ComplexAuthorizerClass *klass)
Packit 4b6dd7
{
Packit 4b6dd7
	/* Nothing to see here */
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
complex_authorizer_init (ComplexAuthorizer *self)
Packit 4b6dd7
{
Packit 4b6dd7
	/* Nothing to see here */
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
complex_authorizer_refresh_authorization_async (GDataAuthorizer *self, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data)
Packit 4b6dd7
{
Packit 4b6dd7
	g_autoptr(GTask) task = NULL;
Packit 4b6dd7
	g_autoptr(GError) error = NULL;
Packit 4b6dd7
Packit 4b6dd7
	/* Check the inputs */
Packit 4b6dd7
	g_assert (GDATA_IS_AUTHORIZER (self));
Packit 4b6dd7
	g_assert (cancellable == NULL || G_IS_CANCELLABLE (cancellable));
Packit 4b6dd7
Packit 4b6dd7
	task = g_task_new (self, cancellable, callback, user_data);
Packit 4b6dd7
	g_task_set_source_tag (task, complex_authorizer_refresh_authorization_async);
Packit 4b6dd7
Packit 4b6dd7
	/* Increment the async counter on the authorizer so we know if this function's been called more than once */
Packit 4b6dd7
	g_object_set_data (G_OBJECT (self), "async-counter",
Packit 4b6dd7
	                   GUINT_TO_POINTER (GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (self), "async-counter")) + 1));
Packit 4b6dd7
Packit 4b6dd7
	if (g_cancellable_set_error_if_cancelled (cancellable, &error) == TRUE) {
Packit 4b6dd7
		/* Handle cancellation */
Packit 4b6dd7
		g_task_return_error (task, g_steal_pointer (&error));
Packit 4b6dd7
	} else if (g_object_get_data (G_OBJECT (self), "error") != NULL) {
Packit 4b6dd7
		/* If we're instructed to set an error, do so (with an arbitrary error code) */
Packit 4b6dd7
		g_task_return_new_error (task, GDATA_SERVICE_ERROR, GDATA_SERVICE_ERROR_NETWORK_ERROR, "%s", "Error message");
Packit 4b6dd7
	} else {
Packit 4b6dd7
		g_task_return_boolean (task, TRUE);
Packit 4b6dd7
	}
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static gboolean
Packit 4b6dd7
complex_authorizer_refresh_authorization_finish (GDataAuthorizer *self, GAsyncResult *async_result, GError **error)
Packit 4b6dd7
{
Packit 4b6dd7
	/* Check the inputs */
Packit 4b6dd7
	g_assert (GDATA_IS_AUTHORIZER (self));
Packit 4b6dd7
	g_assert (G_IS_ASYNC_RESULT (async_result));
Packit 4b6dd7
	g_assert (error == NULL || *error == NULL);
Packit 4b6dd7
	g_assert (g_task_is_valid (async_result, self));
Packit 4b6dd7
	g_assert (g_async_result_is_tagged (async_result, complex_authorizer_refresh_authorization_async));
Packit 4b6dd7
Packit 4b6dd7
	/* Assert that the async function's already been called (once) */
Packit 4b6dd7
	g_assert_cmpuint (GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (self), "async-counter")), ==, 1);
Packit 4b6dd7
Packit 4b6dd7
	/* Increment the finish counter on the authorizer so we know if this function's been called more than once */
Packit 4b6dd7
	g_object_set_data (G_OBJECT (self), "finish-counter",
Packit 4b6dd7
	                   GUINT_TO_POINTER (GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (self), "finish-counter")) + 1));
Packit 4b6dd7
Packit 4b6dd7
	return g_task_propagate_boolean (G_TASK (async_result), error);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
complex_authorizer_authorizer_init (GDataAuthorizerInterface *iface)
Packit 4b6dd7
{
Packit 4b6dd7
	/* Use the same implementation as SimpleAuthorizer/NormalAuthorizer for process_request(), is_authorized_for_domain() and
Packit 4b6dd7
	 * refresh_authorization(). */
Packit 4b6dd7
	iface->process_request = simple_authorizer_process_request;
Packit 4b6dd7
	iface->is_authorized_for_domain = simple_authorizer_is_authorized_for_domain;
Packit 4b6dd7
	iface->refresh_authorization = normal_authorizer_refresh_authorization;
Packit 4b6dd7
Packit 4b6dd7
	/* Unlike NormalAuthorizer, also implement the async versions of refresh_authorization(). */
Packit 4b6dd7
	iface->refresh_authorization_async = complex_authorizer_refresh_authorization_async;
Packit 4b6dd7
	iface->refresh_authorization_finish = complex_authorizer_refresh_authorization_finish;
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/* Testing data for generic GDataAuthorizer interface tests */
Packit 4b6dd7
typedef struct {
Packit 4b6dd7
	GDataAuthorizer *authorizer;
Packit 4b6dd7
} AuthorizerData;
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
set_up_simple_authorizer_data (AuthorizerData *data, gconstpointer user_data)
Packit 4b6dd7
{
Packit 4b6dd7
	data->authorizer = GDATA_AUTHORIZER (g_object_new (TYPE_SIMPLE_AUTHORIZER, NULL));
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
set_up_normal_authorizer_data (AuthorizerData *data, gconstpointer user_data)
Packit 4b6dd7
{
Packit 4b6dd7
	data->authorizer = GDATA_AUTHORIZER (g_object_new (TYPE_NORMAL_AUTHORIZER, NULL));
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
set_up_complex_authorizer_data (AuthorizerData *data, gconstpointer user_data)
Packit 4b6dd7
{
Packit 4b6dd7
	data->authorizer = GDATA_AUTHORIZER (g_object_new (TYPE_COMPLEX_AUTHORIZER, NULL));
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
tear_down_authorizer_data (AuthorizerData *data, gconstpointer user_data)
Packit 4b6dd7
{
Packit 4b6dd7
	g_object_unref (data->authorizer);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/* Test that calling gdata_authorizer_process_request() happens correctly */
Packit 4b6dd7
static void
Packit 4b6dd7
test_authorizer_process_request (AuthorizerData *data, gconstpointer user_data)
Packit 4b6dd7
{
Packit 4b6dd7
	SoupMessage *message;
Packit 4b6dd7
Packit 4b6dd7
	message = soup_message_new (SOUP_METHOD_GET, "http://example.com/");
Packit 4b6dd7
Packit 4b6dd7
	gdata_authorizer_process_request (data->authorizer, test_domain1, message);
Packit 4b6dd7
	g_assert_cmpstr (soup_message_headers_get_one (message->request_headers, "process_request"), ==, "1");
Packit 4b6dd7
	g_assert (soup_message_headers_get_one (message->request_headers, "process_request_null") == NULL);
Packit 4b6dd7
Packit 4b6dd7
	g_object_unref (message);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/* Test that calling gdata_authorizer_process_request() happens correctly for a NULL domain */
Packit 4b6dd7
static void
Packit 4b6dd7
test_authorizer_process_request_null (AuthorizerData *data, gconstpointer user_data)
Packit 4b6dd7
{
Packit 4b6dd7
	SoupMessage *message;
Packit 4b6dd7
Packit 4b6dd7
	message = soup_message_new (SOUP_METHOD_GET, "http://example.com/");
Packit 4b6dd7
Packit 4b6dd7
	gdata_authorizer_process_request (data->authorizer, NULL, message);
Packit 4b6dd7
	g_assert (soup_message_headers_get_one (message->request_headers, "process_request") == NULL);
Packit 4b6dd7
	g_assert_cmpstr (soup_message_headers_get_one (message->request_headers, "process_request_null"), ==, "1");
Packit 4b6dd7
Packit 4b6dd7
	g_object_unref (message);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/* Test that calling gdata_authorizer_is_authorized_for_domain() happens correctly */
Packit 4b6dd7
static void
Packit 4b6dd7
test_authorizer_is_authorized_for_domain (AuthorizerData *data, gconstpointer user_data)
Packit 4b6dd7
{
Packit 4b6dd7
	/* Set some counters on the test domains to check that the interface implementation is only called once per domain */
Packit 4b6dd7
	g_object_set_data (G_OBJECT (test_domain1), "counter", GUINT_TO_POINTER (0));
Packit 4b6dd7
	g_object_set_data (G_OBJECT (test_domain2), "counter", GUINT_TO_POINTER (0));
Packit 4b6dd7
Packit 4b6dd7
	g_assert (gdata_authorizer_is_authorized_for_domain (data->authorizer, test_domain1) == TRUE);
Packit 4b6dd7
	g_assert (gdata_authorizer_is_authorized_for_domain (data->authorizer, test_domain2) == FALSE);
Packit 4b6dd7
Packit 4b6dd7
	g_assert_cmpuint (GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (test_domain1), "counter")), ==, 1);
Packit 4b6dd7
	g_assert_cmpuint (GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (test_domain2), "counter")), ==, 1);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/* Test that calling gdata_authorizer_is_authorized_for_domain() with a NULL authorizer always returns FALSE */
Packit 4b6dd7
static void
Packit 4b6dd7
test_authorizer_is_authorized_for_domain_null (AuthorizerData *data, gconstpointer user_data)
Packit 4b6dd7
{
Packit 4b6dd7
	g_assert (gdata_authorizer_is_authorized_for_domain (NULL, test_domain1) == FALSE);
Packit 4b6dd7
	g_assert (gdata_authorizer_is_authorized_for_domain (NULL, test_domain2) == FALSE);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/* Test that calling refresh_authorization() on an authorizer which implements it returns TRUE without error, and only calls the implementation
Packit 4b6dd7
 * once */
Packit 4b6dd7
static void
Packit 4b6dd7
test_authorizer_refresh_authorization (AuthorizerData *data, gconstpointer user_data)
Packit 4b6dd7
{
Packit 4b6dd7
	gboolean success;
Packit 4b6dd7
	GError *error = NULL;
Packit 4b6dd7
Packit 4b6dd7
	/* Set a counter on the authoriser to check that the interface implementation is only called once */
Packit 4b6dd7
	g_object_set_data (G_OBJECT (data->authorizer), "counter", GUINT_TO_POINTER (0));
Packit 4b6dd7
Packit 4b6dd7
	success = gdata_authorizer_refresh_authorization (data->authorizer, NULL, &error);
Packit 4b6dd7
	g_assert_no_error (error);
Packit 4b6dd7
	g_assert (success == TRUE);
Packit 4b6dd7
	g_clear_error (&error);
Packit 4b6dd7
Packit 4b6dd7
	g_assert_cmpuint (GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (data->authorizer), "counter")), ==, 1);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/* Test that calling refresh_authorization() on an authorizer which implements it with errors returns FALSE with an error, and only calls the
Packit 4b6dd7
 * implementation once */
Packit 4b6dd7
static void
Packit 4b6dd7
test_authorizer_refresh_authorization_error (AuthorizerData *data, gconstpointer user_data)
Packit 4b6dd7
{
Packit 4b6dd7
	gboolean success;
Packit 4b6dd7
	GError *error = NULL;
Packit 4b6dd7
Packit 4b6dd7
	/* Set a counter on the authoriser to check that the interface implementation is only called once */
Packit 4b6dd7
	g_object_set_data (G_OBJECT (data->authorizer), "counter", GUINT_TO_POINTER (0));
Packit 4b6dd7
Packit 4b6dd7
	/* Set a flag on the authoriser to make the NormalAuthorizer implementation return an error for refresh_authorization() */
Packit 4b6dd7
	g_object_set_data (G_OBJECT (data->authorizer), "error", GUINT_TO_POINTER (TRUE));
Packit 4b6dd7
Packit 4b6dd7
	success = gdata_authorizer_refresh_authorization (data->authorizer, NULL, &error);
Packit 4b6dd7
	g_assert_error (error, GDATA_SERVICE_ERROR, GDATA_SERVICE_ERROR_PROTOCOL_ERROR);
Packit 4b6dd7
	g_assert (success == FALSE);
Packit 4b6dd7
	g_clear_error (&error);
Packit 4b6dd7
Packit 4b6dd7
	g_assert_cmpuint (GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (data->authorizer), "counter")), ==, 1);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/* Test that calling refresh_authorization() on an authorizer which doesn't implement it returns FALSE without an error */
Packit 4b6dd7
static void
Packit 4b6dd7
test_authorizer_refresh_authorization_unimplemented (AuthorizerData *data, gconstpointer user_data)
Packit 4b6dd7
{
Packit 4b6dd7
	gboolean success;
Packit 4b6dd7
	GError *error = NULL;
Packit 4b6dd7
Packit 4b6dd7
	success = gdata_authorizer_refresh_authorization (data->authorizer, NULL, &error);
Packit 4b6dd7
	g_assert_no_error (error);
Packit 4b6dd7
	g_assert (success == FALSE);
Packit 4b6dd7
	g_clear_error (&error);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/* Test that calling refresh_authorization() on an authorizer which doesn't implement it, then cancelling the call returns FALSE without an error
Packit 4b6dd7
 * (not even a cancellation error) */
Packit 4b6dd7
static void
Packit 4b6dd7
test_authorizer_refresh_authorization_cancellation_unimplemented (AuthorizerData *data, gconstpointer user_data)
Packit 4b6dd7
{
Packit 4b6dd7
	GCancellable *cancellable;
Packit 4b6dd7
	gboolean success;
Packit 4b6dd7
	GError *error = NULL;
Packit 4b6dd7
Packit 4b6dd7
	cancellable = g_cancellable_new ();
Packit 4b6dd7
	g_cancellable_cancel (cancellable);
Packit 4b6dd7
Packit 4b6dd7
	success = gdata_authorizer_refresh_authorization (data->authorizer, cancellable, &error);
Packit 4b6dd7
	g_assert_no_error (error);
Packit 4b6dd7
	g_assert (success == FALSE);
Packit 4b6dd7
	g_clear_error (&error);
Packit 4b6dd7
Packit 4b6dd7
	g_object_unref (cancellable);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/* Set of standard async callback functions for refresh_authorization_async() which check various combinations of success and error value */
Packit 4b6dd7
static void
Packit 4b6dd7
test_authorizer_refresh_authorization_async_success_no_error_cb (GDataAuthorizer *authorizer, GAsyncResult *async_result, GMainLoop *main_loop)
Packit 4b6dd7
{
Packit 4b6dd7
	gboolean success;
Packit 4b6dd7
	GError *error = NULL;
Packit 4b6dd7
Packit 4b6dd7
	success = gdata_authorizer_refresh_authorization_finish (authorizer, async_result, &error);
Packit 4b6dd7
	g_assert_no_error (error);
Packit 4b6dd7
	g_assert (success == TRUE);
Packit 4b6dd7
	g_clear_error (&error);
Packit 4b6dd7
Packit 4b6dd7
	g_main_loop_quit (main_loop);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
test_authorizer_refresh_authorization_async_failure_no_error_cb (GDataAuthorizer *authorizer, GAsyncResult *async_result, GMainLoop *main_loop)
Packit 4b6dd7
{
Packit 4b6dd7
	gboolean success;
Packit 4b6dd7
	GError *error = NULL;
Packit 4b6dd7
Packit 4b6dd7
	success = gdata_authorizer_refresh_authorization_finish (authorizer, async_result, &error);
Packit 4b6dd7
	g_assert_no_error (error);
Packit 4b6dd7
	g_assert (success == FALSE);
Packit 4b6dd7
	g_clear_error (&error);
Packit 4b6dd7
Packit 4b6dd7
	g_main_loop_quit (main_loop);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
test_authorizer_refresh_authorization_async_network_error_cb (GDataAuthorizer *authorizer, GAsyncResult *async_result, GMainLoop *main_loop)
Packit 4b6dd7
{
Packit 4b6dd7
	gboolean success;
Packit 4b6dd7
	GError *error = NULL;
Packit 4b6dd7
Packit 4b6dd7
	success = gdata_authorizer_refresh_authorization_finish (authorizer, async_result, &error);
Packit 4b6dd7
	g_assert_error (error, GDATA_SERVICE_ERROR, GDATA_SERVICE_ERROR_NETWORK_ERROR);
Packit 4b6dd7
	g_assert (success == FALSE);
Packit 4b6dd7
	g_clear_error (&error);
Packit 4b6dd7
Packit 4b6dd7
	g_main_loop_quit (main_loop);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
test_authorizer_refresh_authorization_async_protocol_error_cb (GDataAuthorizer *authorizer, GAsyncResult *async_result, GMainLoop *main_loop)
Packit 4b6dd7
{
Packit 4b6dd7
	gboolean success;
Packit 4b6dd7
	GError *error = NULL;
Packit 4b6dd7
Packit 4b6dd7
	success = gdata_authorizer_refresh_authorization_finish (authorizer, async_result, &error);
Packit 4b6dd7
	g_assert_error (error, GDATA_SERVICE_ERROR, GDATA_SERVICE_ERROR_PROTOCOL_ERROR);
Packit 4b6dd7
	g_assert (success == FALSE);
Packit 4b6dd7
	g_clear_error (&error);
Packit 4b6dd7
Packit 4b6dd7
	g_main_loop_quit (main_loop);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
static void
Packit 4b6dd7
test_authorizer_refresh_authorization_async_cancelled_error_cb (GDataAuthorizer *authorizer, GAsyncResult *async_result, GMainLoop *main_loop)
Packit 4b6dd7
{
Packit 4b6dd7
	gboolean success;
Packit 4b6dd7
	GError *error = NULL;
Packit 4b6dd7
Packit 4b6dd7
	success = gdata_authorizer_refresh_authorization_finish (authorizer, async_result, &error);
Packit 4b6dd7
	g_assert_error (error, G_IO_ERROR, G_IO_ERROR_CANCELLED);
Packit 4b6dd7
	g_assert (success == FALSE);
Packit 4b6dd7
	g_clear_error (&error);
Packit 4b6dd7
Packit 4b6dd7
	g_main_loop_quit (main_loop);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/* Test that calling refresh_authorization_async() on an authorizer which implements it returns TRUE without an error */
Packit 4b6dd7
static void
Packit 4b6dd7
test_authorizer_refresh_authorization_async (AuthorizerData *data, gconstpointer user_data)
Packit 4b6dd7
{
Packit 4b6dd7
	GMainLoop *main_loop;
Packit 4b6dd7
Packit 4b6dd7
	/* Set counters on the authoriser to check that the interface implementations are only called once */
Packit 4b6dd7
	g_object_set_data (G_OBJECT (data->authorizer), "counter", GUINT_TO_POINTER (0));
Packit 4b6dd7
	g_object_set_data (G_OBJECT (data->authorizer), "async-counter", GUINT_TO_POINTER (0));
Packit 4b6dd7
	g_object_set_data (G_OBJECT (data->authorizer), "finish-counter", GUINT_TO_POINTER (0));
Packit 4b6dd7
Packit 4b6dd7
	main_loop = g_main_loop_new (NULL, FALSE);
Packit 4b6dd7
Packit 4b6dd7
	gdata_authorizer_refresh_authorization_async (data->authorizer, NULL,
Packit 4b6dd7
	                                              (GAsyncReadyCallback) test_authorizer_refresh_authorization_async_success_no_error_cb,
Packit 4b6dd7
	                                              main_loop);
Packit 4b6dd7
Packit 4b6dd7
	g_main_loop_run (main_loop);
Packit 4b6dd7
Packit 4b6dd7
	g_assert_cmpuint (GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (data->authorizer), "counter")), ==, 0);
Packit 4b6dd7
	g_assert_cmpuint (GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (data->authorizer), "async-counter")), ==, 1);
Packit 4b6dd7
	g_assert_cmpuint (GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (data->authorizer), "finish-counter")), ==, 1);
Packit 4b6dd7
Packit 4b6dd7
	g_main_loop_unref (main_loop);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/* Test that calling refresh_authorization_async() on an authorizer which implements it with an error returns FALSE with the appropriate error */
Packit 4b6dd7
static void
Packit 4b6dd7
test_authorizer_refresh_authorization_async_error (AuthorizerData *data, gconstpointer user_data)
Packit 4b6dd7
{
Packit 4b6dd7
	GMainLoop *main_loop;
Packit 4b6dd7
Packit 4b6dd7
	/* Set counters on the authoriser to check that the interface implementations are only called once */
Packit 4b6dd7
	g_object_set_data (G_OBJECT (data->authorizer), "counter", GUINT_TO_POINTER (0));
Packit 4b6dd7
	g_object_set_data (G_OBJECT (data->authorizer), "async-counter", GUINT_TO_POINTER (0));
Packit 4b6dd7
	g_object_set_data (G_OBJECT (data->authorizer), "finish-counter", GUINT_TO_POINTER (0));
Packit 4b6dd7
Packit 4b6dd7
	/* Set a flag on the authoriser to make the ComplexAuthorizer implementation return an error for refresh_authorization_async() */
Packit 4b6dd7
	g_object_set_data (G_OBJECT (data->authorizer), "error", GUINT_TO_POINTER (TRUE));
Packit 4b6dd7
Packit 4b6dd7
	main_loop = g_main_loop_new (NULL, FALSE);
Packit 4b6dd7
Packit 4b6dd7
	gdata_authorizer_refresh_authorization_async (data->authorizer, NULL,
Packit 4b6dd7
	                                              (GAsyncReadyCallback) test_authorizer_refresh_authorization_async_network_error_cb, main_loop);
Packit 4b6dd7
Packit 4b6dd7
	g_main_loop_run (main_loop);
Packit 4b6dd7
Packit 4b6dd7
	g_assert_cmpuint (GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (data->authorizer), "counter")), ==, 0);
Packit 4b6dd7
	g_assert_cmpuint (GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (data->authorizer), "async-counter")), ==, 1);
Packit 4b6dd7
	g_assert_cmpuint (GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (data->authorizer), "finish-counter")), ==, 1);
Packit 4b6dd7
Packit 4b6dd7
	g_main_loop_unref (main_loop);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/* Test that calling refresh_authorization_async() on an authorizer which implements it, then cancelling the call returns FALSE with a cancellation
Packit 4b6dd7
 * error */
Packit 4b6dd7
static void
Packit 4b6dd7
test_authorizer_refresh_authorization_async_cancellation (AuthorizerData *data, gconstpointer user_data)
Packit 4b6dd7
{
Packit 4b6dd7
	GCancellable *cancellable;
Packit 4b6dd7
	GMainLoop *main_loop;
Packit 4b6dd7
Packit 4b6dd7
	/* Set counters on the authoriser to check that the interface implementations are only called once */
Packit 4b6dd7
	g_object_set_data (G_OBJECT (data->authorizer), "counter", GUINT_TO_POINTER (0));
Packit 4b6dd7
	g_object_set_data (G_OBJECT (data->authorizer), "async-counter", GUINT_TO_POINTER (0));
Packit 4b6dd7
	g_object_set_data (G_OBJECT (data->authorizer), "finish-counter", GUINT_TO_POINTER (0));
Packit 4b6dd7
Packit 4b6dd7
	main_loop = g_main_loop_new (NULL, FALSE);
Packit 4b6dd7
Packit 4b6dd7
	cancellable = g_cancellable_new ();
Packit 4b6dd7
	g_cancellable_cancel (cancellable);
Packit 4b6dd7
Packit 4b6dd7
	gdata_authorizer_refresh_authorization_async (data->authorizer, cancellable,
Packit 4b6dd7
	                                              (GAsyncReadyCallback) test_authorizer_refresh_authorization_async_cancelled_error_cb,
Packit 4b6dd7
	                                              main_loop);
Packit 4b6dd7
Packit 4b6dd7
	g_main_loop_run (main_loop);
Packit 4b6dd7
Packit 4b6dd7
	g_assert_cmpuint (GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (data->authorizer), "counter")), ==, 0);
Packit 4b6dd7
	g_assert_cmpuint (GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (data->authorizer), "async-counter")), ==, 1);
Packit 4b6dd7
	g_assert_cmpuint (GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (data->authorizer), "finish-counter")), ==, 1);
Packit 4b6dd7
Packit 4b6dd7
	g_object_unref (cancellable);
Packit 4b6dd7
	g_main_loop_unref (main_loop);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/* Test that calling refresh_authorization_async() on an authorizer which doesn't implement it, but does implement refresh_authorization(), returns
Packit 4b6dd7
 * TRUE without an error */
Packit 4b6dd7
static void
Packit 4b6dd7
test_authorizer_refresh_authorization_async_simulated (AuthorizerData *data, gconstpointer user_data)
Packit 4b6dd7
{
Packit 4b6dd7
	GMainLoop *main_loop;
Packit 4b6dd7
Packit 4b6dd7
	/* Set a counter on the authoriser to check that the interface implementation is only called once */
Packit 4b6dd7
	g_object_set_data (G_OBJECT (data->authorizer), "counter", GUINT_TO_POINTER (0));
Packit 4b6dd7
Packit 4b6dd7
	main_loop = g_main_loop_new (NULL, FALSE);
Packit 4b6dd7
Packit 4b6dd7
	gdata_authorizer_refresh_authorization_async (data->authorizer, NULL,
Packit 4b6dd7
	                                              (GAsyncReadyCallback) test_authorizer_refresh_authorization_async_success_no_error_cb,
Packit 4b6dd7
	                                              main_loop);
Packit 4b6dd7
Packit 4b6dd7
	g_main_loop_run (main_loop);
Packit 4b6dd7
Packit 4b6dd7
	g_assert_cmpuint (GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (data->authorizer), "counter")), ==, 1);
Packit 4b6dd7
Packit 4b6dd7
	g_main_loop_unref (main_loop);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/* Test that calling refresh_authorization_async() on an authorizer which doesn't implement it, but does implement refresh_authorization() with an
Packit 4b6dd7
 * error, returns FALSE with the appropriate error */
Packit 4b6dd7
static void
Packit 4b6dd7
test_authorizer_refresh_authorization_async_error_simulated (AuthorizerData *data, gconstpointer user_data)
Packit 4b6dd7
{
Packit 4b6dd7
	GMainLoop *main_loop;
Packit 4b6dd7
Packit 4b6dd7
	/* Set a counter on the authoriser to check that the interface implementation is only called once */
Packit 4b6dd7
	g_object_set_data (G_OBJECT (data->authorizer), "counter", GUINT_TO_POINTER (0));
Packit 4b6dd7
Packit 4b6dd7
	/* Set a flag on the authoriser to make the NormalAuthorizer implementation return an error for refresh_authorization() */
Packit 4b6dd7
	g_object_set_data (G_OBJECT (data->authorizer), "error", GUINT_TO_POINTER (TRUE));
Packit 4b6dd7
Packit 4b6dd7
	main_loop = g_main_loop_new (NULL, FALSE);
Packit 4b6dd7
Packit 4b6dd7
	gdata_authorizer_refresh_authorization_async (data->authorizer, NULL,
Packit 4b6dd7
	                                              (GAsyncReadyCallback) test_authorizer_refresh_authorization_async_protocol_error_cb, main_loop);
Packit 4b6dd7
Packit 4b6dd7
	g_main_loop_run (main_loop);
Packit 4b6dd7
Packit 4b6dd7
	g_assert_cmpuint (GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (data->authorizer), "counter")), ==, 1);
Packit 4b6dd7
Packit 4b6dd7
	g_main_loop_unref (main_loop);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/* Test that calling refresh_authorization_async() on an authorizer which doesn't implement it, but does implement refresh_authorization(), then
Packit 4b6dd7
 * cancelling the call returns FALSE with a cancellation error */
Packit 4b6dd7
static void
Packit 4b6dd7
test_authorizer_refresh_authorization_async_cancellation_simulated (AuthorizerData *data, gconstpointer user_data)
Packit 4b6dd7
{
Packit 4b6dd7
	GCancellable *cancellable;
Packit 4b6dd7
	GMainLoop *main_loop;
Packit 4b6dd7
Packit 4b6dd7
	main_loop = g_main_loop_new (NULL, FALSE);
Packit 4b6dd7
Packit 4b6dd7
	cancellable = g_cancellable_new ();
Packit 4b6dd7
	g_cancellable_cancel (cancellable);
Packit 4b6dd7
Packit 4b6dd7
	/* Note we don't count how many times the implementation of refresh_authorization() is called, since cancellation can legitimately be
Packit 4b6dd7
	 * handled by the gdata_authorizer_refresh_authorization_async() code before refresh_authorization() is ever called. */
Packit 4b6dd7
	gdata_authorizer_refresh_authorization_async (data->authorizer, cancellable,
Packit 4b6dd7
	                                              (GAsyncReadyCallback) test_authorizer_refresh_authorization_async_cancelled_error_cb,
Packit 4b6dd7
	                                              main_loop);
Packit 4b6dd7
Packit 4b6dd7
	g_main_loop_run (main_loop);
Packit 4b6dd7
Packit 4b6dd7
	g_object_unref (cancellable);
Packit 4b6dd7
	g_main_loop_unref (main_loop);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/* Test that calling refresh_authorization_async() on an authorizer which doesn't implement it returns FALSE without an error */
Packit 4b6dd7
static void
Packit 4b6dd7
test_authorizer_refresh_authorization_async_unimplemented (AuthorizerData *data, gconstpointer user_data)
Packit 4b6dd7
{
Packit 4b6dd7
	GMainLoop *main_loop;
Packit 4b6dd7
Packit 4b6dd7
	main_loop = g_main_loop_new (NULL, FALSE);
Packit 4b6dd7
Packit 4b6dd7
	gdata_authorizer_refresh_authorization_async (data->authorizer, NULL,
Packit 4b6dd7
	                                              (GAsyncReadyCallback) test_authorizer_refresh_authorization_async_failure_no_error_cb,
Packit 4b6dd7
	                                              main_loop);
Packit 4b6dd7
Packit 4b6dd7
	g_main_loop_run (main_loop);
Packit 4b6dd7
Packit 4b6dd7
	g_main_loop_unref (main_loop);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
/* Test that calling refresh_authorization_async() on an authorizer which doesn't implement it, then cancelling the call returns FALSE without an
Packit 4b6dd7
 * error (not even a cancellation error) */
Packit 4b6dd7
static void
Packit 4b6dd7
test_authorizer_refresh_authorization_async_cancellation_unimplemented (AuthorizerData *data, gconstpointer user_data)
Packit 4b6dd7
{
Packit 4b6dd7
	GCancellable *cancellable;
Packit 4b6dd7
	GMainLoop *main_loop;
Packit 4b6dd7
Packit 4b6dd7
	main_loop = g_main_loop_new (NULL, FALSE);
Packit 4b6dd7
Packit 4b6dd7
	cancellable = g_cancellable_new ();
Packit 4b6dd7
	g_cancellable_cancel (cancellable);
Packit 4b6dd7
Packit 4b6dd7
	gdata_authorizer_refresh_authorization_async (data->authorizer, cancellable,
Packit 4b6dd7
	                                              (GAsyncReadyCallback) test_authorizer_refresh_authorization_async_failure_no_error_cb,
Packit 4b6dd7
	                                              main_loop);
Packit 4b6dd7
Packit 4b6dd7
	g_main_loop_run (main_loop);
Packit 4b6dd7
Packit 4b6dd7
	g_object_unref (cancellable);
Packit 4b6dd7
	g_main_loop_unref (main_loop);
Packit 4b6dd7
}
Packit 4b6dd7
Packit 4b6dd7
int
Packit 4b6dd7
main (int argc, char *argv[])
Packit 4b6dd7
{
Packit 4b6dd7
	int retval;
Packit 4b6dd7
Packit 4b6dd7
	gdata_test_init (argc, argv);
Packit 4b6dd7
Packit 4b6dd7
	/* Note: This is not how GDataAuthorizationDomains are meant to be constructed. Client code is not expected to do this. */
Packit 4b6dd7
	test_domain1 = g_object_new (GDATA_TYPE_AUTHORIZATION_DOMAIN,
Packit 4b6dd7
	                             "service-name", "service-name1",
Packit 4b6dd7
	                             "scope", "scope1",
Packit 4b6dd7
	                             NULL);
Packit 4b6dd7
	test_domain2 = g_object_new (GDATA_TYPE_AUTHORIZATION_DOMAIN,
Packit 4b6dd7
	                             "service-name", "service-name2",
Packit 4b6dd7
	                             "scope", "scope2",
Packit 4b6dd7
	                             NULL);
Packit 4b6dd7
Packit 4b6dd7
	/* GDataAuthorizationDomain tests */
Packit 4b6dd7
	g_test_add_func ("/authorization-domain/properties", test_authorization_domain_properties);
Packit 4b6dd7
Packit 4b6dd7
	/* GDataAuthorizer interface tests */
Packit 4b6dd7
	g_test_add ("/authorizer/process-request", AuthorizerData, NULL, set_up_simple_authorizer_data, test_authorizer_process_request,
Packit 4b6dd7
	            tear_down_authorizer_data);
Packit 4b6dd7
	g_test_add ("/authorizer/process-request/null", AuthorizerData, NULL, set_up_simple_authorizer_data, test_authorizer_process_request_null,
Packit 4b6dd7
	            tear_down_authorizer_data);
Packit 4b6dd7
	g_test_add ("/authorizer/is-authorized-for-domain", AuthorizerData, NULL, set_up_simple_authorizer_data,
Packit 4b6dd7
	            test_authorizer_is_authorized_for_domain, tear_down_authorizer_data);
Packit 4b6dd7
	g_test_add ("/authorizer/is-authorized-for-domain/null", AuthorizerData, NULL, set_up_simple_authorizer_data,
Packit 4b6dd7
	            test_authorizer_is_authorized_for_domain_null, tear_down_authorizer_data);
Packit 4b6dd7
	g_test_add ("/authorizer/refresh-authorization", AuthorizerData, NULL, set_up_normal_authorizer_data,
Packit 4b6dd7
	            test_authorizer_refresh_authorization, tear_down_authorizer_data);
Packit 4b6dd7
	g_test_add ("/authorizer/refresh-authorization/error", AuthorizerData, NULL, set_up_normal_authorizer_data,
Packit 4b6dd7
	            test_authorizer_refresh_authorization_error, tear_down_authorizer_data);
Packit 4b6dd7
	g_test_add ("/authorizer/refresh-authorization/unimplemented", AuthorizerData, NULL, set_up_simple_authorizer_data,
Packit 4b6dd7
	            test_authorizer_refresh_authorization_unimplemented, tear_down_authorizer_data);
Packit 4b6dd7
	g_test_add ("/authorizer/refresh-authorization/cancellation/unimplemented", AuthorizerData, NULL, set_up_simple_authorizer_data,
Packit 4b6dd7
	            test_authorizer_refresh_authorization_cancellation_unimplemented, tear_down_authorizer_data);
Packit 4b6dd7
	g_test_add ("/authorizer/refresh-authorization/async", AuthorizerData, NULL, set_up_complex_authorizer_data,
Packit 4b6dd7
	            test_authorizer_refresh_authorization_async, tear_down_authorizer_data);
Packit 4b6dd7
	g_test_add ("/authorizer/refresh-authorization/async/error", AuthorizerData, NULL, set_up_complex_authorizer_data,
Packit 4b6dd7
	            test_authorizer_refresh_authorization_async_error, tear_down_authorizer_data);
Packit 4b6dd7
	g_test_add ("/authorizer/refresh-authorization/async/cancellation", AuthorizerData, NULL, set_up_complex_authorizer_data,
Packit 4b6dd7
	            test_authorizer_refresh_authorization_async_cancellation, tear_down_authorizer_data);
Packit 4b6dd7
	g_test_add ("/authorizer/refresh-authorization/async/simulated", AuthorizerData, NULL, set_up_normal_authorizer_data,
Packit 4b6dd7
	            test_authorizer_refresh_authorization_async_simulated, tear_down_authorizer_data);
Packit 4b6dd7
	g_test_add ("/authorizer/refresh-authorization/async/error/simulated", AuthorizerData, NULL, set_up_normal_authorizer_data,
Packit 4b6dd7
	            test_authorizer_refresh_authorization_async_error_simulated, tear_down_authorizer_data);
Packit 4b6dd7
	g_test_add ("/authorizer/refresh-authorization/async/cancellation/simulated", AuthorizerData, NULL, set_up_normal_authorizer_data,
Packit 4b6dd7
	            test_authorizer_refresh_authorization_async_cancellation_simulated, tear_down_authorizer_data);
Packit 4b6dd7
	g_test_add ("/authorizer/refresh-authorization/async/unimplemented", AuthorizerData, NULL, set_up_simple_authorizer_data,
Packit 4b6dd7
	            test_authorizer_refresh_authorization_async_unimplemented, tear_down_authorizer_data);
Packit 4b6dd7
	g_test_add ("/authorizer/refresh-authorization/async/cancellation/unimplemented", AuthorizerData, NULL, set_up_simple_authorizer_data,
Packit 4b6dd7
	            test_authorizer_refresh_authorization_async_cancellation_unimplemented, tear_down_authorizer_data);
Packit 4b6dd7
Packit 4b6dd7
	retval = g_test_run ();
Packit 4b6dd7
Packit 4b6dd7
	g_object_unref (test_domain2);
Packit 4b6dd7
	g_object_unref (test_domain1);
Packit 4b6dd7
Packit 4b6dd7
	return retval;
Packit 4b6dd7
}