diff options
-rw-r--r-- | includes/bootstrap.inc | 6 | ||||
-rw-r--r-- | modules/simpletest/tests/bootstrap.test | 74 | ||||
-rw-r--r-- | modules/simpletest/tests/system_test.module | 14 |
3 files changed, 73 insertions, 21 deletions
diff --git a/includes/bootstrap.inc b/includes/bootstrap.inc index 6cb1e02f0..9e4e78ea0 100644 --- a/includes/bootstrap.inc +++ b/includes/bootstrap.inc @@ -1140,13 +1140,13 @@ function _drupal_bootstrap($phase) { break; case DRUPAL_BOOTSTRAP_LATE_PAGE_CACHE: - // Load module handling. - require_once DRUPAL_ROOT . '/includes/module.inc'; $cache_mode = variable_get('cache', CACHE_DISABLED); // Get the page from the cache. $cache = $cache_mode == CACHE_DISABLED ? '' : page_get_cache(); // If the skipping of the bootstrap hooks is not enforced, call hook_boot. - if ($cache_mode != CACHE_AGGRESSIVE) { + if (!$cache || $cache_mode != CACHE_AGGRESSIVE) { + // Load module handling. + require_once DRUPAL_ROOT . '/includes/module.inc'; bootstrap_invoke_all('boot'); } // If there is a cached page, display it. diff --git a/modules/simpletest/tests/bootstrap.test b/modules/simpletest/tests/bootstrap.test index 638d6b89f..82e1ee0da 100644 --- a/modules/simpletest/tests/bootstrap.test +++ b/modules/simpletest/tests/bootstrap.test @@ -3,9 +3,6 @@ class BootstrapIPAddressTestCase extends DrupalWebTestCase { - /** - * Implementation of getInfo(). - */ function getInfo() { return array( 'name' => t('IP address and HTTP_HOST test'), @@ -14,9 +11,6 @@ class BootstrapIPAddressTestCase extends DrupalWebTestCase { ); } - /** - * Implementation of setUp(). - */ function setUp() { $this->oldserver = $_SERVER; @@ -33,9 +27,6 @@ class BootstrapIPAddressTestCase extends DrupalWebTestCase { parent::setUp(); } - /** - * Implementation of tearDown(). - */ function tearDown() { $_SERVER = $this->oldserver; parent::tearDown(); @@ -95,9 +86,6 @@ class BootstrapIPAddressTestCase extends DrupalWebTestCase { class BootstrapPageCacheTestCase extends DrupalWebTestCase { - /** - * Implementation of getInfo(). - */ function getInfo() { return array( 'name' => t('Page cache test'), @@ -121,16 +109,10 @@ class BootstrapPageCacheTestCase extends DrupalWebTestCase { class BootstrapVariableTestCase extends DrupalWebTestCase { - /** - * Implementation of setUp(). - */ function setUp() { parent::setUp('system_test'); } - /** - * Implementation of getInfo(). - */ function getInfo() { return array( 'name' => t('Variable test'), @@ -160,3 +142,59 @@ class BootstrapVariableTestCase extends DrupalWebTestCase { } } + +/** + * Test hook_boot and hook_exit. + */ +class HookBootExitTestCase extends DrupalWebTestCase { + + function getInfo() { + return array( + 'name' => t('Boot and exit hook functionality'), + 'description' => t('Test that hook_boot() and hook_exit() are called correctly.'), + 'group' => t('Bootstrap'), + ); + } + + function setUp() { + parent::setUp('system_test', 'dblog'); + } + + /** + * Test calling of hook_boot() and hook_exit(). + */ + function testHookBootExit() { + // Test with cache disabled. Boot and exit should always fire. Initialize + // the number of hook calls to one since the first call to two since the + // first call to drupalGet actually performs two HTTP requests. + variable_set('cache', CACHE_DISABLED); + $this->drupalGet(''); + $calls = 2; + $this->assertEqual(db_query("SELECT COUNT(*) FROM {watchdog} WHERE type = 'system_test' AND message = 'hook_boot'")->fetchField(), $calls, t('hook_boot called with disabled cache.')); + $this->assertEqual(db_query("SELECT COUNT(*) FROM {watchdog} WHERE type = 'system_test' AND message = 'hook_exit'")->fetchField(), $calls, t('hook_exit called with disabled cache.')); + + // Test with normal cache. Boot and exit should be called. + variable_set('cache', CACHE_NORMAL); + $this->drupalGet(''); + $calls++; + $this->assertEqual(db_query("SELECT COUNT(*) FROM {watchdog} WHERE type = 'system_test' AND message = 'hook_boot'")->fetchField(), $calls, t('hook_boot called with normal cache.')); + $this->assertEqual(db_query("SELECT COUNT(*) FROM {watchdog} WHERE type = 'system_test' AND message = 'hook_exit'")->fetchField(), $calls, t('hook_exit called with normal cache.')); + + // Test with aggressive cache. Boot and exit should only fire if there is + // no page cached. + variable_set('cache', CACHE_AGGRESSIVE); + $this->assertTrue(cache_get(url('', array('absolute' => TRUE)), 'cache_page'), t('Page has been cached.')); + $this->drupalGet(''); + $this->assertEqual(db_query("SELECT COUNT(*) FROM {watchdog} WHERE type = 'system_test' AND message = 'hook_boot'")->fetchField(), $calls, t('hook_boot not called with agressive cache and a cached page.')); + $this->assertEqual(db_query("SELECT COUNT(*) FROM {watchdog} WHERE type = 'system_test' AND message = 'hook_exit'")->fetchField(), $calls, t('hook_exit not called with agressive cache and a cached page.')); + + // Test with aggressive cache and page cache cleared. Boot and exit should + // be called. + $this->assertTrue(db_delete('cache_page')->execute(), t('Page cache cleared.')); + $this->drupalGet(''); + $calls++; + $this->assertEqual(db_query("SELECT COUNT(*) FROM {watchdog} WHERE type = 'system_test' AND message = 'hook_boot'")->fetchField(), $calls, t('hook_boot called with agressive cache and no cached page.')); + $this->assertEqual(db_query("SELECT COUNT(*) FROM {watchdog} WHERE type = 'system_test' AND message = 'hook_exit'")->fetchField(), $calls, t('hook_exit called with agressive cache and no cached page.')); + } +} + diff --git a/modules/simpletest/tests/system_test.module b/modules/simpletest/tests/system_test.module index 2134359d2..fadc05e3c 100644 --- a/modules/simpletest/tests/system_test.module +++ b/modules/simpletest/tests/system_test.module @@ -143,6 +143,20 @@ function system_test_modules_uninstalled($modules) { } /** + * Implementation of hook_boot(). + */ +function system_test_boot() { + watchdog('system_test', 'hook_boot'); +} + +/** + * Implementation of hook_exit(). + */ +function system_test_exit() { + watchdog('system_test', 'hook_exit'); +} + +/** * Menu callback; generate warnings to test the error handler. */ function system_test_generate_warnings() { |