wiki.techinc.nl/tests/phpunit/includes/objectcache/ObjectCacheTest.php
Aryeh Gregor 47464abb4f Call resetServices() when setting globals in tests
Now that resetServices() will preserve (but reset) customized services,
it should be reasonably safe to call it every time globals are changed,
and much more effective than relying on tests to call it every time
themselves.

Depends-On: Iab8ea3a61bbc6803805d855ef23c071067646f71
Depends-On: I00e35ecea6a27468674b2a6e7d9d9eb6518e3bd5
Change-Id: Ie7a89f6ed7d52a0bc01672019ff92e7ee105a1f3
2019-08-29 14:26:13 +03:00

114 lines
2.9 KiB
PHP

<?php
class ObjectCacheTest extends MediaWikiTestCase {
protected function setUp() {
// Parent calls ObjectCache::clear() among other things
parent::setUp();
$this->setCacheConfig();
$this->setMwGlobals( [
'wgMainCacheType' => CACHE_NONE,
'wgMessageCacheType' => CACHE_NONE,
'wgParserCacheType' => CACHE_NONE,
] );
}
private function setCacheConfig( $arr = [] ) {
$defaults = [
CACHE_NONE => [ 'class' => EmptyBagOStuff::class ],
CACHE_DB => [ 'class' => SqlBagOStuff::class ],
CACHE_ANYTHING => [ 'factory' => 'ObjectCache::newAnything' ],
// Mock ACCEL with 'hash' as being installed.
// This makes tests deterministic regardless of APC.
CACHE_ACCEL => [ 'class' => HashBagOStuff::class ],
'hash' => [ 'class' => HashBagOStuff::class ],
];
$this->setMwGlobals( 'wgObjectCaches', $arr + $defaults );
}
/** @covers ObjectCache::newAnything */
public function testNewAnythingNothing() {
$this->assertInstanceOf(
SqlBagOStuff::class,
ObjectCache::newAnything( [] ),
'No available types. Fallback to DB'
);
}
/** @covers ObjectCache::newAnything */
public function testNewAnythingHash() {
$this->setMwGlobals( [
'wgMainCacheType' => 'hash'
] );
$this->assertInstanceOf(
HashBagOStuff::class,
ObjectCache::newAnything( [] ),
'Use an available type (hash)'
);
}
/** @covers ObjectCache::newAnything */
public function testNewAnythingAccel() {
$this->setMwGlobals( [
'wgMainCacheType' => CACHE_ACCEL
] );
$this->assertInstanceOf(
HashBagOStuff::class,
ObjectCache::newAnything( [] ),
'Use an available type (CACHE_ACCEL)'
);
}
/** @covers ObjectCache::newAnything */
public function testNewAnythingNoAccel() {
$this->setMwGlobals( [
'wgMainCacheType' => CACHE_ACCEL
] );
$this->setCacheConfig( [
// Mock APC not being installed (T160519, T147161)
CACHE_ACCEL => [ 'class' => EmptyBagOStuff::class ]
] );
$this->assertInstanceOf(
SqlBagOStuff::class,
ObjectCache::newAnything( [] ),
'Fallback to DB if available types fall back to Empty'
);
}
/** @covers ObjectCache::newAnything */
public function testNewAnythingNoAccelNoDb() {
$this->setMwGlobals( [
'wgMainCacheType' => CACHE_ACCEL
] );
$this->setCacheConfig( [
// Mock APC not being installed (T160519, T147161)
CACHE_ACCEL => [ 'class' => EmptyBagOStuff::class ]
] );
MediaWiki\MediaWikiServices::disableStorageBackend();
$this->assertInstanceOf(
EmptyBagOStuff::class,
ObjectCache::newAnything( [] ),
'Fallback to none if available types and DB are unavailable'
);
}
/** @covers ObjectCache::newAnything */
public function testNewAnythingNothingNoDb() {
$this->overrideMwServices();
MediaWiki\MediaWikiServices::disableStorageBackend();
$this->assertInstanceOf(
EmptyBagOStuff::class,
ObjectCache::newAnything( [] ),
'No available types or DB. Fallback to none.'
);
}
}