1 /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ 2 /* test-main.c main() for make check 3 * 4 * Copyright (C) 2003 Red Hat, Inc. 5 * 6 * Licensed under the Academic Free License version 2.1 7 * 8 * This program is free software; you can redistribute it and/or modify 9 * it under the terms of the GNU General Public License as published by 10 * the Free Software Foundation; either version 2 of the License, or 11 * (at your option) any later version. 12 * 13 * This program is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 * GNU General Public License for more details. 17 * 18 * You should have received a copy of the GNU General Public License 19 * along with this program; if not, write to the Free Software 20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 21 * 22 */ 23 24 #include <config.h> 25 #include "test.h" 26 #include <stdio.h> 27 #include <stdlib.h> 28 #include <dbus/dbus-string.h> 29 #include <dbus/dbus-sysdeps.h> 30 #include <dbus/dbus-internals.h> 31 #include <dbus/dbus-message-private.h> 32 #include "selinux.h" 33 34 #ifdef DBUS_BUILD_TESTS 35 static void 36 die (const char *failure) 37 { 38 fprintf (stderr, "Unit test failed: %s\n", failure); 39 exit (1); 40 } 41 42 static void 43 check_memleaks (const char *name) 44 { 45 dbus_shutdown (); 46 47 printf ("%s: checking for memleaks\n", name); 48 if (_dbus_get_malloc_blocks_outstanding () != 0) 49 { 50 _dbus_warn ("%d dbus_malloc blocks were not freed\n", 51 _dbus_get_malloc_blocks_outstanding ()); 52 die ("memleaks"); 53 } 54 } 55 #endif /* DBUS_BUILD_TESTS */ 56 57 static void 58 test_pre_hook (void) 59 { 60 61 if (_dbus_getenv ("DBUS_TEST_SELINUX") 62 && (!bus_selinux_pre_init () 63 || !bus_selinux_full_init ())) 64 die ("could not init selinux support"); 65 } 66 67 static char *progname = ""; 68 static void 69 test_post_hook (void) 70 { 71 if (_dbus_getenv ("DBUS_TEST_SELINUX")) 72 bus_selinux_shutdown (); 73 check_memleaks (progname); 74 _dbus_check_fdleaks(); 75 } 76 77 int 78 main (int argc, char **argv) 79 { 80 #ifdef DBUS_BUILD_TESTS 81 const char *dir; 82 DBusString test_data_dir; 83 84 progname = argv[0]; 85 86 if (argc > 1) 87 dir = argv[1]; 88 else 89 dir = _dbus_getenv ("DBUS_TEST_DATA"); 90 91 if (dir == NULL) 92 { 93 fprintf (stderr, "Must specify test data directory as argv[1] or in DBUS_TEST_DATA env variable\n"); 94 return 1; 95 } 96 97 _dbus_string_init_const (&test_data_dir, dir); 98 99 if (!_dbus_threads_init_debug ()) 100 die ("initializing debug threads"); 101 102 test_pre_hook (); 103 printf ("%s: Running expire list test\n", argv[0]); 104 if (!bus_expire_list_test (&test_data_dir)) 105 die ("expire list"); 106 test_post_hook (); 107 108 test_pre_hook (); 109 printf ("%s: Running config file parser test\n", argv[0]); 110 if (!bus_config_parser_test (&test_data_dir)) 111 die ("parser"); 112 test_post_hook (); 113 114 test_pre_hook (); 115 printf ("%s: Running policy test\n", argv[0]); 116 if (!bus_policy_test (&test_data_dir)) 117 die ("policy"); 118 test_post_hook (); 119 120 test_pre_hook (); 121 printf ("%s: Running signals test\n", argv[0]); 122 if (!bus_signals_test (&test_data_dir)) 123 die ("signals"); 124 test_post_hook (); 125 126 test_pre_hook (); 127 printf ("%s: Running SHA1 connection test\n", argv[0]); 128 if (!bus_dispatch_sha1_test (&test_data_dir)) 129 die ("sha1"); 130 test_post_hook (); 131 132 test_pre_hook (); 133 printf ("%s: Running message dispatch test\n", argv[0]); 134 if (!bus_dispatch_test (&test_data_dir)) 135 die ("dispatch"); 136 test_post_hook (); 137 138 test_pre_hook (); 139 printf ("%s: Running service files reloading test\n", argv[0]); 140 if (!bus_activation_service_reload_test (&test_data_dir)) 141 die ("service reload"); 142 test_post_hook (); 143 144 #ifdef HAVE_UNIX_FD_PASSING 145 test_pre_hook (); 146 printf ("%s: Running unix fd passing test\n", argv[0]); 147 if (!bus_unix_fds_passing_test (&test_data_dir)) 148 die ("unix fd passing"); 149 test_post_hook (); 150 #endif 151 152 printf ("%s: Success\n", argv[0]); 153 154 155 return 0; 156 #else /* DBUS_BUILD_TESTS */ 157 158 printf ("Not compiled with test support\n"); 159 160 return 0; 161 #endif 162 } 163