Page MenuHomePhabricator

CommandTest failing from time to time
Closed, ResolvedPublic


I think this might've been caused by

Test failure on Travis PHP 5.5 (reproduceable on PHP 7)

1) CommandTest::testInput
Failed asserting that 81920 is identical to 1000000.
Tests: 17117, Assertions: 97888, Failures: 1, Skipped: 23, Risky: 5.

Event Timeline

That commit added the test so that's a pretty safe assumption :)
Command reads the input in blocks of 65535, so it seems like the input (or output?) is truncated after 1.25 blocks. No clue why that would be happening :(

FWIW I tested the patch in vagrant (PHP 5.6) and that worked. 3v4l does not allow shell execution so can't test there :(

This is easily reproduceable in PHP7 too if you put that test's code inside a loop. Observations:

  • It doesn't happen if the executable is not outputting anything at the same time.
  • When this happen, the script waits for a long time.
MaxSem renamed this task from CommandTest failing on Travis PHP 5.5 to CommandTest failing from time to time.Jan 19 2018, 5:33 AM
MaxSem updated the task description. (Show Details)

Can we disable the test in the meanwhile until we've figured this out? Or at least reduce the size to under 8000 for the sake of not having our builds broken or less-than-useful.

Krinkle triaged this task as High priority.Jan 23 2018, 5:18 PM
Krinkle moved this task from Inbox to PHPUnit on the MediaWiki-Core-Testing board.

I ran into a similar bug today when running tests locally: this test was seeming to hang and I killed it. Probably it would eventually have timed out and given the failure here.

It turns out that the select system call only guarantees non-blocking for "sufficiently small writes", and when it was hanging it was blocked in a write system call (as was the cat process). Running all the pipes through stream_set_blocking() (and then fixing the read/write loop) seems to have fixed it.

Change 407483 had a related patch set uploaded (by Anomie; owner: Anomie):
[mediawiki/core@master] Shell: Set pipes to non-blocking

Also affecting our own CI jobs, seen at for

1) CommandTest::testInput
Failed asserting that 139264 is identical to 1000000.

I'm landing the proposed patch by @Anomie now. But if it shows up again after that, I assume it will be uncontroversial to disable CommandTest until resolved.

Change 407483 merged by jenkins-bot:
[mediawiki/core@master] Shell: Set pipes to non-blocking

Krinkle claimed this task.