wiki.techinc.nl/tests/phpunit/integration/includes/libs/filebackend/SwiftFileBackendIntegrationTest.php
Tim Starling ae994ff6ff filebackend: Refactor FileBackendIntegrationTest
FileBackendIntegrationTest was running tests against different backends
in an unconventional way, using a combination of wrapper test cases that
run tests against two different classes, and CLI options which don't
really exist anymore and have an associated fixme.

So:
* Move the bulk of FileBackendIntegrationTest to a new abstract base
  class under tests/phpunit/integration.
* Add subclasses for the FS and multiwrite test cases. This allows us to
  eliminate the wrappers.
* Add a subclass for MemoryFileBackend.
* Add a Swift subclass which replaces the main use case for
  the CLI option --use-filebackend. It is automatically enabled when
  a Swift backend is configured, similar to PostgreSQL tests.
* Some miscellaneous tests with a medium level of integration, not
  requiring backend setup and teardown, were moved to new classes
  FileBackendMultiWriteTest and FileBackendStoreTest.

Change-Id: I0da531349d7627970a7bcb34f3c1f5fd7e05cb21
2024-03-14 20:27:25 +00:00

41 lines
1.2 KiB
PHP

<?php
use MediaWiki\MainConfigNames;
use MediaWiki\WikiMap\WikiMap;
/**
* @group FileBackend
* @covers SwiftFileBackend
*/
class SwiftFileBackendIntegrationTest extends FileBackendIntegrationTestBase {
private static $backendToUse;
private function getBackendConfig(): ?array {
$backends = $this->getServiceContainer()->getMainConfig()->get( MainConfigNames::FileBackends );
foreach ( $backends as $conf ) {
if ( $conf['class'] === SwiftFileBackend::class ) {
return $conf;
}
}
return null;
}
protected function getBackend() {
if ( !self::$backendToUse ) {
$conf = $this->getBackendConfig();
if ( $conf === null ) {
$this->markTestSkipped( 'Configure a Swift file backend in $wgFileBackends to enable this test' );
}
$conf['name'] = 'localtesting'; // swap name
$conf['shardViaHashLevels'] = [ // test sharding
'unittest-cont1' => [ 'levels' => 1, 'base' => 16, 'repeat' => 1 ]
];
$lockManagerGroup = $this->getServiceContainer()
->getLockManagerGroupFactory()->getLockManagerGroup();
$conf['lockManager'] = $lockManagerGroup->get( $conf['lockManager'] );
$conf['domainId'] = WikiMap::getCurrentWikiId();
self::$backendToUse = new SwiftFileBackend( $conf );
}
return self::$backendToUse;
}
}