blob: 99becb0e4742718e0e1fbe344c1e49128cad5936 [file] [log] [blame]
Havoc Penningtond0123872007-07-14 02:44:01 +00001/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
Havoc Pennington1428c652002-11-23 06:53:37 +00002/* dbus-test.c Program to run all tests
3 *
Havoc Penningtonaad6fa82005-01-17 00:16:28 +00004 * Copyright (C) 2002, 2003, 2004, 2005 Red Hat Inc.
Havoc Pennington1428c652002-11-23 06:53:37 +00005 *
Havoc Pennington43605a62004-08-10 03:07:01 +00006 * Licensed under the Academic Free License version 2.1
Havoc Pennington1428c652002-11-23 06:53:37 +00007 *
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
Tobias Mueller5baf2f82009-07-10 19:32:38 -040020 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Havoc Pennington1428c652002-11-23 06:53:37 +000021 *
22 */
23
Havoc Pennington650c2742003-01-18 15:19:01 +000024#include <config.h>
Havoc Pennington576cdb62002-11-23 19:56:30 +000025#include "dbus-test.h"
Havoc Pennington05a4ad62003-01-28 03:53:29 +000026#include "dbus-sysdeps.h"
Havoc Penningtonc3af5cc2003-03-24 03:16:58 +000027#include "dbus-internals.h"
Havoc Pennington1428c652002-11-23 06:53:37 +000028#include <stdio.h>
Havoc Pennington17fbe2b2002-12-24 06:37:33 +000029#include <stdlib.h>
30
Havoc Penningtonc3af5cc2003-03-24 03:16:58 +000031#ifdef DBUS_BUILD_TESTS
Havoc Pennington17fbe2b2002-12-24 06:37:33 +000032static void
33die (const char *failure)
34{
Havoc Pennington05a4ad62003-01-28 03:53:29 +000035 fprintf (stderr, "Unit test failed: %s\n", failure);
Havoc Pennington17fbe2b2002-12-24 06:37:33 +000036 exit (1);
37}
Havoc Pennington269d74f2003-03-26 07:16:03 +000038
39static void
40check_memleaks (void)
41{
42 dbus_shutdown ();
43
44 printf ("%s: checking for memleaks\n", "dbus-test");
45 if (_dbus_get_malloc_blocks_outstanding () != 0)
46 {
47 _dbus_warn ("%d dbus_malloc blocks were not freed\n",
48 _dbus_get_malloc_blocks_outstanding ());
49 die ("memleaks");
50 }
51}
52
Colin Waltersf9a7bcc2005-02-21 19:38:06 +000053typedef dbus_bool_t (*TestFunc)(void);
54typedef dbus_bool_t (*TestDataFunc)(const char *data);
55
56static void
57run_test (const char *test_name,
58 const char *specific_test,
59 TestFunc test)
60{
61 if (!specific_test || strcmp (specific_test, test_name) == 0)
62 {
63 printf ("%s: running %s tests\n", "dbus-test", test_name);
64 if (!test ())
65 die (test_name);
66 }
67
68 check_memleaks ();
69}
70
71static void
72run_data_test (const char *test_name,
73 const char *specific_test,
74 TestDataFunc test,
75 const char *test_data_dir)
76{
77 if (!specific_test || strcmp (specific_test, test_name) == 0)
78 {
79 printf ("%s: running %s tests\n", "dbus-test", test_name);
80 if (!test (test_data_dir))
81 die (test_name);
82 }
83
84 check_memleaks ();
85}
86
Havoc Penningtoneaefe032006-10-28 01:41:37 +000087#endif /* DBUS_BUILD_TESTS */
88
Havoc Pennington993be102003-01-09 01:31:35 +000089/**
90 * An exported symbol to be run in order to execute
91 * unit tests. Should not be used by
92 * any app other than our test app, this symbol
93 * won't exist in some builds of the library.
94 * (with --enable-tests=no)
Havoc Pennington05a4ad62003-01-28 03:53:29 +000095 *
96 * @param test_data_dir the directory with test data (test/data normally)
Havoc Pennington993be102003-01-09 01:31:35 +000097 */
98void
Colin Waltersf9a7bcc2005-02-21 19:38:06 +000099dbus_internal_do_not_use_run_tests (const char *test_data_dir, const char *specific_test)
Havoc Pennington1428c652002-11-23 06:53:37 +0000100{
Havoc Penningtoneae3a9c2003-01-15 16:34:52 +0000101#ifdef DBUS_BUILD_TESTS
Havoc Penningtonbc8b0612003-04-06 19:12:45 +0000102 if (!_dbus_threads_init_debug ())
103 die ("debug threads init");
104
Havoc Pennington05a4ad62003-01-28 03:53:29 +0000105 if (test_data_dir == NULL)
106 test_data_dir = _dbus_getenv ("DBUS_TEST_DATA");
107
108 if (test_data_dir != NULL)
109 printf ("Test data in %s\n", test_data_dir);
110 else
111 printf ("No test data!\n");
Anders Carlssonee09dbf2003-03-06 23:11:49 +0000112
Colin Waltersf9a7bcc2005-02-21 19:38:06 +0000113 run_test ("string", specific_test, _dbus_string_test);
Havoc Pennington5fd1e382003-08-31 01:51:44 +0000114
Colin Waltersf9a7bcc2005-02-21 19:38:06 +0000115 run_test ("sysdeps", specific_test, _dbus_sysdeps_test);
Havoc Penningtonc3af5cc2003-03-24 03:16:58 +0000116
Colin Waltersf9a7bcc2005-02-21 19:38:06 +0000117 run_test ("data-slot", specific_test, _dbus_data_slot_test);
Havoc Penningtond3204dc2006-11-15 03:07:59 +0000118
119 run_test ("misc", specific_test, _dbus_misc_test);
Havoc Pennington72654232003-02-26 06:42:57 +0000120
Colin Waltersf9a7bcc2005-02-21 19:38:06 +0000121 run_test ("address", specific_test, _dbus_address_test);
Havoc Pennington269d74f2003-03-26 07:16:03 +0000122
Colin Waltersf9a7bcc2005-02-21 19:38:06 +0000123 run_test ("server", specific_test, _dbus_server_test);
Havoc Pennington3f1ad212003-07-07 00:47:01 +0000124
Colin Waltersf9a7bcc2005-02-21 19:38:06 +0000125 run_test ("object-tree", specific_test, _dbus_object_tree_test);
Colin Walters54a2e9f2005-02-24 16:03:56 +0000126
127 run_test ("signature", specific_test, _dbus_signature_test);
Havoc Pennington24f411a2003-08-25 14:56:53 +0000128
Colin Waltersf9a7bcc2005-02-21 19:38:06 +0000129 run_test ("marshalling", specific_test, _dbus_marshal_test);
Miloslav Trmac928d7f32003-06-28 23:12:11 +0000130
Havoc Pennington71f3b462005-02-11 01:13:45 +0000131#if 0
Havoc Pennington9c3d5662005-01-15 07:15:38 +0000132 printf ("%s: running recursive marshalling tests\n", "dbus-test");
133 if (!_dbus_marshal_recursive_test ())
134 die ("recursive marshal");
135
136 check_memleaks ();
137#else
138 _dbus_warn ("recursive marshal tests disabled\n");
139#endif
140
Colin Waltersf9a7bcc2005-02-21 19:38:06 +0000141 run_test ("byteswap", specific_test, _dbus_marshal_byteswap_test);
Havoc Penningtonfddbc092005-01-27 23:39:26 +0000142
Colin Waltersf9a7bcc2005-02-21 19:38:06 +0000143 run_test ("memory", specific_test, _dbus_memory_test);
Miloslav Trmac928d7f32003-06-28 23:12:11 +0000144
Havoc Pennington3ed9db52005-01-28 03:06:56 +0000145#if 1
Colin Waltersf9a7bcc2005-02-21 19:38:06 +0000146 run_test ("mem-pool", specific_test, _dbus_mem_pool_test);
Havoc Pennington9d215542005-01-23 06:10:07 +0000147#endif
Havoc Penningtonc3af5cc2003-03-24 03:16:58 +0000148
Colin Waltersf9a7bcc2005-02-21 19:38:06 +0000149 run_test ("list", specific_test, _dbus_list_test);
Havoc Pennington576cdb62002-11-23 19:56:30 +0000150
Colin Waltersf9a7bcc2005-02-21 19:38:06 +0000151 run_test ("marshal-validate", specific_test, _dbus_marshal_validate_test);
Havoc Pennington9c3d5662005-01-15 07:15:38 +0000152
Colin Waltersf9a7bcc2005-02-21 19:38:06 +0000153 run_test ("marshal-header", specific_test, _dbus_marshal_header_test);
Havoc Pennington269d74f2003-03-26 07:16:03 +0000154
Colin Waltersf9a7bcc2005-02-21 19:38:06 +0000155 run_data_test ("message", specific_test, _dbus_message_test, test_data_dir);
Havoc Penningtond1c7eef2003-05-05 03:13:35 +0000156
Colin Waltersf9a7bcc2005-02-21 19:38:06 +0000157 run_test ("hash", specific_test, _dbus_hash_test);
Havoc Pennington269d74f2003-03-26 07:16:03 +0000158
Ralf Habacker5c593d72007-05-19 18:15:56 +0000159#if !defined(DBUS_WINCE)
Colin Waltersf9a7bcc2005-02-21 19:38:06 +0000160 run_data_test ("spawn", specific_test, _dbus_spawn_test, test_data_dir);
Ralf Habacker5c593d72007-05-19 18:15:56 +0000161#endif
Havoc Penningtond1c7eef2003-05-05 03:13:35 +0000162
Havoc Pennington23832672007-06-09 21:53:20 +0000163 run_data_test ("credentials", specific_test, _dbus_credentials_test, test_data_dir);
Havoc Pennington7be5fd92007-06-09 23:41:33 +0000164
165#ifdef DBUS_UNIX
Colin Waltersf9a7bcc2005-02-21 19:38:06 +0000166 run_data_test ("userdb", specific_test, _dbus_userdb_test, test_data_dir);
Havoc Pennington7be5fd92007-06-09 23:41:33 +0000167#endif
Havoc Penningtonc3af5cc2003-03-24 03:16:58 +0000168
Colin Waltersf9a7bcc2005-02-21 19:38:06 +0000169 run_test ("keyring", specific_test, _dbus_keyring_test);
Havoc Pennington03663852003-04-08 22:07:09 +0000170
171#if 0
172 printf ("%s: running md5 tests\n", "dbus-test");
173 if (!_dbus_md5_test ())
174 die ("md5");
175
176 check_memleaks ();
177#endif
178
Colin Waltersf9a7bcc2005-02-21 19:38:06 +0000179 run_data_test ("sha", specific_test, _dbus_sha_test, test_data_dir);
Havoc Pennington03663852003-04-08 22:07:09 +0000180
Colin Waltersf9a7bcc2005-02-21 19:38:06 +0000181 run_data_test ("auth", specific_test, _dbus_auth_test, test_data_dir);
Havoc Pennington03663852003-04-08 22:07:09 +0000182
Colin Waltersf9a7bcc2005-02-21 19:38:06 +0000183 run_data_test ("pending-call", specific_test, _dbus_pending_call_test, test_data_dir);
Havoc Pennington03663852003-04-08 22:07:09 +0000184
Havoc Pennington993be102003-01-09 01:31:35 +0000185 printf ("%s: completed successfully\n", "dbus-test");
Havoc Penningtoneae3a9c2003-01-15 16:34:52 +0000186#else
187 printf ("Not compiled with unit tests, not running any\n");
188#endif
Havoc Pennington1428c652002-11-23 06:53:37 +0000189}
Havoc Penningtoneaefe032006-10-28 01:41:37 +0000190