function UpgradePathTestCase::performUpgrade

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.

... See full list

File

modules/simpletest/tests/upgrade/upgrade.test, line 214

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;
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.