wiki.techinc.nl/tests/phpunit
Aaron Schulz 278bb5c23e rdbms: detect corrupt Database instances due to critical section failure
This checks that the Database state has not diverged from the driver DB
handle nor server-side connection state due to an exception being thrown
in an unexpected place within internal Database methods. DB handles with
possible state corruption will not accept queries.

For example, a PHP extension like Excimer might be used to throw request
timeout exceptions. Such exceptions can trigger after any PHP or Zend
function returns, e.g. within DatabaseMysqlBase::doSelectDomain() after
the "USE" query completes but before $this->currentDomain gets updated.

Also:
* Make getApproximateLagStatus() catch getLag() errors since begin()
  expects it to simply use "false" for the lag value on failure. This
  helps assure that $this->trxAutomatic gets properly set.
* Unsuppress exceptions in runOnTransactionPreCommitCallbacks()
  as the transaction needs to get aborted anyway (as already happens).
* Unsuppress exceptions in runOnAtomicSectionCancelCallbacks() since
  the safest thing to do is just roll back the transaction.
* Only suppress DBError exceptions in runOnTransactionIdleCallbacks().
  and runTransactionListenerCallbacks(). Return the array of errors
  rather than throw the first one. Most of the callers had to catch
  the errors, so it's easier to avoid throwing them to begin with.
* Avoid blanket try/catch in sourceStream(), doReplace(), upsert(),
  doInsertSelectGenericand().
* Clarify various code comments and add missing @internal tags.

Bug: T193565
Change-Id: I6b7b02c02b24c2ff01094af3df54c989fe504af7
2021-03-24 14:25:50 +00:00
..
data JPEG2000 MIME fixes 2021-03-15 21:43:24 +01:00
docs
includes rdbms: detect corrupt Database instances due to critical section failure 2021-03-24 14:25:50 +00:00
integration/includes Convert LogPage to UserIdentity 2021-03-23 12:02:40 -06:00
languages Merge "Add converter for the Talysh language (tly)" 2021-02-23 12:45:31 +00:00
maintenance Maintenance: Don't modify mOptions in getOption 2021-02-25 15:42:05 +00:00
mocks Introduce PageStore 2021-03-23 15:20:03 -06:00
structure Migrate page to abstract schema 2021-03-21 12:07:12 +01:00
suites Fix typo in ParserTestTopLevelSuite 2021-02-19 15:51:50 +01:00
tests Tests: Mark more more closures as static 2021-02-09 02:55:57 +00:00
unit rdbms: detect corrupt Database instances due to critical section failure 2021-03-24 14:25:50 +00:00
bootstrap.maintenance.php Tests: Mark more closures as static 2021-02-07 13:26:56 +01:00
bootstrap.php
HamcrestPHPUnitIntegration.php Fix and add various type hints 2021-02-16 17:22:15 +00:00
LessFileCompilationTest.php
Makefile
MediaWikiCliOptions.php
MediaWikiCoversValidator.php
MediaWikiGroupValidator.php
MediaWikiHooksPHPUnitExtension.php phpunit: Remove MediaWikiPHPUnitTestListener 2021-03-20 15:55:26 +01:00
MediaWikiIntegrationTestCase.php Drop wgContLang, deprecated in 1.32 2021-03-08 13:27:28 -06:00
MediaWikiLangTestCase.php
MediaWikiLoggerPHPUnitExtension.php
MediaWikiPHPUnitCommand.php phpunit: Remove MediaWikiPHPUnitTestListener 2021-03-20 15:55:26 +01:00
MediaWikiPHPUnitResultPrinter.php
MediaWikiTestCaseTrait.php Merge "Add mock for numParams to MediaWikiTestCaseTrait" 2021-02-17 22:37:07 +00:00
MediaWikiUnitTestCase.php
phpunit.php
README
ResourceLoaderTestCase.php resourceloader: Allow modules to mark themselves as ES6-only 2021-03-04 14:53:36 -05:00
run-tests.bat
suite.xml phpunit: Remove MediaWikiPHPUnitTestListener 2021-03-20 15:55:26 +01:00

== MediaWiki PHPUnit Tests ==

The unit and integration tests for MediaWiki are implemented using the PHPUnit testing
framework and require PHPUnit to run.


=== WARNING ===

Some of the integration tests are DESTRUCTIVE and WILL ALTER YOUR WIKI'S CONTENTS.

DO NOT RUN THESE TESTS ON A PRODUCTION SYSTEM OR ON ANY SYSTEM WHERE YOU NEED
TO RETAIN YOUR DATA.


== Installation ==

If you used composer to install MediaWiki's dependencies PHPUnit will already be available, unless
you explicitly specified the --no-dev flag during the install. In this case just run "composer update".

Otherwise follow the installation instructions in the
PHPUnit Manual at:

  https://phpunit.de/manual/current/en/installation.html


== Running tests ==

The tests are run from your operating system's command line.

Ensure that you are in the tests/phpunit directory of your MediaWiki
installation.


On Unix-like operating systems, the tests runs are controlled with a makefile.
Run command:

  make help

for a full list of options for running tests.


On Windows-family operating systems, run the 'run-tests.bat' batch file.


=== Writing tests ===

A guide to writing PHP unit tests for MediaWiki can be found at:

	https://www.mediawiki.org/wiki/Manual:PHP_unit_testing