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-internal.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 DBusInitialFDs *initial_fds = NULL; 58 59 static void 60 test_pre_hook (void) 61 { 62 63 if (_dbus_getenv ("DBUS_TEST_SELINUX") 64 && (!bus_selinux_pre_init () 65 || !bus_selinux_full_init ())) 66 die ("could not init selinux support"); 67 68 initial_fds = _dbus_check_fdleaks_enter (); 69 } 70 71 static char *progname = ""; 72 73 static void 74 test_post_hook (void) 75 { 76 if (_dbus_getenv ("DBUS_TEST_SELINUX")) 77 bus_selinux_shutdown (); 78 check_memleaks (progname); 79 80 _dbus_check_fdleaks_leave (initial_fds); 81 initial_fds = NULL; 82 } 83 84 int 85 main (int argc, char **argv) 86 { 87 #ifdef DBUS_BUILD_TESTS 88 const char *dir; 89 const char *only; 90 DBusString test_data_dir; 91 92 progname = argv[0]; 93 94 if (argc > 1) 95 dir = argv[1]; 96 else 97 dir = _dbus_getenv ("DBUS_TEST_DATA"); 98 99 if (argc > 2) 100 only = argv[2]; 101 else 102 only = NULL; 103 104 if (dir == NULL) 105 { 106 fprintf (stderr, "Must specify test data directory as argv[1] or in DBUS_TEST_DATA env variable\n"); 107 return 1; 108 } 109 110 _dbus_string_init_const (&test_data_dir, dir); 111 112 if (!_dbus_threads_init_debug ()) 113 die ("initializing debug threads"); 114 115 if (only == NULL || strcmp (only, "expire-list") == 0) 116 { 117 test_pre_hook (); 118 printf ("%s: Running expire list test\n", argv[0]); 119 if (!bus_expire_list_test (&test_data_dir)) 120 die ("expire list"); 121 test_post_hook (); 122 } 123 124 if (only == NULL || strcmp (only, "config-parser") == 0) 125 { 126 test_pre_hook (); 127 printf ("%s: Running config file parser test\n", argv[0]); 128 if (!bus_config_parser_test (&test_data_dir)) 129 die ("parser"); 130 test_post_hook (); 131 } 132 133 if (only == NULL || strcmp (only, "signals") == 0) 134 { 135 test_pre_hook (); 136 printf ("%s: Running signals test\n", argv[0]); 137 if (!bus_signals_test (&test_data_dir)) 138 die ("signals"); 139 test_post_hook (); 140 } 141 142 if (only == NULL || strcmp (only, "dispatch-sha1") == 0) 143 { 144 test_pre_hook (); 145 printf ("%s: Running SHA1 connection test\n", argv[0]); 146 if (!bus_dispatch_sha1_test (&test_data_dir)) 147 die ("sha1"); 148 test_post_hook (); 149 } 150 151 if (only == NULL || strcmp (only, "dispatch") == 0) 152 { 153 test_pre_hook (); 154 printf ("%s: Running message dispatch test\n", argv[0]); 155 if (!bus_dispatch_test (&test_data_dir)) 156 die ("dispatch"); 157 test_post_hook (); 158 } 159 160 if (only == NULL || strcmp (only, "activation-service-reload") == 0) 161 { 162 test_pre_hook (); 163 printf ("%s: Running service files reloading test\n", argv[0]); 164 if (!bus_activation_service_reload_test (&test_data_dir)) 165 die ("service reload"); 166 test_post_hook (); 167 } 168 169 #ifdef HAVE_UNIX_FD_PASSING 170 if (only == NULL || strcmp (only, "unix-fds-passing") == 0) 171 { 172 test_pre_hook (); 173 printf ("%s: Running unix fd passing test\n", argv[0]); 174 if (!bus_unix_fds_passing_test (&test_data_dir)) 175 die ("unix fd passing"); 176 test_post_hook (); 177 } 178 #endif 179 180 printf ("%s: Success\n", argv[0]); 181 182 183 return 0; 184 #else /* DBUS_BUILD_TESTS */ 185 186 printf ("Not compiled with test support\n"); 187 188 return 0; 189 #endif 190 } 191