1d012387afef0ba02185ebe27bc6bb15551912e92Havoc Pennington/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ 2d65b73884cb876276b6bd73f4b1dfcd920984a8aHavoc Pennington/* test-main.c main() for make check 3d65b73884cb876276b6bd73f4b1dfcd920984a8aHavoc Pennington * 4d65b73884cb876276b6bd73f4b1dfcd920984a8aHavoc Pennington * Copyright (C) 2003 Red Hat, Inc. 5d65b73884cb876276b6bd73f4b1dfcd920984a8aHavoc Pennington * 643605a6f4e78a8c28afb4b1e924dff0301e0e95cHavoc Pennington * Licensed under the Academic Free License version 2.1 7d65b73884cb876276b6bd73f4b1dfcd920984a8aHavoc Pennington * 8d65b73884cb876276b6bd73f4b1dfcd920984a8aHavoc Pennington * This program is free software; you can redistribute it and/or modify 9d65b73884cb876276b6bd73f4b1dfcd920984a8aHavoc Pennington * it under the terms of the GNU General Public License as published by 10d65b73884cb876276b6bd73f4b1dfcd920984a8aHavoc Pennington * the Free Software Foundation; either version 2 of the License, or 11d65b73884cb876276b6bd73f4b1dfcd920984a8aHavoc Pennington * (at your option) any later version. 12d65b73884cb876276b6bd73f4b1dfcd920984a8aHavoc Pennington * 13d65b73884cb876276b6bd73f4b1dfcd920984a8aHavoc Pennington * This program is distributed in the hope that it will be useful, 14d65b73884cb876276b6bd73f4b1dfcd920984a8aHavoc Pennington * but WITHOUT ANY WARRANTY; without even the implied warranty of 15d65b73884cb876276b6bd73f4b1dfcd920984a8aHavoc Pennington * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16d65b73884cb876276b6bd73f4b1dfcd920984a8aHavoc Pennington * GNU General Public License for more details. 17d65b73884cb876276b6bd73f4b1dfcd920984a8aHavoc Pennington * 18d65b73884cb876276b6bd73f4b1dfcd920984a8aHavoc Pennington * You should have received a copy of the GNU General Public License 19d65b73884cb876276b6bd73f4b1dfcd920984a8aHavoc Pennington * along with this program; if not, write to the Free Software 205baf2f856a9c6625993234855b07680da1c8916fTobias Mueller * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 21d65b73884cb876276b6bd73f4b1dfcd920984a8aHavoc Pennington * 22d65b73884cb876276b6bd73f4b1dfcd920984a8aHavoc Pennington */ 23d65b73884cb876276b6bd73f4b1dfcd920984a8aHavoc Pennington 24dbecdeabb20e0ce11121819c63373f0afba57c58Marcus Brinkmann#include <config.h> 25d65b73884cb876276b6bd73f4b1dfcd920984a8aHavoc Pennington#include "test.h" 263bea935316ff048e68dea6a26c2e8e9fd314477fHavoc Pennington#include <stdio.h> 273bea935316ff048e68dea6a26c2e8e9fd314477fHavoc Pennington#include <stdlib.h> 283bea935316ff048e68dea6a26c2e8e9fd314477fHavoc Pennington#include <dbus/dbus-string.h> 293bea935316ff048e68dea6a26c2e8e9fd314477fHavoc Pennington#include <dbus/dbus-sysdeps.h> 30c3af5ccdbc22e8990d04ec2f89ad1f2e053655e9Havoc Pennington#include <dbus/dbus-internals.h> 314299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat#include <dbus/dbus-message-internal.h> 321e9b185b0c274ef0d684b1e43418388225321e72Havoc Pennington#include "selinux.h" 333bea935316ff048e68dea6a26c2e8e9fd314477fHavoc Pennington 3477eac31aee89346d1399193be6199b9b16fb77afHavoc Pennington#ifdef DBUS_BUILD_TESTS 353bea935316ff048e68dea6a26c2e8e9fd314477fHavoc Penningtonstatic void 363bea935316ff048e68dea6a26c2e8e9fd314477fHavoc Penningtondie (const char *failure) 373bea935316ff048e68dea6a26c2e8e9fd314477fHavoc Pennington{ 383bea935316ff048e68dea6a26c2e8e9fd314477fHavoc Pennington fprintf (stderr, "Unit test failed: %s\n", failure); 393bea935316ff048e68dea6a26c2e8e9fd314477fHavoc Pennington exit (1); 403bea935316ff048e68dea6a26c2e8e9fd314477fHavoc Pennington} 41d65b73884cb876276b6bd73f4b1dfcd920984a8aHavoc Pennington 42269d74f214f87bed0f6fd58f1c848240d31e0b9fHavoc Penningtonstatic void 43269d74f214f87bed0f6fd58f1c848240d31e0b9fHavoc Penningtoncheck_memleaks (const char *name) 44269d74f214f87bed0f6fd58f1c848240d31e0b9fHavoc Pennington{ 45269d74f214f87bed0f6fd58f1c848240d31e0b9fHavoc Pennington dbus_shutdown (); 46269d74f214f87bed0f6fd58f1c848240d31e0b9fHavoc Pennington 47269d74f214f87bed0f6fd58f1c848240d31e0b9fHavoc Pennington printf ("%s: checking for memleaks\n", name); 48269d74f214f87bed0f6fd58f1c848240d31e0b9fHavoc Pennington if (_dbus_get_malloc_blocks_outstanding () != 0) 49269d74f214f87bed0f6fd58f1c848240d31e0b9fHavoc Pennington { 50269d74f214f87bed0f6fd58f1c848240d31e0b9fHavoc Pennington _dbus_warn ("%d dbus_malloc blocks were not freed\n", 51269d74f214f87bed0f6fd58f1c848240d31e0b9fHavoc Pennington _dbus_get_malloc_blocks_outstanding ()); 52269d74f214f87bed0f6fd58f1c848240d31e0b9fHavoc Pennington die ("memleaks"); 53269d74f214f87bed0f6fd58f1c848240d31e0b9fHavoc Pennington } 54269d74f214f87bed0f6fd58f1c848240d31e0b9fHavoc Pennington} 5577eac31aee89346d1399193be6199b9b16fb77afHavoc Pennington#endif /* DBUS_BUILD_TESTS */ 56269d74f214f87bed0f6fd58f1c848240d31e0b9fHavoc Pennington 574299eb3c0907100fe95d2986984b48d40cc52841Daniel Eratstatic DBusInitialFDs *initial_fds = NULL; 584299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat 59ee78f2800f2642b4fff962b736296d87a7f12a17Colin Waltersstatic void 60ee78f2800f2642b4fff962b736296d87a7f12a17Colin Walterstest_pre_hook (void) 61ee78f2800f2642b4fff962b736296d87a7f12a17Colin Walters{ 62ee78f2800f2642b4fff962b736296d87a7f12a17Colin Walters 6373ffe59d87864d61b9d22f199fc6375840bf39bbColin Walters if (_dbus_getenv ("DBUS_TEST_SELINUX") 649b6814a59b359d237ec5b59d7983ddfd443c89d9Colin Walters && (!bus_selinux_pre_init () 659b6814a59b359d237ec5b59d7983ddfd443c89d9Colin Walters || !bus_selinux_full_init ())) 66ee78f2800f2642b4fff962b736296d87a7f12a17Colin Walters die ("could not init selinux support"); 674299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat 684299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat initial_fds = _dbus_check_fdleaks_enter (); 69ee78f2800f2642b4fff962b736296d87a7f12a17Colin Walters} 70ee78f2800f2642b4fff962b736296d87a7f12a17Colin Walters 71ee78f2800f2642b4fff962b736296d87a7f12a17Colin Waltersstatic char *progname = ""; 724299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat 73ee78f2800f2642b4fff962b736296d87a7f12a17Colin Waltersstatic void 74ee78f2800f2642b4fff962b736296d87a7f12a17Colin Walterstest_post_hook (void) 75ee78f2800f2642b4fff962b736296d87a7f12a17Colin Walters{ 76ee78f2800f2642b4fff962b736296d87a7f12a17Colin Walters if (_dbus_getenv ("DBUS_TEST_SELINUX")) 77ee78f2800f2642b4fff962b736296d87a7f12a17Colin Walters bus_selinux_shutdown (); 78ee78f2800f2642b4fff962b736296d87a7f12a17Colin Walters check_memleaks (progname); 794299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat 804299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat _dbus_check_fdleaks_leave (initial_fds); 814299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat initial_fds = NULL; 82ee78f2800f2642b4fff962b736296d87a7f12a17Colin Walters} 83ee78f2800f2642b4fff962b736296d87a7f12a17Colin Walters 84d65b73884cb876276b6bd73f4b1dfcd920984a8aHavoc Penningtonint 85d65b73884cb876276b6bd73f4b1dfcd920984a8aHavoc Penningtonmain (int argc, char **argv) 86d65b73884cb876276b6bd73f4b1dfcd920984a8aHavoc Pennington{ 87d65b73884cb876276b6bd73f4b1dfcd920984a8aHavoc Pennington#ifdef DBUS_BUILD_TESTS 883bea935316ff048e68dea6a26c2e8e9fd314477fHavoc Pennington const char *dir; 894299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat const char *only; 903bea935316ff048e68dea6a26c2e8e9fd314477fHavoc Pennington DBusString test_data_dir; 913bea935316ff048e68dea6a26c2e8e9fd314477fHavoc Pennington 92ee78f2800f2642b4fff962b736296d87a7f12a17Colin Walters progname = argv[0]; 93ee78f2800f2642b4fff962b736296d87a7f12a17Colin Walters 943bea935316ff048e68dea6a26c2e8e9fd314477fHavoc Pennington if (argc > 1) 953bea935316ff048e68dea6a26c2e8e9fd314477fHavoc Pennington dir = argv[1]; 963bea935316ff048e68dea6a26c2e8e9fd314477fHavoc Pennington else 973bea935316ff048e68dea6a26c2e8e9fd314477fHavoc Pennington dir = _dbus_getenv ("DBUS_TEST_DATA"); 983bea935316ff048e68dea6a26c2e8e9fd314477fHavoc Pennington 994299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat if (argc > 2) 1004299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat only = argv[2]; 1014299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat else 1024299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat only = NULL; 1034299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat 1043bea935316ff048e68dea6a26c2e8e9fd314477fHavoc Pennington if (dir == NULL) 10529c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington { 10629c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington fprintf (stderr, "Must specify test data directory as argv[1] or in DBUS_TEST_DATA env variable\n"); 10729c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington return 1; 10829c71168cd17b11eed65023c97aff401d5305b01Havoc Pennington } 109d65b73884cb876276b6bd73f4b1dfcd920984a8aHavoc Pennington 1103bea935316ff048e68dea6a26c2e8e9fd314477fHavoc Pennington _dbus_string_init_const (&test_data_dir, dir); 111bc8b061eec0fd9de6552a9e6118c40283863b6dcHavoc Pennington 112bc8b061eec0fd9de6552a9e6118c40283863b6dcHavoc Pennington if (!_dbus_threads_init_debug ()) 113bc8b061eec0fd9de6552a9e6118c40283863b6dcHavoc Pennington die ("initializing debug threads"); 1144299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat 1154299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat if (only == NULL || strcmp (only, "expire-list") == 0) 1164299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat { 1174299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat test_pre_hook (); 1184299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat printf ("%s: Running expire list test\n", argv[0]); 1194299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat if (!bus_expire_list_test (&test_data_dir)) 1204299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat die ("expire list"); 1214299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat test_post_hook (); 1224299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat } 1234299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat 1244299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat if (only == NULL || strcmp (only, "config-parser") == 0) 1254299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat { 1264299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat test_pre_hook (); 1274299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat printf ("%s: Running config file parser test\n", argv[0]); 1284299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat if (!bus_config_parser_test (&test_data_dir)) 1294299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat die ("parser"); 1304299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat test_post_hook (); 1314299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat } 1324299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat 1334299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat if (only == NULL || strcmp (only, "signals") == 0) 1344299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat { 1354299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat test_pre_hook (); 1364299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat printf ("%s: Running signals test\n", argv[0]); 1374299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat if (!bus_signals_test (&test_data_dir)) 1384299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat die ("signals"); 1394299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat test_post_hook (); 1404299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat } 1414299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat 1424299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat if (only == NULL || strcmp (only, "dispatch-sha1") == 0) 1434299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat { 1444299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat test_pre_hook (); 1454299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat printf ("%s: Running SHA1 connection test\n", argv[0]); 1464299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat if (!bus_dispatch_sha1_test (&test_data_dir)) 1474299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat die ("sha1"); 1484299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat test_post_hook (); 1494299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat } 1504299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat 1514299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat if (only == NULL || strcmp (only, "dispatch") == 0) 1524299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat { 1534299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat test_pre_hook (); 1544299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat printf ("%s: Running message dispatch test\n", argv[0]); 1554299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat if (!bus_dispatch_test (&test_data_dir)) 1564299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat die ("dispatch"); 1574299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat test_post_hook (); 1584299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat } 1594299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat 1604299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat if (only == NULL || strcmp (only, "activation-service-reload") == 0) 1614299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat { 1624299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat test_pre_hook (); 1634299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat printf ("%s: Running service files reloading test\n", argv[0]); 1644299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat if (!bus_activation_service_reload_test (&test_data_dir)) 1654299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat die ("service reload"); 1664299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat test_post_hook (); 1674299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat } 168dd79fc73f08574698c18c6a35dc309d5ef33fde0Mikael Hallendal 169004f01fa451b0341e7ea69ce7f08a1c4690f759aLennart Poettering#ifdef HAVE_UNIX_FD_PASSING 1704299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat if (only == NULL || strcmp (only, "unix-fds-passing") == 0) 1714299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat { 1724299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat test_pre_hook (); 1734299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat printf ("%s: Running unix fd passing test\n", argv[0]); 1744299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat if (!bus_unix_fds_passing_test (&test_data_dir)) 1754299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat die ("unix fd passing"); 1764299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat test_post_hook (); 1774299eb3c0907100fe95d2986984b48d40cc52841Daniel Erat } 178004f01fa451b0341e7ea69ce7f08a1c4690f759aLennart Poettering#endif 179004f01fa451b0341e7ea69ce7f08a1c4690f759aLennart Poettering 1801fbf6fa49c90010f3f255f60944920ef8908701cHavoc Pennington printf ("%s: Success\n", argv[0]); 1811e9b185b0c274ef0d684b1e43418388225321e72Havoc Pennington 182d65b73884cb876276b6bd73f4b1dfcd920984a8aHavoc Pennington 183d65b73884cb876276b6bd73f4b1dfcd920984a8aHavoc Pennington return 0; 184d65b73884cb876276b6bd73f4b1dfcd920984a8aHavoc Pennington#else /* DBUS_BUILD_TESTS */ 1854c95a9782c65f88e2904c44abeb734a1b00f6353Havoc Pennington 1864c95a9782c65f88e2904c44abeb734a1b00f6353Havoc Pennington printf ("Not compiled with test support\n"); 1874c95a9782c65f88e2904c44abeb734a1b00f6353Havoc Pennington 188d65b73884cb876276b6bd73f4b1dfcd920984a8aHavoc Pennington return 0; 189d65b73884cb876276b6bd73f4b1dfcd920984a8aHavoc Pennington#endif 190d65b73884cb876276b6bd73f4b1dfcd920984a8aHavoc Pennington} 191