php-src/pear/tests/pear_downloader_new.phpt
2004-05-19 08:45:46 +00:00

568 lines
15 KiB
PHP

--TEST--
PEAR_Downloader::download() test
--SKIPIF--
<?php
if (!getenv('PHP_PEAR_RUNTESTS')) {
echo 'skip';
}
?>
--FILE--
<?php
$server = 'pear.Chiara';
//$server = 'test.pear.php.net';
$temp_path = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'testinstallertemp';
if (!is_dir($temp_path)) {
mkdir($temp_path);
}
if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'php')) {
mkdir($temp_path . DIRECTORY_SEPARATOR . 'php');
}
if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'data')) {
mkdir($temp_path . DIRECTORY_SEPARATOR . 'data');
}
if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'doc')) {
mkdir($temp_path . DIRECTORY_SEPARATOR . 'doc');
}
if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'test')) {
mkdir($temp_path . DIRECTORY_SEPARATOR . 'test');
}
if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'ext')) {
mkdir($temp_path . DIRECTORY_SEPARATOR . 'ext');
}
if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'script')) {
mkdir($temp_path . DIRECTORY_SEPARATOR . 'script');
}
if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'tmp')) {
mkdir($temp_path . DIRECTORY_SEPARATOR . 'tmp');
}
if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'bin')) {
mkdir($temp_path . DIRECTORY_SEPARATOR . 'bin');
}
if (!is_dir($temp_path . DIRECTORY_SEPARATOR . 'cache')) {
mkdir($temp_path . DIRECTORY_SEPARATOR . 'cache');
}
// make the fake configuration - we'll use one of these and it should work
$config = serialize(array('master_server' => $server,
'preferred_state' => 'stable',
'cache_dir' => $temp_path . DIRECTORY_SEPARATOR . 'cache',
'php_dir' => $temp_path . DIRECTORY_SEPARATOR . 'php',
'ext_dir' => $temp_path . DIRECTORY_SEPARATOR . 'ext',
'data_dir' => $temp_path . DIRECTORY_SEPARATOR . 'data',
'doc_dir' => $temp_path . DIRECTORY_SEPARATOR . 'doc',
'test_dir' => $temp_path . DIRECTORY_SEPARATOR . 'test',
'bin_dir' => $temp_path . DIRECTORY_SEPARATOR . 'bin',));
touch($temp_path . DIRECTORY_SEPARATOR . 'pear.conf');
$fp = fopen($temp_path . DIRECTORY_SEPARATOR . 'pear.conf', 'w');
fwrite($fp, $config);
fclose($fp);
touch($temp_path . DIRECTORY_SEPARATOR . 'pear.ini');
$fp = fopen($temp_path . DIRECTORY_SEPARATOR . 'pear.ini', 'w');
fwrite($fp, $config);
fclose($fp);
putenv('PHP_PEAR_SYSCONF_DIR='.$temp_path);
$home = getenv('HOME');
if (!empty($home)) {
// for PEAR_Config initialization
putenv('HOME="'.$temp_path);
}
require_once "PEAR/Downloader.php";
// no UI is needed for these tests
$ui = false;
$curdir = getcwd();
chdir(dirname(__FILE__));
PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, 'catchit');
$error_to_catch = false;
function catchit($err)
{
global $error_to_catch;
if ($error_to_catch) {
if ($err->getMessage() == $error_to_catch) {
$error_to_catch = false;
echo "Caught expected error\n";
return;
}
}
echo "Caught error: " . $err->getMessage() . "\n";
}
echo "Test simple direct url download:\n";
$config = &PEAR_Config::singleton();
$packages = array("http://$server/get/pkg6-1.1.tgz");
$options = array();
$installer = &new PEAR_Downloader($ui, $options, $config);
$a = $installer->download($packages);
$installpackages = $installer->getDownloadedPackages();
var_dump($a, $installer->getErrorMsgs());
echo "File exists? ";
echo (is_file($installpackages[0]['file'])) ? "yes\n" : "no\n";
echo "File is the same? ";
$good = implode('', file(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'test-pkg6' . DIRECTORY_SEPARATOR . 'pkg6-1.1.tgz'));
$dled = implode('', file($installpackages[0]['file']));
echo ($good == $dled) ? "yes\n" : "no\n";
unlink($installpackages[0]['file']);
unset($installpackages[0]['file']);
var_dump($installpackages);
echo "Test simple package name download:\n";
$installpackages = $errors = array();
$packages = array('pkg6');
$a = $installer->download($packages);
$installpackages = $installer->getDownloadedPackages();
var_dump($a, $installer->getErrorMsgs());
echo "File exists? ";
echo (is_file($installpackages[0]['file'])) ? "yes\n" : "no\n";
echo "File is the same? ";
$good = implode('', file(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'test-pkg6' . DIRECTORY_SEPARATOR . 'pkg6-1.1.tgz'));
$dled = implode('', file($installpackages[0]['file']));
echo ($good == $dled) ? "yes\n" : "no\n";
unlink($installpackages[0]['file']);
unset($installpackages[0]['file']);
var_dump($installpackages);
echo "Test package name with version download:\n";
$installpackages = $errors = array();
$packages = array('pkg6-1.1');
$a = $installer->download($packages);
$installpackages = $installer->getDownloadedPackages();
var_dump($a, $installer->getErrorMsgs());
echo "File exists? ";
echo (is_file($installpackages[0]['file'])) ? "yes\n" : "no\n";
echo "File is the same? ";
$good = implode('', file(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'test-pkg6' . DIRECTORY_SEPARATOR . 'pkg6-1.1.tgz'));
$dled = implode('', file($installpackages[0]['file']));
echo ($good == $dled) ? "yes\n" : "no\n";
unlink($installpackages[0]['file']);
echo "Test package name with state stable download:\n";
$installpackages = $errors = array();
$packages = array('pkg6-stable');
$a = $installer->download($packages);
$installpackages = $installer->getDownloadedPackages();
var_dump($a, $installer->getErrorMsgs());
echo "File exists? ";
echo (is_file($installpackages[0]['file'])) ? "yes\n" : "no\n";
echo "File is the same? ";
$good = implode('', file(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'test-pkg6' . DIRECTORY_SEPARATOR . 'pkg6-1.1.tgz'));
$dled = implode('', file($installpackages[0]['file']));
echo ($good == $dled) ? "yes\n" : "no\n";
unlink($installpackages[0]['file']);
echo "Test package name with state beta download:\n";
$installpackages = $errors = array();
$packages = array('pkg6-beta');
$a = $installer->download($packages);
$installpackages = $installer->getDownloadedPackages();
var_dump($a, $installer->getErrorMsgs());
echo "File exists? ";
echo (is_file($installpackages[0]['file'])) ? "yes\n" : "no\n";
echo "File is the same? ";
$good = implode('', file(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'test-pkg6' . DIRECTORY_SEPARATOR . 'pkg6-2.0b1.tgz'));
$dled = implode('', file($installpackages[0]['file']));
echo ($good == $dled) ? "yes\n" : "no\n";
unlink($installpackages[0]['file']);
echo "================\nTest preferred_state = beta\n";
$installer->configSet('preferred_state', 'beta');
echo "Test simple package name download:\n";
$installpackages = $errors = array();
$packages = array('pkg6');
$a = $installer->download($packages);
$installpackages = $installer->getDownloadedPackages();
var_dump($a, $installer->getErrorMsgs());
echo "File exists? ";
echo (is_file($installpackages[0]['file'])) ? "yes\n" : "no\n";
echo "File is the same? ";
$good = implode('', file(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'test-pkg6' . DIRECTORY_SEPARATOR . 'pkg6-2.0b1.tgz'));
$dled = implode('', file($installpackages[0]['file']));
echo ($good == $dled) ? "yes\n" : "no\n";
unlink($installpackages[0]['file']);
unset($installpackages[0]['file']);
echo "\n================Test --alldeps\nTest preferred_state = stable\n";
$installer->configSet('preferred_state', 'stable');
$installer = &new PEAR_Downloader($ui, array('alldeps' => true), $config);
$packages = array("http://$server/get/pkg1-1.1.tgz");
$a = $installer->download($packages);
$installpackages = $installer->getDownloadedPackages();
var_dump($a, $installer->getErrorMsgs());
echo "Packages downloaded and version:\n";
foreach ($installpackages as $package) {
echo $package['pkg'] . '-' . $package['info']['version'] . "\n";
}
$packages = array("pkg1");
$a = $installer->download($packages);
$installpackages = $installer->getDownloadedPackages();
var_dump($a, $installer->getErrorMsgs());
echo "Packages downloaded and version:\n";
foreach ($installpackages as $package) {
echo $package['pkg'] . '-' . $package['info']['version'] . "\n";
}
echo "Test preferred_state = beta:\n";
$installer->configSet('preferred_state', 'beta');
$packages = array("pkg1");
$a = $installer->download($packages);
$installpackages = $installer->getDownloadedPackages();
var_dump($a, $installer->getErrorMsgs());
echo "Packages downloaded and version:\n";
foreach ($installpackages as $package) {
echo $package['pkg'] . '-' . $package['info']['version'] . "\n";
}
echo "Test preferred_state = alpha:\n";
$installer->configSet('preferred_state', 'alpha');
$packages = array("pkg1");
$a = $installer->download($packages);
$installpackages = $installer->getDownloadedPackages();
var_dump($a, $installer->getErrorMsgs());
echo "Packages downloaded and version:\n";
foreach ($installpackages as $package) {
echo $package['pkg'] . '-' . $package['info']['version'] . "\n";
}
echo "\n================Test --onlyreqdeps\nTest preferred_state = stable\n";
$config->set('preferred_state', 'stable');
$installer = &new PEAR_Downloader($ui, array('onlyreqdeps' => true), $config);
$packages = array("http://$server/get/pkg1-1.1.tgz");
$a = $installer->download($packages);
$installpackages = $installer->getDownloadedPackages();
var_dump($a, $installer->getErrorMsgs());
echo "Packages downloaded and version:\n";
foreach ($installpackages as $package) {
echo $package['pkg'] . '-' . $package['info']['version'] . "\n";
}
$packages = array("pkg1");
$a = $installer->download($packages);
$installpackages = $installer->getDownloadedPackages();
var_dump($a, $installer->getErrorMsgs());
echo "Packages downloaded and version:\n";
foreach ($installpackages as $package) {
echo $package['pkg'] . '-' . $package['info']['version'] . "\n";
}
echo "Test preferred_state = beta:\n";
$installer->configSet('preferred_state', 'beta');
$packages = array("pkg1");
$a = $installer->download($packages);
$installpackages = $installer->getDownloadedPackages();
var_dump($a, $installer->getErrorMsgs());
echo "Packages downloaded and version:\n";
foreach ($installpackages as $package) {
echo $package['pkg'] . '-' . $package['info']['version'] . "\n";
}
echo "Test preferred_state = alpha:\n";
$installer->configSet('preferred_state', 'alpha');
$packages = array("pkg1");
$a = $installer->download($packages);
$installpackages = $installer->getDownloadedPackages();
var_dump($a, $installer->getErrorMsgs());
echo "Packages downloaded and version:\n";
foreach ($installpackages as $package) {
echo $package['pkg'] . '-' . $package['info']['version'] . "\n";
}
chdir($curdir);
cleanall($temp_path);
// ------------------------------------------------------------------------- //
function cleanall($dir)
{
$dp = opendir($dir);
while ($ent = readdir($dp)) {
if ($ent == '.' || $ent == '..') {
continue;
}
if (is_dir($dir . DIRECTORY_SEPARATOR . $ent)) {
cleanall($dir . DIRECTORY_SEPARATOR . $ent);
} else {
unlink($dir . DIRECTORY_SEPARATOR . $ent);
}
}
closedir($dp);
rmdir($dir);
}
?>
--EXPECT--
Test simple direct url download:
NULL
array(0) {
}
File exists? yes
File is the same? yes
array(1) {
[0]=>
array(2) {
["pkg"]=>
string(4) "pkg6"
["info"]=>
array(11) {
["provides"]=>
array(0) {
}
["filelist"]=>
&array(3) {
["zoorb.php"]=>
array(2) {
["role"]=>
string(3) "php"
["baseinstalldir"]=>
string(5) "groob"
}
["goompness\oggbrzitzkee.php"]=>
array(2) {
["role"]=>
string(3) "php"
["baseinstalldir"]=>
string(5) "groob"
}
["goompness\Mopreeb.php"]=>
array(2) {
["role"]=>
string(3) "php"
["baseinstalldir"]=>
string(5) "groob"
}
}
["package"]=>
string(4) "pkg6"
["summary"]=>
string(32) "required test for PEAR_Installer"
["description"]=>
string(12) "fake package"
["maintainers"]=>
array(1) {
[0]=>
&array(4) {
["handle"]=>
string(8) "fakeuser"
["name"]=>
string(9) "Joe Shmoe"
["email"]=>
string(18) "nobody@example.com"
["role"]=>
string(4) "lead"
}
}
["version"]=>
string(3) "1.1"
["release_date"]=>
string(10) "2003-09-09"
["release_license"]=>
string(11) "PHP License"
["release_state"]=>
string(6) "stable"
["release_notes"]=>
string(24) "required dependency test"
}
}
}
Test simple package name download:
NULL
array(0) {
}
File exists? yes
File is the same? yes
array(1) {
[0]=>
array(2) {
["pkg"]=>
string(4) "pkg6"
["info"]=>
array(11) {
["provides"]=>
array(0) {
}
["filelist"]=>
&array(3) {
["zoorb.php"]=>
array(2) {
["role"]=>
string(3) "php"
["baseinstalldir"]=>
string(5) "groob"
}
["goompness\oggbrzitzkee.php"]=>
array(2) {
["role"]=>
string(3) "php"
["baseinstalldir"]=>
string(5) "groob"
}
["goompness\Mopreeb.php"]=>
array(2) {
["role"]=>
string(3) "php"
["baseinstalldir"]=>
string(5) "groob"
}
}
["package"]=>
string(4) "pkg6"
["summary"]=>
string(32) "required test for PEAR_Installer"
["description"]=>
string(12) "fake package"
["maintainers"]=>
array(1) {
[0]=>
&array(4) {
["handle"]=>
string(8) "fakeuser"
["name"]=>
string(9) "Joe Shmoe"
["email"]=>
string(18) "nobody@example.com"
["role"]=>
string(4) "lead"
}
}
["version"]=>
string(3) "1.1"
["release_date"]=>
string(10) "2003-09-09"
["release_license"]=>
string(11) "PHP License"
["release_state"]=>
string(6) "stable"
["release_notes"]=>
string(24) "required dependency test"
}
}
}
Test package name with version download:
NULL
array(0) {
}
File exists? yes
File is the same? yes
Test package name with state stable download:
NULL
array(0) {
}
File exists? yes
File is the same? yes
Test package name with state beta download:
NULL
array(0) {
}
File exists? yes
File is the same? yes
================
Test preferred_state = beta
Test simple package name download:
NULL
array(0) {
}
File exists? yes
File is the same? yes
================Test --alldeps
Test preferred_state = stable
NULL
array(0) {
}
Packages downloaded and version:
pkg1-1.1
pkg2-1.1
pkg3-1.1
pkg4-1.1
pkg5-1.1
pkg6-1.1
NULL
array(0) {
}
Packages downloaded and version:
pkg1-1.1
pkg2-1.1
pkg3-1.1
pkg4-1.1
pkg5-1.1
pkg6-1.1
Test preferred_state = beta:
NULL
array(0) {
}
Packages downloaded and version:
pkg1-2.0b1
pkg2-1.1
pkg3-1.1
pkg4-1.1
pkg5-1.1
pkg6-2.0b1
Test preferred_state = alpha:
NULL
array(0) {
}
Packages downloaded and version:
pkg1-2.0b1
pkg2-1.1
pkg3-1.4
pkg4AndAHalf-1.3
pkg4-1.1
pkg5-1.1
pkg6-2.0b1
================Test --onlyreqdeps
Test preferred_state = stable
NULL
array(0) {
}
Packages downloaded and version:
pkg1-1.1
pkg2-1.1
pkg3-1.1
pkg4-1.1
pkg5-1.1
pkg6-1.1
NULL
array(0) {
}
Packages downloaded and version:
pkg1-1.1
pkg2-1.1
pkg3-1.1
pkg4-1.1
pkg5-1.1
pkg6-1.1
Test preferred_state = beta:
NULL
array(0) {
}
Packages downloaded and version:
pkg1-2.0b1
pkg2-1.1
pkg3-1.1
pkg4-1.1
pkg5-1.1
pkg6-2.0b1
Test preferred_state = alpha:
skipping Package 'pkg3' optional dependency 'pkg4AndAHalf'
NULL
array(0) {
}
Packages downloaded and version:
pkg1-2.0b1
pkg2-1.1
pkg3-1.4
pkg4-1.1
pkg5-1.1
pkg6-2.0b1