test-main.c 4.93 KB
Newer Older
1
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
2 3 4 5
/* test-main.c  main() for make check
 *
 * Copyright (C) 2003 Red Hat, Inc.
 *
6
 * Licensed under the Academic Free License version 2.1
7 8 9 10 11 12 13 14 15 16 17 18 19
 * 
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * 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 27 28 29
#include <stdio.h>
#include <stdlib.h>
#include <dbus/dbus-string.h>
#include <dbus/dbus-sysdeps.h>
30
#include <dbus/dbus-internals.h>
31
#include <dbus/dbus-message-internal.h>
32
#include "selinux.h"
33

34 35 36 37
#ifdef DBUS_UNIX
# include <dbus/dbus-sysdeps-unix.h>
#endif

38
#ifdef DBUS_ENABLE_EMBEDDED_TESTS
39 40 41 42 43 44
static void
die (const char *failure)
{
  fprintf (stderr, "Unit test failed: %s\n", failure);
  exit (1);
}
45

46 47 48 49 50 51 52 53 54 55 56 57 58
static void
check_memleaks (const char *name)
{
  dbus_shutdown ();
  
  printf ("%s: checking for memleaks\n", name);
  if (_dbus_get_malloc_blocks_outstanding () != 0)
    {
      _dbus_warn ("%d dbus_malloc blocks were not freed\n",
                  _dbus_get_malloc_blocks_outstanding ());
      die ("memleaks");
    }
}
59
#endif /* DBUS_ENABLE_EMBEDDED_TESTS */
60

61 62
static DBusInitialFDs *initial_fds = NULL;

63 64 65 66
static void
test_pre_hook (void)
{
  
67
  if (_dbus_getenv ("DBUS_TEST_SELINUX")
68 69
      && (!bus_selinux_pre_init ()
	  || !bus_selinux_full_init ()))
70
    die ("could not init selinux support");
71 72

  initial_fds = _dbus_check_fdleaks_enter ();
73 74 75
}

static char *progname = "";
76

77 78 79 80 81 82
static void
test_post_hook (void)
{
  if (_dbus_getenv ("DBUS_TEST_SELINUX"))
    bus_selinux_shutdown ();
  check_memleaks (progname);
83 84 85

  _dbus_check_fdleaks_leave (initial_fds);
  initial_fds = NULL;
86 87
}

88 89 90
int
main (int argc, char **argv)
{
91
#ifdef DBUS_ENABLE_EMBEDDED_TESTS
92
  const char *dir;
93
  const char *only;
94 95
  DBusString test_data_dir;

96 97
  progname = argv[0];

98
  if (argc > 1 && strcmp (argv[1], "--tap") != 0)
99 100 101 102
    dir = argv[1];
  else
    dir = _dbus_getenv ("DBUS_TEST_DATA");

103 104 105 106 107
  if (argc > 2)
    only = argv[2];
  else
    only = NULL;

108
  if (dir == NULL)
109 110 111 112
    {
      fprintf (stderr, "Must specify test data directory as argv[1] or in DBUS_TEST_DATA env variable\n");
      return 1;
    }
113

114
  _dbus_string_init_const (&test_data_dir, dir);
115

116 117 118 119 120
#ifdef DBUS_UNIX
  /* close any inherited fds so dbus-spawn's check for close-on-exec works */
  _dbus_close_all ();
#endif

121 122
  if (!_dbus_threads_init_debug ())
    die ("initializing debug threads");
123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176

  if (only == NULL || strcmp (only, "expire-list") == 0)
    {
      test_pre_hook ();
      printf ("%s: Running expire list test\n", argv[0]);
      if (!bus_expire_list_test (&test_data_dir))
        die ("expire list");
      test_post_hook ();
    }

  if (only == NULL || strcmp (only, "config-parser") == 0)
    {
      test_pre_hook ();
      printf ("%s: Running config file parser test\n", argv[0]);
      if (!bus_config_parser_test (&test_data_dir))
        die ("parser");
      test_post_hook ();
    }

  if (only == NULL || strcmp (only, "signals") == 0)
    {
      test_pre_hook ();
      printf ("%s: Running signals test\n", argv[0]);
      if (!bus_signals_test (&test_data_dir))
        die ("signals");
      test_post_hook ();
    }

  if (only == NULL || strcmp (only, "dispatch-sha1") == 0)
    {
      test_pre_hook ();
      printf ("%s: Running SHA1 connection test\n", argv[0]);
      if (!bus_dispatch_sha1_test (&test_data_dir))
        die ("sha1");
      test_post_hook ();
    }

  if (only == NULL || strcmp (only, "dispatch") == 0)
    {
      test_pre_hook ();
      printf ("%s: Running message dispatch test\n", argv[0]);
      if (!bus_dispatch_test (&test_data_dir)) 
        die ("dispatch");
      test_post_hook ();
    }

  if (only == NULL || strcmp (only, "activation-service-reload") == 0)
    {
      test_pre_hook ();
      printf ("%s: Running service files reloading test\n", argv[0]);
      if (!bus_activation_service_reload_test (&test_data_dir))
        die ("service reload");
      test_post_hook ();
    }
177

178
#ifdef HAVE_UNIX_FD_PASSING
179 180 181 182 183 184 185 186
  if (only == NULL || strcmp (only, "unix-fds-passing") == 0)
    {
      test_pre_hook ();
      printf ("%s: Running unix fd passing test\n", argv[0]);
      if (!bus_unix_fds_passing_test (&test_data_dir))
        die ("unix fd passing");
      test_post_hook ();
    }
187 188
#endif

189
  printf ("%s: Success\n", argv[0]);
190

191 192
  
  return 0;
193
#else /* DBUS_ENABLE_EMBEDDED_TESTS */
194 195 196

  printf ("Not compiled with test support\n");
  
197 198 199
  return 0;
#endif
}