Home | History | Annotate | Download | only in bus
      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