wiki.techinc.nl/tests/phpunit/includes/GlobalFunctions/wfShellExecTest.php
Max Semenik 9f522988b8 Fix race condition in wfShellExec()
Especially when executing commands that return a relatively lot of data in stdout
quickly, proc_get_status() may return that command has terminated before everything
has been read from pipes. Handle this case by continuing to perform
non-blocking select on the process's streams until all remaining data has been
read.

Bug: 67870
Change-Id: I050292dbb76821f66a15f937bf3aaf4defe67687
2014-07-21 23:21:23 -07:00

20 lines
533 B
PHP

<?php
/**
* @group GlobalFunctions
* @covers ::wfShellExec
*/
class WfShellExecTest extends MediaWikiTestCase {
public function testBug67870() {
$command = wfIsWindows()
// 333 = 331 + CRLF
? ( 'for /l %i in (1, 1, 1001) do @echo ' . str_repeat( '*', 331 ) )
: 'printf "%-333333s" "*"';
// Test several times because it involves a race condition that may randomly succeed or fail
for ( $i = 0; $i < 10; $i++ ) {
$output = wfShellExec( $command );
$this->assertEquals( 333333, strlen( $output ) );
}
}
}