com php-src: fixing run-tests.php for variables_order="GP CS": run-tests.php

[email protected] (Matt Ficken)
Newsgroups php.cvs
Message-ID <[email protected]>
Commit:    c1d57186976e75a2a54f7bd167a77e2872cadc6a
Author:    Matt Ficken <[email protected]>         Mon, 15 May 2017 02:21:55 -0700
Parents:   8cbfc882d2280a1fa6d5e5c8dadf63d65ed074f2
Branches:  PHP-7.1

Link:       http://git.php.net/?p=php-src.git;a=commitdiff;h=c1d57186976e75a2a54f7bd167a77e2872cadc6a

Log:
fixing run-tests.php for variables_order="GPCS"

Changed paths:
  M  run-tests.php
diff_c1d57186976e75a2a54f7bd167a77e2872cadc6a.txt (text/plain, 15.7 KB)
diff --git a/run-tests.php b/run-tests.php
index 1991b56..fbb664d 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;
 	}
 }
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.