1/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ 2/* dbus-auth-util.c Would be in dbus-auth.c, but only used for tests/bus 3 * 4 * Copyright (C) 2002, 2003, 2004 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 "dbus-internals.h" 26#include "dbus-test.h" 27#include "dbus-auth.h" 28 29/** 30 * @addtogroup DBusAuth 31 * @{ 32 */ 33 34/** @} */ 35 36#ifdef DBUS_BUILD_TESTS 37#include "dbus-test.h" 38#include "dbus-auth-script.h" 39#include <stdio.h> 40 41static dbus_bool_t 42process_test_subdir (const DBusString *test_base_dir, 43 const char *subdir) 44{ 45 DBusString test_directory; 46 DBusString filename; 47 DBusDirIter *dir; 48 dbus_bool_t retval; 49 DBusError error = DBUS_ERROR_INIT; 50 51 retval = FALSE; 52 dir = NULL; 53 54 if (!_dbus_string_init (&test_directory)) 55 _dbus_assert_not_reached ("didn't allocate test_directory\n"); 56 57 _dbus_string_init_const (&filename, subdir); 58 59 if (!_dbus_string_copy (test_base_dir, 0, 60 &test_directory, 0)) 61 _dbus_assert_not_reached ("couldn't copy test_base_dir to test_directory"); 62 63 if (!_dbus_concat_dir_and_file (&test_directory, &filename)) 64 _dbus_assert_not_reached ("couldn't allocate full path"); 65 66 _dbus_string_free (&filename); 67 if (!_dbus_string_init (&filename)) 68 _dbus_assert_not_reached ("didn't allocate filename string\n"); 69 70 dir = _dbus_directory_open (&test_directory, &error); 71 if (dir == NULL) 72 { 73 _dbus_warn ("Could not open %s: %s\n", 74 _dbus_string_get_const_data (&test_directory), 75 error.message); 76 dbus_error_free (&error); 77 goto failed; 78 } 79 80 printf ("Testing %s:\n", subdir); 81 82 next: 83 while (_dbus_directory_get_next_file (dir, &filename, &error)) 84 { 85 DBusString full_path; 86 87 if (!_dbus_string_init (&full_path)) 88 _dbus_assert_not_reached ("couldn't init string"); 89 90 if (!_dbus_string_copy (&test_directory, 0, &full_path, 0)) 91 _dbus_assert_not_reached ("couldn't copy dir to full_path"); 92 93 if (!_dbus_concat_dir_and_file (&full_path, &filename)) 94 _dbus_assert_not_reached ("couldn't concat file to dir"); 95 96 if (!_dbus_string_ends_with_c_str (&filename, ".auth-script")) 97 { 98 _dbus_verbose ("Skipping non-.auth-script file %s\n", 99 _dbus_string_get_const_data (&filename)); 100 _dbus_string_free (&full_path); 101 goto next; 102 } 103 104 printf (" %s\n", _dbus_string_get_const_data (&filename)); 105 106 if (!_dbus_auth_script_run (&full_path)) 107 { 108 _dbus_string_free (&full_path); 109 goto failed; 110 } 111 else 112 _dbus_string_free (&full_path); 113 } 114 115 if (dbus_error_is_set (&error)) 116 { 117 _dbus_warn ("Could not get next file in %s: %s\n", 118 _dbus_string_get_const_data (&test_directory), error.message); 119 dbus_error_free (&error); 120 goto failed; 121 } 122 123 retval = TRUE; 124 125 failed: 126 127 if (dir) 128 _dbus_directory_close (dir); 129 _dbus_string_free (&test_directory); 130 _dbus_string_free (&filename); 131 132 return retval; 133} 134 135static dbus_bool_t 136process_test_dirs (const char *test_data_dir) 137{ 138 DBusString test_directory; 139 dbus_bool_t retval; 140 141 retval = FALSE; 142 143 _dbus_string_init_const (&test_directory, test_data_dir); 144 145 if (!process_test_subdir (&test_directory, "auth")) 146 goto failed; 147 148 retval = TRUE; 149 150 failed: 151 152 _dbus_string_free (&test_directory); 153 154 return retval; 155} 156 157dbus_bool_t 158_dbus_auth_test (const char *test_data_dir) 159{ 160 161 if (test_data_dir == NULL) 162 return TRUE; 163 164 if (!process_test_dirs (test_data_dir)) 165 return FALSE; 166 167 return TRUE; 168} 169 170#endif /* DBUS_BUILD_TESTS */ 171