From af5df424fc15132d552443f626cd801ce74cc45d Mon Sep 17 00:00:00 2001 From: RazeSoldier Date: Sat, 15 Jun 2019 14:35:18 +0800 Subject: [PATCH] Skip ::testT69870() under Windows system Anonymous pipe under Windows does not support asynchronous read and write[1], and the default buffer is too small (~4K), the test will definitely block it. Before T69870, anonymous pipe for Windows can no longer hold more than 4K of data. [1] https://docs.microsoft.com/en-us/windows/desktop/ipc/anonymous-pipe-operations Bug: T209159 Change-Id: Ie9de36b1e6b68db95c35a0044c5b0d86c0050d33 --- .../includes/GlobalFunctions/wfShellExecTest.php | 13 ++++++++----- tests/phpunit/includes/shell/CommandTest.php | 13 ++++++++----- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/tests/phpunit/includes/GlobalFunctions/wfShellExecTest.php b/tests/phpunit/includes/GlobalFunctions/wfShellExecTest.php index 6279cf6eee..68bb1e9689 100644 --- a/tests/phpunit/includes/GlobalFunctions/wfShellExecTest.php +++ b/tests/phpunit/includes/GlobalFunctions/wfShellExecTest.php @@ -6,14 +6,17 @@ */ class WfShellExecTest extends MediaWikiTestCase { public function testT69870() { - $command = 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++ ) { - $output = wfShellExec( $command ); + $output = wfShellExec( 'printf "%-333333s" "*"' ); $this->assertEquals( 333333, strlen( $output ) ); } } diff --git a/tests/phpunit/includes/shell/CommandTest.php b/tests/phpunit/includes/shell/CommandTest.php index 2e03163885..c5e8e897ab 100644 --- a/tests/phpunit/includes/shell/CommandTest.php +++ b/tests/phpunit/includes/shell/CommandTest.php @@ -119,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 ) ); -- 2.20.1