Page MenuHomePhabricator

"PHP Warning: Invalid substructure diff for key links: Diff\DiffOp\DiffOpChange" when running Wikibase PHPUnit tests
Closed, ResolvedPublic

Description

Currently, running Wikibase's PHPUnit tests locally results in the following PHP warning being displayed:

$ composer phpunit -- extensions/Wikibase --verbose
> Composer\Config::disableProcessTimeout
Using PHP 8.5.2
Running with MediaWiki settings because there might be integration tests
PHP Warning:  Invalid substructure diff for key links: Diff\DiffOp\DiffOpChange [Called from Wikibase\DataModel\Services\Diff\EntityDiff::fixSubstructureDiff in /[...]/extensions/Wikibase/lib/packages/wikibase/data-model-services/src/Diff/EntityDiff.php at line 64] in /[...]/includes/Debug/MWDebug.php on line 486

This is also being seen in Wikibase CI (e.g. at https://integration.wikimedia.org/ci/job/quibble-vendor-mysql-php83/38020/consoleFull#console-section-14):

15:55:37 > MediaWiki\Composer\PhpUnitSplitter\PhpUnitXmlManager::listTestsNotice
15:55:37 
15:55:37 Running `phpunit --list-tests-xml` to get a list of expected tests ... 
15:55:37 
15:55:37 > Composer\Config::disableProcessTimeout
15:55:38 Using PHP 8.3.30
15:55:38 Running with MediaWiki settings because there might be integration tests
15:55:44 PHP Warning:  Invalid substructure diff for key links: Diff\DiffOp\DiffOpChange [Called from Wikibase\DataModel\Services\Diff\EntityDiff::fixSubstructureDiff in /workspace/src/extensions/Wikibase/lib/packages/wikibase/data-model-services/src/Diff/EntityDiff.php at line 64] in /workspace/src/includes/Debug/MWDebug.php on line 486

git bisect locally says that this has started happening since https://gerrit.wikimedia.org/r/c/mediawiki/extensions/Wikibase/+/1237330; cc @Umherirrender @Jdforrester-WMF fyi

Event Timeline

Got a stack trace for the warning from xdebug locally fwiw:

PHP Warning:  Invalid substructure diff for key links: Diff\DiffOp\DiffOpChange [Called from Wikibase\DataModel\Services\Diff\EntityDiff::fixSubstructureDiff in /[...]/extensions/Wikibase/lib/packages/wikibase/data-model-services/src/Diff/EntityDiff.php at line 64] in /[...]/includes/Debug/MWDebug.php on line 486
PHP Stack trace:
PHP   1. {main}() /[...]/vendor/bin/phpunit:0
PHP   2. include() /[...]/vendor/bin/phpunit:122
PHP   3. PHPUnit\TextUI\Command::main($exit = *uninitialized*) /[...]/vendor/phpunit/phpunit/phpunit:107
PHP   4. PHPUnit\TextUI\Command->run($argv = [0 => '/[...]/vendor/bin/phpunit', 1 => 'extensions/Wikibase', 2 => '--verbose'], $exit = TRUE) /[...]/vendor/phpunit/phpunit/src/TextUI/Command.php:99
PHP   5. PHPUnit\Runner\BaseTestRunner->getTest($suiteClassFile = '/[...]/extensions/Wikibase', $suffixes = [0 => 'Test.php', 1 => '.phpt']) /[...]/vendor/phpunit/phpunit/src/TextUI/Command.php:121
PHP   6. PHPUnit\Framework\TestSuite->addTestFiles($fileNames = [...]) /[...]/vendor/phpunit/phpunit/src/Runner/BaseTestRunner.php:98
PHP   7. PHPUnit\Framework\TestSuite->addTestFile($filename = '/[...]/extensions/Wikibase/lib/packages/wikibase/changes/tests/ItemChangeTest.php') /[...]/vendor/phpunit/phpunit/src/Framework/TestSuite.php:537
PHP   8. PHPUnit\Framework\TestSuite->addTestSuite($testClass = class ReflectionClass { public string $name = 'Wikibase\\Lib\\Tests\\Changes\\ItemChangeTest' }) /[...]/vendor/phpunit/phpunit/src/Framework/TestSuite.php:512
PHP   9. PHPUnit\Framework\TestSuite->__construct($theClass = class ReflectionClass { public string $name = 'Wikibase\\Lib\\Tests\\Changes\\ItemChangeTest' }, $name = *uninitialized*) /[...]/vendor/phpunit/phpunit/src/Framework/TestSuite.php:362
PHP  10. PHPUnit\Framework\TestSuite->addTestMethod($class = class ReflectionClass { public string $name = 'Wikibase\\Lib\\Tests\\Changes\\ItemChangeTest' }, $method = class ReflectionMethod { public string $name = 'testGetSiteLinkDiffBackwardsCompat'; public string $class = 'Wikibase\\Lib\\Tests\\Changes\\ItemChangeTest' }) /[...]/vendor/phpunit/phpunit/src/Framework/TestSuite.php:232
PHP  11. PHPUnit\Framework\TestBuilder->build($theClass = class ReflectionClass { public string $name = 'Wikibase\\Lib\\Tests\\Changes\\ItemChangeTest' }, $methodName = 'testGetSiteLinkDiffBackwardsCompat') /[...]/vendor/phpunit/phpunit/src/Framework/TestSuite.php:891
PHP  12. PHPUnit\Util\Test::getProvidedData($className = 'Wikibase\\Lib\\Tests\\Changes\\ItemChangeTest', $methodName = 'testGetSiteLinkDiffBackwardsCompat') /[...]/vendor/phpunit/phpunit/src/Framework/TestBuilder.php:72
PHP  13. PHPUnit\Util\Annotation\DocBlock->getProvidedData() /[...]/vendor/phpunit/phpunit/src/Util/Test.php:329
PHP  14. PHPUnit\Util\Annotation\DocBlock->getDataFromDataProviderAnnotation($docComment = '/**\n\t * @dataProvider changeBackwardsCompatProvider\n\t */') /[...]/vendor/phpunit/phpunit/src/Util/Annotation/DocBlock.php:278
PHP  15. ReflectionMethod->invoke($object = NULL) /[...]/vendor/phpunit/phpunit/src/Util/Annotation/DocBlock.php:421
PHP  16. Wikibase\Lib\Tests\Changes\ItemChangeTest::changeBackwardsCompatProvider() /[...]/vendor/phpunit/phpunit/src/Util/Annotation/DocBlock.php:421
PHP  17. Wikibase\DataModel\Services\Diff\ItemDiff->__construct($operations = ['links' => class Diff\DiffOp\DiffOpChange { private $newValue = [...]; private $oldValue = [...] }]) /[...]/extensions/Wikibase/lib/packages/wikibase/changes/tests/ItemChangeTest.php:74
PHP  18. Wikibase\DataModel\Services\Diff\EntityDiff->fixSubstructureDiff($operations = ['links' => class Diff\DiffOp\DiffOpChange { private $newValue = [...]; private $oldValue = [...] }], $key = 'links') /[...]/extensions/Wikibase/lib/packages/wikibase/data-model-services/src/Diff/ItemDiff.php:22
PHP  19. wfLogWarning($msg = 'Invalid substructure diff for key links: Diff\\DiffOp\\DiffOpChange', $callerOffset = *uninitialized*, $level = *uninitialized*) /[...]/extensions/Wikibase/lib/packages/wikibase/data-model-services/src/Diff/EntityDiff.php:64
PHP  20. MediaWiki\Debug\MWDebug::warning($msg = 'Invalid substructure diff for key links: Diff\\DiffOp\\DiffOpChange', $callerOffset = 2, $level = 512, $log = 'production') /[...]/includes/GlobalFunctions.php:763
PHP  21. MediaWiki\Debug\MWDebug::sendMessage($msg = 'Invalid substructure diff for key links: Diff\\DiffOp\\DiffOpChange [Called from Wikibase\\DataModel\\Services\\Diff\\EntityDiff::fixSubstructureDiff in /[...]/extensions/Wikibase/lib/packages/wikibase/data-model-services/src/Diff/EntityDiff.php at line 64]', $group = 'warning', $level = 512) /[...]/includes/Debug/MWDebug.php:195
PHP  22. trigger_error($message = 'Invalid substructure diff for key links: Diff\\DiffOp\\DiffOpChange [Called from Wikibase\\DataModel\\Services\\Diff\\EntityDiff::fixSubstructureDiff in /[...]/extensions/Wikibase/lib/packages/wikibase/data-model-services/src/Diff/EntityDiff.php at line 64]', $error_level = 512) /[...]/includes/Debug/MWDebug.php:486

Change #1239386 had a related patch set uploaded (by Umherirrender; author: Umherirrender):

[mediawiki/extensions/Wikibase@master] tests: Suppress error from backward test in ItemChangeTest

https://gerrit.wikimedia.org/r/1239386

Change #1239386 merged by jenkins-bot:

[mediawiki/extensions/Wikibase@master] tests: Suppress error from backward test in ItemChangeTest

https://gerrit.wikimedia.org/r/1239386