'system_test_sleep', 'page arguments' => array(2), 'access callback' => TRUE, 'type' => MENU_CALLBACK, ); $items['system-test/auth'] = array( 'page callback' => 'system_test_basic_auth_page', 'access callback' => TRUE, 'type' => MENU_CALLBACK, ); $items['system-test/authorize-init/%'] = array( 'page callback' => 'system_test_authorize_init_page', 'page arguments' => array(2), 'access arguments' => array('administer software updates'), 'type' => MENU_CALLBACK, ); $items['system-test/redirect/%'] = array( 'title' => 'Redirect', 'page callback' => 'system_test_redirect', 'page arguments' => array(2), 'access arguments' => array('access content'), 'type' => MENU_CALLBACK, ); $items['system-test/multiple-redirects/%'] = array( 'title' => 'Redirect', 'page callback' => 'system_test_multiple_redirects', 'page arguments' => array(2), 'access arguments' => array('access content'), 'type' => MENU_CALLBACK, ); $items['system-test/set-header'] = array( 'page callback' => 'system_test_set_header', 'access arguments' => array('access content'), 'type' => MENU_CALLBACK, ); $items['system-test/redirect-noscheme'] = array( 'page callback' => 'system_test_redirect_noscheme', 'access arguments' => array('access content'), 'type' => MENU_CALLBACK, ); $items['system-test/redirect-noparse'] = array( 'page callback' => 'system_test_redirect_noparse', 'access arguments' => array('access content'), 'type' => MENU_CALLBACK, ); $items['system-test/redirect-invalid-scheme'] = array( 'page callback' => 'system_test_redirect_invalid_scheme', 'access arguments' => array('access content'), 'type' => MENU_CALLBACK, ); $items['system-test/variable-get'] = array( 'title' => 'Variable Get', 'page callback' => 'variable_get', 'page arguments' => array('simpletest_bootstrap_variable_test', NULL), 'access arguments' => array('access content'), 'type' => MENU_CALLBACK, ); $items['system-test/lock-acquire'] = array( 'title' => 'Lock acquire', 'page callback' => 'system_test_lock_acquire', 'access callback' => TRUE, 'type' => MENU_CALLBACK, ); $items['system-test/lock-exit'] = array( 'title' => 'Lock acquire then exit', 'page callback' => 'system_test_lock_exit', 'access callback' => TRUE, 'type' => MENU_CALLBACK, ); $items['system-test/main-content-handling'] = array( 'title' => 'Test main content handling', 'page callback' => 'system_test_main_content_fallback', 'access callback' => TRUE, 'type' => MENU_CALLBACK, ); $items['system-test/main-content-fallback'] = array( 'title' => 'Test main content fallback', 'page callback' => 'system_test_main_content_fallback', 'access callback' => TRUE, 'type' => MENU_CALLBACK, ); $items['system-test/main-content-duplication'] = array( 'title' => 'Test main content duplication', 'page callback' => 'system_test_main_content_fallback', 'access callback' => TRUE, 'type' => MENU_CALLBACK, ); $items['system-test/shutdown-functions'] = array( 'title' => 'Test main content duplication', 'page callback' => 'system_test_page_shutdown_functions', 'access callback' => TRUE, 'type' => MENU_CALLBACK, ); return $items; } function system_test_sleep($seconds) { sleep($seconds); } function system_test_basic_auth_page() { // The Authorization HTTP header is forwarded via Drupal's .htaccess file even // for PHP CGI SAPIs. if (isset($_SERVER['HTTP_AUTHORIZATION'])) { $authorization_header = $_SERVER['HTTP_AUTHORIZATION']; } // If using CGI on Apache with mod_rewrite, the forwarded HTTP header appears // in the redirected HTTP headers. See // https://github.com/symfony/symfony/blob/master/src/Symfony/Component/HttpFoundation/ServerBag.php#L61 elseif (isset($_SERVER['REDIRECT_HTTP_AUTHORIZATION'])) { $authorization_header = $_SERVER['REDIRECT_HTTP_AUTHORIZATION']; } // Resemble PHP_AUTH_USER and PHP_AUTH_PW for a Basic authentication from // the HTTP_AUTHORIZATION header. See // http://www.php.net/manual/features.http-auth.php list($user, $pw) = explode(':', base64_decode(substr($authorization_header, 6))); $output = t('Username is @username.', array('@username' => $user)); $output .= t('Password is @password.', array('@password' => $pw)); return $output; } function system_test_redirect($code) { $code = (int) $code; if ($code != 200) { // Header names are case-insensitive. header("locaTION: " . url('system-test/redirect/200', array('absolute' => TRUE)), TRUE, $code); exit; } return ''; } /** * Menu callback; sends a redirect header to itself until $count argument is 0. * * Emulates the variable number of redirects (given by initial $count argument) * to the final destination URL by continuous sending of 301 HTTP redirect * headers to itself together with decrementing the $count parameter until the * $count parameter reaches 0. After that it returns an empty string to render * the final destination page. * * @param $count * The count of redirects left until the final destination page. * * @returns * The location redirect if the $count > 0, otherwise an empty string. */ function system_test_multiple_redirects($count) { $count = (int) $count; if ($count > 0) { header("location: " . url('system-test/multiple-redirects/' . --$count, array('absolute' => TRUE)), TRUE, 301); exit; } return ''; } function system_test_set_header() { drupal_add_http_header($_GET['name'], $_GET['value']); return t('The following header was set: %name: %value', array('%name' => $_GET['name'], '%value' => $_GET['value'])); } function system_test_redirect_noscheme() { header("Location: localhost/path", TRUE, 301); exit; } function system_test_redirect_noparse() { header("Location: http:///path", TRUE, 301); exit; } function system_test_redirect_invalid_scheme() { header("Location: ftp://localhost/path", TRUE, 301); exit; } /** * Implements hook_modules_installed(). */ function system_test_modules_installed($modules) { if (variable_get('test_verbose_module_hooks')) { foreach ($modules as $module) { drupal_set_message(t('hook_modules_installed fired for @module', array('@module' => $module))); } } } /** * Implements hook_modules_enabled(). */ function system_test_modules_enabled($modules) { if (variable_get('test_verbose_module_hooks')) { foreach ($modules as $module) { drupal_set_message(t('hook_modules_enabled fired for @module', array('@module' => $module))); } } } /** * Implements hook_modules_disabled(). */ function system_test_modules_disabled($modules) { if (variable_get('test_verbose_module_hooks')) { foreach ($modules as $module) { drupal_set_message(t('hook_modules_disabled fired for @module', array('@module' => $module))); } } } /** * Implements hook_modules_uninstalled(). */ function system_test_modules_uninstalled($modules) { if (variable_get('test_verbose_module_hooks')) { foreach ($modules as $module) { drupal_set_message(t('hook_modules_uninstalled fired for @module', array('@module' => $module))); } } } /** * Implements hook_boot(). */ function system_test_boot() { watchdog('system_test', 'hook_boot'); } /** * Implements hook_init(). */ function system_test_init() { // Used by FrontPageTestCase to get the results of drupal_is_front_page(). if (variable_get('front_page_output', 0) && drupal_is_front_page()) { drupal_set_message(t('On front page.')); } } /** * Implements hook_exit(). */ function system_test_exit() { watchdog('system_test', 'hook_exit'); } /** * Implements hook_system_info_alter(). */ function system_test_system_info_alter(&$info, $file, $type) { // We need a static otherwise the last test will fail to alter common_test. static $test; if (($dependencies = variable_get('dependencies', array())) || $test) { if ($file->name == 'module_test') { $info['hidden'] = FALSE; $info['dependencies'][] = array_shift($dependencies); variable_set('dependencies', $dependencies); $test = TRUE; } if ($file->name == 'common_test') { $info['hidden'] = FALSE; $info['version'] = '7.x-2.4-beta3'; } } // Make the system_dependencies_test visible by default. if ($file->name == 'system_dependencies_test') { $info['hidden'] = FALSE; } if (in_array($file->name, array( 'system_incompatible_module_version_dependencies_test', 'system_incompatible_core_version_dependencies_test', 'system_incompatible_module_version_test', 'system_incompatible_core_version_test', ))) { $info['hidden'] = FALSE; } if ($file->name == 'requirements1_test' || $file->name == 'requirements2_test') { $info['hidden'] = FALSE; } } /** * Try to acquire a named lock and report the outcome. */ function system_test_lock_acquire() { if (lock_acquire('system_test_lock_acquire')) { lock_release('system_test_lock_acquire'); return 'TRUE: Lock successfully acquired in system_test_lock_acquire()'; } else { return 'FALSE: Lock not acquired in system_test_lock_acquire()'; } } /** * Try to acquire a specific lock, and then exit. */ function system_test_lock_exit() { if (lock_acquire('system_test_lock_exit', 900)) { echo 'TRUE: Lock successfully acquired in system_test_lock_exit()'; // The shut-down function should release the lock. exit(); } else { return 'FALSE: Lock not acquired in system_test_lock_exit()'; } } /** * Implements hook_page_build(). */ function system_test_page_build(&$page) { $menu_item = menu_get_item(); $main_content_display = &drupal_static('system_main_content_added', FALSE); if ($menu_item['path'] == 'system-test/main-content-handling') { $page['footer'] = drupal_set_page_content(); $page['footer']['main']['#markup'] = '
' . $page['footer']['main']['#markup'] . '
'; } elseif ($menu_item['path'] == 'system-test/main-content-fallback') { drupal_set_page_content(); $main_content_display = FALSE; } elseif ($menu_item['path'] == 'system-test/main-content-duplication') { drupal_set_page_content(); } } /** * Menu callback to test main content fallback(). */ function system_test_main_content_fallback() { return t('Content to test main content fallback'); } /** * A simple page callback which adds a register shutdown function. */ function system_test_page_shutdown_functions($arg1, $arg2) { drupal_register_shutdown_function('_system_test_first_shutdown_function', $arg1, $arg2); } /** * Dummy shutdown function which registers another shutdown function. */ function _system_test_first_shutdown_function($arg1, $arg2) { // Output something, page has already been printed and the session stored // so we can't use drupal_set_message. print t('First shutdown function, arg1 : @arg1, arg2: @arg2', array('@arg1' => $arg1, '@arg2' => $arg2)); drupal_register_shutdown_function('_system_test_second_shutdown_function', $arg1, $arg2); } /** * Dummy shutdown function. */ function _system_test_second_shutdown_function($arg1, $arg2) { // Output something, page has already been printed and the session stored // so we can't use drupal_set_message. print t('Second shutdown function, arg1 : @arg1, arg2: @arg2', array('@arg1' => $arg1, '@arg2' => $arg2)); // Throw an exception with an HTML tag. Since this is called in a shutdown // function, it will not bubble up to the default exception handler but will // be caught in _drupal_shutdown_function() and be displayed through // _drupal_render_exception_safe(). throw new Exception('Drupal is awesome.'); } /** * Implements hook_filetransfer_info(). */ function system_test_filetransfer_info() { return array( 'system_test' => array( 'title' => t('System Test FileTransfer'), 'file' => 'system_test.module', // Should be a .inc, but for test, ok. 'class' => 'SystemTestFileTransfer', 'weight' => -10, ), ); } /** * Mock FileTransfer object to test the settings form functionality. */ class SystemTestFileTransfer { public static function factory() { return new SystemTestFileTransfer; } public function getSettingsForm() { $form = array(); $form['system_test_username'] = array( '#type' => 'textfield', '#title' => t('System Test Username'), ); return $form; } } /** * Page callback to initialize authorize.php during testing. * * @see system_authorized_init(). */ function system_test_authorize_init_page($page_title) { $authorize_url = $GLOBALS['base_url'] . '/authorize.php'; system_authorized_init('system_test_authorize_run', drupal_get_path('module', 'system_test') . '/system_test.module', array(), $page_title); drupal_goto($authorize_url); }