You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
90 lines
2.7 KiB
90 lines
2.7 KiB
<?php |
|
/** |
|
* @link http://www.yiiframework.com/ |
|
* @copyright Copyright (c) 2008 Yii Software LLC |
|
* @license http://www.yiiframework.com/license/ |
|
*/ |
|
|
|
namespace yiiunit\framework\caching; |
|
|
|
use yii\caching\FileCache; |
|
|
|
/** |
|
* Class for testing file cache backend. |
|
* @group caching |
|
*/ |
|
class FileCacheTest extends CacheTestCase |
|
{ |
|
private $_cacheInstance = null; |
|
|
|
/** |
|
* @return FileCache |
|
*/ |
|
protected function getCacheInstance() |
|
{ |
|
if ($this->_cacheInstance === null) { |
|
$this->_cacheInstance = new FileCache(['cachePath' => '@yiiunit/runtime/cache']); |
|
} |
|
|
|
return $this->_cacheInstance; |
|
} |
|
|
|
public function testExpire() |
|
{ |
|
$cache = $this->getCacheInstance(); |
|
|
|
static::$time = \time(); |
|
$this->assertTrue($cache->set('expire_test', 'expire_test', 2)); |
|
static::$time++; |
|
$this->assertEquals('expire_test', $cache->get('expire_test')); |
|
static::$time++; |
|
$this->assertFalse($cache->get('expire_test')); |
|
} |
|
|
|
public function testExpireAdd() |
|
{ |
|
$cache = $this->getCacheInstance(); |
|
|
|
static::$time = \time(); |
|
$this->assertTrue($cache->add('expire_testa', 'expire_testa', 2)); |
|
static::$time++; |
|
$this->assertEquals('expire_testa', $cache->get('expire_testa')); |
|
static::$time++; |
|
$this->assertFalse($cache->get('expire_testa')); |
|
} |
|
|
|
public function testCacheRenewalOnDifferentOwnership() |
|
{ |
|
$TRAVIS_SECOND_USER = getenv('TRAVIS_SECOND_USER'); |
|
if (empty($TRAVIS_SECOND_USER)) { |
|
$this->markTestSkipped('Travis second user not found'); |
|
} |
|
|
|
$cache = $this->getCacheInstance(); |
|
|
|
$cacheValue = uniqid('value_'); |
|
$cachePublicKey = uniqid('key_'); |
|
$cacheInternalKey = $cache->buildKey($cachePublicKey); |
|
|
|
static::$time = \time(); |
|
$this->assertTrue($cache->set($cachePublicKey, $cacheValue, 2)); |
|
$this->assertSame($cacheValue, $cache->get($cachePublicKey)); |
|
|
|
$refClass = new \ReflectionClass($cache); |
|
$refMethodGetCacheFile = $refClass->getMethod('getCacheFile'); |
|
$refMethodGetCacheFile->setAccessible(true); |
|
$cacheFile = $refMethodGetCacheFile->invoke($cache, $cacheInternalKey); |
|
$refMethodGetCacheFile->setAccessible(false); |
|
|
|
$output = array(); |
|
$returnVar = null; |
|
exec(sprintf('sudo chown %s %s', |
|
escapeshellarg($TRAVIS_SECOND_USER), |
|
escapeshellarg($cacheFile) |
|
), $output, $returnVar); |
|
|
|
$this->assertSame(0, $returnVar, 'Cannot change ownership of cache file to test cache renewal'); |
|
|
|
$this->assertTrue($cache->set($cachePublicKey, uniqid('value_2_'), 2), 'Cannot rebuild cache on different file ownership'); |
|
} |
|
}
|
|
|