Merge "Added release notes for 'ContentHandler::runLegacyHooks' removal"
[mediawiki.git] / tests / phpunit / includes / libs / objectcache / MultiWriteBagOStuffTest.php
blob38d63e341c830f3b734033419454db28a8bbc551
1 <?php
3 /**
4 * @group Database
5 */
6 class MultiWriteBagOStuffTest extends MediaWikiTestCase {
7 /** @var HashBagOStuff */
8 private $cache1;
9 /** @var HashBagOStuff */
10 private $cache2;
11 /** @var MultiWriteBagOStuff */
12 private $cache;
14 protected function setUp() {
15 parent::setUp();
17 $this->cache1 = new HashBagOStuff();
18 $this->cache2 = new HashBagOStuff();
19 $this->cache = new MultiWriteBagOStuff( [
20 'caches' => [ $this->cache1, $this->cache2 ],
21 'replication' => 'async',
22 'asyncHandler' => 'DeferredUpdates::addCallableUpdate'
23 ] );
26 /**
27 * @covers MultiWriteBagOStuff::set
28 * @covers MultiWriteBagOStuff::doWrite
30 public function testSetImmediate() {
31 $key = wfRandomString();
32 $value = wfRandomString();
33 $this->cache->set( $key, $value );
35 // Set in tier 1
36 $this->assertEquals( $value, $this->cache1->get( $key ), 'Written to tier 1' );
37 // Set in tier 2
38 $this->assertEquals( $value, $this->cache2->get( $key ), 'Written to tier 2' );
41 /**
42 * @covers MultiWriteBagOStuff
44 public function testSyncMerge() {
45 $key = wfRandomString();
46 $value = wfRandomString();
47 $func = function () use ( $value ) {
48 return $value;
51 // XXX: DeferredUpdates bound to transactions in CLI mode
52 $dbw = wfGetDB( DB_MASTER );
53 $dbw->begin();
54 $this->cache->merge( $key, $func );
56 // Set in tier 1
57 $this->assertEquals( $value, $this->cache1->get( $key ), 'Written to tier 1' );
58 // Not yet set in tier 2
59 $this->assertEquals( false, $this->cache2->get( $key ), 'Not written to tier 2' );
61 $dbw->commit();
63 // Set in tier 2
64 $this->assertEquals( $value, $this->cache2->get( $key ), 'Written to tier 2' );
66 $key = wfRandomString();
68 $dbw->begin();
69 $this->cache->merge( $key, $func, 0, 1, BagOStuff::WRITE_SYNC );
71 // Set in tier 1
72 $this->assertEquals( $value, $this->cache1->get( $key ), 'Written to tier 1' );
73 // Also set in tier 2
74 $this->assertEquals( $value, $this->cache2->get( $key ), 'Written to tier 2' );
76 $dbw->commit();
79 /**
80 * @covers MultiWriteBagOStuff::set
82 public function testSetDelayed() {
83 $key = wfRandomString();
84 $value = wfRandomString();
86 // XXX: DeferredUpdates bound to transactions in CLI mode
87 $dbw = wfGetDB( DB_MASTER );
88 $dbw->begin();
89 $this->cache->set( $key, $value );
91 // Set in tier 1
92 $this->assertEquals( $value, $this->cache1->get( $key ), 'Written to tier 1' );
93 // Not yet set in tier 2
94 $this->assertEquals( false, $this->cache2->get( $key ), 'Not written to tier 2' );
96 $dbw->commit();
98 // Set in tier 2
99 $this->assertEquals( $value, $this->cache2->get( $key ), 'Written to tier 2' );