protected function UpgradePathTestCase::performUpgrade in Drupal 7
Perform the upgrade.
Parameters
$register_errors: Register the errors during the upgrade process as failures.
Return value
TRUE if the upgrade succeeded, FALSE otherwise.
29 calls to UpgradePathTestCase::performUpgrade()
- AggregatorUpdatePathTestCase::testAggregatorUpdate in modules/
simpletest/ tests/ upgrade/ update.aggregator.test - Tests that the aggregator.module update is successful.
- BasicMinimalUpdatePath::testBasicMinimalUpdate in modules/
simpletest/ tests/ upgrade/ upgrade.test - Tests a successful point release update.
- BasicStandardUpdatePath::testBasicStandardUpdate in modules/
simpletest/ tests/ upgrade/ upgrade.test - Tests a successful point release update.
- BasicUpgradePath::testBasicUpgrade in modules/
simpletest/ tests/ upgrade/ upgrade.test - Test a successful upgrade.
- BasicUpgradePath::testFailedUpgrade in modules/
simpletest/ tests/ upgrade/ upgrade.test - Test a failed upgrade, and verify that the failure is reported.
File
- modules/
simpletest/ tests/ upgrade/ upgrade.test, line 207
Class
- UpgradePathTestCase
- Perform end-to-end tests of the upgrade path.
Code
protected function performUpgrade($register_errors = TRUE) {
if (!$this->zlibInstalled) {
$this
->fail(t('Missing zlib requirement for upgrade tests.'));
return FALSE;
}
$update_url = $GLOBALS['base_url'] . '/update.php';
// Load the first update screen.
$this
->drupalGet($update_url, array(
'external' => TRUE,
));
if (!$this
->assertResponse(200)) {
return FALSE;
}
// Continue.
$this
->drupalPost(NULL, array(), t('Continue'));
if (!$this
->assertResponse(200)) {
return FALSE;
}
// The test should pass if there are no pending updates.
$content = $this
->drupalGetContent();
if (strpos($content, t('No pending updates.')) !== FALSE) {
$this
->pass(t('No pending updates and therefore no upgrade process to test.'));
$this->pendingUpdates = FALSE;
return TRUE;
}
// Go!
$this
->drupalPost(NULL, array(), t('Apply pending updates'));
if (!$this
->assertResponse(200)) {
return FALSE;
}
// Check for errors during the update process.
foreach ($this
->xpath('//li[@class=:class]', array(
':class' => 'failure',
)) as $element) {
$message = strip_tags($element
->asXML());
$this->upgradeErrors[] = $message;
if ($register_errors) {
$this
->fail($message);
}
}
if (!empty($this->upgradeErrors)) {
// Upgrade failed, the installation might be in an inconsistent state,
// don't process.
return FALSE;
}
// Check if there still are pending updates.
$this
->drupalGet($update_url, array(
'external' => TRUE,
));
$this
->drupalPost(NULL, array(), t('Continue'));
if (!$this
->assertText(t('No pending updates.'), 'No pending updates at the end of the update process.')) {
return FALSE;
}
// Upgrade succeed, rebuild the environment so that we can call the API
// of the child site directly from this request.
$this->upgradedSite = TRUE;
// Reload module list. For modules that are enabled in the test database,
// but not on the test client, we need to load the code here.
$new_modules = array_diff(module_list(TRUE), $this->loadedModules);
foreach ($new_modules as $module) {
drupal_load('module', $module);
}
// Reload hook implementations
module_implements('', FALSE, TRUE);
// Rebuild caches.
drupal_static_reset();
drupal_flush_all_caches();
// Reload global $conf array and permissions.
$this
->refreshVariables();
$this
->checkPermissions(array(), TRUE);
return TRUE;
}