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-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