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");
}
'display_startup_errors=1',
'log_errors=0',
'html_errors=0',
- 'track_errors=0',
+ 'track_errors=1',
'report_memleaks=1',
'report_zend_debug=0',
'docref_root=',
$no_file_cache = '-d opcache.file_cache= -d opcache.file_cache_only=0';
-function write_information()
+function write_information($show_html)
{
global $cwd, $php, $php_cgi, $phpdbg, $php_info, $user_tests, $ini_overwrites, $pass_options, $exts_to_test, $leak_check, $valgrind_header, $no_file_cache;
@unlink($info_file);
// load list of enabled extensions
- save_text($info_file, '<?php echo str_replace("Zend OPcache", "opcache", implode(",", get_loaded_extensions())); ?>');
+ save_text($info_file, '<?php echo str_replace("Zend OPcache", "opcache", join(",", 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(
function save_or_mail_results()
{
global $sum_results, $just_save_results, $failed_test_summary,
- $PHP_FAILED_TESTS, $CUR_DIR, $php, $output_file;
+ $PHP_FAILED_TESTS, $CUR_DIR, $php, $output_file, $compression;
/* 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) {
$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, $status)) && !TRAVIS_CI) {
+ if ($just_save_results || !mail_qa_team($failed_tests_data, $compression, $status) && !TRAVIS_CI) {
file_put_contents($output_file, $failed_tests_data);
if (!$just_save_results) {
$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;
if (getenv('TEST_PHP_ARGS')) {
- if (!isset($argc, $argv) || !$argc) {
+ if (!isset($argc) || !$argc || !isset($argv)) {
$argv = array(__FILE__);
}
if ($test_cnt) {
putenv('NO_INTERACTION=1');
verify_config();
- write_information();
+ write_information($html_output);
usort($test_files, "test_sort");
$start_time = time();
}
verify_config();
-write_information();
+write_information($html_output);
// Compile a list of all test files (*.phpt).
$test_files = array();
function find_files($dir, $is_ext_dir = false, $ignore = false)
{
- global $test_files, $exts_to_test, $ignored_by_ext, $exts_skipped;
+ global $test_files, $exts_to_test, $ignored_by_ext, $exts_skipped, $exts_tested;
$o = opendir($dir) or error("cannot open directory: $dir");
// Send Email to QA Team
//
-function mail_qa_team($data, $status = false)
+function mail_qa_team($data, $compression, $status = false)
{
$url_bits = parse_url(QA_SUBMISSION_PAGE);
}
}
-function system_with_timeout($commandline, $env = null, $stdin = null, $captureStdIn = true, $captureStdOut = true, $captureStdErr = true)
+function system_with_timeout($commandline, $env = null, $stdin = null)
{
global $leak_check, $cwd;
$bin_env[$key] = $value;
}
- $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));
+ $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));
if (!$proc) {
return false;
}
- if ($captureStdIn) {
- if (!is_null($stdin)) {
- fwrite($pipes[0], $stdin);
- }
- fclose($pipes[0]);
- unset($pipes[0]);
+ if (!is_null($stdin)) {
+ fwrite($pipes[0], $stdin);
}
+ fclose($pipes[0]);
+ unset($pipes[0]);
$timeout = $leak_check ? 300 : (isset($env['TEST_TIMEOUT']) ? $env['TEST_TIMEOUT'] : 60);
proc_terminate($proc, 9);
return $data;
} else if ($n > 0) {
- if ($captureStdOut) {
- $line = fread($pipes[1], 8192);
- } elseif ($captureStdErr) {
- $line = fread($pipes[2], 8192);
- } else {
- $line = '';
- }
+ $line = fread($pipes[1], 8192);
if (strlen($line) == 0) {
/* EOF */
break;
$data .= "\nTermsig=" . ($stat["exitcode"] - 128) . "\n";
}
- proc_close($proc);
+ $code = proc_close($proc);
return $data;
}
function run_all_tests($test_files, $env, $redir_tested = null)
{
- global $test_results, $failed_tests_file, $php, $test_idx;
+ global $test_results, $failed_tests_file, $php, $test_cnt, $test_idx;
foreach($test_files as $name) {
//
function run_test($php, $file, $env)
{
- global $log_format, $ini_overwrites, $cwd, $PHP_FAILED_TESTS;
+ global $log_format, $info_params, $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;
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) {
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. */
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 implode(",", get_loaded_extensions());'`);
+ $loaded = explode(",", `$php -n -r 'echo join(",", get_loaded_extensions());'`);
foreach ($extensions as $req_ext) {
if (!in_array($req_ext, $loaded)) {
if ($req_ext == 'opcache') {
show_result('SKIP', $tested, $tested_file, '', $temp_filenames);
}
+ if (isset($old_php)) {
+ $php = $old_php;
+ }
+
if (!$cfg['keep']['skip']) {
@unlink($test_skipif);
}
}
}
}
-
+
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";
$IN_REDIRECT['dir'] = realpath(dirname($file));
$IN_REDIRECT['prefix'] = trim($section_text['TEST']);
- if (!empty($IN_REDIRECT['TESTS'])) {
+ if (count($IN_REDIRECT['TESTS']) == 1) {
if (is_array($org_file)) {
$test_files[] = $org_file[1];
}
save_text($tmp_post, $request);
- $cmd = "$php $pass_options $ini_settings -f \"$test_file\"$cmdRedirect < \"$tmp_post\"";
+ $cmd = "$php $pass_options $ini_settings -f \"$test_file\" 2>&1 < \"$tmp_post\"";
} elseif (array_key_exists('PUT', $section_text) && !empty($section_text['PUT'])) {
}
save_text($tmp_post, $request);
- $cmd = "$php $pass_options $ini_settings -f \"$test_file\"$cmdRedirect < \"$tmp_post\"";
+ $cmd = "$php $pass_options $ini_settings -f \"$test_file\" 2>&1 < \"$tmp_post\"";
} else if (array_key_exists('POST', $section_text) && !empty($section_text['POST'])) {
$env['CONTENT_LENGTH'] = $content_length;
}
- $cmd = "$php $pass_options $ini_settings -f \"$test_file\"$cmdRedirect < \"$tmp_post\"";
+ $cmd = "$php $pass_options $ini_settings -f \"$test_file\" 2>&1 < \"$tmp_post\"";
} else if (array_key_exists('GZIP_POST', $section_text) && !empty($section_text['GZIP_POST'])) {
$env['CONTENT_TYPE'] = 'application/x-www-form-urlencoded';
$env['CONTENT_LENGTH'] = $content_length;
- $cmd = "$php $pass_options $ini_settings -f \"$test_file\"$cmdRedirect < \"$tmp_post\"";
+ $cmd = "$php $pass_options $ini_settings -f \"$test_file\" 2>&1 < \"$tmp_post\"";
} else if (array_key_exists('DEFLATE_POST', $section_text) && !empty($section_text['DEFLATE_POST'])) {
$post = trim($section_text['DEFLATE_POST']);
$env['CONTENT_TYPE'] = 'application/x-www-form-urlencoded';
$env['CONTENT_LENGTH'] = $content_length;
- $cmd = "$php $pass_options $ini_settings -f \"$test_file\"$cmdRedirect < \"$tmp_post\"";
+ $cmd = "$php $pass_options $ini_settings -f \"$test_file\" 2>&1 < \"$tmp_post\"";
} else {
$env['CONTENT_TYPE'] = '';
$env['CONTENT_LENGTH'] = '';
- $cmd = "$php $pass_options $ini_settings -f \"$test_file\" $args$cmdRedirect";
+ $cmd = "$php $pass_options $ini_settings -f \"$test_file\" $args 2>&1";
}
if ($leak_check) {
junit_start_timer($shortname);
- $out = system_with_timeout($cmd, $env, isset($section_text['STDIN']) ? $section_text['STDIN'] : null, $captureStdIn, $captureStdOut, $captureStdErr);
+ $out = system_with_timeout($cmd, $env, isset($section_text['STDIN']) ? $section_text['STDIN'] : null);
junit_finish_timer($shortname);
$output = preg_replace("/\r\n/", "\n", trim($out));
/* when using CGI, strip the headers from the output */
- $headers = array();
+ $headers = "";
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) {
}
}
+ $org_headers = $headers;
+ $headers = array();
$output_headers = array();
foreach($want as $k => $v) {
- if (isset($headers[$k])) {
- $output_headers[] = $k . ': ' . $headers[$k];
+ if (isset($org_headers[$k])) {
+ $headers = $org_headers[$k];
+ $output_headers[] = $k . ': ' . $org_headers[$k];
}
- if (!isset($headers[$k]) || $headers[$k] != $v) {
+ if (!isset($org_headers[$k]) || $org_headers[$k] != $v) {
$failed_headers = true;
}
}
ksort($wanted_headers);
- $wanted_headers = implode("\n", $wanted_headers);
+ $wanted_headers = join("\n", $wanted_headers);
ksort($output_headers);
- $output_headers = implode("\n", $output_headers);
+ $output_headers = join("\n", $output_headers);
}
show_file_block('out', $output);
if (!$cfg['keep']['php']) {
@unlink($test_file);
}
+ if (isset($old_php)) {
+ $php = $old_php;
+ }
if (!$leaked && !$failed_headers) {
if (isset($section_text['XFAIL'] )) {
@unlink($test_file);
}
+ if (isset($old_php)) {
+ $php = $old_php;
+ }
+
if (!$leaked && !$failed_headers) {
if (isset($section_text['XFAIL'] )) {
$warn = true;
);
}
+ 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);
function generate_array_diff($ar1, $ar2, $is_reg, $w)
{
- $idx1 = 0; $cnt1 = @count($ar1);
- $idx2 = 0; $cnt2 = @count($ar2);
+ $idx1 = 0; $ofs1 = 0; $cnt1 = @count($ar1);
+ $idx2 = 0; $ofs2 = 0; $cnt2 = @count($ar2);
$diff = array();
$old1 = array();
$old2 = array();
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++];
$sum_results['SKIPPED'] += $ignored_by_ext;
$percent_results = array();
- foreach ($sum_results as $v => $n) {
+ while (list($v, $n) = each($sum_results)) {
$percent_results[$v] = (100.0 * $n) / $n_total;
}
}