*/
class CachedBagOStuffTest extends PHPUnit_Framework_TestCase {
+ /**
+ * @covers CachedBagOStuff::__construct
+ * @covers CachedBagOStuff::doGet
+ */
public function testGetFromBackend() {
$backend = new HashBagOStuff;
$cache = new CachedBagOStuff( $backend );
$this->assertEquals( 'bar', $cache->get( 'foo' ), 'cached' );
}
+ /**
+ * @covers CachedBagOStuff::set
+ * @covers CachedBagOStuff::delete
+ */
public function testSetAndDelete() {
$backend = new HashBagOStuff;
$cache = new CachedBagOStuff( $backend );
}
}
+ /**
+ * @covers CachedBagOStuff::set
+ * @covers CachedBagOStuff::delete
+ */
public function testWriteCacheOnly() {
$backend = new HashBagOStuff;
$cache = new CachedBagOStuff( $backend );
$cache->delete( 'foo', CachedBagOStuff::WRITE_CACHE_ONLY );
$this->assertEquals( 'old', $cache->get( 'foo' ) ); // Reloaded from backend
}
+
+ /**
+ * @covers CachedBagOStuff::doGet
+ */
+ public function testCacheBackendMisses() {
+ $backend = new HashBagOStuff;
+ $cache = new CachedBagOStuff( $backend );
+
+ // First hit primes the cache with miss from the backend
+ $this->assertEquals( false, $cache->get( 'foo' ) );
+
+ // Change the value in the backend
+ $backend->set( 'foo', true );
+
+ // Second hit returns the cached miss
+ $this->assertEquals( false, $cache->get( 'foo' ) );
+
+ // But a fresh value is read from the backend
+ $backend->set( 'bar', true );
+ $this->assertEquals( true, $cache->get( 'bar' ) );
+ }
+
+ /**
+ * @covers CachedBagOStuff::makeKey
+ */
+ public function testMakeKey() {
+ $backend = $this->getMockBuilder( HashBagOStuff::class )
+ ->setMethods( [ 'makeKey' ] )
+ ->getMock();
+ $backend->method( 'makeKey' )
+ ->willReturn( 'special/logic' );
+
+ // CachedBagOStuff wraps any backend with a process cache
+ // using HashBagOStuff. Hash has no special key limitations,
+ // but backends often do. Make sure it uses the backend's
+ // makeKey() logic, not the one inherited from HashBagOStuff
+ $cache = new CachedBagOStuff( $backend );
+
+ $this->assertEquals( 'special/logic', $backend->makeKey( 'special', 'logic' ) );
+ $this->assertEquals( 'special/logic', $cache->makeKey( 'special', 'logic' ) );
+ }
+
+ /**
+ * @covers CachedBagOStuff::makeGlobalKey
+ */
+ public function testMakeGlobalKey() {
+ $backend = $this->getMockBuilder( HashBagOStuff::class )
+ ->setMethods( [ 'makeGlobalKey' ] )
+ ->getMock();
+ $backend->method( 'makeGlobalKey' )
+ ->willReturn( 'special/logic' );
+
+ $cache = new CachedBagOStuff( $backend );
+
+ $this->assertEquals( 'special/logic', $backend->makeGlobalKey( 'special', 'logic' ) );
+ $this->assertEquals( 'special/logic', $cache->makeGlobalKey( 'special', 'logic' ) );
+ }
}