mirror of
https://github.com/smarty-php/smarty.git
synced 2025-08-04 18:34:27 +02:00
added tests for cache locking
This commit is contained in:
@@ -82,7 +82,7 @@ class PHPUnit_Smarty extends PHPUnit_Framework_TestCase
|
||||
{
|
||||
error_reporting(E_ALL | E_STRICT);
|
||||
self::$init = true;
|
||||
self::$pdo = null;
|
||||
//self::$pdo = null;
|
||||
if (self::$config == null) {
|
||||
$xml = simplexml_load_file(__DIR__ . '/config.xml');
|
||||
$json_string = json_encode($xml);
|
||||
@@ -99,7 +99,7 @@ class PHPUnit_Smarty extends PHPUnit_Framework_TestCase
|
||||
*/
|
||||
public static function tearDownAfterClass()
|
||||
{
|
||||
self::$pdo = null;
|
||||
//self::$pdo = null;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -171,19 +171,18 @@ class PHPUnit_Smarty extends PHPUnit_Framework_TestCase
|
||||
*/
|
||||
final public function getConnection()
|
||||
{
|
||||
if (self::$pdo == null) {
|
||||
if (PHPUnit_Smarty::$pdo == null) {
|
||||
try {
|
||||
self::$pdo = new PDO(self::$config['mysql']['DB_DSN'], self::$config['mysql']['DB_USER'], self::$config['mysql']['DB_PASSWD']);
|
||||
PHPUnit_Smarty::$pdo = new PDO(self::$config['mysql']['DB_DSN'], self::$config['mysql']['DB_USER'], self::$config['mysql']['DB_PASSWD']);
|
||||
}
|
||||
catch (PDOException $e) {
|
||||
throw new SmartyException('Mysql Resource failed: ' . $e->getMessage());
|
||||
}
|
||||
$timezone = date_default_timezone_get();
|
||||
self::$pdo->exec("SET time_zone = '{$timezone}';");
|
||||
}
|
||||
PHPUnit_Smarty::$pdo->exec("SET time_zone = '{$timezone}';");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Create table for Mysql resource
|
||||
*
|
||||
@@ -191,8 +190,8 @@ class PHPUnit_Smarty extends PHPUnit_Framework_TestCase
|
||||
public function initMysqlResource()
|
||||
{
|
||||
$this->getConnection();
|
||||
self::$pdo->exec("DROP TABLE `templates`");
|
||||
self::$pdo->exec("CREATE TABLE IF NOT EXISTS `templates` (
|
||||
PHPUnit_Smarty::$pdo->exec("DROP TABLE `templates`");
|
||||
PHPUnit_Smarty::$pdo->exec("CREATE TABLE IF NOT EXISTS `templates` (
|
||||
`name` varchar(100) NOT NULL,
|
||||
`modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
`source` text,
|
||||
@@ -207,8 +206,8 @@ PRIMARY KEY (`name`)
|
||||
public function initMysqlCache()
|
||||
{
|
||||
$this->getConnection();
|
||||
self::$pdo->exec("DROP TABLE `output_cache`");
|
||||
self::$pdo->exec("CREATE TABLE IF NOT EXISTS `output_cache` (
|
||||
PHPUnit_Smarty::$pdo->exec("DROP TABLE `output_cache`");
|
||||
PHPUnit_Smarty::$pdo->exec("CREATE TABLE IF NOT EXISTS `output_cache` (
|
||||
`id` char(40) NOT NULL COMMENT 'sha1 hash',
|
||||
`name` varchar(250) NOT NULL,
|
||||
`cache_id` varchar(250) DEFAULT NULL,
|
||||
@@ -282,7 +281,7 @@ KEY `expire` (`expire`)
|
||||
*/
|
||||
final public function getPDO()
|
||||
{
|
||||
return self::$pdo;
|
||||
return PHPUnit_Smarty::$pdo;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -321,8 +320,8 @@ KEY `expire` (`expire`)
|
||||
case 'file':
|
||||
case 'filetest':
|
||||
case 'php':
|
||||
return $dir . $name;
|
||||
return $this->normalizePath($dir . $name);
|
||||
return $dir . $name;
|
||||
return $this->normalizePath($dir . $name);
|
||||
case 'mysqltest':
|
||||
case 'mysql':
|
||||
return sha1($type . ':' . $name);
|
||||
@@ -351,6 +350,7 @@ KEY `expire` (`expire`)
|
||||
switch ($type) {
|
||||
case 'php':
|
||||
case 'file':
|
||||
case 'filetest':
|
||||
if ($tpl instanceof Smarty) {
|
||||
return sha1(getcwd() . $this->normalizePath($this->smarty->getTemplateDir(0) . $name));
|
||||
}
|
||||
@@ -400,6 +400,7 @@ KEY `expire` (`expire`)
|
||||
$type = isset($type) ? $type : $tpl->source->type;
|
||||
switch ($type) {
|
||||
case 'file':
|
||||
case 'filetest':
|
||||
if (($_pos = strpos($name, ']')) !== false) {
|
||||
$name = substr($name, $_pos + 1);
|
||||
}
|
||||
@@ -493,6 +494,7 @@ KEY `expire` (`expire`)
|
||||
$cacheType = isset($cacheType) ? $cacheType : $tpl->smarty->caching_type;
|
||||
switch ($cacheType) {
|
||||
case 'file':
|
||||
case 'filetest':
|
||||
$sep = DS;
|
||||
$_compile_id = isset($compile_id) ? preg_replace('![^\w\|]+!', '_', $compile_id) : null;
|
||||
$_cache_id = isset($cache_id) ? preg_replace('![^\w\|]+!', '_', $cache_id) : null;
|
||||
|
@@ -20,6 +20,7 @@ class CacheResourceFileTest extends CacheResourceTestCommon
|
||||
{
|
||||
$this->setUpSmarty(__DIR__);
|
||||
parent::setUp();
|
||||
$this->smarty->setCachingType('filetest');
|
||||
}
|
||||
|
||||
|
||||
|
@@ -18,8 +18,8 @@ class CacheResourceCustomPDOTest extends CacheResourceTestCommon
|
||||
|
||||
public function setUp($dir = null, $clear = true)
|
||||
{
|
||||
if (self::$config['cacheResource']['MysqlEnable'] != 'true') {
|
||||
$this->markTestSkipped('mysql tests are disabled');
|
||||
if (self::$config['cacheResource']['PdoEnable'] != 'true') {
|
||||
$this->markTestSkipped('mysql Pdo tests are disabled');
|
||||
}
|
||||
if (self::$init) {
|
||||
$this->getConnection();
|
||||
@@ -28,8 +28,8 @@ class CacheResourceCustomPDOTest extends CacheResourceTestCommon
|
||||
parent::setUp();
|
||||
$this->smarty->setCachingType('pdo');
|
||||
$this->smarty->addPluginsDir(SMARTY_DIR . '../demo/plugins/');
|
||||
$this->assertTrue(false !== $this->smarty->loadPlugin('Smarty_CacheResource_Pdo'), 'loadPlugin() could not load PDO cache resource');
|
||||
$this->smarty->registerCacheResource('pdo', new Smarty_CacheResource_Pdo($this->getPDO(), 'output_cache'));
|
||||
$this->assertTrue(false !== $this->smarty->loadPlugin('Smarty_CacheResource_Pdotest'), 'loadPlugin() could not load PDO cache resource');
|
||||
$this->smarty->registerCacheResource('pdo', new Smarty_CacheResource_Pdotest($this->getPDO(), 'output_cache'));
|
||||
}
|
||||
|
||||
public function testInit()
|
||||
|
@@ -18,8 +18,8 @@ class CacheResourceCustomPDOGzipTest extends CacheResourceTestCommon
|
||||
|
||||
public function setUp($dir = null, $clear = true)
|
||||
{
|
||||
if (self::$config['cacheResource']['MysqlEnable'] != 'true') {
|
||||
$this->markTestSkipped('mysql tests are disabled');
|
||||
if (self::$config['cacheResource']['PdoGzipEnable'] != 'true') {
|
||||
$this->markTestSkipped('mysql Pdo Gzip tests are disabled');
|
||||
}
|
||||
if (self::$init) {
|
||||
$this->getConnection();
|
||||
@@ -28,8 +28,8 @@ class CacheResourceCustomPDOGzipTest extends CacheResourceTestCommon
|
||||
parent::setUp();
|
||||
$this->smarty->setCachingType('pdo');
|
||||
$this->smarty->addPluginsDir(SMARTY_DIR . '../demo/plugins/');
|
||||
$this->assertTrue(false !== $this->smarty->loadPlugin('Smarty_CacheResource_Pdo_Gzip'), 'loadPlugin() could not load PDOGzip cache resource');
|
||||
$this->smarty->registerCacheResource('pdo', new Smarty_CacheResource_Pdo_Gzip($this->getPDO(), 'output_cache'));
|
||||
$this->assertTrue(false !== $this->smarty->loadPlugin('Smarty_CacheResource_Pdo_Gziptest'), 'loadPlugin() could not load PDOGzip cache resource');
|
||||
$this->smarty->registerCacheResource('pdo', new Smarty_CacheResource_Pdo_Gziptest($this->getPDO(), 'output_cache'));
|
||||
}
|
||||
|
||||
public function testInit()
|
||||
|
@@ -367,242 +367,140 @@ class CacheResourceTestCommon extends PHPUnit_Smarty
|
||||
$this->assertNull($tpl->cached->handler->getCachedContent($tpl3));
|
||||
$this->assertEquals('hello world', $tpl->cached->handler->getCachedContent($tpl4));
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @run InSeparateProcess
|
||||
* @preserveGlobalState disabled
|
||||
*
|
||||
*/
|
||||
public function testIsCachedPrepare()
|
||||
{
|
||||
$this->smarty->caching = true;
|
||||
$this->smarty->cache_lifetime = 1000;
|
||||
$this->smarty->assign('test', 1);
|
||||
// compile and cache
|
||||
$this->assertEquals('cache resource test:1 compiled:1 rendered:1', $this->smarty->fetch('cacheresource.tpl'));
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @run InSeparateProcess
|
||||
* @preserveGlobalState disabled
|
||||
*
|
||||
*/
|
||||
public function testIsCached()
|
||||
{
|
||||
$this->smarty->caching = true;
|
||||
$this->smarty->cache_lifetime = 1000;
|
||||
$this->smarty->assign('test', 2);
|
||||
$tpl = $this->smarty->createTemplate('cacheresource.tpl', $this->smarty);
|
||||
$this->assertTrue($tpl->isCached());
|
||||
$this->assertEquals('cache resource test:2 compiled:1 rendered:1', $this->smarty->fetch($tpl));
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @run InSeparateProcess
|
||||
* @preserveGlobalState disabled
|
||||
*
|
||||
*/
|
||||
public function testIsCachedCachingDisabled()
|
||||
{
|
||||
$this->smarty->assign('test', 3);
|
||||
$tpl = $this->smarty->createTemplate('cacheresource.tpl', $this->smarty);
|
||||
$this->assertFalse($tpl->isCached());
|
||||
$this->assertEquals('cache resource test:3 compiled:3 rendered:3', $this->smarty->fetch($tpl));
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @run InSeparateProcess
|
||||
* @preserveGlobalState disabled
|
||||
*
|
||||
*/
|
||||
public function testForceCache()
|
||||
{
|
||||
$this->smarty->caching = true;
|
||||
$this->smarty->setForceCache(true);
|
||||
$this->smarty->cache_lifetime = 1000;
|
||||
$this->smarty->assign('test', 4);
|
||||
$tpl = $this->smarty->createTemplate('cacheresource.tpl', $this->smarty);
|
||||
$this->assertFalse($tpl->isCached(), 'isCached() must be false at forceCache');
|
||||
$this->assertEquals('cache resource test:4 compiled:1 rendered:4', $this->smarty->fetch($tpl));
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @run InSeparateProcess
|
||||
* @preserveGlobalState disabled
|
||||
*
|
||||
*/
|
||||
public function testIsCachedAftertestForceCache()
|
||||
{
|
||||
$this->smarty->caching = true;
|
||||
$this->smarty->cache_lifetime = 1000;
|
||||
$this->smarty->assign('test', 5);
|
||||
$tpl = $this->smarty->createTemplate('cacheresource.tpl', $this->smarty);
|
||||
$this->assertTrue($tpl->isCached(), 'isCached() must be true after forceCache');
|
||||
$this->assertEquals('cache resource test:5 compiled:1 rendered:4', $this->smarty->fetch($tpl));
|
||||
}
|
||||
|
||||
/**
|
||||
* @run InSeparateProcess
|
||||
* @preserveGlobalState disabled
|
||||
*
|
||||
*/
|
||||
public function testIsCachedTouchedSource()
|
||||
{
|
||||
sleep(2);
|
||||
$this->smarty->caching = true;
|
||||
$this->smarty->cache_lifetime = 1000;
|
||||
$this->smarty->assign('test', 6);
|
||||
$filepath = $this->buildSourcePath(null, 'cacheresource.tpl', 'file');
|
||||
touch($filepath, $t = time());
|
||||
sleep(2);
|
||||
clearstatcache();
|
||||
$tpl = $this->smarty->createTemplate('cacheresource.tpl', $this->smarty);
|
||||
$this->assertEquals($t,$tpl->source->timestamp);
|
||||
$isCached = $tpl->isCached();
|
||||
$mustCompile = $tpl->mustCompile();
|
||||
$this->assertEquals('cache resource test:6 compiled:6 rendered:6', $this->smarty->fetch($tpl), 'recompile failed');
|
||||
$this->assertFalse($isCached, 'isCached() must be false after touch of source');
|
||||
$this->assertTrue($mustCompile, 'mustCompile() must be true after touch of source');
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @run InSeparateProcess
|
||||
* @preserveGlobalState disabled
|
||||
*
|
||||
*/
|
||||
public function testIsCachedAfterTouch()
|
||||
{
|
||||
$this->smarty->caching = true;
|
||||
$this->smarty->cache_lifetime = 1000;
|
||||
$this->smarty->assign('test', 7);
|
||||
$tpl = $this->smarty->createTemplate('cacheresource.tpl', $this->smarty);
|
||||
$this->assertTrue($tpl->isCached(), 'isCached() must be true after recompilation');
|
||||
$this->assertEquals('cache resource test:7 compiled:6 rendered:6', $this->smarty->fetch($tpl));
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @run InSeparateProcess
|
||||
* @preserveGlobalState disabled
|
||||
*
|
||||
*/
|
||||
public function testIsCachedForceCompile()
|
||||
{
|
||||
$this->smarty->caching = true;
|
||||
$this->smarty->cache_lifetime = 1000;
|
||||
$this->smarty->setForceCompile(true);
|
||||
$this->smarty->assign('test', 8);
|
||||
$tpl = $this->smarty->createTemplate('cacheresource.tpl', $this->smarty);
|
||||
$this->assertFalse($tpl->isCached(), 'isCached() must be false at force compile');
|
||||
$this->assertEquals('cache resource test:8 compiled:8 rendered:8', $this->smarty->fetch($tpl));
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @run InSeparateProcess
|
||||
* @preserveGlobalState disabled
|
||||
*
|
||||
*/
|
||||
public function testIsCachedAfterForceCompile()
|
||||
{
|
||||
$this->smarty->caching = true;
|
||||
$this->smarty->cache_lifetime = 1000;
|
||||
$this->smarty->assign('test', 9);
|
||||
$tpl = $this->smarty->createTemplate('cacheresource.tpl', $this->smarty);
|
||||
$this->assertTrue($tpl->isCached(), 'isCached() must be true after recompilation');
|
||||
$this->assertEquals('cache resource test:9 compiled:8 rendered:8', $this->smarty->fetch($tpl));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test
|
||||
* @run InSeparateProcess
|
||||
* @run inSeparateProcess
|
||||
* @preserveGlobalState disabled
|
||||
* @dataProvider data
|
||||
*
|
||||
*/
|
||||
public function testIsCachedCacheNotLocked()
|
||||
public function testCache($lockTime, $lockTimeout, $compile_id, $cache_id, $isCached, $tmin, $tmax, $forceCompile, $forceCache, $update, $testNumber, $compileTestNumber, $renderTestNumber, $testName)
|
||||
{
|
||||
if ($this->smarty->caching_type != 'file') {
|
||||
$this->markTestSkipped('test skip for caching type not == file');
|
||||
if ($testNumber == 27) {
|
||||
$i =0;
|
||||
}
|
||||
$this->smarty->caching = true;
|
||||
$this->smarty->cache_lifetime = 1000;
|
||||
$this->smarty->assign('test', 10);
|
||||
$this->smarty->cache_locking = true;
|
||||
$this->smarty->assign('test', $testNumber);
|
||||
if ($lockTimeout) {
|
||||
$this->smarty->cache_locking = true;
|
||||
$this->smarty->locking_timeout = $lockTimeout;
|
||||
}
|
||||
$this->smarty->compile_id = $compile_id;
|
||||
$this->smarty->cache_id = $cache_id;
|
||||
$this->smarty->force_compile = $forceCompile;
|
||||
$this->smarty->force_cache = $forceCache;
|
||||
if ($update) {
|
||||
sleep(1);
|
||||
$filepath = $this->buildSourcePath(null, 'cacheresource.tpl', 'file');
|
||||
touch($filepath, $t = time());
|
||||
clearstatcache();
|
||||
}
|
||||
$tpl = $this->smarty->createTemplate('cacheresource.tpl', $this->smarty);
|
||||
if ($update) {
|
||||
$this->assertEquals($t,$tpl->source->timestamp, $testName . ' - source touch');
|
||||
}
|
||||
if ($lockTime) {
|
||||
$tpl->cached->handler->acquireLock($this->smarty, $tpl->cached);
|
||||
$tpl->cached->handler->lockTime = $lockTime;
|
||||
$tpl->cached->is_locked = false;
|
||||
}
|
||||
$start = time();
|
||||
$this->assertTrue($tpl->isCached(), 'isCached() must be true after recompilation');
|
||||
$this->assertTrue((time() - $start) <= 2);
|
||||
if (isset($isCached)) {
|
||||
$this->assertEquals($isCached, $tpl->isCached(), $testName . ' - isCached()');
|
||||
if ($lockTimeout) {
|
||||
$time = time() - $start;
|
||||
$this->assertTrue($time >= $tmin && $time <= $tmax, $testName . ' - isCached() - lock time');
|
||||
$this->assertEquals(!$isCached, $tpl->cached->handler->hasLock($this->smarty, $tpl->cached), $testName . ' - isCached() - lock status');
|
||||
} else {
|
||||
$this->assertFalse($tpl->cached->handler->hasLock($this->smarty, $tpl->cached), $testName . ' - isCached() - unexpected lock');
|
||||
}
|
||||
}
|
||||
$this->assertEquals("cache resource test:{$testNumber} compiled:{$compileTestNumber} rendered:{$renderTestNumber}", $this->smarty->fetch($tpl), $testName . ' - fetch() failure');
|
||||
if ($lockTime) {
|
||||
$time = time() - $start;
|
||||
$this->assertTrue($time >= $tmin && $time <= $tmax, $testName . ' - fetch() - lock time');
|
||||
}
|
||||
$this->assertFalse($tpl->cached->handler->hasLock($this->smarty, $tpl->cached, $testName . ' - lock not removed'));
|
||||
}
|
||||
|
||||
public function data(){
|
||||
return array(
|
||||
/*
|
||||
* lock time
|
||||
* locking_timeout 0 = no cache_locking
|
||||
* compile_id
|
||||
* cache_id
|
||||
* isCached() expected result (null = no isCached test)
|
||||
* min elapsed time
|
||||
* max elapsed time
|
||||
* force compile
|
||||
* force cache
|
||||
* source update
|
||||
* test nr
|
||||
* result compile nr
|
||||
* result render nr
|
||||
* text
|
||||
*/
|
||||
array(0, 0, null, null, false, 0, 0, false, false, false, 1, 1, 1, 'locking off - create cache'),
|
||||
array(0, 0, 1, null, false, 0, 0, false, false, false, 2, 2, 2, 'locking off - create cache compile_id'),
|
||||
array(0, 0, null, 2, false, 0, 0, false, false, false, 3, 1, 3, 'locking off - create cache cache_id'),
|
||||
array(0, 0, 3, 4, false, 0, 0, false, false, false, 4, 4, 4, 'locking off - create cache cache_id & compile_id'),
|
||||
array(0, 0, null, null, null, 0, 0, false, false, false, 5, 1, 1, 'locking off - fetch'),
|
||||
array(0, 0, 1, null, null, 0, 0, false, false, false, 6, 2, 2, 'locking off - fetch compile_id'),
|
||||
array(0, 0, null, 2, null, 0, 0, false, false, false, 7, 1, 3, 'locking off - fetch cache_id'),
|
||||
array(0, 0, 3, 4, null, 0, 0, false, false, false, 8, 4, 4, 'locking off - fetch cache_id & compile_id'),
|
||||
array(0, 0, null, null, true,0, 0, false, false, false, 9, 1, 1, 'locking off - isCached & fetch'),
|
||||
array(0, 0, 1, null, true, 0, 0, false, false, false, 10, 2, 2, 'locking off - isCached & fetch compile_id'),
|
||||
array(0, 0, null, 2, true, 0, 0, false, false, false, 11, 1, 3, 'locking off - isCached & fetch cache_id'),
|
||||
array(0, 0, 3, 4, true, 0, 0, false, false, false, 12, 4, 4, 'locking off - isCached & fetch cache_id & compile_id'),
|
||||
array(0, 0, null, null, false, 0, 0, true, false, false, 13, 13, 13, 'locking off - force compile'),
|
||||
array(0, 0, null, null, true, 0, 0, false, false, false, 14, 13, 13, 'locking off - after force compile'),
|
||||
array(0, 0, null, null, false, 0, 0, false, true, false, 15, 13, 15, 'locking off - force cache'),
|
||||
array(0, 0, null, null, true, 0, 0, false, false, false, 16, 13, 15, 'locking off - after force cache'),
|
||||
array(0, 0, null, null, false, 0, 0, false, false, true, 17, 17, 17, 'locking off - new source'),
|
||||
array(0, 0, null, null, true, 0, 0, false, false, false, 18, 17, 17, 'locking off - after new source'),
|
||||
array(0, 5, null, null, null, 0, 1, false, false, false, 19, 17, 17, 'not locked - fetch'),
|
||||
array(0, 5, null, null, true, 0, 1, false, false, false, 20, 17, 17, 'not locked - isCached & fetch'),
|
||||
array(0, 5, null, null, false, 0, 1, false, false, true, 21, 21, 21, 'not locked - new source'),
|
||||
array(0, 5, null, null, true, 0, 1, false, false, false, 22, 21, 21, 'not locked - after new source'),
|
||||
array(4, 10, null, null, null, 2, 6, false, false, false, 23, 21, 21, 'locked - fetch'),
|
||||
array(4, 10, null, null, true, 2, 6, false, false, false, 24, 21, 21, 'locked - isCached & fetch'),
|
||||
array(4, 10, null, null, false, 2, 6, false, false, true, 25, 25, 25, 'locked - new source'),
|
||||
array(4, 10, null, null, true, 2, 6, false, false, false, 26, 25, 25, 'locked - after new source'),
|
||||
array(10, 4, null, null, null, 2, 6, false, false, false, 27, 25, 25, 'lock timeout - fetch'),
|
||||
array(10, 4, null, null, true, 2, 6, false, false, false, 28, 25, 25, 'lock timeout - isCached & fetch'),
|
||||
array(10, 4, null, null, false, 2, 6, false, false, true, 29, 29, 29, 'lock timeout - new source'),
|
||||
array(10, 4, null, null, true, 2, 6, false, false, false, 30, 29, 29, 'lock timeout - after new source'),
|
||||
array(4, 10, 5, null, false, 2, 6, false, false, false, 31, 31, 31, 'locked - new compiled'),
|
||||
array(10, 4, 6, null, false, 2, 6, false, false, false, 32, 32, 32, 'lock timeout - new compiled'),
|
||||
);
|
||||
}
|
||||
/**
|
||||
* Test
|
||||
*
|
||||
* @run InSeparateProcess
|
||||
* @preserveGlobalState disabled
|
||||
*
|
||||
*/
|
||||
public function testIsCachedCacheisLocked()
|
||||
public function testCachingDisabled1()
|
||||
{
|
||||
if ($this->smarty->caching_type != 'file') {
|
||||
$this->markTestSkipped('test skip for caching type not == file');
|
||||
}
|
||||
$this->smarty->caching = true;
|
||||
$this->smarty->cache_lifetime = 1000;
|
||||
$this->smarty->assign('test', 11);
|
||||
$this->smarty->cache_locking = true;
|
||||
$this->smarty->locking_timeout = 4;
|
||||
$this->smarty->assign('test', 50);
|
||||
$tpl = $this->smarty->createTemplate('cacheresource.tpl', $this->smarty);
|
||||
$start = time();
|
||||
touch($tpl->cached->lock_id);
|
||||
$this->assertTrue($tpl->isCached(), 'isCached() must be true after recompilation');
|
||||
$this->assertTrue((time() - $start) > 3);
|
||||
@unlink($tpl->cached->lock_id);
|
||||
$this->assertFalse($tpl->isCached(), 'isCached() status');
|
||||
$this->assertEquals('cache resource test:50 compiled:50 rendered:50', $this->smarty->fetch($tpl), 'fetch()');
|
||||
}
|
||||
/**
|
||||
* Test
|
||||
*
|
||||
* @run InSeparateProcess
|
||||
* @preserveGlobalState disabled
|
||||
*
|
||||
*/
|
||||
public function testFetchCacheNotLocked()
|
||||
public function testCachingDisabled2()
|
||||
{
|
||||
if ($this->smarty->caching_type != 'file') {
|
||||
$this->markTestSkipped('test skip for caching type not == file');
|
||||
}
|
||||
$this->smarty->caching = true;
|
||||
$this->smarty->cache_lifetime = 1000;
|
||||
$this->smarty->assign('test', 12);
|
||||
$this->smarty->cache_locking = true;
|
||||
$this->smarty->assign('test', 51);
|
||||
$tpl = $this->smarty->createTemplate('cacheresource.tpl', $this->smarty);
|
||||
$start = time();
|
||||
$this->assertEquals('cache resource test:12 compiled:8 rendered:8', $this->smarty->fetch($tpl));
|
||||
$this->assertTrue((time() - $start) <= 2);
|
||||
}
|
||||
/**
|
||||
* Test
|
||||
* @run InSeparateProcess
|
||||
* @preserveGlobalState disabled
|
||||
*
|
||||
*/
|
||||
public function testFetchCacheisLocked()
|
||||
{
|
||||
if ($this->smarty->caching_type != 'file') {
|
||||
$this->markTestSkipped('test skip for caching type not == file');
|
||||
}
|
||||
$this->smarty->caching = true;
|
||||
$this->smarty->cache_lifetime = 1000;
|
||||
$this->smarty->assign('test', 13);
|
||||
$this->smarty->cache_locking = true;
|
||||
$this->smarty->locking_timeout = 4;
|
||||
$tpl = $this->smarty->createTemplate('cacheresource.tpl', $this->smarty);
|
||||
$start = time();
|
||||
touch($tpl->cached->lock_id);
|
||||
$this->assertEquals('cache resource test:13 compiled:8 rendered:8', $this->smarty->fetch($tpl));
|
||||
$this->assertTrue((time() - $start) > 3);
|
||||
@unlink($tpl->cached->lock_id);
|
||||
$this->assertFalse($tpl->isCached(), 'isCached() status');
|
||||
$this->assertEquals('cache resource test:51 compiled:50 rendered:51', $this->smarty->fetch($tpl), 'fetch()');
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -4,6 +4,19 @@ require_once SMARTY_DIR . '../demo/plugins/cacheresource.apc.php';
|
||||
|
||||
class Smarty_CacheResource_Apctest extends Smarty_CacheResource_Apc
|
||||
{
|
||||
public $lockTime = 0;
|
||||
|
||||
public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached)
|
||||
{
|
||||
if ($this->lockTime) {
|
||||
$this->lockTime--;
|
||||
if (!$this->lockTime) {
|
||||
$this->releaseLock($smarty, $cached);
|
||||
}
|
||||
}
|
||||
return parent::hasLock($smarty, $cached);
|
||||
}
|
||||
|
||||
public function get(Smarty_Internal_Template $_template)
|
||||
{
|
||||
$this->contents = array();
|
||||
|
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
|
||||
class Smarty_CacheResource_Filetest extends Smarty_Internal_CacheResource_File
|
||||
{
|
||||
public $lockTime = 0;
|
||||
|
||||
public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached)
|
||||
{
|
||||
if ($this->lockTime) {
|
||||
$this->lockTime--;
|
||||
if (!$this->lockTime) {
|
||||
$this->releaseLock($smarty, $cached);
|
||||
}
|
||||
}
|
||||
return parent::hasLock($smarty, $cached);
|
||||
}
|
||||
}
|
@@ -4,6 +4,19 @@ require_once SMARTY_DIR . '../demo/plugins/cacheresource.memcache.php';
|
||||
|
||||
class Smarty_CacheResource_Memcachetest extends Smarty_CacheResource_Memcache
|
||||
{
|
||||
public $lockTime = 0;
|
||||
|
||||
public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached)
|
||||
{
|
||||
if ($this->lockTime) {
|
||||
$this->lockTime--;
|
||||
if (!$this->lockTime) {
|
||||
$this->releaseLock($smarty, $cached);
|
||||
}
|
||||
}
|
||||
return parent::hasLock($smarty, $cached);
|
||||
}
|
||||
|
||||
public function get(Smarty_Internal_Template $_template)
|
||||
{
|
||||
$this->contents = array();
|
||||
|
@@ -4,6 +4,8 @@ require_once SMARTY_DIR . '../demo/plugins/cacheresource.mysql.php';
|
||||
|
||||
class Smarty_CacheResource_Mysqltest extends Smarty_CacheResource_Mysql
|
||||
{
|
||||
public $lockTime = 0;
|
||||
|
||||
public function __construct() {
|
||||
try {
|
||||
$this->db = PHPUnit_Smarty::$pdo;
|
||||
@@ -15,4 +17,15 @@ class Smarty_CacheResource_Mysqltest extends Smarty_CacheResource_Mysql
|
||||
$this->save = $this->db->prepare('REPLACE INTO output_cache (id, name, cache_id, compile_id, content)
|
||||
VALUES (:id, :name, :cache_id, :compile_id, :content)');
|
||||
}
|
||||
|
||||
public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached)
|
||||
{
|
||||
if ($this->lockTime) {
|
||||
$this->lockTime--;
|
||||
if (!$this->lockTime) {
|
||||
$this->releaseLock($smarty, $cached);
|
||||
}
|
||||
}
|
||||
return parent::hasLock($smarty, $cached);
|
||||
}
|
||||
}
|
||||
|
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
require_once SMARTY_DIR . '../demo/plugins/cacheresource.pdo_gzip.php';
|
||||
|
||||
class Smarty_CacheResource_Pdo_Gziptest extends Smarty_CacheResource_Pdo_Gzip
|
||||
{
|
||||
public $lockTime = 0;
|
||||
|
||||
public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached)
|
||||
{
|
||||
if ($this->lockTime) {
|
||||
$this->lockTime--;
|
||||
if (!$this->lockTime) {
|
||||
$this->releaseLock($smarty, $cached);
|
||||
}
|
||||
}
|
||||
return parent::hasLock($smarty, $cached);
|
||||
}
|
||||
}
|
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
require_once SMARTY_DIR . '../demo/plugins/cacheresource.pdo.php';
|
||||
|
||||
class Smarty_CacheResource_Pdotest extends Smarty_CacheResource_Pdo
|
||||
{
|
||||
public $lockTime = 0;
|
||||
|
||||
|
||||
public function hasLock(Smarty $smarty, Smarty_Template_Cached $cached)
|
||||
{
|
||||
if ($this->lockTime) {
|
||||
$this->lockTime--;
|
||||
if (!$this->lockTime) {
|
||||
$this->releaseLock($smarty, $cached);
|
||||
}
|
||||
}
|
||||
return parent::hasLock($smarty, $cached);
|
||||
}
|
||||
}
|
@@ -5,6 +5,8 @@
|
||||
<MemcacheEnable>false</MemcacheEnable>
|
||||
<ApcEnable>false</ApcEnable>
|
||||
<MysqlEnable>false</MysqlEnable>
|
||||
<PdoEnable>false</PdoEnable>
|
||||
<PdoGzipEnable>false</PdoGzipEnable>
|
||||
</cacheResource>
|
||||
<resource>
|
||||
<MysqlEnable>false</MysqlEnable>
|
||||
|
Reference in New Issue
Block a user