Skip to content

Commit

Permalink
MDL-50611 test: use cURL extension to download Composer
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
LukeCarrier committed Jun 22, 2015
1 parent 8927314 commit 2af7590
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 14 deletions.
4 changes: 2 additions & 2 deletions lib/behat/classes/behat_command.php
Expand Up @@ -129,7 +129,7 @@ public static function behat_setup_problem() {

// 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.
Expand All @@ -139,7 +139,7 @@ public static function behat_setup_problem() {

// 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.
Expand Down
3 changes: 1 addition & 2 deletions lib/behat/lib.php
Expand Up @@ -38,7 +38,6 @@
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);

/**
Expand Down Expand Up @@ -305,4 +304,4 @@ function behat_is_requested_url($url) {
}

return false;
}
}
51 changes: 41 additions & 10 deletions lib/testing/lib.php
Expand Up @@ -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.
Expand Down Expand Up @@ -167,22 +174,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';

// 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);

// 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);
$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);
Expand All @@ -195,5 +225,6 @@ function testing_update_composer_dependencies() {
exit($code);
}

// Return to our original location.
chdir($cwd);
}

0 comments on commit 2af7590

Please sign in to comment.