2010-05-06 20:13:59 +02:00
/* GLib testing framework examples and tests
*
2010-05-10 14:07:28 +02:00
* Copyright ( C ) 2008 - 2010 Red Hat , Inc .
2010-05-06 20:13:59 +02:00
*
* This library 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 of the License , or ( at your option ) any later version .
*
* This 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
* Lesser General Public License for more details .
*
* You should have received a copy of the GNU Lesser General
* Public License along with this library ; if not , write to the
* Free Software Foundation , Inc . , 59 Temple Place , Suite 330 ,
* Boston , MA 02111 - 1307 , USA .
*
* Author : David Zeuthen < davidz @ redhat . com >
*/
# include <gio/gio.h>
# include <unistd.h>
# include <string.h>
# include "gdbus-tests.h"
/* all tests rely on a shared mainloop */
static GMainLoop * loop = NULL ;
/* ---------------------------------------------------------------------------------------------------- */
static gboolean
nuke_session_bus_cb ( gpointer data )
{
g_main_loop_quit ( loop ) ;
return FALSE ;
}
static void
test_exit_on_close ( void )
{
if ( g_test_trap_fork ( 0 , G_TEST_TRAP_SILENCE_STDOUT | G_TEST_TRAP_SILENCE_STDERR ) )
{
GDBusConnection * c ;
session_bus_up ( ) ;
c = g_bus_get_sync ( G_BUS_TYPE_SESSION , NULL , NULL ) ;
g_assert ( c ! = NULL ) ;
g_assert ( ! g_dbus_connection_is_closed ( c ) ) ;
g_timeout_add ( 50 ,
nuke_session_bus_cb ,
NULL ) ;
g_main_loop_run ( loop ) ;
session_bus_down ( ) ;
g_main_loop_run ( loop ) ;
}
2010-08-03 18:47:07 +02:00
g_test_trap_assert_stdout ( " *Remote peer vanished with error: Underlying GIOStream returned 0 bytes on an async read (g-io-error-quark, 0). Exiting.* " ) ;
2010-05-06 20:13:59 +02:00
g_test_trap_assert_failed ( ) ;
}
/* ---------------------------------------------------------------------------------------------------- */
int
main ( int argc ,
char * argv [ ] )
{
g_type_init ( ) ;
g_test_init ( & argc , & argv , NULL ) ;
/* all the tests rely on a shared main loop */
loop = g_main_loop_new ( NULL , FALSE ) ;
/* all the tests use a session bus with a well-known address that we can bring up and down
* using session_bus_up ( ) and session_bus_down ( ) .
*/
g_unsetenv ( " DISPLAY " ) ;
g_setenv ( " DBUS_SESSION_BUS_ADDRESS " , session_bus_get_temporary_address ( ) , TRUE ) ;
g_test_add_func ( " /gdbus/exit-on-close " , test_exit_on_close ) ;
return g_test_run ( ) ;
}