Blame gcr/test-system-prompt.c

Packit Service f02b19
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
Packit Service f02b19
/*
Packit Service f02b19
   Copyright (C) 2011 Collabora Ltd
Packit Service f02b19
Packit Service f02b19
   The Gnome Keyring Library is free software; you can redistribute it and/or
Packit Service f02b19
   modify it under the terms of the GNU Library General Public License as
Packit Service f02b19
   published by the Free Software Foundation; either version 2 of the
Packit Service f02b19
   License, or (at your option) any later version.
Packit Service f02b19
Packit Service f02b19
   The Gnome Keyring Library is distributed in the hope that it will be useful,
Packit Service f02b19
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service f02b19
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service f02b19
   Library General Public License for more details.
Packit Service f02b19
Packit Service f02b19
   You should have received a copy of the GNU Library General Public
Packit Service f02b19
   License along with the Gnome Library; see the file COPYING.LIB.  If not,
Packit Service f02b19
   see <http://www.gnu.org/licenses/>.
Packit Service f02b19
Packit Service f02b19
   Author: Stef Walter <stefw@collabora.co.uk>
Packit Service f02b19
*/
Packit Service f02b19
Packit Service f02b19
#include "config.h"
Packit Service f02b19
Packit Service f02b19
#include "gcr/gcr-base.h"
Packit Service f02b19
#include "gcr/gcr-mock-prompter.h"
Packit Service f02b19
Packit Service f02b19
#include "egg/egg-testing.h"
Packit Service f02b19
Packit Service f02b19
#include <glib.h>
Packit Service f02b19
Packit Service f02b19
#define g_assert_cmpstr_free(a, op, b) G_STMT_START { \
Packit Service f02b19
        char *lhs_str = a;                            \
Packit Service f02b19
        char *rhs_str = b;                            \
Packit Service f02b19
        g_assert_cmpstr (lhs_str, op, rhs_str);       \
Packit Service f02b19
        g_free (lhs_str);                             \
Packit Service f02b19
        g_free (rhs_str);                             \
Packit Service f02b19
} G_STMT_END
Packit Service f02b19
Packit Service f02b19
typedef struct {
Packit Service f02b19
	const gchar *prompter_name;
Packit Service f02b19
} Test;
Packit Service f02b19
Packit Service f02b19
static void
Packit Service f02b19
setup (Test *test,
Packit Service f02b19
       gconstpointer unused)
Packit Service f02b19
{
Packit Service f02b19
	test->prompter_name = gcr_mock_prompter_start ();
Packit Service f02b19
}
Packit Service f02b19
Packit Service f02b19
static void
Packit Service f02b19
teardown (Test *test,
Packit Service f02b19
          gconstpointer unused)
Packit Service f02b19
{
Packit Service f02b19
	gcr_mock_prompter_stop ();
Packit Service f02b19
}
Packit Service f02b19
Packit Service f02b19
static void
Packit Service f02b19
test_open_prompt (Test *test,
Packit Service f02b19
                  gconstpointer unused)
Packit Service f02b19
{
Packit Service f02b19
	GcrPrompt *prompt;
Packit Service f02b19
	GError *error = NULL;
Packit Service f02b19
	gboolean ret;
Packit Service f02b19
	gchar *bus_name;
Packit Service f02b19
Packit Service f02b19
	prompt = gcr_system_prompt_open_for_prompter (test->prompter_name, 0, NULL, &error);
Packit Service f02b19
	g_assert_no_error (error);
Packit Service f02b19
	g_assert (GCR_IS_SYSTEM_PROMPT (prompt));
Packit Service f02b19
Packit Service f02b19
	g_object_get (prompt, "bus-name", &bus_name, NULL);
Packit Service f02b19
	g_assert_cmpstr (bus_name, ==, test->prompter_name);
Packit Service f02b19
Packit Service f02b19
	ret = gcr_system_prompt_close (GCR_SYSTEM_PROMPT (prompt), NULL, &error);
Packit Service f02b19
	g_assert_no_error (error);
Packit Service f02b19
	g_assert (ret == TRUE);
Packit Service f02b19
Packit Service f02b19
	g_free (bus_name);
Packit Service f02b19
	g_object_unref (prompt);
Packit Service f02b19
}
Packit Service f02b19
Packit Service f02b19
static void
Packit Service f02b19
test_open_failure (Test *test,
Packit Service f02b19
                   gconstpointer unused)
Packit Service f02b19
{
Packit Service f02b19
	GcrPrompt *prompt;
Packit Service f02b19
	GDBusConnection *connection;
Packit Service f02b19
	GError *error = NULL;
Packit Service f02b19
Packit Service f02b19
	connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error);
Packit Service f02b19
	g_assert_no_error (error);
Packit Service f02b19
Packit Service f02b19
	/* Try to open a prompt where no prompter is running */
Packit Service f02b19
Packit Service f02b19
	prompt = gcr_system_prompt_open_for_prompter (g_dbus_connection_get_unique_name (connection),
Packit Service f02b19
	                                              0, NULL, &error);
Packit Service f02b19
	g_assert_error (error, G_DBUS_ERROR, G_DBUS_ERROR_UNKNOWN_METHOD);
Packit Service f02b19
	g_assert (prompt == NULL);
Packit Service f02b19
Packit Service f02b19
	g_error_free (error);
Packit Service f02b19
	g_object_unref (connection);
Packit Service f02b19
}
Packit Service f02b19
Packit Service f02b19
static void
Packit Service f02b19
test_prompt_password (Test *test,
Packit Service f02b19
                      gconstpointer unused)
Packit Service f02b19
{
Packit Service f02b19
	GcrPrompt *prompt;
Packit Service f02b19
	GError *error = NULL;
Packit Service f02b19
	const gchar *password;
Packit Service f02b19
Packit Service f02b19
	gcr_mock_prompter_expect_password_ok ("booo", NULL);
Packit Service f02b19
Packit Service f02b19
	prompt = gcr_system_prompt_open_for_prompter (test->prompter_name, 0, NULL, &error);
Packit Service f02b19
	g_assert_no_error (error);
Packit Service f02b19
	g_assert (GCR_IS_SYSTEM_PROMPT (prompt));
Packit Service f02b19
	g_object_add_weak_pointer (G_OBJECT (prompt), (gpointer *)&prompt);
Packit Service f02b19
Packit Service f02b19
	password = gcr_prompt_password_run (prompt, NULL, &error);
Packit Service f02b19
	g_assert_no_error (error);
Packit Service f02b19
	g_assert_cmpstr (password, ==, "booo");
Packit Service f02b19
Packit Service f02b19
	g_object_unref (prompt);
Packit Service f02b19
	g_assert (prompt == NULL);
Packit Service f02b19
}
Packit Service f02b19
Packit Service f02b19
static void
Packit Service f02b19
test_password_in_exchange (Test *test,
Packit Service f02b19
                           gconstpointer unused)
Packit Service f02b19
{
Packit Service f02b19
	GcrPrompt *prompt;
Packit Service f02b19
	GError *error = NULL;
Packit Service f02b19
	GcrSecretExchange *exchange;
Packit Service f02b19
Packit Service f02b19
	gcr_mock_prompter_expect_password_ok ("booo", NULL);
Packit Service f02b19
Packit Service f02b19
	prompt = gcr_system_prompt_open_for_prompter (test->prompter_name, 0, NULL, &error);
Packit Service f02b19
	g_assert_no_error (error);
Packit Service f02b19
	g_assert (GCR_IS_SYSTEM_PROMPT (prompt));
Packit Service f02b19
	g_object_add_weak_pointer (G_OBJECT (prompt), (gpointer *)&prompt);
Packit Service f02b19
Packit Service f02b19
	gcr_prompt_password_run (prompt, NULL, &error);
Packit Service f02b19
	g_assert_no_error (error);
Packit Service f02b19
Packit Service f02b19
	g_object_get (prompt, "secret-exchange", &exchange, NULL);
Packit Service f02b19
	g_assert (GCR_IS_SECRET_EXCHANGE (exchange));
Packit Service f02b19
	g_assert_cmpstr (gcr_secret_exchange_get_secret (exchange, NULL), ==, "booo");
Packit Service f02b19
Packit Service f02b19
	g_object_unref (exchange);
Packit Service f02b19
	g_object_unref (prompt);
Packit Service f02b19
	g_assert (prompt == NULL);
Packit Service f02b19
}
Packit Service f02b19
Packit Service f02b19
static void
Packit Service f02b19
test_password_custom_exchange (Test *test,
Packit Service f02b19
                               gconstpointer unused)
Packit Service f02b19
{
Packit Service f02b19
	GcrSystemPrompt *prompt;
Packit Service f02b19
	GError *error = NULL;
Packit Service f02b19
	GcrSecretExchange *exchange;
Packit Service f02b19
	const gchar *password;
Packit Service f02b19
Packit Service f02b19
	exchange = gcr_secret_exchange_new (NULL);
Packit Service f02b19
	gcr_mock_prompter_expect_password_ok ("booo", NULL);
Packit Service f02b19
Packit Service f02b19
	prompt = g_initable_new (GCR_TYPE_SYSTEM_PROMPT, NULL, &error,
Packit Service f02b19
	                         "timeout-seconds", 0,
Packit Service f02b19
	                         "bus-name", test->prompter_name,
Packit Service f02b19
	                         "secret-exchange", exchange,
Packit Service f02b19
	                         NULL);
Packit Service f02b19
	g_assert_no_error (error);
Packit Service f02b19
	g_assert (GCR_IS_SYSTEM_PROMPT (prompt));
Packit Service f02b19
	g_object_add_weak_pointer (G_OBJECT (prompt), (gpointer *)&prompt);
Packit Service f02b19
Packit Service f02b19
	password = gcr_prompt_password_run (GCR_PROMPT (prompt), NULL, &error);
Packit Service f02b19
	g_assert_cmpstr (password, ==, "booo");
Packit Service f02b19
	g_assert_no_error (error);
Packit Service f02b19
Packit Service f02b19
	password = gcr_secret_exchange_get_secret (exchange, NULL);
Packit Service f02b19
	g_assert_cmpstr (password, ==, "booo");
Packit Service f02b19
Packit Service f02b19
	g_object_unref (exchange);
Packit Service f02b19
	g_object_unref (prompt);
Packit Service f02b19
	g_assert (prompt == NULL);
Packit Service f02b19
}
Packit Service f02b19
Packit Service f02b19
static void
Packit Service f02b19
on_async_result (GObject *source,
Packit Service f02b19
                 GAsyncResult *result,
Packit Service f02b19
                 gpointer user_data)
Packit Service f02b19
{
Packit Service f02b19
	GAsyncResult **ret = user_data;
Packit Service f02b19
	*ret = g_object_ref (result);
Packit Service f02b19
	egg_test_wait_stop ();
Packit Service f02b19
}
Packit Service f02b19
Packit Service f02b19
static void
Packit Service f02b19
test_async_password (Test *test,
Packit Service f02b19
                     gconstpointer unused)
Packit Service f02b19
{
Packit Service f02b19
	GAsyncResult *result = NULL;
Packit Service f02b19
	GcrPrompt *prompt;
Packit Service f02b19
	GError *error = NULL;
Packit Service f02b19
	const gchar *password;
Packit Service f02b19
Packit Service f02b19
	gcr_mock_prompter_expect_password_ok ("booo", NULL);
Packit Service f02b19
Packit Service f02b19
	gcr_system_prompt_open_for_prompter_async (test->prompter_name, 0, NULL,
Packit Service f02b19
	                                           on_async_result, &result);
Packit Service f02b19
	g_assert (result == NULL);
Packit Service f02b19
	egg_test_wait ();
Packit Service f02b19
Packit Service f02b19
	g_assert (result != NULL);
Packit Service f02b19
	prompt = gcr_system_prompt_open_finish (result, &error);
Packit Service f02b19
	g_assert_no_error (error);
Packit Service f02b19
	g_assert (GCR_IS_SYSTEM_PROMPT (prompt));
Packit Service f02b19
	g_clear_object (&result);
Packit Service f02b19
	g_object_add_weak_pointer (G_OBJECT (prompt), (gpointer *)&prompt);
Packit Service f02b19
Packit Service f02b19
	gcr_prompt_password_async (prompt, NULL,
Packit Service f02b19
	                           on_async_result, &result);
Packit Service f02b19
	g_assert (result == NULL);
Packit Service f02b19
	egg_test_wait ();
Packit Service f02b19
Packit Service f02b19
	password = gcr_prompt_password_finish (prompt, result, &error);
Packit Service f02b19
	g_assert_no_error (error);
Packit Service f02b19
	g_assert_cmpstr (password, ==, "booo");
Packit Service f02b19
	g_clear_object (&result);
Packit Service f02b19
Packit Service f02b19
	g_object_unref (prompt);
Packit Service f02b19
}
Packit Service f02b19
Packit Service f02b19
static void
Packit Service f02b19
test_prompt_confirm (Test *test,
Packit Service f02b19
                     gconstpointer unused)
Packit Service f02b19
{
Packit Service f02b19
	GcrPrompt *prompt;
Packit Service f02b19
	GError *error = NULL;
Packit Service f02b19
	gboolean ret;
Packit Service f02b19
Packit Service f02b19
	gcr_mock_prompter_expect_confirm_ok (NULL);
Packit Service f02b19
Packit Service f02b19
	prompt = gcr_system_prompt_open_for_prompter (test->prompter_name, 0, NULL, &error);
Packit Service f02b19
	g_assert_no_error (error);
Packit Service f02b19
	g_assert (GCR_IS_SYSTEM_PROMPT (prompt));
Packit Service f02b19
	g_object_add_weak_pointer (G_OBJECT (prompt), (gpointer *)&prompt);
Packit Service f02b19
Packit Service f02b19
	ret = gcr_prompt_confirm_run (prompt, NULL, &error);
Packit Service f02b19
	g_assert_no_error (error);
Packit Service f02b19
	g_assert (ret == TRUE);
Packit Service f02b19
Packit Service f02b19
	g_object_unref (prompt);
Packit Service f02b19
	g_assert (prompt == NULL);
Packit Service f02b19
}
Packit Service f02b19
Packit Service f02b19
static void
Packit Service f02b19
test_async_confirm (Test *test,
Packit Service f02b19
                    gconstpointer unused)
Packit Service f02b19
{
Packit Service f02b19
	GAsyncResult *result = NULL;
Packit Service f02b19
	GcrPrompt *prompt;
Packit Service f02b19
	GError *error = NULL;
Packit Service f02b19
	gboolean confirm;
Packit Service f02b19
Packit Service f02b19
	gcr_mock_prompter_expect_confirm_ok (NULL);
Packit Service f02b19
Packit Service f02b19
	gcr_system_prompt_open_for_prompter_async (test->prompter_name, 0, NULL,
Packit Service f02b19
	                                           on_async_result, &result);
Packit Service f02b19
	g_assert (result == NULL);
Packit Service f02b19
	egg_test_wait ();
Packit Service f02b19
Packit Service f02b19
	g_assert (result != NULL);
Packit Service f02b19
	prompt = gcr_system_prompt_open_finish (result, &error);
Packit Service f02b19
	g_assert_no_error (error);
Packit Service f02b19
	g_assert (GCR_IS_SYSTEM_PROMPT (prompt));
Packit Service f02b19
	g_clear_object (&result);
Packit Service f02b19
	g_object_add_weak_pointer (G_OBJECT (prompt), (gpointer *)&prompt);
Packit Service f02b19
Packit Service f02b19
	gcr_prompt_confirm_async (prompt, NULL, on_async_result, &result);
Packit Service f02b19
	g_assert (result == NULL);
Packit Service f02b19
	egg_test_wait ();
Packit Service f02b19
Packit Service f02b19
	confirm = gcr_prompt_confirm_finish (prompt, result, &error);
Packit Service f02b19
	g_assert_no_error (error);
Packit Service f02b19
	g_assert (confirm == TRUE);
Packit Service f02b19
	g_clear_object (&result);
Packit Service f02b19
Packit Service f02b19
	g_object_unref (prompt);
Packit Service f02b19
	g_assert (prompt == NULL);
Packit Service f02b19
}
Packit Service f02b19
Packit Service f02b19
static void
Packit Service f02b19
test_cancel_password (Test *test,
Packit Service f02b19
                      gconstpointer unused)
Packit Service f02b19
{
Packit Service f02b19
	GcrPrompt *prompt;
Packit Service f02b19
	GError *error = NULL;
Packit Service f02b19
	const gchar *password;
Packit Service f02b19
Packit Service f02b19
	gcr_mock_prompter_expect_password_cancel ();
Packit Service f02b19
Packit Service f02b19
	prompt = gcr_system_prompt_open_for_prompter (test->prompter_name, 0, NULL, &error);
Packit Service f02b19
	g_assert_no_error (error);
Packit Service f02b19
	g_assert (GCR_IS_SYSTEM_PROMPT (prompt));
Packit Service f02b19
	g_object_add_weak_pointer (G_OBJECT (prompt), (gpointer *)&prompt);
Packit Service f02b19
Packit Service f02b19
	password = gcr_prompt_password_run (prompt, NULL, &error);
Packit Service f02b19
	g_assert_no_error (error);
Packit Service f02b19
	g_assert_cmpstr (password, ==, NULL);
Packit Service f02b19
Packit Service f02b19
	g_object_unref (prompt);
Packit Service f02b19
	g_assert (prompt == NULL);
Packit Service f02b19
}
Packit Service f02b19
Packit Service f02b19
static void
Packit Service f02b19
test_cancel_confirm (Test *test,
Packit Service f02b19
                     gconstpointer unused)
Packit Service f02b19
{
Packit Service f02b19
	GcrPrompt *prompt;
Packit Service f02b19
	GError *error = NULL;
Packit Service f02b19
	gboolean ret;
Packit Service f02b19
Packit Service f02b19
	gcr_mock_prompter_expect_confirm_cancel ();
Packit Service f02b19
Packit Service f02b19
	prompt = gcr_system_prompt_open_for_prompter (test->prompter_name, 0, NULL, &error);
Packit Service f02b19
	g_assert_no_error (error);
Packit Service f02b19
	g_assert (GCR_IS_SYSTEM_PROMPT (prompt));
Packit Service f02b19
	g_object_add_weak_pointer (G_OBJECT (prompt), (gpointer *)&prompt);
Packit Service f02b19
Packit Service f02b19
	ret = gcr_prompt_confirm_run (prompt, NULL, &error);
Packit Service f02b19
	g_assert_no_error (error);
Packit Service f02b19
	g_assert (ret == FALSE);
Packit Service f02b19
Packit Service f02b19
	g_object_unref (prompt);
Packit Service f02b19
	g_assert (prompt == NULL);
Packit Service f02b19
}
Packit Service f02b19
Packit Service f02b19
static void
Packit Service f02b19
test_prompt_properties (Test *test,
Packit Service f02b19
                        gconstpointer unused)
Packit Service f02b19
{
Packit Service f02b19
	GcrPrompt *prompt;
Packit Service f02b19
	GError *error = NULL;
Packit Service f02b19
	gboolean ret;
Packit Service f02b19
Packit Service f02b19
	gcr_mock_prompter_expect_confirm_ok ("title", "My Title",
Packit Service f02b19
	                                     "description", "My Description",
Packit Service f02b19
	                                     "warning", "My Warning",
Packit Service f02b19
	                                     "message", "My Message",
Packit Service f02b19
	                                     "caller-window", "01010",
Packit Service f02b19
	                                     "choice-label", "My Choice",
Packit Service f02b19
	                                     "choice-chosen", TRUE,
Packit Service f02b19
	                                     "password-new", TRUE,
Packit Service f02b19
	                                     "password-strength", 0,
Packit Service f02b19
	                                     "continue-label", "My Continue",
Packit Service f02b19
	                                     "cancel-label", "My Cancel",
Packit Service f02b19
	                                     NULL);
Packit Service f02b19
Packit Service f02b19
	prompt = gcr_system_prompt_open_for_prompter (test->prompter_name, 0, NULL, &error);
Packit Service f02b19
	g_assert_no_error (error);
Packit Service f02b19
	g_assert (GCR_IS_SYSTEM_PROMPT (prompt));
Packit Service f02b19
	g_object_add_weak_pointer (G_OBJECT (prompt), (gpointer *)&prompt);
Packit Service f02b19
Packit Service f02b19
	g_object_set (prompt,
Packit Service f02b19
	              "title", "Other Title",
Packit Service f02b19
	              "choice-label", "Other Choice",
Packit Service f02b19
	              "description", "Other Description",
Packit Service f02b19
	              "message", "Other Message",
Packit Service f02b19
	              "caller-window", "01012",
Packit Service f02b19
	              "warning", "Other Warning",
Packit Service f02b19
	              "password-new", FALSE,
Packit Service f02b19
	              "choice-chosen", TRUE,
Packit Service f02b19
	              "continue-label", "Other Continue",
Packit Service f02b19
	              "cancel-label", "Other Cancel",
Packit Service f02b19
	              NULL);
Packit Service f02b19
Packit Service f02b19
	g_assert_cmpstr_free (gcr_prompt_get_title (prompt), ==, g_strdup ("Other Title"));
Packit Service f02b19
	g_assert_cmpstr_free (gcr_prompt_get_choice_label (prompt), ==, g_strdup ("Other Choice"));
Packit Service f02b19
	g_assert_cmpstr_free (gcr_prompt_get_description (prompt), ==, g_strdup ("Other Description"));
Packit Service f02b19
	g_assert_cmpstr_free (gcr_prompt_get_message (prompt), ==, g_strdup ("Other Message"));
Packit Service f02b19
	g_assert_cmpstr_free (gcr_prompt_get_caller_window (prompt), ==, g_strdup ("01012"));
Packit Service f02b19
	g_assert_cmpstr_free (gcr_prompt_get_warning (prompt), ==, g_strdup ("Other Warning"));
Packit Service f02b19
	g_assert_cmpstr_free (gcr_prompt_get_continue_label (prompt), ==, g_strdup ("Other Continue"));
Packit Service f02b19
	g_assert_cmpstr_free (gcr_prompt_get_cancel_label (prompt), ==, g_strdup ("Other Cancel"));
Packit Service f02b19
	g_assert (gcr_prompt_get_password_new (prompt) == FALSE);
Packit Service f02b19
	g_assert (gcr_prompt_get_choice_chosen (prompt) == TRUE);
Packit Service f02b19
Packit Service f02b19
	gcr_prompt_set_title (prompt, "My Title");
Packit Service f02b19
	gcr_prompt_set_choice_label (prompt, "My Choice");
Packit Service f02b19
	gcr_prompt_set_description (prompt, "My Description");
Packit Service f02b19
	gcr_prompt_set_message (prompt, "My Message");
Packit Service f02b19
	gcr_prompt_set_caller_window (prompt, "01010");
Packit Service f02b19
	gcr_prompt_set_warning (prompt, "My Warning");
Packit Service f02b19
	gcr_prompt_set_continue_label (prompt, "My Continue");
Packit Service f02b19
	gcr_prompt_set_cancel_label (prompt, "My Cancel");
Packit Service f02b19
	gcr_prompt_set_password_new (prompt, TRUE);
Packit Service f02b19
	gcr_prompt_set_choice_chosen (prompt, TRUE);
Packit Service f02b19
Packit Service f02b19
	ret = gcr_prompt_confirm_run (prompt, NULL, &error);
Packit Service f02b19
	g_assert_no_error (error);
Packit Service f02b19
	g_assert (ret == TRUE);
Packit Service f02b19
Packit Service f02b19
	g_assert (gcr_prompt_get_choice_chosen (prompt) == TRUE);
Packit Service f02b19
	g_assert_cmpint (gcr_prompt_get_password_strength (prompt), ==, 0);
Packit Service f02b19
Packit Service f02b19
	g_object_unref (prompt);
Packit Service f02b19
	g_assert (prompt == NULL);
Packit Service f02b19
}
Packit Service f02b19
Packit Service f02b19
static void
Packit Service f02b19
test_prompt_properties_unset (Test *test,
Packit Service f02b19
                              gconstpointer unused)
Packit Service f02b19
{
Packit Service f02b19
	GcrPrompt *prompt;
Packit Service f02b19
	GError *error = NULL;
Packit Service f02b19
Packit Service f02b19
	prompt = gcr_system_prompt_open_for_prompter (test->prompter_name, 0, NULL, &error);
Packit Service f02b19
	g_assert_no_error (error);
Packit Service f02b19
	g_assert (GCR_IS_SYSTEM_PROMPT (prompt));
Packit Service f02b19
	g_object_add_weak_pointer (G_OBJECT (prompt), (gpointer *)&prompt);
Packit Service f02b19
Packit Service f02b19
	g_assert_cmpstr_free (gcr_prompt_get_title (prompt), ==, g_strdup (""));
Packit Service f02b19
	g_assert_cmpstr_free (gcr_prompt_get_choice_label (prompt), ==, NULL);
Packit Service f02b19
	g_assert_cmpstr_free(gcr_prompt_get_description (prompt), ==, g_strdup (""));
Packit Service f02b19
	g_assert_cmpstr_free (gcr_prompt_get_message (prompt), ==, g_strdup (""));
Packit Service f02b19
	g_assert_cmpstr_free (gcr_prompt_get_caller_window (prompt), ==, NULL);
Packit Service f02b19
	g_assert_cmpstr_free (gcr_prompt_get_warning (prompt), ==, NULL);
Packit Service f02b19
	g_assert_cmpstr_free (gcr_prompt_get_continue_label (prompt), ==, g_strdup ("Continue"));
Packit Service f02b19
	g_assert_cmpstr_free (gcr_prompt_get_cancel_label (prompt), ==, g_strdup ("Cancel"));
Packit Service f02b19
	g_assert (gcr_prompt_get_password_new (prompt) == FALSE);
Packit Service f02b19
	g_assert (gcr_prompt_get_choice_chosen (prompt) == FALSE);
Packit Service f02b19
	g_assert_cmpint (gcr_prompt_get_password_strength (prompt), ==, 0);
Packit Service f02b19
Packit Service f02b19
	g_object_unref (prompt);
Packit Service f02b19
	g_assert (prompt == NULL);
Packit Service f02b19
}
Packit Service f02b19
Packit Service f02b19
Packit Service f02b19
static void
Packit Service f02b19
test_prompt_properties_reset (Test *test,
Packit Service f02b19
                              gconstpointer unused)
Packit Service f02b19
{
Packit Service f02b19
	GcrPrompt *prompt;
Packit Service f02b19
	GError *error = NULL;
Packit Service f02b19
Packit Service f02b19
	prompt = gcr_system_prompt_open_for_prompter (test->prompter_name, 0, NULL, &error);
Packit Service f02b19
	g_assert_no_error (error);
Packit Service f02b19
	g_object_add_weak_pointer (G_OBJECT (prompt), (gpointer *)&prompt);
Packit Service f02b19
Packit Service f02b19
	g_object_set (prompt,
Packit Service f02b19
	              "title", "Other Title",
Packit Service f02b19
	              "choice-label", "Other Choice",
Packit Service f02b19
	              "description", "Other Description",
Packit Service f02b19
	              "message", "Other Message",
Packit Service f02b19
	              "caller-window", "01012",
Packit Service f02b19
	              "warning", "Other Warning",
Packit Service f02b19
	              "password-new", FALSE,
Packit Service f02b19
	              "choice-chosen", TRUE,
Packit Service f02b19
	              "continue-label", "Other Continue",
Packit Service f02b19
	              "cancel-label", "Other Cancel",
Packit Service f02b19
	              NULL);
Packit Service f02b19
Packit Service f02b19
	g_assert_cmpstr_free (gcr_prompt_get_title (prompt), ==, g_strdup ("Other Title"));
Packit Service f02b19
	g_assert_cmpstr_free (gcr_prompt_get_choice_label (prompt), ==, g_strdup ("Other Choice"));
Packit Service f02b19
	g_assert_cmpstr_free (gcr_prompt_get_description (prompt), ==, g_strdup ("Other Description"));
Packit Service f02b19
	g_assert_cmpstr_free (gcr_prompt_get_message (prompt), ==, g_strdup ("Other Message"));
Packit Service f02b19
	g_assert_cmpstr_free (gcr_prompt_get_caller_window (prompt), ==, g_strdup ("01012"));
Packit Service f02b19
	g_assert_cmpstr_free (gcr_prompt_get_warning (prompt), ==, g_strdup ("Other Warning"));
Packit Service f02b19
	g_assert_cmpstr_free (gcr_prompt_get_continue_label (prompt), ==, g_strdup ("Other Continue"));
Packit Service f02b19
	g_assert_cmpstr_free (gcr_prompt_get_cancel_label (prompt), ==, g_strdup ("Other Cancel"));
Packit Service f02b19
	g_assert (gcr_prompt_get_password_new (prompt) == FALSE);
Packit Service f02b19
	g_assert (gcr_prompt_get_choice_chosen (prompt) == TRUE);
Packit Service f02b19
Packit Service f02b19
	gcr_prompt_reset (prompt);
Packit Service f02b19
Packit Service f02b19
	g_assert_cmpstr_free (gcr_prompt_get_title (prompt), ==, strdup (""));
Packit Service f02b19
	g_assert_cmpstr_free (gcr_prompt_get_choice_label (prompt), ==, NULL);
Packit Service f02b19
	g_assert_cmpstr_free (gcr_prompt_get_description (prompt), ==, strdup (""));
Packit Service f02b19
	g_assert_cmpstr_free (gcr_prompt_get_message (prompt), ==, strdup (""));
Packit Service f02b19
	g_assert_cmpstr_free (gcr_prompt_get_caller_window (prompt), ==, NULL);
Packit Service f02b19
	g_assert_cmpstr_free (gcr_prompt_get_warning (prompt), ==, NULL);
Packit Service f02b19
	g_assert_cmpstr_free (gcr_prompt_get_continue_label (prompt), ==, strdup ("Continue"));
Packit Service f02b19
	g_assert_cmpstr_free (gcr_prompt_get_cancel_label (prompt), ==, strdup ("Cancel"));
Packit Service f02b19
	g_assert (gcr_prompt_get_password_new (prompt) == FALSE);
Packit Service f02b19
	g_assert (gcr_prompt_get_choice_chosen (prompt) == FALSE);
Packit Service f02b19
	g_assert_cmpint (gcr_prompt_get_password_strength (prompt), ==, 0);
Packit Service f02b19
Packit Service f02b19
	g_object_unref (prompt);
Packit Service f02b19
	g_assert (prompt == NULL);
Packit Service f02b19
}
Packit Service f02b19
Packit Service f02b19
static void
Packit Service f02b19
test_prompt_close (Test *test,
Packit Service f02b19
                   gconstpointer unused)
Packit Service f02b19
{
Packit Service f02b19
	GcrPrompt *prompt;
Packit Service f02b19
	GcrPrompt *prompt2;
Packit Service f02b19
	GError *error = NULL;
Packit Service f02b19
	gboolean ret;
Packit Service f02b19
Packit Service f02b19
	gcr_mock_prompter_expect_confirm_ok (NULL);
Packit Service f02b19
Packit Service f02b19
	prompt = gcr_system_prompt_open_for_prompter (test->prompter_name, 1, NULL, &error);
Packit Service f02b19
	g_assert_no_error (error);
Packit Service f02b19
	g_assert (GCR_IS_SYSTEM_PROMPT (prompt));
Packit Service f02b19
	g_object_add_weak_pointer (G_OBJECT (prompt), (gpointer *)&prompt);
Packit Service f02b19
Packit Service f02b19
	prompt2 = gcr_system_prompt_open_for_prompter (test->prompter_name, 1, NULL, &error);
Packit Service f02b19
	g_assert_error (error, GCR_SYSTEM_PROMPT_ERROR, GCR_SYSTEM_PROMPT_IN_PROGRESS);
Packit Service f02b19
	g_clear_error (&error);
Packit Service f02b19
	g_assert (prompt2 == NULL);
Packit Service f02b19
	g_object_add_weak_pointer (G_OBJECT (prompt), (gpointer *)&prompt);
Packit Service f02b19
Packit Service f02b19
	ret = gcr_prompt_confirm_run (prompt, NULL, &error);
Packit Service f02b19
	g_assert_no_error (error);
Packit Service f02b19
	g_assert (ret == TRUE);
Packit Service f02b19
Packit Service f02b19
	prompt2 = gcr_system_prompt_open_for_prompter (test->prompter_name, 1, NULL, &error);
Packit Service f02b19
	g_assert_error (error, GCR_SYSTEM_PROMPT_ERROR, GCR_SYSTEM_PROMPT_IN_PROGRESS);
Packit Service f02b19
	g_clear_error (&error);
Packit Service f02b19
	g_assert (prompt2 == NULL);
Packit Service f02b19
Packit Service f02b19
	gcr_system_prompt_close (GCR_SYSTEM_PROMPT (prompt), NULL, &error);
Packit Service f02b19
	g_assert_no_error (error);
Packit Service f02b19
Packit Service f02b19
	prompt2 = gcr_system_prompt_open_for_prompter (test->prompter_name, 1, NULL, &error);
Packit Service f02b19
	g_assert_no_error (error);
Packit Service f02b19
	g_assert (GCR_IS_SYSTEM_PROMPT (prompt2));
Packit Service f02b19
Packit Service f02b19
	g_object_unref (prompt);
Packit Service f02b19
Packit Service f02b19
	g_object_unref (prompt2);
Packit Service f02b19
	g_assert (prompt == NULL);
Packit Service f02b19
}
Packit Service f02b19
Packit Service f02b19
static void
Packit Service f02b19
on_prompt_close (GcrPrompt *prompt,
Packit Service f02b19
                 gpointer user_data)
Packit Service f02b19
{
Packit Service f02b19
	gboolean *prompt_closed = (gboolean *)user_data;
Packit Service f02b19
	g_assert (*prompt_closed == FALSE);
Packit Service f02b19
	*prompt_closed = TRUE;
Packit Service f02b19
}
Packit Service f02b19
Packit Service f02b19
static void
Packit Service f02b19
test_close_cancels (Test *test,
Packit Service f02b19
                    gconstpointer unused)
Packit Service f02b19
{
Packit Service f02b19
	GcrPrompt *prompt;
Packit Service f02b19
	GError *error = NULL;
Packit Service f02b19
	const gchar *password = NULL;
Packit Service f02b19
	GAsyncResult *result = NULL;
Packit Service f02b19
	gboolean prompt_closed;
Packit Service f02b19
Packit Service f02b19
	gcr_mock_prompter_set_delay_msec (3000);
Packit Service f02b19
	gcr_mock_prompter_expect_password_ok ("booo", NULL);
Packit Service f02b19
Packit Service f02b19
	prompt = gcr_system_prompt_open_for_prompter (test->prompter_name, 0, NULL, &error);
Packit Service f02b19
	g_assert_no_error (error);
Packit Service f02b19
	g_assert (GCR_IS_SYSTEM_PROMPT (prompt));
Packit Service f02b19
	g_object_add_weak_pointer (G_OBJECT (prompt), (gpointer *)&prompt);
Packit Service f02b19
Packit Service f02b19
	prompt_closed = FALSE;
Packit Service f02b19
	g_signal_connect_after (prompt, "prompt-close", G_CALLBACK (on_prompt_close), &prompt_closed);
Packit Service f02b19
Packit Service f02b19
	gcr_prompt_password_async (prompt, NULL, on_async_result, &result);
Packit Service f02b19
Packit Service f02b19
	gcr_system_prompt_close (GCR_SYSTEM_PROMPT (prompt), NULL, &error);
Packit Service f02b19
	g_assert_no_error (error);
Packit Service f02b19
Packit Service f02b19
	g_assert (prompt_closed == TRUE);
Packit Service f02b19
	egg_test_wait ();
Packit Service f02b19
Packit Service f02b19
	password = gcr_prompt_password_finish (prompt, result, &error);
Packit Service f02b19
	g_assert_no_error (error);
Packit Service f02b19
	g_assert (password == NULL);
Packit Service f02b19
	g_clear_object (&result);
Packit Service f02b19
Packit Service f02b19
	g_object_unref (prompt);
Packit Service f02b19
	g_assert (prompt == NULL);
Packit Service f02b19
}
Packit Service f02b19
Packit Service f02b19
static void
Packit Service f02b19
test_close_from_prompter (Test *test,
Packit Service f02b19
                          gconstpointer unused)
Packit Service f02b19
{
Packit Service f02b19
	GcrPrompt *prompt;
Packit Service f02b19
	GError *error = NULL;
Packit Service f02b19
	gboolean ret;
Packit Service f02b19
	const gchar *password;
Packit Service f02b19
	gboolean prompt_closed;
Packit Service f02b19
Packit Service f02b19
	gcr_mock_prompter_expect_close ();
Packit Service f02b19
Packit Service f02b19
	prompt = gcr_system_prompt_open_for_prompter (test->prompter_name, 1, NULL, &error);
Packit Service f02b19
	g_assert_no_error (error);
Packit Service f02b19
	g_assert (GCR_IS_SYSTEM_PROMPT (prompt));
Packit Service f02b19
	g_object_add_weak_pointer (G_OBJECT (prompt), (gpointer *)&prompt);
Packit Service f02b19
Packit Service f02b19
	prompt_closed = FALSE;
Packit Service f02b19
	g_signal_connect_after (prompt, "prompt-close", G_CALLBACK (on_prompt_close), &prompt_closed);
Packit Service f02b19
Packit Service f02b19
	ret = gcr_prompt_confirm_run (prompt, NULL, &error);
Packit Service f02b19
	g_assert_no_error (error);
Packit Service f02b19
	g_assert (ret == GCR_PROMPT_REPLY_CANCEL);
Packit Service f02b19
Packit Service f02b19
	/* The prompt should be closed now, these shouldn't reach the mock prompter */
Packit Service f02b19
Packit Service f02b19
	while (!prompt_closed)
Packit Service f02b19
		g_main_context_iteration (NULL, TRUE);
Packit Service f02b19
Packit Service f02b19
	ret = gcr_prompt_confirm_run (prompt, NULL, &error);
Packit Service f02b19
	g_assert_no_error (error);
Packit Service f02b19
	g_assert (ret == GCR_PROMPT_REPLY_CANCEL);
Packit Service f02b19
Packit Service f02b19
	password = gcr_prompt_password_run (prompt, NULL, &error);
Packit Service f02b19
	g_assert_no_error (error);
Packit Service f02b19
	g_assert (password == NULL);
Packit Service f02b19
Packit Service f02b19
	g_object_unref (prompt);
Packit Service f02b19
	g_assert (prompt == NULL);
Packit Service f02b19
}
Packit Service f02b19
Packit Service f02b19
static void
Packit Service f02b19
test_after_close_dismisses (Test *test,
Packit Service f02b19
                            gconstpointer unused)
Packit Service f02b19
{
Packit Service f02b19
	GcrPrompt *prompt;
Packit Service f02b19
	GError *error = NULL;
Packit Service f02b19
	gboolean ret;
Packit Service f02b19
	const gchar *password;
Packit Service f02b19
	gboolean prompt_closed;
Packit Service f02b19
Packit Service f02b19
	gcr_mock_prompter_expect_confirm_ok (NULL);
Packit Service f02b19
Packit Service f02b19
	prompt = gcr_system_prompt_open_for_prompter (test->prompter_name, 1, NULL, &error);
Packit Service f02b19
	g_assert_no_error (error);
Packit Service f02b19
	g_assert (GCR_IS_SYSTEM_PROMPT (prompt));
Packit Service f02b19
	g_object_add_weak_pointer (G_OBJECT (prompt), (gpointer *)&prompt);
Packit Service f02b19
Packit Service f02b19
	prompt_closed = FALSE;
Packit Service f02b19
	g_signal_connect_after (prompt, "prompt-close", G_CALLBACK (on_prompt_close), &prompt_closed);
Packit Service f02b19
Packit Service f02b19
Packit Service f02b19
	ret = gcr_prompt_confirm_run (prompt, NULL, &error);
Packit Service f02b19
	g_assert_no_error (error);
Packit Service f02b19
	g_assert (ret == GCR_PROMPT_REPLY_CONTINUE);
Packit Service f02b19
Packit Service f02b19
	gcr_prompt_close (prompt);
Packit Service f02b19
	g_assert (prompt_closed);
Packit Service f02b19
Packit Service f02b19
	/* These should never even reach the mock prompter */
Packit Service f02b19
Packit Service f02b19
	ret = gcr_prompt_confirm_run (prompt, NULL, &error);
Packit Service f02b19
	g_assert_no_error (error);
Packit Service f02b19
	g_assert (ret == GCR_PROMPT_REPLY_CANCEL);
Packit Service f02b19
Packit Service f02b19
	password = gcr_prompt_password_run (prompt, NULL, &error);
Packit Service f02b19
	g_assert_no_error (error);
Packit Service f02b19
	g_assert (password == NULL);
Packit Service f02b19
Packit Service f02b19
	while (g_main_context_iteration (NULL, FALSE));
Packit Service f02b19
Packit Service f02b19
	g_object_unref (prompt);
Packit Service f02b19
	g_assert (prompt == NULL);
Packit Service f02b19
}
Packit Service f02b19
Packit Service f02b19
typedef struct {
Packit Service f02b19
	GAsyncResult *result1;
Packit Service f02b19
	GAsyncResult *result2;
Packit Service f02b19
} ResultPair;
Packit Service f02b19
Packit Service f02b19
static void
Packit Service f02b19
on_result_pair_one (GObject *source,
Packit Service f02b19
                    GAsyncResult *result,
Packit Service f02b19
                    gpointer user_data)
Packit Service f02b19
{
Packit Service f02b19
	ResultPair *pair = user_data;
Packit Service f02b19
	g_assert (pair->result1 == NULL);
Packit Service f02b19
	pair->result1 = g_object_ref (result);
Packit Service f02b19
	if (pair->result1 && pair->result2)
Packit Service f02b19
		egg_test_wait_stop ();
Packit Service f02b19
}
Packit Service f02b19
Packit Service f02b19
static void
Packit Service f02b19
on_result_pair_two (GObject *source,
Packit Service f02b19
                    GAsyncResult *result,
Packit Service f02b19
                    gpointer user_data)
Packit Service f02b19
{
Packit Service f02b19
	ResultPair *pair = user_data;
Packit Service f02b19
	g_assert (pair->result2 == NULL);
Packit Service f02b19
	pair->result2 = g_object_ref (result);
Packit Service f02b19
	if (pair->result1 && pair->result2)
Packit Service f02b19
		egg_test_wait_stop ();
Packit Service f02b19
}
Packit Service f02b19
Packit Service f02b19
static void
Packit Service f02b19
test_watch_cancels (Test *test,
Packit Service f02b19
                    gconstpointer unused)
Packit Service f02b19
{
Packit Service f02b19
	GcrPrompt *prompt;
Packit Service f02b19
	GcrPrompt *prompt2;
Packit Service f02b19
	GError *error = NULL;
Packit Service f02b19
	const gchar *password;
Packit Service f02b19
	ResultPair pair = { NULL, NULL };
Packit Service f02b19
Packit Service f02b19
	gcr_mock_prompter_set_delay_msec (3000);
Packit Service f02b19
	gcr_mock_prompter_expect_password_ok ("booo", NULL);
Packit Service f02b19
Packit Service f02b19
	/* This should happen immediately */
Packit Service f02b19
	prompt = gcr_system_prompt_open_for_prompter (test->prompter_name, 0, NULL, &error);
Packit Service f02b19
	g_assert_no_error (error);
Packit Service f02b19
	g_assert (GCR_IS_SYSTEM_PROMPT (prompt));
Packit Service f02b19
Packit Service f02b19
	/* Show a password prompt */
Packit Service f02b19
	gcr_prompt_password_async (prompt, NULL, on_result_pair_one, &pair);
Packit Service f02b19
Packit Service f02b19
	/* This prompt should wait, block */
Packit Service f02b19
	gcr_system_prompt_open_for_prompter_async (test->prompter_name, 0, NULL,
Packit Service f02b19
	                                           on_result_pair_two, &pair);
Packit Service f02b19
Packit Service f02b19
	/* Wait a bit before stopping, so outgoing request is done */
Packit Service f02b19
	egg_test_wait_until (1000);
Packit Service f02b19
Packit Service f02b19
	/* Kill the mock prompter */
Packit Service f02b19
	gcr_mock_prompter_disconnect ();
Packit Service f02b19
Packit Service f02b19
	/* Both the above operations should cancel */
Packit Service f02b19
	egg_test_wait ();
Packit Service f02b19
Packit Service f02b19
	prompt2 = gcr_system_prompt_open_finish (pair.result2, &error);
Packit Service f02b19
	g_assert_error (error, G_IO_ERROR, G_IO_ERROR_CANCELLED);
Packit Service f02b19
	g_clear_error (&error);
Packit Service f02b19
	g_assert (prompt2 == NULL);
Packit Service f02b19
Packit Service f02b19
	password = gcr_prompt_password_finish (prompt, pair.result1, &error);
Packit Service f02b19
	g_assert_error (error, G_IO_ERROR, G_IO_ERROR_CANCELLED);
Packit Service f02b19
	g_clear_error (&error);
Packit Service f02b19
	g_assert (password == NULL);
Packit Service f02b19
Packit Service f02b19
	g_object_unref (prompt);
Packit Service f02b19
	g_object_unref (pair.result1);
Packit Service f02b19
	g_object_unref (pair.result2);
Packit Service f02b19
}
Packit Service f02b19
Packit Service f02b19
int
Packit Service f02b19
main (int argc, char **argv)
Packit Service f02b19
{
Packit Service f02b19
	g_test_init (&argc, &argv, NULL);
Packit Service f02b19
	g_set_prgname ("test-system-prompt");
Packit Service f02b19
Packit Service f02b19
	g_test_add ("/gcr/system-prompt/open", Test, NULL, setup, test_open_prompt, teardown);
Packit Service f02b19
	g_test_add ("/gcr/system-prompt/open-failure", Test, NULL, setup, test_open_failure, teardown);
Packit Service f02b19
	g_test_add ("/gcr/system-prompt/password", Test, NULL, setup, test_prompt_password, teardown);
Packit Service f02b19
	g_test_add ("/gcr/system-prompt/password-async", Test, NULL, setup, test_async_password, teardown);
Packit Service f02b19
	g_test_add ("/gcr/system-prompt/password-cancel", Test, NULL, setup, test_cancel_password, teardown);
Packit Service f02b19
	g_test_add ("/gcr/system-prompt/password-in-exchange", Test, NULL, setup, test_password_in_exchange, teardown);
Packit Service f02b19
	g_test_add ("/gcr/system-prompt/password-custom-exchange", Test, NULL, setup, test_password_custom_exchange, teardown);
Packit Service f02b19
	g_test_add ("/gcr/system-prompt/confirm", Test, NULL, setup, test_prompt_confirm, teardown);
Packit Service f02b19
	g_test_add ("/gcr/system-prompt/confirm-async", Test, NULL, setup, test_async_confirm, teardown);
Packit Service f02b19
	g_test_add ("/gcr/system-prompt/confirm-cancel", Test, NULL, setup, test_cancel_confirm, teardown);
Packit Service f02b19
	g_test_add ("/gcr/system-prompt/properties", Test, NULL, setup, test_prompt_properties, teardown);
Packit Service f02b19
	g_test_add ("/gcr/system-prompt/properties-unset", Test, NULL, setup, test_prompt_properties_unset, teardown);
Packit Service f02b19
	g_test_add ("/gcr/system-prompt/properties-reset", Test, NULL, setup, test_prompt_properties_reset, teardown);
Packit Service f02b19
	g_test_add ("/gcr/system-prompt/close", Test, NULL, setup, test_prompt_close, teardown);
Packit Service f02b19
	g_test_add ("/gcr/system-prompt/close-cancels", Test, NULL, setup, test_close_cancels, teardown);
Packit Service f02b19
	g_test_add ("/gcr/system-prompt/after-close-dismisses", Test, NULL, setup, test_after_close_dismisses, teardown);
Packit Service f02b19
	g_test_add ("/gcr/system-prompt/close-from-prompter", Test, NULL, setup, test_close_from_prompter, teardown);
Packit Service f02b19
	g_test_add ("/gcr/system-prompt/watch-cancels", Test, NULL, setup, test_watch_cancels, teardown);
Packit Service f02b19
Packit Service f02b19
	return egg_tests_run_with_loop ();
Packit Service f02b19
}