X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=tests%2Fphpunit%2Fincludes%2Fshell%2FCommandTest.php;h=2ba7bdc011be8cff55e81c15b0ad6f2f0addc7fa;hb=dfec83932fd38a9086eb5a2e212889ad00f35b0e;hp=f7275e14e8c3e0d460f734f01f4ce1f15e9ee8e4;hpb=016559d3d14743352364f174a7fc8d5c230ab990;p=lhc%2Fweb%2Fwiklou.git diff --git a/tests/phpunit/includes/shell/CommandTest.php b/tests/phpunit/includes/shell/CommandTest.php index f7275e14e8..c5e8e897ab 100644 --- a/tests/phpunit/includes/shell/CommandTest.php +++ b/tests/phpunit/includes/shell/CommandTest.php @@ -4,9 +4,13 @@ use MediaWiki\Shell\Command; use Wikimedia\TestingAccessWrapper; /** + * @covers \MediaWiki\Shell\Command * @group Shell */ -class CommandTest extends PHPUnit_Framework_TestCase { +class CommandTest extends PHPUnit\Framework\TestCase { + + use MediaWikiCoversValidator; + private function requirePosix() { if ( wfIsWindows() ) { $this->markTestSkipped( 'This test requires a POSIX environment.' ); @@ -115,15 +119,18 @@ class CommandTest extends PHPUnit_Framework_TestCase { } public function testT69870() { - $commandLine = wfIsWindows() - // 333 = 331 + CRLF - ? ( 'for /l %i in (1, 1, 1001) do @echo ' . str_repeat( '*', 331 ) ) - : 'printf "%-333333s" "*"'; + if ( wfIsWindows() ) { + // T209159: Anonymous pipe under Windows does not support asynchronous read and write, + // and the default buffer is too small (~4K), it is easy to be blocked. + $this->markTestSkipped( + 'T209159: Anonymous pipe under Windows cannot withstand such a large amount of data' + ); + } // Test several times because it involves a race condition that may randomly succeed or fail for ( $i = 0; $i < 10; $i++ ) { $command = new Command(); - $output = $command->unsafeParams( $commandLine ) + $output = $command->unsafeParams( 'printf "%-333333s" "*"' ) ->execute() ->getStdout(); $this->assertEquals( 333333, strlen( $output ) ); @@ -150,4 +157,28 @@ class CommandTest extends PHPUnit_Framework_TestCase { $this->assertSame( 1, count( $logger->getBuffer() ) ); $this->assertSame( trim( $logger->getBuffer()[0][2]['error'] ), 'ThisIsStderr' ); } + + public function testInput() { + $this->requirePosix(); + + $command = new Command(); + $command->params( 'cat' ); + $command->input( 'abc' ); + $result = $command->execute(); + $this->assertSame( 'abc', $result->getStdout() ); + + // now try it with something that does not fit into a single block + $command = new Command(); + $command->params( 'cat' ); + $command->input( str_repeat( '!', 1000000 ) ); + $result = $command->execute(); + $this->assertSame( 1000000, strlen( $result->getStdout() ) ); + + // And try it with empty input + $command = new Command(); + $command->params( 'cat' ); + $command->input( '' ); + $result = $command->execute(); + $this->assertSame( '', $result->getStdout() ); + } }