MDL-50611 test: use cURL extension to download Composer

The curl binary is nowhere near as common in Windows environments as it is
in Linux and Mac ones. In order to encourage more users to adopt Behat and
PHPUnit for their testing, we should avoid introducing unnecessary
hurdles.
This commit is contained in:
Luke Carrier 2015-06-16 12:11:18 +01:00 committed by Luke Carrier
parent f4bfbd5aa2
commit 0897e19093
3 changed files with 44 additions and 14 deletions

View File

@ -157,7 +157,7 @@ class behat_command {
// Returning composer error code to avoid conflicts with behat and moodle error codes.
self::output_msg(get_string('errorcomposer', 'tool_behat'));
return BEHAT_EXITCODE_COMPOSER;
return TESTING_EXITCODE_COMPOSER;
}
// Behat test command.
@ -167,7 +167,7 @@ class behat_command {
// Returning composer error code to avoid conflicts with behat and moodle error codes.
self::output_msg(get_string('errorbehatcommand', 'tool_behat', self::get_behat_command()));
return BEHAT_EXITCODE_COMPOSER;
return TESTING_EXITCODE_COMPOSER;
}
// No empty values.

View File

@ -38,7 +38,6 @@ define('BEHAT_EXITCODE_REQUIREMENT', 251);
define('BEHAT_EXITCODE_PERMISSIONS', 252);
define('BEHAT_EXITCODE_REINSTALL', 253);
define('BEHAT_EXITCODE_INSTALL', 254);
define('BEHAT_EXITCODE_COMPOSER', 255);
define('BEHAT_EXITCODE_INSTALLED', 256);
/**
@ -458,4 +457,4 @@ function cli_execute_parallel($cmds, $cwd = null) {
}
}
return $processes;
}
}

View File

@ -25,6 +25,13 @@
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
/**
* Composer error exit status.
*
* @var integer
*/
define('TESTING_EXITCODE_COMPOSER', 255);
/**
* Returns relative path against current working directory,
* to be used for shell execution hints.
@ -170,22 +177,45 @@ function testing_error($errorcode, $text = '') {
* @return void exit() if something goes wrong
*/
function testing_update_composer_dependencies() {
// To restore the value after finishing.
$cwd = getcwd();
// Dirroot.
chdir(__DIR__ . '/../..');
// Set some paths.
$dirroot = dirname(dirname(__DIR__));
$composerpath = $dirroot . DIRECTORY_SEPARATOR . 'composer.phar';
$composerurl = 'https://getcomposer.org/composer.phar';
// Download composer.phar if we can.
if (!file_exists(__DIR__ . '/../../composer.phar')) {
passthru("curl http://getcomposer.org/installer | php", $code);
if ($code != 0) {
exit($code);
// Switch to Moodle's dirroot for easier path handling.
chdir($dirroot);
// Download or update composer.phar. Unfortunately we can't use the curl
// class in filelib.php as we're running within one of the test platforms.
if (!file_exists($composerpath)) {
$file = @fopen($composerpath, 'w+');
if ($file === false) {
$errordetails = error_get_last();
$error = sprintf("Unable to open composer.phar\nPHP error: %s",
$errordetails['message']);
testing_error(TESTING_EXITCODE_COMPOSER, $error);
}
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $composerurl);
curl_setopt($curl, CURLOPT_FILE, $file);
$result = curl_exec($curl);
$curlerrno = curl_errno($curl);
$curlerror = curl_error($curl);
curl_close($curl);
fclose($file);
if (!$result) {
$error = sprintf("Unable to download composer.phar\ncURL error (%d): %s",
$curlerrno, $curlerror);
testing_error(TESTING_EXITCODE_COMPOSER, $error);
}
} else {
// If it is already there update the installer.
passthru("php composer.phar self-update", $code);
if ($code != 0) {
exit($code);
@ -198,5 +228,6 @@ function testing_update_composer_dependencies() {
exit($code);
}
// Return to our original location.
chdir($cwd);
}