objectcache: Improve WANObjectCache test coverage
authorTimo Tijhof <krinklemail@gmail.com>
Mon, 25 Sep 2017 23:21:40 +0000 (00:21 +0100)
committerTimo Tijhof <krinklemail@gmail.com>
Mon, 25 Sep 2017 23:22:23 +0000 (00:22 +0100)
class WANObjectCache (methods: 30% -> 40%, lines: 62% -> 65%)

* doGetWithSetCallback: 98% -> 100%
 - Add case: Throw for invalid callback.
* getWithSetCallback: 86% -> 100%
 - Cover case: Else branch for `$cur[self::VFLD_VERSION] === $version`.
* getMulti: 91% -> 98%
 - Cover case: If branch for `$this->warmupCache`.
* set: 93% -> 100%
 - Cover case: If branch for `lockTSE >= 0`.
* reap: 84% -> 100%
 - Add case: Error when changeTTL() fails.

Change-Id: I4844ab0ebdd4d3ec9acc9cd4500721b04cfda317

tests/phpunit/includes/libs/objectcache/WANObjectCacheTest.php

index c762aa7..137ef0c 100644 (file)
@@ -5,7 +5,7 @@ use Wikimedia\TestingAccessWrapper;
 class WANObjectCacheTest extends PHPUnit_Framework_TestCase {
        /** @var WANObjectCache */
        private $cache;
-       /**@var BagOStuff */
+       /** @var BagOStuff */
        private $internalCache;
 
        protected function setUp() {
@@ -259,10 +259,20 @@ class WANObjectCacheTest extends PHPUnit_Framework_TestCase {
                ];
        }
 
+       /**
+        * @covers WANObjectCache::getWithSetCallback()
+        * @covers WANObjectCache::doGetWithSetCallback()
+        */
+       public function testGetWithSetCallback_invalidCallback() {
+               $this->setExpectedException( InvalidArgumentException::class );
+               $this->cache->getWithSetCallback( 'key', 30, 'invalid callback' );
+       }
+
        /**
         * @dataProvider getMultiWithSetCallback_provider
         * @covers WANObjectCache::getMultiWithSetCallback()
         * @covers WANObjectCache::makeMultiKeys()
+        * @covers WANObjectCache::getMulti()
         * @param array $extOpts
         * @param bool $versioned
         */
@@ -618,6 +628,7 @@ class WANObjectCacheTest extends PHPUnit_Framework_TestCase {
        /**
         * @covers WANObjectCache::getWithSetCallback()
         * @covers WANObjectCache::doGetWithSetCallback()
+        * @covers WANObjectCache::set()
         */
        public function testLockTSESlow() {
                $cache = $this->cache;
@@ -911,6 +922,8 @@ class WANObjectCacheTest extends PHPUnit_Framework_TestCase {
 
        /**
         * @dataProvider getWithSetCallback_versions_provider
+        * @covers WANObjectCache::getWithSetCallback()
+        * @covers WANObjectCache::doGetWithSetCallback()
         * @param array $extOpts
         * @param bool $versioned
         */
@@ -1100,6 +1113,34 @@ class WANObjectCacheTest extends PHPUnit_Framework_TestCase {
                $this->assertTrue( $tBad2 );
        }
 
+       /**
+        * @covers WANObjectCache::reap()
+        */
+       public function testReap_fail() {
+               $backend = $this->getMockBuilder( EmptyBagOStuff::class )
+                       ->setMethods( [ 'get', 'changeTTL' ] )->getMock();
+               $backend->expects( $this->once() )->method( 'get' )
+                       ->willReturn( [
+                               WANObjectCache::FLD_VERSION => WANObjectCache::VERSION,
+                               WANObjectCache::FLD_VALUE => 'value',
+                               WANObjectCache::FLD_TTL => 3600,
+                               WANObjectCache::FLD_TIME => 300,
+                       ] );
+               $backend->expects( $this->once() )->method( 'changeTTL' )
+                       ->willReturn( false );
+
+               $wanCache = new WANObjectCache( [
+                       'cache' => $backend,
+                       'pool' => 'testcache-hash',
+                       'relayer' => new EventRelayerNull( [] )
+               ] );
+
+               $isStale = null;
+               $ret = $wanCache->reap( 'key', 360, $isStale );
+               $this->assertTrue( $isStale, 'value was stale' );
+               $this->assertFalse( $ret, 'changeTTL failed' );
+       }
+
        /**
         * @covers WANObjectCache::set()
         */