helly Sat May 13 14:01:19 2006 UTC Modified files: /php-src run-tests.php Log: - Add support for --EXPECTHEADERS-- - MFB cgi specific stuff http://cvs.php.net/viewcvs.cgi/php-src/run-tests.php?r1=1.286&r2=1.287&diff_format=u Index: php-src/run-tests.php diff -u php-src/run-tests.php:1.286 php-src/run-tests.php:1.287 --- php-src/run-tests.php:1.286 Tue Apr 18 09:27:59 2006 +++ php-src/run-tests.php Sat May 13 14:01:19 2006 @@ -23,7 +23,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: run-tests.php,v 1.286 2006/04/18 09:27:59 tony2001 Exp $ */ +/* $Id: run-tests.php,v 1.287 2006/05/13 14:01:19 helly Exp $ */ /* Sanity check to ensure that pcre extension needed by this script is available. * In the event it is not, print a nice error message indicating that this script will @@ -97,6 +97,15 @@ $environment['TEST_PHP_EXECUTABLE'] = $php; } +if (getenv('TEST_PHP_CGI_EXECUTABLE')) { + $php_cgi = getenv('TEST_PHP_CGI_EXECUTABLE'); + if ($php_cgi=='auto') { + $php_cgi = $cwd.'/sapi/cgi/php'; + putenv("TEST_PHP_CGI_EXECUTABLE=$php_cgi"); + } + $environment['TEST_PHP_CGI_EXECUTABLE'] = $php_cgi; +} + if ($argc !=2 || ($argv[1] != '-h' && $argv[1] != '-help' && $argv != '--help')) { if (empty($php) || !file_exists($php)) { @@ -390,7 +399,7 @@ $html_output = is_resource($html_file); break; case '--version': - echo '$Revision: 1.286 $'."\n"; + echo '$Revision: 1.287 $'."\n"; exit(1); default: echo "Illegal switch specified!\n"; @@ -936,7 +945,11 @@ $temp_filenames = null; $org_file = $file; - + + if (isset($env['TEST_PHP_CGI_EXECUTABLE'])) { + $php_cgi = $env['TEST_PHP_CGI_EXECUTABLE']; + } + if (is_array($file)) $file = $file[0]; if ($DETAILED) echo " @@ -949,7 +962,9 @@ 'TEST' => '', 'SKIPIF' => '', 'GET' => '', + 'POST_RAW' => '', 'POST' => '', + 'UPLOAD' => '', 'ARGS' => '', ); @@ -1250,6 +1265,17 @@ // a redirected test never fails $IN_REDIRECT = false; return 'REDIR'; + } else { + $bork_info = "Redirect info must contain exactly one TEST string to be used as redirect directory."; + show_result("BORK", $bork_info, '', $unicode_semantics, $temp_filenames); + $PHP_FAILED_TESTS['BORKED'][] = array ( + 'name' => $file, + 'test_name' => '', + 'output' => '', + 'diff' => '', + 'info' => "$bork_info [$file]", + 'unicode'=> $unicode_semantics, + ); } } if (is_array($org_file) || @count($section_text['REDIRECTTEST']) == 1) { @@ -1311,7 +1337,28 @@ $args = $section_text['ARGS'] ? ' -- '.$section_text['ARGS'] : ''; - if (array_key_exists('POST', $section_text) && !empty($section_text['POST'])) { + if (array_key_exists('POST_RAW', $section_text) && !empty($section_text['POST_RAW'])) { + $post = trim($section_text['POST_RAW']); + $raw_lines = explode("\n", $post); + + $request = ''; + foreach ($raw_lines as $line) { + if (empty($env['CONTENT_TYPE']) && eregi('^(Content-Type:)(.*)', $line, $res)) { + $env['CONTENT_TYPE'] = trim(str_replace("\r", '', $res[2])); + continue; + } + $request .= $line . "\n"; + } + + $env['CONTENT_LENGTH'] = strlen($request); + $env['REQUEST_METHOD'] = 'POST'; + + if (empty($request)) { + return 'BORKED'; + } + save_text($tmp_post, $request); + $cmd = "$php$pass_options$ini_settings -f \"$test_file\" 2>&1 < $tmp_post"; + } elseif (array_key_exists('POST', $section_text) && !empty($section_text['POST'])) { $post = trim($section_text['POST']); save_text($tmp_post, $post); @@ -1387,8 +1434,47 @@ $output = str_replace("\r\n", "\n", trim($out)); /* when using CGI, strip the headers from the output */ - if (isset($old_php) && ($pos = strpos($output, "\n\n")) !== FALSE) { - $output = substr($output, ($pos + 2)); + $headers = ""; + if (isset($old_php) && preg_match("/^(.*?)\r?\n\r?\n(.*)/s", $out, $match)) { + $output = $match[2]; + $rh = preg_split("/[\n\r]+/",$match[1]); + $headers = array(); + foreach ($rh as $line) { + if (strpos($line, ':')!==false) { + $line = explode(':', $line, 2); + $headers[trim($line[0])] = trim($line[1]); + } + } + } + + $failed_headers = false; + if (isset($section_text['EXPECTHEADERS'])) { + $want = array(); + $wanted_headers = array(); + $lines = preg_split("/[\n\r]+/",$section_text['EXPECTHEADERS']); + foreach($lines as $line) { + if (strpos($line, ':') !== false) { + $line = explode(':', $line, 2); + $want[trim($line[0])] = trim($line[1]); + $wanted_headers[] = trim($line[0]) . ': ' . trim($line[1]); + } + } + $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($org_headers[$k]) || $org_headers[$k] != $v) { + $failed_headers = true; + } + } + ksort($wanted_headers); + $wanted_headers = join("\n", $wanted_headers); + ksort($output_headers); + $output_headers = join("\n", $output_headers); } if (isset($section_text['EXPECTF']) || isset($section_text['EXPECTREGEX'])) { @@ -1424,7 +1510,7 @@ if (isset($old_php)) { $php = $old_php; } - if (!$leaked) { + if (!$leaked && !$failed_headers) { show_result("PASS", $tested, $tested_file, $unicode_semantics, '', $temp_filenames); return 'PASSED'; } @@ -1441,7 +1527,7 @@ if (isset($old_php)) { $php = $old_php; } - if (!$leaked) { + if (!$leaked && !$failed_headers) { show_result("PASS", $tested, $tested_file, $unicode_semantics, '', $temp_filenames); return 'PASSED'; } @@ -1450,7 +1536,15 @@ } // Test failed so we need to report details. - + if ($failed_headers) { + $passed = false; + $wanted = $wanted_headers . "\n--HEADERS--\n" . $wanted; + $output = $output_headers . "\n--HEADERS--\n" . $output; + if (isset($wanted_re)) { + $wanted_re = $wanted_headers . "\n--HEADERS--\n" . $wanted_re; + } + } + if ($leaked) { $restype = 'LEAK'; } else if ($warn) {
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php