/*
Copyright (C) 2014 Red Hat Inc
The Gnome Keyring Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The Gnome Keyring Library 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
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the Gnome Library; see the file COPYING.LIB. If not,
.
Author: Stef Walter
*/
#include "config.h"
#include "gkd-test.h"
#include "daemon/control/gkd-control.h"
#include "egg/egg-testing.h"
#include
#include
#include
#include
#include
#include
typedef struct {
GTestDBus *dbus;
gchar *directory;
GPid pid;
} Test;
static void
setup (Test *test,
gconstpointer unused)
{
test->dbus = g_test_dbus_new (G_TEST_DBUS_NONE);
g_test_dbus_up (test->dbus);
test->directory = egg_tests_create_scratch_directory (NULL, NULL);
}
static void
teardown (Test *test,
gconstpointer unused)
{
if (test->pid) {
if (waitpid (test->pid, NULL, WNOHANG) != test->pid) {
kill (test->pid, SIGTERM);
g_assert_cmpint (waitpid (test->pid, NULL, 0), ==, test->pid);
}
g_spawn_close_pid (test->pid);
}
egg_tests_remove_scratch_directory (test->directory);
g_free (test->directory);
if (test->dbus) {
g_test_dbus_down (test->dbus);
g_object_unref (test->dbus);
}
}
static void
test_sigterm (Test *test,
gconstpointer unused)
{
const gchar *argv[] = {
BUILDDIR "/gnome-keyring-daemon", "--foreground",
"--control-directory", test->directory,
"--components=secrets,pkcs11", NULL
};
gchar **output;
gint status;
GPid pid;
output = gkd_test_launch_daemon (test->directory, argv, &pid, NULL);
g_assert (gkd_control_unlock (test->directory, "booo"));
g_strfreev (output);
/* Terminate the daemon */
g_assert_cmpint (kill (pid, SIGTERM), ==, 0);
/* Daemon should exit cleanly */
g_assert_cmpint (waitpid (pid, &status, 0), ==, pid);
g_assert_cmpint (status, ==, 0);
}
static void
test_close_connection (Test *test,
gconstpointer unused)
{
const gchar *argv[] = {
BUILDDIR "/gnome-keyring-daemon", "--foreground",
"--control-directory", test->directory,
"--components=secrets,pkcs11", NULL
};
gchar **output;
gint status;
GPid pid;
output = gkd_test_launch_daemon (test->directory, argv, &pid, NULL);
g_assert (gkd_control_unlock (test->directory, "booo"));
g_strfreev (output);
/* Now close the dbus connection */
g_test_dbus_down (test->dbus);
g_object_unref (test->dbus);
test->dbus = NULL;
/* Daemon should exit */
g_assert_cmpint (waitpid (pid, &status, 0), ==, pid);
g_assert_cmpint (status, ==, 0);
}
int
main (int argc, char **argv)
{
g_test_init (&argc, &argv, NULL);
g_test_add ("/daemon/shutdown/dbus-connection", Test, NULL,
setup, test_close_connection, teardown);
g_test_add ("/daemon/shutdown/sigterm", Test, NULL,
setup, test_sigterm, teardown);
return g_test_run ();
}