Broken pipes with process isolation <at> windows vista/ windows 7
Martin Eisengardt <MEP_Eisen <at> web.de>
2010-09-13 08:47:01 GMT
Hi.
Do not know why, but sometimes phpunit or windows itself consequently messes up with pipes while process
isolation is activated. It shows up the following errors on some of our big projects (in this example 1 to 4
are regular test case errors):
PHPUnit 3.4.15 by Sebastian Bergmann.
.........................E..EE.................EEEEEEEEEEEEE 60 / 63 EEE Time: 26 seconds,
Memory: 12.00Mb There were 19 errors: [...]5) BGH_Core_Modules_ModuleDescriptorTest::testEquals
RuntimeException: Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE in
C:\dev\ws\r_p\bgh\bgh_php_lib\- on line 133 6)
BGH_Core_Modules_ModuleNameTest::testConstructor RuntimeException: Parse error: syntax error,
unexpected T_ENCAPSED_AND_WHITESPACE in C:\dev\ws\r_p\bgh\bgh_php_lib\- on line 133 7)
BGH_Core_Modules_ModuleNameTest::testNormal RuntimeException: Parse error: syntax error,
unexpected T_ENCAPSED_AND_WHITESPACE in C:\dev\ws\r_p\bgh\bgh_php_lib\- on line 133 8)
BGH_Core_Modules_ModuleNameTest::testToString RuntimeException: Parse error: syntax error,
unexpected T_ENCAPSED_AND_WHITESPACE in C:\dev\ws\r_p\bgh\bgh_php_lib\- on line 133 9)
BGH_Core_Modules_VersionTest::testConstructor RuntimeException: Parse error: syntax error,
unexpected T_ENCAPSED_AND_WHITESPACE in C:\dev\ws\r_p\bgh\bgh_php_lib\- on line 133 10)
BGH_Core_Modules_VersionTest::testConstructorMix RuntimeException: Parse error: syntax error,
unexpected T_ENCAPSED_AND_WHITESPACE in C:\dev\ws\r_p\bgh\bgh_php_lib\- on line 133 11)
BGH_Core_Modules_VersionTest::testStringConstructor RuntimeException: Parse error: syntax
error, unexpected T_ENCAPSED_AND_WHITESPACE in C:\dev\ws\r_p\bgh\bgh_php_lib\- on line 133 12)
BGH_Core_Modules_VersionTest::testNumericConstructor RuntimeException: Parse error: syntax
error, unexpected T_ENCAPSED_AND_WHITESPACE in C:\dev\ws\r_p\bgh\bgh_php_lib\- on line 133 13)
BGH_Core_Modules_VersionTest::testInvalidArguments RuntimeException: Parse error: syntax
error, unexpected T_ENCAPSED_AND_WHITESPACE in C:\dev\ws\r_p\bgh\bgh_php_lib\- on line 133 14)
BGH_Core_Modules_VersionTest::testEquals RuntimeException: Parse error: syntax error,
unexpected T_ENCAPSED_AND_WHITESPACE in C:\dev\ws\r_p\bgh\bgh_php_lib\- on line 133 15)
BGH_Core_Modules_VersionTest::testCompareTo RuntimeException: Parse error: syntax error,
unexpected T_ENCAPSED_AND_WHITESPACE in C:\dev\ws\r_p\bgh\bgh_php_lib\- on line 133 16)
BGH_Core_Modules_VersionTest::testCompareToInvalidArg RuntimeException: Parse error: syntax
error, unexpected T_ENCAPSED_AND_WHITESPACE in C:\dev\ws\r_p\bgh\bgh_php_lib\- on line 133 17)
BGH_Core_Modules_VersionTest::testEqualsStringArg RuntimeException: Parse error: syntax error,
unexpected T_ENCAPSED_AND_WHITESPACE in C:\dev\ws\r_p\bgh\bgh_php_lib\- on line 133 18)
BGH_Core_Modules_VersionTest::testEqualsInvalidStringArg RuntimeException: Parse error:
syntax error, unexpected T_ENCAPSED_AND_WHITESPACE in C:\dev\ws\r_p\bgh\bgh_php_lib\- on line 133
19) BGH_Core_Modules_VersionTest::testToString RuntimeException: Parse error: syntax error,
unexpected T_ENCAPSED_AND_WHITESPACE in C:\dev\ws\r_p\bgh\bgh_php_lib\- on line 133
[37;41m[2KFAILURES! [0m[37;41m[2KTests: 63, Assertions: 537, Errors: 19. [0m[2K Writing
code coverage data to XML file, this may take a moment. Generating code coverage report, this may take a moment.
I changed the code in PHPUnit_Util_PHP a little bit to use a temprary file and not the pipe. That solved the
problem. But is is somehow strange since may be a phantom bug. I am starting phpunit.bat from within
eclipse. Restarting eclipse solves the problem for about one hour.
public static function runJob($job) { $fname = tempnam(getcwd(), 'phpunit_testcase_'); $testf =
fopen($fname, "w+"); fwrite($testf, $job); fclose($testf); $process = proc_open(
self::getPhpBinary(), self::$descriptorSpec, $pipes ); if (is_resource($process)) { //
fwrite($pipes[0], $job);fclose($pipes[0]); $stdout = stream_get_contents($pipes[1]);
fclose($pipes[1]); $stderr = stream_get_contents($pipes[2]); fclose($pipes[2]);
proc_close($process); unlink($fname); return array('stdout' => $stdout, 'stderr' => $stderr); }
unlink ($fname); }
Ciao
Martin