4
* Implements hook_menu().
6
function system_test_menu() {
7
$items['system-test/sleep/%'] = array(
8
'page callback' => 'system_test_sleep',
9
'page arguments' => array(2),
10
'access callback' => TRUE,
11
'type' => MENU_CALLBACK,
13
$items['system-test/auth'] = array(
14
'page callback' => 'system_test_basic_auth_page',
15
'access callback' => TRUE,
16
'type' => MENU_CALLBACK,
18
$items['system-test/authorize-init/%'] = array(
19
'page callback' => 'system_test_authorize_init_page',
20
'page arguments' => array(2),
21
'access arguments' => array('administer software updates'),
22
'type' => MENU_CALLBACK,
24
$items['system-test/redirect/%'] = array(
25
'title' => 'Redirect',
26
'page callback' => 'system_test_redirect',
27
'page arguments' => array(2),
28
'access arguments' => array('access content'),
29
'type' => MENU_CALLBACK,
31
$items['system-test/multiple-redirects/%'] = array(
32
'title' => 'Redirect',
33
'page callback' => 'system_test_multiple_redirects',
34
'page arguments' => array(2),
35
'access arguments' => array('access content'),
36
'type' => MENU_CALLBACK,
38
$items['system-test/set-header'] = array(
39
'page callback' => 'system_test_set_header',
40
'access arguments' => array('access content'),
41
'type' => MENU_CALLBACK,
43
$items['system-test/redirect-noscheme'] = array(
44
'page callback' => 'system_test_redirect_noscheme',
45
'access arguments' => array('access content'),
46
'type' => MENU_CALLBACK,
48
$items['system-test/redirect-noparse'] = array(
49
'page callback' => 'system_test_redirect_noparse',
50
'access arguments' => array('access content'),
51
'type' => MENU_CALLBACK,
53
$items['system-test/redirect-invalid-scheme'] = array(
54
'page callback' => 'system_test_redirect_invalid_scheme',
55
'access arguments' => array('access content'),
56
'type' => MENU_CALLBACK,
59
$items['system-test/variable-get'] = array(
60
'title' => 'Variable Get',
61
'page callback' => 'variable_get',
62
'page arguments' => array('simpletest_bootstrap_variable_test', NULL),
63
'access arguments' => array('access content'),
64
'type' => MENU_CALLBACK,
67
$items['system-test/lock-acquire'] = array(
68
'title' => 'Lock acquire',
69
'page callback' => 'system_test_lock_acquire',
70
'access callback' => TRUE,
71
'type' => MENU_CALLBACK,
74
$items['system-test/lock-exit'] = array(
75
'title' => 'Lock acquire then exit',
76
'page callback' => 'system_test_lock_exit',
77
'access callback' => TRUE,
78
'type' => MENU_CALLBACK,
81
$items['system-test/main-content-handling'] = array(
82
'title' => 'Test main content handling',
83
'page callback' => 'system_test_main_content_fallback',
84
'access callback' => TRUE,
85
'type' => MENU_CALLBACK,
88
$items['system-test/main-content-fallback'] = array(
89
'title' => 'Test main content fallback',
90
'page callback' => 'system_test_main_content_fallback',
91
'access callback' => TRUE,
92
'type' => MENU_CALLBACK,
95
$items['system-test/main-content-duplication'] = array(
96
'title' => 'Test main content duplication',
97
'page callback' => 'system_test_main_content_fallback',
98
'access callback' => TRUE,
99
'type' => MENU_CALLBACK,
102
$items['system-test/shutdown-functions'] = array(
103
'title' => 'Test main content duplication',
104
'page callback' => 'system_test_page_shutdown_functions',
105
'access callback' => TRUE,
106
'type' => MENU_CALLBACK,
112
function system_test_sleep($seconds) {
116
function system_test_basic_auth_page() {
117
// The Authorization HTTP header is forwarded via Drupal's .htaccess file even
118
// for PHP CGI SAPIs.
119
if (isset($_SERVER['HTTP_AUTHORIZATION'])) {
120
$authorization_header = $_SERVER['HTTP_AUTHORIZATION'];
122
// If using CGI on Apache with mod_rewrite, the forwarded HTTP header appears
123
// in the redirected HTTP headers. See
124
// https://github.com/symfony/symfony/blob/master/src/Symfony/Component/HttpFoundation/ServerBag.php#L61
125
elseif (isset($_SERVER['REDIRECT_HTTP_AUTHORIZATION'])) {
126
$authorization_header = $_SERVER['REDIRECT_HTTP_AUTHORIZATION'];
128
// Resemble PHP_AUTH_USER and PHP_AUTH_PW for a Basic authentication from
129
// the HTTP_AUTHORIZATION header. See
130
// http://www.php.net/manual/features.http-auth.php
131
list($user, $pw) = explode(':', base64_decode(substr($authorization_header, 6)));
132
$output = t('Username is @username.', array('@username' => $user));
133
$output .= t('Password is @password.', array('@password' => $pw));
137
function system_test_redirect($code) {
140
// Header names are case-insensitive.
141
header("locaTION: " . url('system-test/redirect/200', array('absolute' => TRUE)), TRUE, $code);
148
* Menu callback; sends a redirect header to itself until $count argument is 0.
150
* Emulates the variable number of redirects (given by initial $count argument)
151
* to the final destination URL by continuous sending of 301 HTTP redirect
152
* headers to itself together with decrementing the $count parameter until the
153
* $count parameter reaches 0. After that it returns an empty string to render
154
* the final destination page.
157
* The count of redirects left until the final destination page.
160
* The location redirect if the $count > 0, otherwise an empty string.
162
function system_test_multiple_redirects($count) {
163
$count = (int) $count;
165
header("location: " . url('system-test/multiple-redirects/' . --$count, array('absolute' => TRUE)), TRUE, 301);
171
function system_test_set_header() {
172
drupal_add_http_header($_GET['name'], $_GET['value']);
173
return t('The following header was set: %name: %value', array('%name' => $_GET['name'], '%value' => $_GET['value']));
176
function system_test_redirect_noscheme() {
177
header("Location: localhost/path", TRUE, 301);
181
function system_test_redirect_noparse() {
182
header("Location: http:///path", TRUE, 301);
186
function system_test_redirect_invalid_scheme() {
187
header("Location: ftp://localhost/path", TRUE, 301);
192
* Implements hook_modules_installed().
194
function system_test_modules_installed($modules) {
195
if (variable_get('test_verbose_module_hooks')) {
196
foreach ($modules as $module) {
197
drupal_set_message(t('hook_modules_installed fired for @module', array('@module' => $module)));
203
* Implements hook_modules_enabled().
205
function system_test_modules_enabled($modules) {
206
if (variable_get('test_verbose_module_hooks')) {
207
foreach ($modules as $module) {
208
drupal_set_message(t('hook_modules_enabled fired for @module', array('@module' => $module)));
214
* Implements hook_modules_disabled().
216
function system_test_modules_disabled($modules) {
217
if (variable_get('test_verbose_module_hooks')) {
218
foreach ($modules as $module) {
219
drupal_set_message(t('hook_modules_disabled fired for @module', array('@module' => $module)));
225
* Implements hook_modules_uninstalled().
227
function system_test_modules_uninstalled($modules) {
228
if (variable_get('test_verbose_module_hooks')) {
229
foreach ($modules as $module) {
230
drupal_set_message(t('hook_modules_uninstalled fired for @module', array('@module' => $module)));
236
* Implements hook_boot().
238
function system_test_boot() {
239
watchdog('system_test', 'hook_boot');
243
* Implements hook_init().
245
function system_test_init() {
246
// Used by FrontPageTestCase to get the results of drupal_is_front_page().
247
if (variable_get('front_page_output', 0) && drupal_is_front_page()) {
248
drupal_set_message(t('On front page.'));
253
* Implements hook_exit().
255
function system_test_exit() {
256
watchdog('system_test', 'hook_exit');
260
* Implements hook_system_info_alter().
262
function system_test_system_info_alter(&$info, $file, $type) {
263
// We need a static otherwise the last test will fail to alter common_test.
265
if (($dependencies = variable_get('dependencies', array())) || $test) {
266
if ($file->name == 'module_test') {
267
$info['hidden'] = FALSE;
268
$info['dependencies'][] = array_shift($dependencies);
269
variable_set('dependencies', $dependencies);
272
if ($file->name == 'common_test') {
273
$info['hidden'] = FALSE;
274
$info['version'] = '7.x-2.4-beta3';
278
// Make the system_dependencies_test visible by default.
279
if ($file->name == 'system_dependencies_test') {
280
$info['hidden'] = FALSE;
282
if (in_array($file->name, array(
283
'system_incompatible_module_version_dependencies_test',
284
'system_incompatible_core_version_dependencies_test',
285
'system_incompatible_module_version_test',
286
'system_incompatible_core_version_test',
288
$info['hidden'] = FALSE;
290
if ($file->name == 'requirements1_test' || $file->name == 'requirements2_test') {
291
$info['hidden'] = FALSE;
296
* Try to acquire a named lock and report the outcome.
298
function system_test_lock_acquire() {
299
if (lock_acquire('system_test_lock_acquire')) {
300
lock_release('system_test_lock_acquire');
301
return 'TRUE: Lock successfully acquired in system_test_lock_acquire()';
304
return 'FALSE: Lock not acquired in system_test_lock_acquire()';
309
* Try to acquire a specific lock, and then exit.
311
function system_test_lock_exit() {
312
if (lock_acquire('system_test_lock_exit', 900)) {
313
echo 'TRUE: Lock successfully acquired in system_test_lock_exit()';
314
// The shut-down function should release the lock.
318
return 'FALSE: Lock not acquired in system_test_lock_exit()';
323
* Implements hook_page_build().
325
function system_test_page_build(&$page) {
326
$menu_item = menu_get_item();
327
$main_content_display = &drupal_static('system_main_content_added', FALSE);
329
if ($menu_item['path'] == 'system-test/main-content-handling') {
330
$page['footer'] = drupal_set_page_content();
331
$page['footer']['main']['#markup'] = '<div id="system-test-content">' . $page['footer']['main']['#markup'] . '</div>';
333
elseif ($menu_item['path'] == 'system-test/main-content-fallback') {
334
drupal_set_page_content();
335
$main_content_display = FALSE;
337
elseif ($menu_item['path'] == 'system-test/main-content-duplication') {
338
drupal_set_page_content();
343
* Menu callback to test main content fallback().
345
function system_test_main_content_fallback() {
346
return t('Content to test main content fallback');
350
* A simple page callback which adds a register shutdown function.
352
function system_test_page_shutdown_functions($arg1, $arg2) {
353
drupal_register_shutdown_function('_system_test_first_shutdown_function', $arg1, $arg2);
357
* Dummy shutdown function which registers another shutdown function.
359
function _system_test_first_shutdown_function($arg1, $arg2) {
360
// Output something, page has already been printed and the session stored
361
// so we can't use drupal_set_message.
362
print t('First shutdown function, arg1 : @arg1, arg2: @arg2', array('@arg1' => $arg1, '@arg2' => $arg2));
363
drupal_register_shutdown_function('_system_test_second_shutdown_function', $arg1, $arg2);
367
* Dummy shutdown function.
369
function _system_test_second_shutdown_function($arg1, $arg2) {
370
// Output something, page has already been printed and the session stored
371
// so we can't use drupal_set_message.
372
print t('Second shutdown function, arg1 : @arg1, arg2: @arg2', array('@arg1' => $arg1, '@arg2' => $arg2));
374
// Throw an exception with an HTML tag. Since this is called in a shutdown
375
// function, it will not bubble up to the default exception handler but will
376
// be caught in _drupal_shutdown_function() and be displayed through
377
// _drupal_render_exception_safe().
378
throw new Exception('Drupal is <blink>awesome</blink>.');
382
* Implements hook_filetransfer_info().
384
function system_test_filetransfer_info() {
386
'system_test' => array(
387
'title' => t('System Test FileTransfer'),
388
'file' => 'system_test.module', // Should be a .inc, but for test, ok.
389
'class' => 'SystemTestFileTransfer',
396
* Mock FileTransfer object to test the settings form functionality.
398
class SystemTestFileTransfer {
399
public static function factory() {
400
return new SystemTestFileTransfer;
403
public function getSettingsForm() {
405
$form['system_test_username'] = array(
406
'#type' => 'textfield',
407
'#title' => t('System Test Username'),
414
* Page callback to initialize authorize.php during testing.
416
* @see system_authorized_init().
418
function system_test_authorize_init_page($page_title) {
419
$authorize_url = $GLOBALS['base_url'] . '/authorize.php';
420
system_authorized_init('system_test_authorize_run', drupal_get_path('module', 'system_test') . '/system_test.module', array(), $page_title);
421
drupal_goto($authorize_url);