diff options
| -rw-r--r-- | ChangeLog | 6 | ||||
| -rw-r--r-- | bus/test-launch-helper.c | 146 | 
2 files changed, 152 insertions, 0 deletions
| @@ -1,5 +1,11 @@  2007-07-24  Richard Hughes  <richard@hughsie.com> +	* bus/test-launch-helper.c: (die), (check_memleaks), +	(test_post_hook), (bus_activation_helper_oom_test), (main): +	Add a test wrapper to allow OOM checks on the launch helper. + +2007-07-24  Richard Hughes  <richard@hughsie.com> +  	* bus/activation-helper-bin.c: (convert_error_to_exit_code),  	(main):  	* bus/activation-helper.c: (desktop_file_for_name), diff --git a/bus/test-launch-helper.c b/bus/test-launch-helper.c new file mode 100644 index 00000000..e7ac18b9 --- /dev/null +++ b/bus/test-launch-helper.c @@ -0,0 +1,146 @@ +/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ +/* test-main.c  main() for the OOM check of the launch helper + * + * Copyright (C) 2007 Red Hat, Inc. + * + * Licensed under the Academic Free License version 2.1 + *  + * 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 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA + * + */ + +#include "test.h" +#include "activation-helper.h" + +#include <stdio.h> +#include <stdlib.h> +#include <dbus/dbus-internals.h> + +#ifdef DBUS_BUILD_TESTS +static void +die (const char *failure) +{ +  fprintf (stderr, "Unit test failed: %s\n", failure); +  exit (1); +} + +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"); +    } +} + +static void +test_post_hook (const char *name) +{ +  check_memleaks (name); +} +#endif /* DBUS_BUILD_TESTS */ + + +#ifdef ACTIVATION_LAUNCHER_DO_OOM + +/* returns true if good things happen, or if we get OOM */ +static dbus_bool_t +bus_activation_helper_oom_test (void *data) +{ +  const char *service; +  DBusError error; +  dbus_bool_t retval; + +  service = (const char *) data; +  retval = TRUE; + +  dbus_error_init (&error); +  if (!run_launch_helper (service, &error)) +    { +      _DBUS_ASSERT_ERROR_IS_SET (&error); +      /* we failed, but a OOM is good */ +      if (!dbus_error_has_name (&error, DBUS_ERROR_NO_MEMORY)) +        { +          _dbus_warn ("FAILED SELF TEST: Error: %s\n", error.message); +          retval = FALSE; +        } +      dbus_error_free (&error); +    } +  else +    { +      /* we succeeded, yay! */ +      _DBUS_ASSERT_ERROR_IS_CLEAR (&error); +    } +  return retval; +} + +#endif + +int +main (int argc, char **argv) +{ +#ifdef DBUS_BUILD_TESTS +  const char *dir; +  DBusString config_file; + +  if (argc > 1) +    dir = argv[1]; +  else +    dir = _dbus_getenv ("DBUS_TEST_DATA"); + +  if (dir == NULL) +    { +      fprintf (stderr, "Must specify test data directory as argv[1] or in DBUS_TEST_DATA env variable\n"); +      return 1; +    } + +  printf ("%s: Running launch helper OOM checks\n", argv[0]); + +  if (!_dbus_string_init (&config_file)) +    return 1; +  if (!_dbus_string_append (&config_file, dir)) +    return 1; +  if (!_dbus_string_append (&config_file, "/valid-config-files-system/debug-allow-all-pass.conf")) +    return 1; + +  /* use a config file that will actually work... */ +  _dbus_setenv ("TEST_LAUNCH_HELPER_CONFIG", +                _dbus_string_get_const_data (&config_file)); + +  _dbus_string_free (&config_file); + +  if (!_dbus_test_oom_handling ("dbus-daemon-launch-helper", +                                bus_activation_helper_oom_test, +                                "org.freedesktop.DBus.TestSuiteEchoService")) +    die ("OOM failed"); + +  test_post_hook (argv[0]); + +  printf ("%s: Success\n", argv[0]); + +  return 0; +#else /* DBUS_BUILD_TESTS */ + +  printf ("Not compiled with test support\n"); +   +  return 0; +#endif +} + | 
