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
114 lines
2.9 KiB
PHP
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.'
|
|
);
|
|
}
|
|
}
|