summaryrefslogtreecommitdiff
path: root/gdata/tests/client-login-authorizer.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdata/tests/client-login-authorizer.c')
-rw-r--r--gdata/tests/client-login-authorizer.c820
1 files changed, 0 insertions, 820 deletions
diff --git a/gdata/tests/client-login-authorizer.c b/gdata/tests/client-login-authorizer.c
deleted file mode 100644
index 1f40dfaa..00000000
--- a/gdata/tests/client-login-authorizer.c
+++ /dev/null
@@ -1,820 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/*
- * GData Client
- * Copyright (C) Philip Withnall 2011 <philip@tecnocode.co.uk>
- *
- * GData Client is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * GData Client is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with GData Client. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <glib.h>
-#include <gdata/gdata.h>
-
-#include "common.h"
-
-static GThread *main_thread = NULL;
-static UhmServer *mock_server = NULL;
-
-static void
-test_client_login_authorizer_constructor (void)
-{
- GDataClientLoginAuthorizer *authorizer;
-
- authorizer = gdata_client_login_authorizer_new ("client-id", GDATA_TYPE_YOUTUBE_SERVICE);
-
- g_assert (authorizer != NULL);
- g_assert (GDATA_IS_CLIENT_LOGIN_AUTHORIZER (authorizer));
- g_assert (GDATA_IS_AUTHORIZER (authorizer));
-
- g_object_unref (authorizer);
-}
-
-static void
-test_client_login_authorizer_constructor_for_domains (void)
-{
- GDataClientLoginAuthorizer *authorizer;
- GDataAuthorizationDomain *domain;
- GList *domains;
-
- /* Try with standard domains first */
- domains = gdata_service_get_authorization_domains (GDATA_TYPE_YOUTUBE_SERVICE);
- authorizer = gdata_client_login_authorizer_new_for_authorization_domains ("client-id", domains);
- g_list_free (domains);
-
- g_assert (authorizer != NULL);
- g_assert (GDATA_IS_CLIENT_LOGIN_AUTHORIZER (authorizer));
- g_assert (GDATA_IS_AUTHORIZER (authorizer));
-
- g_object_unref (authorizer);
-
- /* Try again with a custom domain. Note that, as in test_authorization_domain_properties() this should not normally happen in client code. */
- domain = GDATA_AUTHORIZATION_DOMAIN (g_object_new (GDATA_TYPE_AUTHORIZATION_DOMAIN,
- "service-name", "test",
- "scope", "test",
- NULL));
-
- domains = g_list_prepend (NULL, domain);
- authorizer = gdata_client_login_authorizer_new_for_authorization_domains ("client-id", domains);
- g_list_free (domains);
-
- g_assert (authorizer != NULL);
- g_assert (GDATA_IS_CLIENT_LOGIN_AUTHORIZER (authorizer));
- g_assert (GDATA_IS_AUTHORIZER (authorizer));
-
- g_object_unref (authorizer);
- g_object_unref (domain);
-}
-
-typedef struct {
- GDataClientLoginAuthorizer *authorizer;
-
- guint proxy_resolver_notification_count;
- gulong proxy_resolver_signal_handler;
- guint timeout_notification_count;
- gulong timeout_signal_handler;
- guint username_notification_count;
- gulong username_signal_handler;
- guint password_notification_count;
- gulong password_signal_handler;
-} ClientLoginAuthorizerData;
-
-/* Used to count that exactly the right number of notify signals are emitted when setting properties */
-static void
-notify_cb (GObject *object, GParamSpec *pspec, guint *notification_count)
-{
- /* Check we're running in the main thread */
- g_assert (g_thread_self () == main_thread);
-
- /* Increment the notification count */
- *notification_count = *notification_count + 1;
-}
-
-static void
-connect_to_client_login_authorizer (ClientLoginAuthorizerData *data)
-{
- /* Connect to notifications from the object to verify they're only emitted the correct number of times */
- data->proxy_resolver_signal_handler = g_signal_connect (data->authorizer, "notify::proxy-resolver", (GCallback) notify_cb,
- &(data->proxy_resolver_notification_count));
- data->timeout_signal_handler = g_signal_connect (data->authorizer, "notify::timeout", (GCallback) notify_cb,
- &(data->timeout_notification_count));
- data->username_signal_handler = g_signal_connect (data->authorizer, "notify::username", (GCallback) notify_cb,
- &(data->username_notification_count));
- data->password_signal_handler = g_signal_connect (data->authorizer, "notify::password", (GCallback) notify_cb,
- &(data->password_notification_count));
-}
-
-static void
-set_up_client_login_authorizer_data (ClientLoginAuthorizerData *data, gconstpointer user_data)
-{
- data->authorizer = gdata_client_login_authorizer_new ("client-id", GDATA_TYPE_YOUTUBE_SERVICE);
- connect_to_client_login_authorizer (data);
-}
-
-static void
-set_up_client_login_authorizer_data_multiple_domains (ClientLoginAuthorizerData *data, gconstpointer user_data)
-{
- GList *authorization_domains = NULL;
-
- authorization_domains = g_list_prepend (authorization_domains, gdata_youtube_service_get_primary_authorization_domain ());
- authorization_domains = g_list_prepend (authorization_domains, gdata_picasaweb_service_get_primary_authorization_domain ());
- data->authorizer = gdata_client_login_authorizer_new_for_authorization_domains ("client-id", authorization_domains);
- g_list_free (authorization_domains);
-
- connect_to_client_login_authorizer (data);
-}
-
-static void
-set_up_client_login_authorizer_data_authenticated (ClientLoginAuthorizerData *data, gconstpointer user_data)
-{
- gdata_test_mock_server_start_trace (mock_server, "setup-client-login-authorizer-data-authenticated");
-
- data->authorizer = gdata_client_login_authorizer_new ("client-id", GDATA_TYPE_YOUTUBE_SERVICE);
- g_assert (gdata_client_login_authorizer_authenticate (data->authorizer, USERNAME, PASSWORD, NULL, NULL) == TRUE);
- connect_to_client_login_authorizer (data);
-
- uhm_server_end_trace (mock_server);
-}
-
-static void
-tear_down_client_login_authorizer_data (ClientLoginAuthorizerData *data, gconstpointer user_data)
-{
- /* Clean up signal handlers */
- g_signal_handler_disconnect (data->authorizer, data->password_signal_handler);
- g_signal_handler_disconnect (data->authorizer, data->username_signal_handler);
- g_signal_handler_disconnect (data->authorizer, data->timeout_signal_handler);
- g_signal_handler_disconnect (data->authorizer, data->proxy_resolver_signal_handler);
-
- g_object_unref (data->authorizer);
-}
-
-/* Test getting and setting the client-id property */
-static void
-test_client_login_authorizer_properties_client_id (ClientLoginAuthorizerData *data, gconstpointer user_data)
-{
- gchar *client_id;
-
- /* Verifying the normal state of the property in a newly-constructed instance of GDataClientLoginAuthorizer */
- g_assert_cmpstr (gdata_client_login_authorizer_get_client_id (data->authorizer), ==, "client-id");
-
- g_object_get (data->authorizer, "client-id", &client_id, NULL);
- g_assert_cmpstr (client_id, ==, "client-id");
- g_free (client_id);
-}
-
-/* Test getting and setting the username property */
-static void
-test_client_login_authorizer_properties_username (ClientLoginAuthorizerData *data, gconstpointer user_data)
-{
- gchar *username;
-
- /* Verifying the normal state of the property in a newly-constructed instance of GDataClientLoginAuthorizer */
- g_assert (gdata_client_login_authorizer_get_username (data->authorizer) == NULL);
-
- g_object_get (data->authorizer, "username", &username, NULL);
- g_assert (username == NULL);
- g_free (username);
-}
-
-/* Test getting and setting the password property */
-static void
-test_client_login_authorizer_properties_password (ClientLoginAuthorizerData *data, gconstpointer user_data)
-{
- gchar *password;
-
- /* Verifying the normal state of the property in a newly-constructed instance of GDataClientLoginAuthorizer */
- g_assert (gdata_client_login_authorizer_get_password (data->authorizer) == NULL);
-
- g_object_get (data->authorizer, "password", &password, NULL);
- g_assert (password == NULL);
- g_free (password);
-}
-
-/* Test getting and setting the proxy-resolver property */
-static void
-test_client_login_authorizer_properties_proxy_resolver (ClientLoginAuthorizerData *data, gconstpointer user_data)
-{
- GProxyResolver *old_proxy_resolver, *proxy_resolver, *new_proxy_resolver;
-
- /* Verifying the normal state of the property in a newly-constructed instance of GDataClientLoginAuthorizer.
- * Since the resolver comes from the SoupSession, we don’t know whether it’s initially NULL. */
- old_proxy_resolver = gdata_client_login_authorizer_get_proxy_resolver (data->authorizer);
-
- g_object_get (data->authorizer, "proxy-resolver", &proxy_resolver, NULL);
- g_assert (proxy_resolver == old_proxy_resolver);
-
- g_assert_cmpuint (data->proxy_resolver_notification_count, ==, 0);
-
- /* Check setting it works and emits a notification */
- new_proxy_resolver = g_object_ref (g_proxy_resolver_get_default ());
- gdata_client_login_authorizer_set_proxy_resolver (data->authorizer, new_proxy_resolver);
-
- g_assert_cmpuint (data->proxy_resolver_notification_count, ==, 1);
-
- g_assert (gdata_client_login_authorizer_get_proxy_resolver (data->authorizer) != NULL);
- g_assert (gdata_client_login_authorizer_get_proxy_resolver (data->authorizer) == new_proxy_resolver);
-
- g_object_get (data->authorizer, "proxy-resolver", &proxy_resolver, NULL);
- g_assert (proxy_resolver != NULL);
- g_assert (gdata_client_login_authorizer_get_proxy_resolver (data->authorizer) == new_proxy_resolver);
- g_object_unref (proxy_resolver);
-
- g_object_unref (new_proxy_resolver);
-
- /* Check setting it to NULL works */
- gdata_client_login_authorizer_set_proxy_resolver (data->authorizer, NULL);
-
- g_assert_cmpuint (data->proxy_resolver_notification_count, ==, 2);
-
- g_assert (gdata_client_login_authorizer_get_proxy_resolver (data->authorizer) == NULL);
-
- g_object_get (data->authorizer, "proxy-resolver", &proxy_resolver, NULL);
- g_assert (proxy_resolver == NULL);
-
- /* Test that setting it using g_object_set() works */
- new_proxy_resolver = g_object_ref (g_proxy_resolver_get_default ());
- g_object_set (data->authorizer, "proxy-resolver", new_proxy_resolver, NULL);
- g_object_unref (new_proxy_resolver);
-
- g_assert (gdata_client_login_authorizer_get_proxy_resolver (data->authorizer) != NULL);
-}
-
-/* Test getting and setting the timeout property */
-static void
-test_client_login_authorizer_properties_timeout (ClientLoginAuthorizerData *data, gconstpointer user_data)
-{
- guint timeout;
-
- /* Verifying the normal state of the property in a newly-constructed instance of GDataClientLoginAuthorizer */
- g_assert_cmpuint (gdata_client_login_authorizer_get_timeout (data->authorizer), ==, 0);
-
- g_object_get (data->authorizer, "timeout", &timeout, NULL);
- g_assert_cmpuint (timeout, ==, 0);
-
- g_assert_cmpuint (data->timeout_notification_count, ==, 0);
-
- /* Check setting it works and emits a notification */
- gdata_client_login_authorizer_set_timeout (data->authorizer, 30);
-
- g_assert_cmpuint (data->timeout_notification_count, ==, 1);
-
- g_assert_cmpuint (gdata_client_login_authorizer_get_timeout (data->authorizer), ==, 30);
-
- g_object_get (data->authorizer, "timeout", &timeout, NULL);
- g_assert_cmpuint (timeout, ==, 30);
-
- /* Check setting it back to 0 works */
- gdata_client_login_authorizer_set_timeout (data->authorizer, 0);
-
- g_assert_cmpuint (data->timeout_notification_count, ==, 2);
-
- g_assert_cmpuint (gdata_client_login_authorizer_get_timeout (data->authorizer), ==, 0);
-
- g_object_get (data->authorizer, "timeout", &timeout, NULL);
- g_assert_cmpuint (timeout, ==, 0);
-
- /* Test that setting it using g_object_set() works */
- g_object_set (data->authorizer, "timeout", 15, NULL);
- g_assert_cmpuint (gdata_client_login_authorizer_get_timeout (data->authorizer), ==, 15);
-}
-
-/* Standard tests for pre-authentication in sync and async tests with single or multiple domains */
-static void
-pre_test_authentication (ClientLoginAuthorizerData *data)
-{
- /* Check we're not already authorised any domains */
- g_assert (gdata_authorizer_is_authorized_for_domain (GDATA_AUTHORIZER (data->authorizer),
- gdata_youtube_service_get_primary_authorization_domain ()) == FALSE);
- g_assert (gdata_authorizer_is_authorized_for_domain (GDATA_AUTHORIZER (data->authorizer),
- gdata_picasaweb_service_get_primary_authorization_domain ()) == FALSE);
-
- g_assert_cmpuint (data->username_notification_count, ==, 0);
- g_assert_cmpuint (data->password_notification_count, ==, 0);
-}
-
-/* Standard tests for post-authentication (successful or not controlled by @authorized) in sync tests with single domains */
-static void
-post_test_authentication (ClientLoginAuthorizerData *data, gboolean authorized)
-{
- /* Are we authorised now? */
- g_assert (gdata_authorizer_is_authorized_for_domain (GDATA_AUTHORIZER (data->authorizer),
- gdata_youtube_service_get_primary_authorization_domain ()) == authorized);
-
- g_assert_cmpuint (data->username_notification_count, ==, 1);
- g_assert_cmpuint (data->password_notification_count, ==, 1);
-
- if (authorized == TRUE) {
- /* Check the username and password were set correctly. Note that we always assert that the domain name is present in the username. */
- g_assert_cmpstr (gdata_client_login_authorizer_get_username (data->authorizer), ==, USERNAME);
- g_assert_cmpstr (gdata_client_login_authorizer_get_password (data->authorizer), ==, PASSWORD);
- } else {
- /* Check the username and password are *not* set. */
- g_assert (gdata_client_login_authorizer_get_username (data->authorizer) == NULL);
- g_assert (gdata_client_login_authorizer_get_password (data->authorizer) == NULL);
- }
-}
-
-/* Test that synchronous authentication against a single authorization domains succeeds */
-static void
-test_client_login_authorizer_authenticate_sync (ClientLoginAuthorizerData *data, gconstpointer _username)
-{
- const gchar *username = (const gchar*) _username;
- gboolean success;
- GError *error = NULL;
-
- gdata_test_mock_server_start_trace (mock_server, "client-login-authorizer-authenticate-sync");
-
- pre_test_authentication (data);
-
- /* Authenticate! */
- success = gdata_client_login_authorizer_authenticate (data->authorizer, username, PASSWORD, NULL, &error);
- g_assert_no_error (error);
- g_assert (success == TRUE);
- g_clear_error (&error);
-
- post_test_authentication (data, TRUE);
-
- uhm_server_end_trace (mock_server);
-}
-
-/* Test that authentication using an incorrect password fails */
-static void
-test_client_login_authorizer_authenticate_sync_bad_password (ClientLoginAuthorizerData *data, gconstpointer _username)
-{
- const gchar *username = (const gchar*) _username;
- gboolean success;
- GError *error = NULL;
-
- gdata_test_mock_server_start_trace (mock_server, "client-login-authorizer-authenticate-sync-bad-password");
-
- pre_test_authentication (data);
-
- /* Authenticate! */
- success = gdata_client_login_authorizer_authenticate (data->authorizer, username, INCORRECT_PASSWORD, NULL, &error);
- g_assert_error (error, GDATA_CLIENT_LOGIN_AUTHORIZER_ERROR, GDATA_CLIENT_LOGIN_AUTHORIZER_ERROR_BAD_AUTHENTICATION);
- g_assert (success == FALSE);
- g_clear_error (&error);
-
- post_test_authentication (data, FALSE);
-
- uhm_server_end_trace (mock_server);
-}
-
-/* Test that authentication against multiple authorization domains simultaneously and synchronously works */
-static void
-test_client_login_authorizer_authenticate_sync_multiple_domains (ClientLoginAuthorizerData *data, gconstpointer user_data)
-{
- gboolean success;
- GError *error = NULL;
-
- gdata_test_mock_server_start_trace (mock_server, "client-login-authorizer-authenticate-sync-multiple-domains");
-
- pre_test_authentication (data);
-
- /* Authenticate! */
- success = gdata_client_login_authorizer_authenticate (data->authorizer, USERNAME, PASSWORD, NULL, &error);
- g_assert_no_error (error);
- g_assert (success == TRUE);
- g_clear_error (&error);
-
- /* Are we authorised in the second domain now? */
- g_assert (gdata_authorizer_is_authorized_for_domain (GDATA_AUTHORIZER (data->authorizer),
- gdata_picasaweb_service_get_primary_authorization_domain ()) == TRUE);
-
- post_test_authentication (data, TRUE);
-
- uhm_server_end_trace (mock_server);
-}
-
-/* Test that synchronous authentication can be cancelled */
-static void
-test_client_login_authorizer_authenticate_sync_cancellation (ClientLoginAuthorizerData *data, gconstpointer user_data)
-{
- gboolean success;
- GCancellable *cancellable;
- GError *error = NULL;
-
- gdata_test_mock_server_start_trace (mock_server, "client-login-authorizer-authenticate-sync-cancellation");
-
- pre_test_authentication (data);
-
- /* Set up the cancellable */
- cancellable = g_cancellable_new ();
-
- /* Authenticate! This should return immediately as the cancellable was cancelled beforehand. */
- g_cancellable_cancel (cancellable);
- success = gdata_client_login_authorizer_authenticate (data->authorizer, USERNAME, PASSWORD, cancellable, &error);
- g_assert_error (error, G_IO_ERROR, G_IO_ERROR_CANCELLED);
- g_assert (success == FALSE);
- g_clear_error (&error);
-
- post_test_authentication (data, FALSE);
-
- g_object_unref (cancellable);
-
- uhm_server_end_trace (mock_server);
-}
-
-typedef struct {
- ClientLoginAuthorizerData parent;
- GMainLoop *main_loop;
-} ClientLoginAuthorizerAsyncData;
-
-static void
-set_up_client_login_authorizer_async_data (ClientLoginAuthorizerAsyncData *data, gconstpointer user_data)
-{
- /* Chain up */
- set_up_client_login_authorizer_data ((ClientLoginAuthorizerData*) data, user_data);
-
- /* Set up the main loop */
- data->main_loop = g_main_loop_new (NULL, FALSE);
-}
-
-static void
-set_up_client_login_authorizer_async_data_multiple_domains (ClientLoginAuthorizerAsyncData *data, gconstpointer user_data)
-{
- /* Chain up */
- set_up_client_login_authorizer_data_multiple_domains ((ClientLoginAuthorizerData*) data, user_data);
-
- /* Set up the main loop */
- data->main_loop = g_main_loop_new (NULL, FALSE);
-}
-
-static void
-tear_down_client_login_authorizer_async_data (ClientLoginAuthorizerAsyncData *data, gconstpointer user_data)
-{
- g_main_loop_unref (data->main_loop);
-
- /* Chain up */
- tear_down_client_login_authorizer_data ((ClientLoginAuthorizerData*) data, user_data);
-}
-
-/* Standard tests for post-authentication (successful or not controlled by @authorized) in async tests with single domains */
-static void
-post_test_authentication_async (ClientLoginAuthorizerAsyncData *data, gboolean authorized)
-{
- /* Spin on the notification counts being incremented */
- while (data->parent.username_notification_count == 0 || data->parent.password_notification_count == 0) {
- g_main_context_iteration (g_main_loop_get_context (data->main_loop), FALSE);
- }
-
- post_test_authentication ((ClientLoginAuthorizerData*) data, authorized);
-}
-
-static void
-test_client_login_authorizer_authenticate_async_cb (GDataClientLoginAuthorizer *authorizer, GAsyncResult *async_result,
- ClientLoginAuthorizerAsyncData *data)
-{
- gboolean success;
- GError *error = NULL;
-
- success = gdata_client_login_authorizer_authenticate_finish (authorizer, async_result, &error);
- g_assert_no_error (error);
- g_assert (success == TRUE);
- g_clear_error (&error);
-
- post_test_authentication_async (data, TRUE);
-
- g_main_loop_quit (data->main_loop);
-}
-
-/* Test that asynchronous authentication against a single authorization domain works */
-static void
-test_client_login_authorizer_authenticate_async (ClientLoginAuthorizerAsyncData *data, gconstpointer user_data)
-{
- gdata_test_mock_server_start_trace (mock_server, "client-login-authorizer-authenticate-async");
-
- pre_test_authentication ((ClientLoginAuthorizerData*) data);
-
- /* Create a main loop and authenticate */
- gdata_client_login_authorizer_authenticate_async (data->parent.authorizer, USERNAME, PASSWORD, NULL,
- (GAsyncReadyCallback) test_client_login_authorizer_authenticate_async_cb, data);
-
- g_main_loop_run (data->main_loop);
-
- uhm_server_end_trace (mock_server);
-}
-
-static void
-test_client_login_authorizer_authenticate_async_multiple_domains_cb (GDataClientLoginAuthorizer *authorizer, GAsyncResult *async_result,
- ClientLoginAuthorizerAsyncData *data)
-{
- gboolean success;
- GError *error = NULL;
-
- success = gdata_client_login_authorizer_authenticate_finish (authorizer, async_result, &error);
- g_assert_no_error (error);
- g_assert (success == TRUE);
- g_clear_error (&error);
-
- /* Assert that we're now authorised in the second domain */
- g_assert (gdata_authorizer_is_authorized_for_domain (GDATA_AUTHORIZER (authorizer),
- gdata_picasaweb_service_get_primary_authorization_domain ()) == TRUE);
-
- post_test_authentication_async (data, TRUE);
-
- g_main_loop_quit (data->main_loop);
-}
-
-/* Test that authentication against multiple authorization domains simultaneously and asynchronously works */
-static void
-test_client_login_authorizer_authenticate_async_multiple_domains (ClientLoginAuthorizerAsyncData *data, gconstpointer user_data)
-{
- gdata_test_mock_server_start_trace (mock_server, "client-login-authorizer-authenticate-async-multiple-domains");
-
- pre_test_authentication ((ClientLoginAuthorizerData*) data);
-
- /* Create a main loop and authenticate */
- gdata_client_login_authorizer_authenticate_async (data->parent.authorizer, USERNAME, PASSWORD, NULL,
- (GAsyncReadyCallback) test_client_login_authorizer_authenticate_async_multiple_domains_cb,
- data);
-
- g_main_loop_run (data->main_loop);
-
- uhm_server_end_trace (mock_server);
-}
-
-static void
-test_client_login_authorizer_authenticate_async_cancellation_cb (GDataClientLoginAuthorizer *authorizer, GAsyncResult *async_result,
- ClientLoginAuthorizerAsyncData *data)
-{
- gboolean success;
- GError *error = NULL;
-
- success = gdata_client_login_authorizer_authenticate_finish (authorizer, async_result, &error);
- g_assert_error (error, G_IO_ERROR, G_IO_ERROR_CANCELLED);
- g_assert (success == FALSE);
- g_clear_error (&error);
-
- post_test_authentication_async (data, FALSE);
-
- g_main_loop_quit (data->main_loop);
-}
-
-/* Test that cancellation of asynchronous authentication works */
-static void
-test_client_login_authorizer_authenticate_async_cancellation (ClientLoginAuthorizerAsyncData *data, gconstpointer user_data)
-{
- GCancellable *cancellable;
-
- gdata_test_mock_server_start_trace (mock_server, "client-login-authorizer-authenticate-async-cancellation");
-
- pre_test_authentication ((ClientLoginAuthorizerData*) data);
-
- /* Set up the cancellable */
- cancellable = g_cancellable_new ();
-
- /* Create a main loop and authenticate */
- gdata_client_login_authorizer_authenticate_async (data->parent.authorizer, USERNAME, PASSWORD, cancellable,
- (GAsyncReadyCallback) test_client_login_authorizer_authenticate_async_cancellation_cb,
- data);
- g_cancellable_cancel (cancellable);
-
- g_main_loop_run (data->main_loop);
-
- g_object_unref (cancellable);
-
- uhm_server_end_trace (mock_server);
-}
-
-/* Test that gdata_authorizer_refresh_authorization() is a no-op (when authorised or not) */
-static void
-test_client_login_authorizer_refresh_authorization (ClientLoginAuthorizerData *data, gconstpointer user_data)
-{
- GError *error = NULL;
-
- g_assert (gdata_authorizer_refresh_authorization (GDATA_AUTHORIZER (data->authorizer), NULL, &error) == FALSE);
- g_assert_no_error (error);
- g_clear_error (&error);
-}
-
-/* Test that processing a request with a NULL domain will not change the request. */
-static void
-test_client_login_authorizer_process_request_null (ClientLoginAuthorizerData *data, gconstpointer user_data)
-{
- SoupMessage *message;
- SoupMessageHeadersIter iter;
- guint header_count = 0;
- const gchar *name, *value;
-
- /* Create a new message with an empty set of request headers */
- message = soup_message_new (SOUP_METHOD_GET, "https://example.com/");
-
- /* Process the message */
- gdata_authorizer_process_request (GDATA_AUTHORIZER (data->authorizer), NULL, message);
-
- /* Check that the set of request headers is still empty */
- soup_message_headers_iter_init (&iter, message->request_headers);
-
- while (soup_message_headers_iter_next (&iter, &name, &value) == TRUE) {
- header_count++;
- }
-
- g_assert_cmpuint (header_count, ==, 0);
-
- g_object_unref (message);
-}
-
-/* Test that processing a request with an authorizer which hasn't been authenticated yet will not change the request. */
-static void
-test_client_login_authorizer_process_request_unauthenticated (ClientLoginAuthorizerData *data, gconstpointer user_data)
-{
- SoupMessage *message;
- SoupMessageHeadersIter iter;
- guint header_count = 0;
- const gchar *name, *value;
-
- /* Create a new message with an empty set of request headers */
- message = soup_message_new (SOUP_METHOD_GET, "https://example.com/");
-
- /* Process the message */
- gdata_authorizer_process_request (GDATA_AUTHORIZER (data->authorizer), gdata_youtube_service_get_primary_authorization_domain (), message);
-
- /* Check that the set of request headers is still empty */
- soup_message_headers_iter_init (&iter, message->request_headers);
-
- while (soup_message_headers_iter_next (&iter, &name, &value) == TRUE) {
- header_count++;
- }
-
- g_assert_cmpuint (header_count, ==, 0);
-
- g_object_unref (message);
-}
-
-/* Test that processing a request with an authorizer which has been authenticated will change the request. */
-static void
-test_client_login_authorizer_process_request_authenticated (ClientLoginAuthorizerData *data, gconstpointer user_data)
-{
- SoupMessage *message;
- SoupMessageHeadersIter iter;
- guint header_count = 0;
- const gchar *name, *value;
-
- /* Create a new message with an empty set of request headers */
- message = soup_message_new (SOUP_METHOD_GET, "https://example.com/");
-
- /* Process the message */
- gdata_authorizer_process_request (GDATA_AUTHORIZER (data->authorizer), gdata_youtube_service_get_primary_authorization_domain (), message);
-
- /* Check that at least one new header has been set */
- soup_message_headers_iter_init (&iter, message->request_headers);
-
- while (soup_message_headers_iter_next (&iter, &name, &value) == TRUE) {
- header_count++;
- }
-
- g_assert_cmpuint (header_count, >, 0);
-
- g_object_unref (message);
-}
-
-static void
-test_client_login_authorizer_process_request_insecure_subprocess (ClientLoginAuthorizerData *data, gconstpointer user_data)
-{
- SoupMessage *message;
-
- /* Create a new message which uses HTTP instead of HTTPS */
- message = soup_message_new (SOUP_METHOD_GET, "http://example.com/");
- gdata_authorizer_process_request (GDATA_AUTHORIZER (data->authorizer), gdata_youtube_service_get_primary_authorization_domain (),
- message);
- g_object_unref (message);
-}
-
-/* Test that processing a HTTP request (as opposed to the more normal HTTPS request) with an authenticated authorizer will abort rather than
- * transmitting the user's private auth token over an insecure HTTP connection. */
-static void
-test_client_login_authorizer_process_request_insecure (ClientLoginAuthorizerData *data, gconstpointer user_data)
-{
- /* Process the message */
-#if GLIB_CHECK_VERSION(2, 38, 0)
- g_test_trap_subprocess ("/client-login-authorizer/process-request/insecure/subprocess", 0, 0);
-#else
- if (g_test_trap_fork (0, 0) == TRUE) {
- test_client_login_authorizer_process_request_insecure_subprocess (data, user_data);
- exit (0);
- }
-#endif
-
- /* Assert that it aborted */
- g_test_trap_assert_failed ();
- g_test_trap_assert_stderr_unmatched ("Not authorizing a non-HTTPS message with the user's ClientLogin "
- "auth token as the connection isn't secure.");
-}
-
-static void
-mock_server_notify_resolver_cb (GObject *object, GParamSpec *pspec, gpointer user_data)
-{
- UhmServer *server;
- UhmResolver *resolver;
-
- server = UHM_SERVER (object);
-
- /* Set up the expected domain names here. This should technically be split up between
- * the different unit test suites, but that's too much effort. */
- resolver = uhm_server_get_resolver (server);
-
- if (resolver != NULL) {
- const gchar *ip_address = uhm_server_get_address (server);
-
- uhm_resolver_add_A (resolver, "www.google.com", ip_address);
- }
-}
-
-int
-main (int argc, char *argv[])
-{
- GFile *trace_directory;
- gchar *path = NULL;
-
- gdata_test_init (argc, argv);
-
- mock_server = gdata_test_get_mock_server ();
- g_signal_connect (G_OBJECT (mock_server), "notify::resolver", (GCallback) mock_server_notify_resolver_cb, NULL);
- path = g_test_build_filename (G_TEST_DIST, "traces/client-login-authorizer", NULL);
- trace_directory = g_file_new_for_path (path);
- g_free (path);
- uhm_server_set_trace_directory (mock_server, trace_directory);
- g_object_unref (trace_directory);
-
- main_thread = g_thread_self ();
-
- g_test_add_func ("/client-login-authorizer/constructor", test_client_login_authorizer_constructor);
- g_test_add_func ("/client-login-authorizer/constructor/for-domains", test_client_login_authorizer_constructor_for_domains);
-
- g_test_add ("/client-login-authorizer/properties/client-id", ClientLoginAuthorizerData, NULL, set_up_client_login_authorizer_data,
- test_client_login_authorizer_properties_client_id, tear_down_client_login_authorizer_data);
- g_test_add ("/client-login-authorizer/properties/username", ClientLoginAuthorizerData, NULL, set_up_client_login_authorizer_data,
- test_client_login_authorizer_properties_username, tear_down_client_login_authorizer_data);
- g_test_add ("/client-login-authorizer/properties/password", ClientLoginAuthorizerData, NULL, set_up_client_login_authorizer_data,
- test_client_login_authorizer_properties_password, tear_down_client_login_authorizer_data);
- g_test_add ("/client-login-authorizer/properties/proxy-resolver", ClientLoginAuthorizerData, NULL, set_up_client_login_authorizer_data,
- test_client_login_authorizer_properties_proxy_resolver, tear_down_client_login_authorizer_data);
- g_test_add ("/client-login-authorizer/properties/timeout", ClientLoginAuthorizerData, NULL, set_up_client_login_authorizer_data,
- test_client_login_authorizer_properties_timeout, tear_down_client_login_authorizer_data);
-
- g_test_add ("/client-login-authorizer/refresh-authorization/unauthenticated", ClientLoginAuthorizerData, NULL,
- set_up_client_login_authorizer_data, test_client_login_authorizer_refresh_authorization,
- tear_down_client_login_authorizer_data);
-
- g_test_add ("/client-login-authorizer/process-request/null", ClientLoginAuthorizerData, NULL,
- set_up_client_login_authorizer_data, test_client_login_authorizer_process_request_null, tear_down_client_login_authorizer_data);
- g_test_add ("/client-login-authorizer/process-request/unauthenticated", ClientLoginAuthorizerData, NULL,
- set_up_client_login_authorizer_data, test_client_login_authorizer_process_request_unauthenticated,
- tear_down_client_login_authorizer_data);
-
- /* Test once with the domain attached and once without */
- g_test_add ("/client-login-authorizer/authenticate/sync", ClientLoginAuthorizerData, USERNAME, set_up_client_login_authorizer_data,
- test_client_login_authorizer_authenticate_sync, tear_down_client_login_authorizer_data);
- g_test_add ("/client-login-authorizer/authenticate/sync/no-domain", ClientLoginAuthorizerData, USERNAME_NO_DOMAIN,
- set_up_client_login_authorizer_data, test_client_login_authorizer_authenticate_sync,
- tear_down_client_login_authorizer_data);
- g_test_add ("/client-login-authorizer/authenticate/sync/bad-password", ClientLoginAuthorizerData, USERNAME,
- set_up_client_login_authorizer_data, test_client_login_authorizer_authenticate_sync_bad_password,
- tear_down_client_login_authorizer_data);
- g_test_add ("/client-login-authorizer/authenticate/sync/multiple-domains", ClientLoginAuthorizerData, NULL,
- set_up_client_login_authorizer_data_multiple_domains, test_client_login_authorizer_authenticate_sync_multiple_domains,
- tear_down_client_login_authorizer_data);
- g_test_add ("/client-login-authorizer/authenticate/sync/cancellation", ClientLoginAuthorizerData, NULL,
- set_up_client_login_authorizer_data, test_client_login_authorizer_authenticate_sync_cancellation,
- tear_down_client_login_authorizer_data);
-
- /* Async tests */
- g_test_add ("/client-login-authorizer/authenticate/async", ClientLoginAuthorizerAsyncData, NULL,
- set_up_client_login_authorizer_async_data, test_client_login_authorizer_authenticate_async,
- tear_down_client_login_authorizer_async_data);
- g_test_add ("/client-login-authorizer/authenticate/async/multiple-domains", ClientLoginAuthorizerAsyncData, NULL,
- set_up_client_login_authorizer_async_data_multiple_domains,
- test_client_login_authorizer_authenticate_async_multiple_domains, tear_down_client_login_authorizer_async_data);
- g_test_add ("/client-login-authorizer/authenticate/async/cancellation", ClientLoginAuthorizerAsyncData, NULL,
- set_up_client_login_authorizer_async_data, test_client_login_authorizer_authenticate_async_cancellation,
- tear_down_client_login_authorizer_async_data);
-
- /* Miscellaneous other tests which require authentication */
- g_test_add ("/client-login-authorizer/refresh-authorization/authenticated", ClientLoginAuthorizerData, NULL,
- set_up_client_login_authorizer_data_authenticated, test_client_login_authorizer_refresh_authorization,
- tear_down_client_login_authorizer_data);
-
- g_test_add ("/client-login-authorizer/process-request/authenticated", ClientLoginAuthorizerData, NULL,
- set_up_client_login_authorizer_data_authenticated, test_client_login_authorizer_process_request_authenticated,
- tear_down_client_login_authorizer_data);
- g_test_add ("/client-login-authorizer/process-request/insecure", ClientLoginAuthorizerData, NULL,
- set_up_client_login_authorizer_data_authenticated, test_client_login_authorizer_process_request_insecure,
- tear_down_client_login_authorizer_data);
-#if GLIB_CHECK_VERSION(2, 38, 0)
- g_test_add ("/client-login-authorizer/process-request/insecure/subprocess", ClientLoginAuthorizerData, NULL,
- set_up_client_login_authorizer_data_authenticated, test_client_login_authorizer_process_request_insecure_subprocess,
- tear_down_client_login_authorizer_data);
-#endif
-
- return g_test_run ();
-}