summaryrefslogtreecommitdiff
path: root/run-tests.php
diff options
context:
space:
mode:
Diffstat (limited to 'run-tests.php')
-rwxr-xr-xrun-tests.php65
1 files changed, 47 insertions, 18 deletions
diff --git a/run-tests.php b/run-tests.php
index 20d148b0b0..247e7d5313 100755
--- a/run-tests.php
+++ b/run-tests.php
@@ -1057,7 +1057,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;
@@ -1068,21 +1068,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);
@@ -1102,7 +1110,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;
@@ -1332,6 +1346,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. */
@@ -1740,7 +1769,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'])) {
@@ -1774,7 +1803,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'])) {
@@ -1791,7 +1820,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'])) {
@@ -1806,7 +1835,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']);
@@ -1819,7 +1848,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 {
@@ -1827,7 +1856,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) {
@@ -1863,7 +1892,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);