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 35static void 36die (const char *failure) 37{ 38 fprintf (stderr, "Unit test failed: %s\n", failure); 39 exit (1); 40} 41 42static void 43check_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 57static DBusInitialFDs *initial_fds = NULL; 58 59static void 60test_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 71static char *progname = ""; 72 73static void 74test_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 84int 85main (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