Minimal test case:
vendor/bin/phpunit --configuration phpunit.xml.dist --filter 'testCriticalSectionErrorSelect' tests/phpunit/unit/includes/libs/rdbms/database/DatabaseTest.php
Using PHP 8.2.14 Running without MediaWiki settings because there are no integration tests PHPUnit 9.6.16 by Sebastian Bergmann and contributors. F 1 / 1 (100%) Time: 00:00.017, Memory: 16.00 MB There was 1 failure: 1) Wikimedia\Tests\Rdbms\DatabaseTest::testCriticalSectionErrorSelect Failed asserting that exception of type "Wikimedia\Rdbms\DBTransactionStateError" is thrown. FAILURES! Tests: 1, Assertions: 3, Failures: 1.
The test in question:
public function testCriticalSectionErrorSelect() { $this->expectException( DBTransactionStateError::class ); $db = TestingAccessWrapper::newFromObject( $this->db ); try { $this->corruptDbState( $db ); } catch ( RuntimeException $e ) { $this->assertEquals( "Unexpected error", $e->getMessage() ); } $db->query( "SELECT 1", __METHOD__ ); }
Other info
When navigating to DatabaseTest.php in PhpStorm and running the test in isolation, it passes. Looking at the way PhpStorm runs this, it boils down to basically this:
$ php -dxdebug.mode=debug -dxdebug.client_host=127.0.0.1 -dxdebug.client_port=9003 -dxdebug.start_with_r vendor/bin/phpunit --configuration phpunit.xml.dist --filter "testCriticalSectionErrorSelect" --test-suffix DatabaseTest.php tests/phpunit/unit/includes/libs/rdbms/databaseI've ruled out PhpStorm as a potential cause. Merely enabling xdebug without breakpoints or listening ports, is enough to make it pass:
php -dxdebug.mode=debug vendor/bin/phpunit --configuration phpunit.xml.dist --filter 'testCriticalSectionErrorSelect' tests/phpunit/unit/includes/libs/rdbms/database/DatabaseTest.php
This, of course, makes debugging it rather difficult.