2
0

StaticBackendTest.php 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. <?php
  2. /**
  3. * @package Zend_Cache
  4. * @subpackage UnitTests
  5. */
  6. /**
  7. * Zend_Cache
  8. */
  9. require_once 'Zend/Cache.php';
  10. require_once 'Zend/Cache/Backend/Static.php';
  11. /**
  12. * Zend_Log
  13. */
  14. require_once 'Zend/Log.php';
  15. require_once 'Zend/Log/Writer/Null.php';
  16. /**
  17. * Common tests for backends
  18. */
  19. require_once 'CommonBackendTest.php';
  20. /**
  21. * PHPUnit test case
  22. */
  23. require_once 'PHPUnit/Framework/TestCase.php';
  24. /**
  25. * @package Zend_Cache
  26. * @subpackage UnitTests
  27. */
  28. class Zend_Cache_StaticBackendTest extends Zend_Cache_CommonBackendTest {
  29. protected $_instance;
  30. protected $_instance2;
  31. protected $_cache_dir;
  32. protected $_requestUriOld;
  33. protected $_innerCache;
  34. public function __construct($name = null, array $data = array(), $dataName = '')
  35. {
  36. parent::__construct('Zend_Cache_Backend_Static', $data, $dataName);
  37. }
  38. public function setUp($notag = false)
  39. {
  40. $this->mkdir();
  41. $this->_cache_dir = $this->mkdir();
  42. @mkdir($this->_cache_dir.'/tags');
  43. $this->_innerCache = Zend_Cache::factory('Core','File',
  44. array('automatic_serialization'=>true), array('cache_dir'=>$this->_cache_dir.'/tags')
  45. );
  46. $this->_instance = new Zend_Cache_Backend_Static(array(
  47. 'public_dir' => $this->_cache_dir,
  48. 'tag_cache' => $this->_innerCache
  49. ));
  50. $logger = new Zend_Log(new Zend_Log_Writer_Null());
  51. $this->_instance->setDirectives(array('logger' => $logger));
  52. $this->_requestUriOld =
  53. isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : null;
  54. $_SERVER['REQUEST_URI'] = '/foo';
  55. $this->_instance->setDirectives(array('logging' => true));
  56. $this->_instance->save('bar : data to cache', bin2hex('/bar'), array('tag3', 'tag4'));
  57. $this->_instance->save('bar2 : data to cache', bin2hex('/bar2'), array('tag3', 'tag1'));
  58. $this->_instance->save('bar3 : data to cache', bin2hex('/bar3'), array('tag2', 'tag3'));
  59. }
  60. public function tearDown()
  61. {
  62. parent::tearDown();
  63. unset($this->_instance);
  64. $_SERVER['REQUEST_URI'] = $this->_requestUriOld;
  65. $this->rmdir();
  66. }
  67. public function testConstructorCorrectCall()
  68. {
  69. $test = new Zend_Cache_Backend_Static(array());
  70. }
  71. public function testRemoveCorrectCall()
  72. {
  73. $this->assertTrue($this->_instance->remove('/bar'));
  74. $this->assertFalse($this->_instance->test(bin2hex('/bar')));
  75. $this->assertFalse($this->_instance->remove('/barbar'));
  76. $this->assertFalse($this->_instance->test(bin2hex('/barbar')));
  77. }
  78. public function testOptionsSetTagCache()
  79. {
  80. $test = new Zend_Cache_Backend_Static(array('tag_cache'=>$this->_innerCache));
  81. $this->assertTrue($test->getInnerCache() instanceof Zend_Cache_Core);
  82. }
  83. public function testSaveCorrectCall()
  84. {
  85. $res = $this->_instance->save('data to cache', bin2hex('/foo'), array('tag1', 'tag2'));
  86. $this->assertTrue($res);
  87. }
  88. public function testSaveWithNullLifeTime()
  89. {
  90. $this->_instance->setDirectives(array('lifetime' => null));
  91. $res = $this->_instance->save('data to cache', bin2hex('/foo'), array('tag1', 'tag2'));
  92. $this->assertTrue($res);
  93. }
  94. public function testSaveWithSpecificLifeTime()
  95. {
  96. $this->_instance->setDirectives(array('lifetime' => 3600));
  97. $res = $this->_instance->save('data to cache', bin2hex('/foo'), array('tag1', 'tag2'), 10);
  98. $this->assertTrue($res);
  99. }
  100. public function testSaveWithSpecificExtension()
  101. {
  102. $res = $this->_instance->save(serialize(array('data to cache', 'xml')), bin2hex('/foo2'));
  103. $this->assertTrue($this->_instance->test(bin2hex('/foo2')));
  104. unlink($this->_instance->getOption('public_dir') . '/foo2.xml');
  105. }
  106. public function testSaveWithSpecificExtensionWithTag()
  107. {
  108. $res = $this->_instance->save(serialize(array('data to cache', 'xml')), bin2hex('/foo'), array('tag1'));
  109. $this->assertTrue($this->_instance->test(bin2hex('/foo')));
  110. unlink($this->_instance->getOption('public_dir') . '/foo.xml');
  111. }
  112. public function testRemovalWithSpecificExtension()
  113. {
  114. $res = $this->_instance->save(serialize(array('data to cache', 'xml')), bin2hex('/foo3'), array('tag1'));
  115. $this->assertTrue($this->_instance->test(bin2hex('/foo3')));
  116. $this->assertTrue($this->_instance->remove('/foo3'));
  117. $this->assertFalse($this->_instance->test(bin2hex('/foo3')));
  118. }
  119. public function testTestWithAnExistingCacheId()
  120. {
  121. $res = $this->_instance->test(bin2hex('/bar'));
  122. if (!$res) {
  123. $this->fail('test() return false');
  124. }
  125. return;
  126. }
  127. public function testTestWithANonExistingCacheId()
  128. {
  129. $this->assertFalse($this->_instance->test(bin2hex('/barbar')));
  130. }
  131. public function testTestWithAnExistingCacheIdAndANullLifeTime()
  132. {
  133. $this->_instance->setDirectives(array('lifetime' => null));
  134. $res = $this->_instance->test(bin2hex('/bar'));
  135. if (!$res) {
  136. $this->fail('test() return false');
  137. }
  138. return;
  139. }
  140. public function testGetWithANonExistingCacheId()
  141. {
  142. $this->assertFalse($this->_instance->load(bin2hex('/barbar')));
  143. }
  144. public function testGetWithAnExistingCacheId()
  145. {
  146. $this->assertEquals('bar : data to cache', $this->_instance->load(bin2hex('/bar')));
  147. }
  148. public function testGetWithAnExistingCacheIdAndUTFCharacters()
  149. {
  150. $data = '"""""' . "'" . '\n' . 'ééééé';
  151. $this->_instance->save($data, bin2hex('/foo'));
  152. $this->assertEquals($data, $this->_instance->load(bin2hex('/foo')));
  153. }
  154. public function testCleanModeMatchingTags()
  155. {
  156. $this->assertTrue($this->_instance->clean('matchingTag', array('tag3')));
  157. $this->assertFalse($this->_instance->test(bin2hex('/bar')));
  158. $this->assertFalse($this->_instance->test(bin2hex('/bar2')));
  159. }
  160. public function testCleanModeMatchingTags2()
  161. {
  162. $this->assertTrue($this->_instance->clean('matchingTag', array('tag3', 'tag4')));
  163. $this->assertFalse($this->_instance->test(bin2hex('/bar')));
  164. }
  165. public function testCleanModeNotMatchingTags()
  166. {
  167. $this->assertTrue($this->_instance->clean('notMatchingTag', array('tag3')));
  168. $this->assertTrue($this->_instance->test(bin2hex('/bar')));
  169. $this->assertTrue($this->_instance->test(bin2hex('/bar2')));
  170. }
  171. public function testCleanModeNotMatchingTags2()
  172. {
  173. $this->assertTrue($this->_instance->clean('notMatchingTag', array('tag4')));
  174. $this->assertTrue($this->_instance->test(bin2hex('/bar')));
  175. $this->assertFalse($this->_instance->test(bin2hex('/bar2')));
  176. }
  177. public function testCleanModeNotMatchingTags3()
  178. {
  179. $this->assertTrue($this->_instance->clean('notMatchingTag', array('tag4', 'tag1')));
  180. $this->assertTrue($this->_instance->test(bin2hex('/bar')));
  181. $this->assertTrue($this->_instance->test(bin2hex('/bar2')));
  182. $this->assertFalse($this->_instance->test(bin2hex('/bar3')));
  183. }
  184. public function testCleanModeAll()
  185. {
  186. $this->assertTrue($this->_instance->clean('all'));
  187. $this->assertFalse($this->_instance->test(bin2hex('bar')));
  188. $this->assertFalse($this->_instance->test(bin2hex('bar2')));
  189. }
  190. // Irrelevant Tests (from common tests)
  191. public function testGetWithAnExpiredCacheId()
  192. {
  193. $this->markTestSkipped('Irrelevant Test');
  194. }
  195. public function testCleanModeOld()
  196. {
  197. $this->markTestSkipped('Irrelevant Test');
  198. }
  199. // Helper Methods
  200. public function mkdir()
  201. {
  202. $tmp = $this->getTmpDir();
  203. @mkdir($tmp);
  204. return $tmp;
  205. }
  206. public function rmdir()
  207. {
  208. $tmpDir = $this->getTmpDir(false);
  209. foreach (glob("$tmpDir*") as $dirname) {
  210. @rmdir($dirname);
  211. }
  212. }
  213. public function getTmpDir($date = true)
  214. {
  215. $suffix = '';
  216. $tmp = sys_get_temp_dir();
  217. if ($date) {
  218. $suffix = date('mdyHis');
  219. }
  220. if (is_writeable($tmp)) {
  221. return $tmp . DIRECTORY_SEPARATOR . 'zend_cache_tmp_dir_' . $suffix;
  222. } else {
  223. throw new Exception("no writable tmpdir found");
  224. }
  225. }
  226. }