Mercurial > hg > isophonics-drupal-site
view vendor/drush/drush/tests/pmUpdateStatusTest.php @ 13:5fb285c0d0e3
Update Drupal core to 8.4.7 via Composer. Security update; I *think* we've
been lucky to get away with this so far, as we don't support self-registration
which seems to be used by the so-called "drupalgeddon 2" attack that 8.4.5
was vulnerable to.
author | Chris Cannam |
---|---|
date | Mon, 23 Apr 2018 09:33:26 +0100 |
parents | 4c8ae668cc8c |
children | 129ea1e6d783 |
line wrap: on
line source
<?php /** * @file * Prepare a codebase with modules in several update status and test pm-updatestatus. */ namespace Unish; /** * @group slow * @group pm */ class pmUpdateStatus extends CommandUnishTestCase { /** * Setup the test environment. * * Here we assume that any Drupal core version parses data from Drupal's * update service the same way. We focus on testing drush functionality. * * Several drupal core versions are already tested by pmUpdateCode. * * We choose to setup a Drupal 7 environment for convenience: * - It has modules in each maintenance status * and they're not willing to change in short * - Drupal 6 will start to be unsupported at some point * - Drupal 8 still has not enough variety to cover the tests */ function setUp() { $sites = $this->setUpDrupal(1, TRUE, "7.30"); $options = array( 'root' => $this->webroot(), 'uri' => key($sites), 'yes' => NULL, 'cache' => NULL, 'skip' => NULL, // No FirePHP 'strict' => 0, ); // Prepare a list of modules with several update statuses. $modules_dl = array(); $modules_en = array(); // Update available but not a security one. Cross fingers they never release a security update. $modules_dl[] = 'bad_judgement-1.0-rc38'; $modules_en[] = 'bad_judgement'; // Old devel release with a security update available. $modules_dl[] = 'devel-7.x-1.0-rc1'; $modules_en[] = 'devel'; // Installed version not supported. $modules_dl[] = 'cck-2.x-dev'; $modules_en[] = 'cck'; // Up to date. $modules_dl[] = 'ctools'; $modules_en[] = 'ctools'; // Download and enable the modules. Additionally download a module from git, so it has no version information. $this->drush('pm-download', $modules_dl, $options); $this->drush('pm-download', array('zen'), $options + array('package-handler' => 'git_drupalorg')); $modules_en[] = 'zen'; // self::EXIT_ERROR because of bad_judgement. $this->drush('pm-enable', $modules_en, $options, NULL, NULL, self::EXIT_ERROR); } /** * Test several update statuses via drupal backend. */ function testUpdateStatusDrupal() { $this->doTest('drupal'); } /** * Test several update statuses via drush backend. */ function testUpdateStatusDrush() { $this->doTest('drush'); } function doTest($update_backend) { // Test several projects with a variety of statuses. $options = array( 'root' => $this->webroot(), 'uri' => key($this->getSites()), 'verbose' => NULL, 'backend' => NULL, 'update-backend' => $update_backend, ); $this->drush('pm-updatestatus', array(), $options); $parsed = $this->parse_backend_output($this->getOutput()); $data = $parsed['object']; $expected = array( 'drupal' => 'SECURITY UPDATE available', 'bad_judgement' => 'Update available', 'ctools' => 'Up to date', 'devel' => 'SECURITY UPDATE available', 'cck' => 'Installed version not supported', 'zen' => 'Project was not packaged by drupal.org but obtained from git. You need to enable git_deploy module', ); foreach ($expected as $module => $status_msg) { $this->assertArrayHasKey($module, $data, "$module module present in pm-updatestatus output"); $this->assertEquals($data[$module]['status_msg'], $status_msg, "$module status is '$status_msg'"); } // Test statuses when asked for specific projects and versions. $args = array( 'bad_judgement-1.0-rc38', 'ctools-0.0', 'devel-1.5', 'foo', ); $this->drush('pm-updatestatus', $args, $options); $parsed = $this->parse_backend_output($this->getOutput()); $data = $parsed['object']; $expected = array( 'bad_judgement' => 'Specified version already installed', 'ctools' => 'Specified version not found', 'devel' => 'Specified version available', 'foo' => 'Specified project not found', ); foreach ($expected as $module => $status_msg) { $this->assertArrayHasKey($module, $data, "$module module present in pm-updatestatus output"); $this->assertEquals($data[$module]['status_msg'], $status_msg, "$module status is '$status_msg'"); } // We don't expect any output for other projects than the provided ones. $not_expected = array( 'drupal', 'cck', 'zen', ); foreach ($not_expected as $module) { $this->assertArrayNotHasKey($module, $data, "$module module not present in pm-updatestatus output"); } // Test --security-only. $this->drush('pm-updatestatus', array(), $options + array('security-only' => NULL)); $parsed = $this->parse_backend_output($this->getOutput()); $data = $parsed['object']; $expected = array( 'drupal' => 'SECURITY UPDATE available', 'devel' => 'SECURITY UPDATE available', ); foreach ($expected as $module => $status_msg) { $this->assertArrayHasKey($module, $data, "$module module present in pm-updatestatus output"); $this->assertEquals($data[$module]['status_msg'], $status_msg, "$module status is '$status_msg'"); } // We don't expect any output for projects without security updates. $not_expected = array( 'bad_judgement', 'ctools', 'cck', 'zen', ); foreach ($not_expected as $module) { $this->assertArrayNotHasKey($module, $data, "$module module not present in pm-updatestatus output"); } // Test --check-disabled. $dis_options = array( 'root' => $this->webroot(), 'uri' => key($this->getSites()), 'yes' => NULL, ); $this->drush('pm-disable', array('devel'), $dis_options); $this->drush('pm-updatestatus', array(), $options + array('check-disabled' => 1)); $parsed = $this->parse_backend_output($this->getOutput()); $data = $parsed['object']; $this->assertArrayHasKey('devel', $data, "devel module present in pm-updatestatus output"); $this->drush('pm-updatestatus', array(), $options + array('check-disabled' => 0)); $parsed = $this->parse_backend_output($this->getOutput()); $data = $parsed['object']; $this->assertArrayNotHasKey('devel', $data, "devel module not present in pm-updatestatus output"); } }