Merge "Exclude redirects from Special:Fewestrevisions"
[lhc/web/wiklou.git] / tests / phpunit / includes / libs / objectcache / BagOStuffTest.php
index 1d11fd8..522af43 100644 (file)
@@ -6,6 +6,7 @@ use Wikimedia\TestingAccessWrapper;
 /**
  * @author Matthias Mullie <mmullie@wikimedia.org>
  * @group BagOStuff
+ * @covers BagOStuff
  */
 class BagOStuffTest extends MediaWikiTestCase {
        /** @var BagOStuff */
@@ -31,8 +32,8 @@ class BagOStuffTest extends MediaWikiTestCase {
        }
 
        /**
-        * @covers BagOStuff::makeGlobalKey
-        * @covers BagOStuff::makeKeyInternal
+        * @covers MediumSpecificBagOStuff::makeGlobalKey
+        * @covers MediumSpecificBagOStuff::makeKeyInternal
         */
        public function testMakeKey() {
                $cache = ObjectCache::newFromId( 'hash' );
@@ -65,8 +66,8 @@ class BagOStuffTest extends MediaWikiTestCase {
        }
 
        /**
-        * @covers BagOStuff::merge
-        * @covers BagOStuff::mergeViaCas
+        * @covers MediumSpecificBagOStuff::merge
+        * @covers MediumSpecificBagOStuff::mergeViaCas
         */
        public function testMerge() {
                $key = $this->cache->makeKey( self::TEST_KEY );
@@ -109,7 +110,7 @@ class BagOStuffTest extends MediaWikiTestCase {
        }
 
        /**
-        * @covers BagOStuff::changeTTL
+        * @covers MediumSpecificBagOStuff::changeTTL
         */
        public function testChangeTTL() {
                $key = $this->cache->makeKey( self::TEST_KEY );
@@ -130,7 +131,60 @@ class BagOStuffTest extends MediaWikiTestCase {
        }
 
        /**
-        * @covers BagOStuff::add
+        * @covers MediumSpecificBagOStuff::changeTTLMulti
+        */
+       public function testChangeTTLMulti() {
+               $key1 = $this->cache->makeKey( 'test-key1' );
+               $key2 = $this->cache->makeKey( 'test-key2' );
+               $key3 = $this->cache->makeKey( 'test-key3' );
+               $key4 = $this->cache->makeKey( 'test-key4' );
+
+               // cleanup
+               $this->cache->delete( $key1 );
+               $this->cache->delete( $key2 );
+               $this->cache->delete( $key3 );
+               $this->cache->delete( $key4 );
+
+               $ok = $this->cache->changeTTLMulti( [ $key1, $key2, $key3 ], 30 );
+               $this->assertFalse( $ok, "No keys found" );
+               $this->assertFalse( $this->cache->get( $key1 ) );
+               $this->assertFalse( $this->cache->get( $key2 ) );
+               $this->assertFalse( $this->cache->get( $key3 ) );
+
+               $ok = $this->cache->setMulti( [ $key1 => 1, $key2 => 2, $key3 => 3 ] );
+
+               $this->assertTrue( $ok, "setMulti() succeeded" );
+               $this->assertEquals(
+                       3,
+                       count( $this->cache->getMulti( [ $key1, $key2, $key3 ] ) ),
+                       "setMulti() succeeded via getMulti() check"
+               );
+
+               $ok = $this->cache->changeTTLMulti( [ $key1, $key2, $key3 ], 300 );
+               $this->assertTrue( $ok, "TTL bumped for all keys" );
+               $this->assertEquals( 1, $this->cache->get( $key1 ) );
+               $this->assertEquals( 2, $this->cache->get( $key2 ) );
+               $this->assertEquals( 3, $this->cache->get( $key3 ) );
+
+               $ok = $this->cache->changeTTLMulti( [ $key1, $key2, $key3 ], time() + 86400 );
+               $this->assertTrue( $ok, "Expiry set for all keys" );
+
+               $ok = $this->cache->changeTTLMulti( [ $key1, $key2, $key3, $key4 ], 300 );
+               $this->assertFalse( $ok, "One key missing" );
+
+               $this->assertEquals( 2, $this->cache->incr( $key1 ) );
+               $this->assertEquals( 3, $this->cache->incr( $key2 ) );
+               $this->assertEquals( 4, $this->cache->incr( $key3 ) );
+
+               // cleanup
+               $this->cache->delete( $key1 );
+               $this->cache->delete( $key2 );
+               $this->cache->delete( $key3 );
+               $this->cache->delete( $key4 );
+       }
+
+       /**
+        * @covers MediumSpecificBagOStuff::add
         */
        public function testAdd() {
                $key = $this->cache->makeKey( self::TEST_KEY );
@@ -140,7 +194,7 @@ class BagOStuffTest extends MediaWikiTestCase {
        }
 
        /**
-        * @covers BagOStuff::get
+        * @covers MediumSpecificBagOStuff::get
         */
        public function testGet() {
                $value = [ 'this' => 'is', 'a' => 'test' ];
@@ -151,9 +205,9 @@ class BagOStuffTest extends MediaWikiTestCase {
        }
 
        /**
-        * @covers BagOStuff::get
-        * @covers BagOStuff::set
-        * @covers BagOStuff::getWithSetCallback
+        * @covers MediumSpecificBagOStuff::get
+        * @covers MediumSpecificBagOStuff::set
+        * @covers MediumSpecificBagOStuff::getWithSetCallback
         */
        public function testGetWithSetCallback() {
                $key = $this->cache->makeKey( self::TEST_KEY );
@@ -170,7 +224,7 @@ class BagOStuffTest extends MediaWikiTestCase {
        }
 
        /**
-        * @covers BagOStuff::incr
+        * @covers MediumSpecificBagOStuff::incr
         */
        public function testIncr() {
                $key = $this->cache->makeKey( self::TEST_KEY );
@@ -182,7 +236,7 @@ class BagOStuffTest extends MediaWikiTestCase {
        }
 
        /**
-        * @covers BagOStuff::incrWithInit
+        * @covers MediumSpecificBagOStuff::incrWithInit
         */
        public function testIncrWithInit() {
                $key = $this->cache->makeKey( self::TEST_KEY );
@@ -194,7 +248,7 @@ class BagOStuffTest extends MediaWikiTestCase {
        }
 
        /**
-        * @covers BagOStuff::getMulti
+        * @covers MediumSpecificBagOStuff::getMulti
         */
        public function testGetMulti() {
                $value1 = [ 'this' => 'is', 'a' => 'test' ];
@@ -234,8 +288,8 @@ class BagOStuffTest extends MediaWikiTestCase {
        }
 
        /**
-        * @covers BagOStuff::setMulti
-        * @covers BagOStuff::deleteMulti
+        * @covers MediumSpecificBagOStuff::setMulti
+        * @covers MediumSpecificBagOStuff::deleteMulti
         */
        public function testSetDeleteMulti() {
                $map = [
@@ -266,10 +320,10 @@ class BagOStuffTest extends MediaWikiTestCase {
        }
 
        /**
-        * @covers BagOStuff::get
-        * @covers BagOStuff::getMulti
-        * @covers BagOStuff::merge
-        * @covers BagOStuff::delete
+        * @covers MediumSpecificBagOStuff::get
+        * @covers MediumSpecificBagOStuff::getMulti
+        * @covers MediumSpecificBagOStuff::merge
+        * @covers MediumSpecificBagOStuff::delete
         */
        public function testSetSegmentable() {
                $key = $this->cache->makeKey( self::TEST_KEY );
@@ -304,6 +358,7 @@ class BagOStuffTest extends MediaWikiTestCase {
 
                $this->cache->set( $key, 666, 10, BagOStuff::WRITE_ALLOW_SEGMENTS );
 
+               $this->assertEquals( 666, $this->cache->get( $key ) );
                $this->assertEquals( 667, $this->cache->incr( $key ) );
                $this->assertEquals( 667, $this->cache->get( $key ) );
 
@@ -315,7 +370,7 @@ class BagOStuffTest extends MediaWikiTestCase {
        }
 
        /**
-        * @covers BagOStuff::getScopedLock
+        * @covers MediumSpecificBagOStuff::getScopedLock
         */
        public function testGetScopedLock() {
                $key = $this->cache->makeKey( self::TEST_KEY );
@@ -339,8 +394,8 @@ class BagOStuffTest extends MediaWikiTestCase {
        }
 
        /**
-        * @covers BagOStuff::__construct
-        * @covers BagOStuff::trackDuplicateKeys
+        * @covers MediumSpecificBagOStuff::__construct
+        * @covers MediumSpecificBagOStuff::trackDuplicateKeys
         */
        public function testReportDupes() {
                $logger = $this->createMock( Psr\Log\NullLogger::class );
@@ -364,8 +419,8 @@ class BagOStuffTest extends MediaWikiTestCase {
        }
 
        /**
-        * @covers BagOStuff::lock()
-        * @covers BagOStuff::unlock()
+        * @covers MediumSpecificBagOStuff::lock()
+        * @covers MediumSpecificBagOStuff::unlock()
         */
        public function testLocking() {
                $key = 'test';