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
die(const char * failure)36 die (const char *failure)
37 {
38 fprintf (stderr, "Unit test failed: %s\n", failure);
39 exit (1);
40 }
41
42 static void
check_memleaks(const char * name)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
test_pre_hook(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
test_post_hook(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
main(int argc,char ** argv)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