summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Ficken <mattficken@php.net>2017-05-15 02:21:55 -0700
committerMatt Ficken <mattficken@php.net>2017-05-15 02:21:55 -0700
commitc1d57186976e75a2a54f7bd167a77e2872cadc6a (patch)
tree1c27492968560de0f0c801f593d5d372bed0f2cd
parent8cbfc882d2280a1fa6d5e5c8dadf63d65ed074f2 (diff)
downloadphp-git-c1d57186976e75a2a54f7bd167a77e2872cadc6a.tar.gz
fixing run-tests.php for variables_order="GPCS"
-rwxr-xr-xrun-tests.php168
1 files changed, 96 insertions, 72 deletions
diff --git a/run-tests.php b/run-tests.php
index 1991b56a08..fbb664d809 100755
--- a/run-tests.php
+++ b/run-tests.php
@@ -94,6 +94,28 @@ if (ob_get_level()) echo "Not all buffers were deleted.\n";
error_reporting(E_ALL);
$environment = isset($_ENV) ? $_ENV : array();
+// Note: php.ini-development sets variables_order="GPCS" not "EGPCS", in which case $_ENV is NOT populated.
+// detect and handle this case, or die or warn
+if (empty($environment)) {
+ // not documented, but returns array of all environment variables
+ $environment = getenv();
+}
+if (empty($environment['TEMP'])) {
+ $environment['TEMP'] = sys_get_temp_dir();
+
+ if (empty($environment['TEMP'])) {
+ // for example, OpCache on Windows will fail in this case because child processes (for tests) will not get
+ // a TEMP variable, so GetTempPath() will fallback to c:\windows, while GetTempPath() will return %TEMP% for parent
+ // (likely a different path). The parent will initialize the OpCache in that path, and child will fail to reattach to
+ // the OpCache because it will be using the wrong path.
+ die("TEMP environment is NOT set");
+ } else if (count($environment)==1) {
+ // not having other environment variables, only having TEMP, is probably ok, but strange and may make a
+ // difference in the test pass rate, so warn the user.
+ echo "WARNING: Only 1 environment variable will be available to tests(TEMP environment variable)".PHP_EOL;
+ }
+}
+//
if ((substr(PHP_OS, 0, 3) == "WIN") && empty($environment["SystemRoot"])) {
$environment["SystemRoot"] = getenv("SystemRoot");
}
@@ -217,7 +239,7 @@ $ini_overwrites = array(
'display_startup_errors=1',
'log_errors=0',
'html_errors=0',
- 'track_errors=1',
+ 'track_errors=0',
'report_memleaks=1',
'report_zend_debug=0',
'docref_root=',
@@ -236,7 +258,7 @@ $ini_overwrites = array(
$no_file_cache = '-d opcache.file_cache= -d opcache.file_cache_only=0';
-function write_information($show_html)
+function write_information()
{
global $cwd, $php, $php_cgi, $phpdbg, $php_info, $user_tests, $ini_overwrites, $pass_options, $exts_to_test, $leak_check, $valgrind_header, $no_file_cache;
@@ -279,7 +301,7 @@ More .INIs : " , (function_exists(\'php_ini_scanned_files\') ? str_replace("\n"
@unlink($info_file);
// load list of enabled extensions
- save_text($info_file, '<?php echo str_replace("Zend OPcache", "opcache", join(",", get_loaded_extensions())); ?>');
+ save_text($info_file, '<?php echo str_replace("Zend OPcache", "opcache", implode(",", get_loaded_extensions())); ?>');
$exts_to_test = explode(',',`$php $pass_options $info_params $no_file_cache "$info_file"`);
// check for extensions that need special handling and regenerate
$info_params_ex = array(
@@ -324,7 +346,7 @@ define('TRAVIS_CI' , (bool) getenv('TRAVIS'));
function save_or_mail_results()
{
global $sum_results, $just_save_results, $failed_test_summary,
- $PHP_FAILED_TESTS, $CUR_DIR, $php, $output_file, $compression;
+ $PHP_FAILED_TESTS, $CUR_DIR, $php, $output_file;
/* We got failed Tests, offer the user to send an e-mail to QA team, unless NO_INTERACTION is set */
if (!getenv('NO_INTERACTION') && !TRAVIS_CI) {
@@ -435,7 +457,7 @@ function save_or_mail_results()
$failed_tests_data .= $sep . "PHPINFO" . $sep;
$failed_tests_data .= shell_exec($php . ' -ddisplay_errors=stderr -dhtml_errors=0 -i 2> /dev/null');
- if ($just_save_results || !mail_qa_team($failed_tests_data, $compression, $status) && !TRAVIS_CI) {
+ if (($just_save_results || !mail_qa_team($failed_tests_data, $status)) && !TRAVIS_CI) {
file_put_contents($output_file, $failed_tests_data);
if (!$just_save_results) {
@@ -463,13 +485,8 @@ $failed_tests_file= false;
$pass_option_n = false;
$pass_options = '';
-$compression = 0;
$output_file = $CUR_DIR . '/php_test_results_' . date('Ymd_Hi') . '.txt';
-if ($compression && in_array("compress.zlib", stream_get_filters())) {
- $output_file = 'compress.zlib://' . $output_file . '.gz';
-}
-
$just_save_results = false;
$leak_check = false;
$html_output = false;
@@ -494,7 +511,7 @@ foreach($cfgtypes as $type) {
if (getenv('TEST_PHP_ARGS')) {
- if (!isset($argc) || !$argc || !isset($argv)) {
+ if (!isset($argc, $argv) || !$argc) {
$argv = array(__FILE__);
}
@@ -802,7 +819,7 @@ HELP;
if ($test_cnt) {
putenv('NO_INTERACTION=1');
verify_config();
- write_information($html_output);
+ write_information();
usort($test_files, "test_sort");
$start_time = time();
@@ -850,7 +867,7 @@ HELP;
}
verify_config();
-write_information($html_output);
+write_information();
// Compile a list of all test files (*.phpt).
$test_files = array();
@@ -882,7 +899,7 @@ foreach ($user_tests as $dir) {
function find_files($dir, $is_ext_dir = false, $ignore = false)
{
- global $test_files, $exts_to_test, $ignored_by_ext, $exts_skipped, $exts_tested;
+ global $test_files, $exts_to_test, $ignored_by_ext, $exts_skipped;
$o = opendir($dir) or error("cannot open directory: $dir");
@@ -986,7 +1003,7 @@ exit(0);
// Send Email to QA Team
//
-function mail_qa_team($data, $compression, $status = false)
+function mail_qa_team($data, $status = false)
{
$url_bits = parse_url(QA_SUBMISSION_PAGE);
@@ -1075,7 +1092,7 @@ function error_report($testname, $logname, $tested)
}
}
-function system_with_timeout($commandline, $env = null, $stdin = null)
+function system_with_timeout($commandline, $env = null, $stdin = null, $captureStdIn = true, $captureStdOut = true, $captureStdErr = true)
{
global $leak_check, $cwd;
@@ -1086,21 +1103,29 @@ function system_with_timeout($commandline, $env = null, $stdin = null)
$bin_env[$key] = $value;
}
- $proc = proc_open($commandline, array(
- 0 => array('pipe', 'r'),
- 1 => array('pipe', 'w'),
- 2 => array('pipe', 'w')
- ), $pipes, $cwd, $bin_env, array('suppress_errors' => true, 'binary_pipes' => true));
+ $descriptorspec = array();
+ if ($captureStdIn) {
+ $descriptorspec[0] = array('pipe', 'r');
+ }
+ if ($captureStdOut) {
+ $descriptorspec[1] = array('pipe', 'w');
+ }
+ if ($captureStdErr) {
+ $descriptorspec[2] = array('pipe', 'w');
+ }
+ $proc = proc_open($commandline, $descriptorspec, $pipes, $cwd, $bin_env, array('suppress_errors' => true, 'binary_pipes' => true));
if (!$proc) {
return false;
}
- if (!is_null($stdin)) {
- fwrite($pipes[0], $stdin);
+ if ($captureStdIn) {
+ if (!is_null($stdin)) {
+ fwrite($pipes[0], $stdin);
+ }
+ fclose($pipes[0]);
+ unset($pipes[0]);
}
- fclose($pipes[0]);
- unset($pipes[0]);
$timeout = $leak_check ? 300 : (isset($env['TEST_TIMEOUT']) ? $env['TEST_TIMEOUT'] : 60);
@@ -1120,7 +1145,13 @@ function system_with_timeout($commandline, $env = null, $stdin = null)
proc_terminate($proc, 9);
return $data;
} else if ($n > 0) {
- $line = fread($pipes[1], 8192);
+ if ($captureStdOut) {
+ $line = fread($pipes[1], 8192);
+ } elseif ($captureStdErr) {
+ $line = fread($pipes[2], 8192);
+ } else {
+ $line = '';
+ }
if (strlen($line) == 0) {
/* EOF */
break;
@@ -1138,13 +1169,13 @@ function system_with_timeout($commandline, $env = null, $stdin = null)
$data .= "\nTermsig=" . ($stat["exitcode"] - 128) . "\n";
}
- $code = proc_close($proc);
+ proc_close($proc);
return $data;
}
function run_all_tests($test_files, $env, $redir_tested = null)
{
- global $test_results, $failed_tests_file, $php, $test_cnt, $test_idx;
+ global $test_results, $failed_tests_file, $php, $test_idx;
foreach($test_files as $name) {
@@ -1195,12 +1226,11 @@ function show_file_block($file, $block, $section = null)
//
function run_test($php, $file, $env)
{
- global $log_format, $info_params, $ini_overwrites, $cwd, $PHP_FAILED_TESTS;
+ global $log_format, $ini_overwrites, $cwd, $PHP_FAILED_TESTS;
global $pass_options, $DETAILED, $IN_REDIRECT, $test_cnt, $test_idx;
global $leak_check, $temp_source, $temp_target, $cfg, $environment;
global $no_clean;
global $valgrind_version;
- global $JUNIT;
global $SHOW_ONLY_GROUPS;
global $no_file_cache;
$temp_filenames = null;
@@ -1309,7 +1339,7 @@ TEST $file
unset($section_text['FILEEOF']);
}
- foreach (array( 'FILE', 'EXPECT', 'EXPECTF', 'EXPECTREGEX' ) as $prefix) {
+ foreach (array( 'FILE', 'EXPECT', 'EXPECTF', 'EXPECTREGEX' ) as $prefix) {
$key = $prefix . '_EXTERNAL';
if (@count($section_text[$key]) == 1) {
@@ -1351,6 +1381,21 @@ TEST $file
return 'BORKED';
}
+ if (isset($section_text['CAPTURE_STDIO'])) {
+ $captureStdIn = stripos($section_text['CAPTURE_STDIO'], 'STDIN') !== false;
+ $captureStdOut = stripos($section_text['CAPTURE_STDIO'], 'STDOUT') !== false;
+ $captureStdErr = stripos($section_text['CAPTURE_STDIO'], 'STDERR') !== false;
+ } else {
+ $captureStdIn = true;
+ $captureStdOut = true;
+ $captureStdErr = true;
+ }
+ if ($captureStdOut && $captureStdErr) {
+ $cmdRedirect = ' 2>&1';
+ } else {
+ $cmdRedirect = '';
+ }
+
$tested = trim($section_text['TEST']);
/* For GET/POST/PUT tests, check if cgi sapi is available and if it is, use it. */
@@ -1506,7 +1551,7 @@ TEST $file
if (array_key_exists('EXTENSIONS', $section_text)) {
$ext_dir=`$php -r 'echo ini_get("extension_dir");'`;
$extensions = preg_split("/[\n\r]+/", trim($section_text['EXTENSIONS']));
- $loaded = explode(",", `$php -n -r 'echo join(",", get_loaded_extensions());'`);
+ $loaded = explode(",", `$php -n -r 'echo implode(",", get_loaded_extensions());'`);
foreach ($extensions as $req_ext) {
if (!in_array($req_ext, $loaded)) {
if ($req_ext == 'opcache') {
@@ -1571,10 +1616,6 @@ TEST $file
show_result('SKIP', $tested, $tested_file, '', $temp_filenames);
}
- if (isset($old_php)) {
- $php = $old_php;
- }
-
if (!$cfg['keep']['skip']) {
@unlink($test_skipif);
}
@@ -1603,9 +1644,9 @@ TEST $file
}
}
}
-
+
if (!extension_loaded("zlib")
- && ( array_key_exists("GZIP_POST", $section_text)
+ && ( array_key_exists("GZIP_POST", $section_text)
|| array_key_exists("DEFLATE_POST", $section_text))
) {
$message = "ext/zlib required";
@@ -1622,7 +1663,7 @@ TEST $file
$IN_REDIRECT['dir'] = realpath(dirname($file));
$IN_REDIRECT['prefix'] = trim($section_text['TEST']);
- if (count($IN_REDIRECT['TESTS']) == 1) {
+ if (!empty($IN_REDIRECT['TESTS'])) {
if (is_array($org_file)) {
$test_files[] = $org_file[1];
@@ -1754,7 +1795,7 @@ TEST $file
}
save_text($tmp_post, $request);
- $cmd = "$php $pass_options $ini_settings -f \"$test_file\" 2>&1 < \"$tmp_post\"";
+ $cmd = "$php $pass_options $ini_settings -f \"$test_file\"$cmdRedirect < \"$tmp_post\"";
} elseif (array_key_exists('PUT', $section_text) && !empty($section_text['PUT'])) {
@@ -1788,7 +1829,7 @@ TEST $file
}
save_text($tmp_post, $request);
- $cmd = "$php $pass_options $ini_settings -f \"$test_file\" 2>&1 < \"$tmp_post\"";
+ $cmd = "$php $pass_options $ini_settings -f \"$test_file\"$cmdRedirect < \"$tmp_post\"";
} else if (array_key_exists('POST', $section_text) && !empty($section_text['POST'])) {
@@ -1805,7 +1846,7 @@ TEST $file
$env['CONTENT_LENGTH'] = $content_length;
}
- $cmd = "$php $pass_options $ini_settings -f \"$test_file\" 2>&1 < \"$tmp_post\"";
+ $cmd = "$php $pass_options $ini_settings -f \"$test_file\"$cmdRedirect < \"$tmp_post\"";
} else if (array_key_exists('GZIP_POST', $section_text) && !empty($section_text['GZIP_POST'])) {
@@ -1820,7 +1861,7 @@ TEST $file
$env['CONTENT_TYPE'] = 'application/x-www-form-urlencoded';
$env['CONTENT_LENGTH'] = $content_length;
- $cmd = "$php $pass_options $ini_settings -f \"$test_file\" 2>&1 < \"$tmp_post\"";
+ $cmd = "$php $pass_options $ini_settings -f \"$test_file\"$cmdRedirect < \"$tmp_post\"";
} else if (array_key_exists('DEFLATE_POST', $section_text) && !empty($section_text['DEFLATE_POST'])) {
$post = trim($section_text['DEFLATE_POST']);
@@ -1833,7 +1874,7 @@ TEST $file
$env['CONTENT_TYPE'] = 'application/x-www-form-urlencoded';
$env['CONTENT_LENGTH'] = $content_length;
- $cmd = "$php $pass_options $ini_settings -f \"$test_file\" 2>&1 < \"$tmp_post\"";
+ $cmd = "$php $pass_options $ini_settings -f \"$test_file\"$cmdRedirect < \"$tmp_post\"";
} else {
@@ -1841,7 +1882,7 @@ TEST $file
$env['CONTENT_TYPE'] = '';
$env['CONTENT_LENGTH'] = '';
- $cmd = "$php $pass_options $ini_settings -f \"$test_file\" $args 2>&1";
+ $cmd = "$php $pass_options $ini_settings -f \"$test_file\" $args$cmdRedirect";
}
if ($leak_check) {
@@ -1877,7 +1918,7 @@ COMMAND $cmd
junit_start_timer($shortname);
- $out = system_with_timeout($cmd, $env, isset($section_text['STDIN']) ? $section_text['STDIN'] : null);
+ $out = system_with_timeout($cmd, $env, isset($section_text['STDIN']) ? $section_text['STDIN'] : null, $captureStdIn, $captureStdOut, $captureStdErr);
junit_finish_timer($shortname);
@@ -1919,12 +1960,11 @@ COMMAND $cmd
$output = preg_replace("/\r\n/", "\n", trim($out));
/* when using CGI, strip the headers from the output */
- $headers = "";
+ $headers = array();
if (!empty($uses_cgi) && preg_match("/^(.*?)\r?\n\r?\n(.*)/s", $out, $match)) {
$output = trim($match[2]);
$rh = preg_split("/[\n\r]+/", $match[1]);
- $headers = array();
foreach ($rh as $line) {
if (strpos($line, ':') !== false) {
@@ -1949,26 +1989,23 @@ COMMAND $cmd
}
}
- $org_headers = $headers;
- $headers = array();
$output_headers = array();
foreach($want as $k => $v) {
- if (isset($org_headers[$k])) {
- $headers = $org_headers[$k];
- $output_headers[] = $k . ': ' . $org_headers[$k];
+ if (isset($headers[$k])) {
+ $output_headers[] = $k . ': ' . $headers[$k];
}
- if (!isset($org_headers[$k]) || $org_headers[$k] != $v) {
+ if (!isset($headers[$k]) || $headers[$k] != $v) {
$failed_headers = true;
}
}
ksort($wanted_headers);
- $wanted_headers = join("\n", $wanted_headers);
+ $wanted_headers = implode("\n", $wanted_headers);
ksort($output_headers);
- $output_headers = join("\n", $output_headers);
+ $output_headers = implode("\n", $output_headers);
}
show_file_block('out', $output);
@@ -2058,9 +2095,6 @@ COMMAND $cmd
if (!$cfg['keep']['php']) {
@unlink($test_file);
}
- if (isset($old_php)) {
- $php = $old_php;
- }
if (!$leaked && !$failed_headers) {
if (isset($section_text['XFAIL'] )) {
@@ -2088,10 +2122,6 @@ COMMAND $cmd
@unlink($test_file);
}
- if (isset($old_php)) {
- $php = $old_php;
- }
-
if (!$leaked && !$failed_headers) {
if (isset($section_text['XFAIL'] )) {
$warn = true;
@@ -2191,10 +2221,6 @@ $output
);
}
- if (isset($old_php)) {
- $php = $old_php;
- }
-
$diff = empty($diff) ? '' : preg_replace('/\e/', '<esc>', $diff);
junit_mark_test_as($restype, str_replace($cwd . '/', '', $tested_file), $tested, null, $info, $diff);
@@ -2255,8 +2281,8 @@ function count_array_diff($ar1, $ar2, $is_reg, $w, $idx1, $idx2, $cnt1, $cnt2, $
function generate_array_diff($ar1, $ar2, $is_reg, $w)
{
- $idx1 = 0; $ofs1 = 0; $cnt1 = @count($ar1);
- $idx2 = 0; $ofs2 = 0; $cnt2 = @count($ar2);
+ $idx1 = 0; $cnt1 = @count($ar1);
+ $idx2 = 0; $cnt2 = @count($ar2);
$diff = array();
$old1 = array();
$old2 = array();
@@ -2274,10 +2300,8 @@ function generate_array_diff($ar1, $ar2, $is_reg, $w)
if ($c1 > $c2) {
$old1[$idx1] = sprintf("%03d- ", $idx1+1) . $w[$idx1++];
- $last = 1;
} else if ($c2 > 0) {
$old2[$idx2] = sprintf("%03d+ ", $idx2+1) . $ar2[$idx2++];
- $last = 2;
} else {
$old1[$idx1] = sprintf("%03d- ", $idx1+1) . $w[$idx1++];
$old2[$idx2] = sprintf("%03d+ ", $idx2+1) . $ar2[$idx2++];
@@ -2413,7 +2437,7 @@ function compute_summary()
$sum_results['SKIPPED'] += $ignored_by_ext;
$percent_results = array();
- while (list($v, $n) = each($sum_results)) {
+ foreach ($sum_results as $v => $n) {
$percent_results[$v] = (100.0 * $n) / $n_total;
}
}